node_modules ignore

This commit is contained in:
2025-05-08 23:43:47 +02:00
parent e19d52f172
commit 4574544c9f
65041 changed files with 10593536 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-action-failure",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,17 @@
export default function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
},
],
actions: [
() => {
throw new Error("Action failed");
},
],
});
}

View File

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-add-action",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,37 @@
export default function (plop) {
plop.setGenerator("addAndNameFile", {
description: "Name that file",
prompts: [
{
type: "input",
name: "fileName",
message: "What should the file name be?",
},
],
actions: [
{
type: "add",
path: "./output/{{fileName}}.txt",
templateFile: "./templates/to-add.txt",
},
],
});
plop.setGenerator("addAndChangeFile", {
description: "Name that file",
prompts: [
{
type: "input",
name: "name",
message: "What's your name?",
},
],
actions: [
{
type: "add",
path: "./output/new-output.txt",
templateFile: "./templates/to-add-change.txt",
},
],
});
}

View File

@@ -0,0 +1 @@
Hi {{name}}!

View File

@@ -0,0 +1 @@
Hello

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-prompts-only",
"type": "commonjs",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,30 @@
module.exports = function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
};

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-prompts-only",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,30 @@
module.exports = function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
}

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-prompts-only",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,30 @@
export default function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
}

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,250 @@
import path from "path";
import fs from "fs";
import inquirerDirectory from "inquirer-directory";
export default function (plop) {
// starting prompt can be customized to display what you want
// plop.setWelcomeMessage('[CUSTOM]'.yellow + ' What can I do for you?');
// helpers are passed through handlebars syntax and made
// available for use in the generator templates
// adds 4 dashes around some text (yes es6/es2015 is supported)
plop.addHelper("dashAround", (text) => "---- " + text + " ----");
// formats an array of options like you would write
// it, if you were speaking (one, two, and three)
plop.addHelper("wordJoin", function (words) {
return words.join(", ").replace(/(:?.*),/, "$1, and");
});
plop.addHelper("absPath", function (p) {
return path.resolve(plop.getPlopfilePath(), p);
});
// greet the user using a partial
plop.addPartial(
"salutation",
"{{ greeting }}, my name is {{ properCase name }} and I am {{ age }}.",
);
// load some additional helpers from a module installed using npm
plop.load("plop-pack-fancy-comments", {
prefix: "",
upperCaseHeaders: true,
commentStart: "",
commentEnd: "",
});
const delayLog = (msg) => (answers) =>
new Promise((resolve) => {
setTimeout(() => resolve(msg), 1000);
});
// setGenerator creates a generator that can be run with "plop generatorName"
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "input",
name: "age",
message: "How old are you?",
validate: function (value) {
var digitsOnly = /\d+/;
if (digitsOnly.test(value)) {
return true;
}
return "Invalid age! Must be a number genius!";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
actions: [
`this is a comment`,
"this is another comment",
delayLog("delayed thing"),
delayLog("another delayed thing"),
delayLog("this was also delayed"),
{
type: "add",
path: "folder/{{dashCase name}}.txt",
templateFile: "templates/temp.txt",
abortOnFail: true,
},
function customAction(answers) {
// move the current working directory to the plop file path
// this allows this action to work even when the generator is
// executed from inside a subdirectory
process.chdir(plop.getPlopfilePath());
// custom function can be synchronous or async (by returning a promise)
var existsMsg = "psst {{name}}, change-me.txt already exists";
var copiedMsg = "hey {{name}}, I copied change-me.txt for you";
var changeFileName = "change-me.txt";
var changeFilePath =
plop.getDestBasePath() + "/folder/" + changeFileName;
// you can use plop.renderString to render templates
existsMsg = plop.renderString(existsMsg, answers);
copiedMsg = plop.renderString(copiedMsg, answers);
if (fs.existsSync(changeFilePath)) {
// returned value shows up in the console
return existsMsg;
} else {
// do a synchronous copy via node fs
fs.writeFileSync(
changeFilePath,
fs.readFileSync("templates/" + changeFileName),
);
return copiedMsg;
}
},
{
type: "modify",
path: "folder/change-me.txt",
pattern: /(-- APPEND ITEMS HERE --)/gi,
template: "$1\r\n{{name}}: {{age}}",
},
{
type: "modify",
path: "folder/change-me.txt",
pattern: /(-- PREPEND ITEMS HERE --)/gi,
templateFile: "templates/part.txt",
},
{
type: "modify",
path: "folder/change-me.txt",
pattern: /## replace name here ##/gi,
template: "replaced => {{dashCase name}}",
},
{
type: "modify",
path: "folder/change-me.txt",
skip(data) {
if (!data.toppings.includes("mushroom")) {
// Skip this action
return "Skipped replacing mushrooms";
} else {
// Continue with this action
return;
}
},
transform(fileContents, data) {
return fileContents.replace(/mushrooms/g, "pepperoni");
},
},
],
});
// adding a custom inquirer prompt type
plop.addPrompt("directory", inquirerDirectory);
plop.setGenerator("custom-prompt", {
description: "custom inquirer prompt example",
prompts: [
{
type: "input",
name: "fileName",
message: "Pick a file name:",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "file name is required";
},
},
{
type: "directory",
name: "path",
message: "where would you like to put this component?",
basePath: plop.getPlopfilePath(),
},
],
actions: [
function (data) {
console.log(data);
return "yay";
},
{
type: "add",
path: "{{absPath path}}/{{fileName}}.txt",
template: "{{absPath path}}/{{fileName}} plopped!",
},
],
});
// test with dynamic actions, regarding responses to prompts
plop.setGenerator("dynamic actions", {
description: "another test using an actions function",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "confirm",
name: "hasPotatoes",
message: "Do you want potatoes with your burger?",
},
],
actions: function (data) {
var actions = [
{
type: "add",
path: "folder/{{dashCase name}}-burger.txt",
templateFile: "templates/burger.txt",
abortOnFail: true,
},
];
if (data.hasPotatoes) {
actions = actions.concat([
{
type: "add",
path: "folder/{{dashCase name}}-potatoes.txt",
templateFile: "templates/potatoes.txt",
abortOnFail: true,
},
{
type: "modify",
path: "folder/{{dashCase name}}-burger.txt",
pattern: /(!\n)/gi,
template: "$1Your potatoes: {{dashCase name}}-potatoes.txt",
},
]);
}
return actions;
},
});
}

View File

@@ -0,0 +1,3 @@
{{ header 'Hello Burger Lover!' }}
Here's your burger {{ properCase name }}!

View File

@@ -0,0 +1,8 @@
the modify option in the test plop should add lines below for each run.
Use modify for things like adding script references to an HTML file.
-- APPEND ITEMS HERE --
+++++++++++++++++++++++++++++++++++++++
-- PREPEND ITEMS HERE --

View File

@@ -0,0 +1,2 @@
this is prepended! ## replace name here ##: {{age}}
$1

View File

@@ -0,0 +1 @@
Well {{ properCase name }}, it seems you asked for potatoes.

View File

@@ -0,0 +1,10 @@
{{ dashAround (properCase name) }}
{{> salutation greeting="Hello there" }}
{{#if toppings}}
on my pizza I like {{ wordJoin toppings }}
{{else}}
I don't like any toppings on my pizza (not human)
{{/if}}
generated by {{ pkg 'name' }}

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-prompts-only",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,30 @@
export default function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
}

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-prompts-only",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,24 @@
export default function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
}

View File

@@ -0,0 +1,6 @@
{
"name": "plop-example",
"dependencies": {
"typescript": "^5.2.2"
}
}

View File

@@ -0,0 +1,32 @@
import { NodePlopAPI } from "plop";
module.exports = function (plop: NodePlopAPI) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
});
};

View File

@@ -0,0 +1,14 @@
{
"compilerOptions": {
// Required
"module": "esnext",
"esModuleInterop": true,
"moduleResolution": "node",
// Not required
"strict": true,
"baseUrl": "./",
"paths": {
"plop": ["../../src/plop.d.ts"]
}
}
}

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env node
import path from "node:path";
import minimist from "minimist";
import { Plop, run } from "../../../instrumented/src/plop.js";
const args = process.argv.slice(2);
const argv = minimist(args);
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
Plop.prepare(
{
cwd: argv.cwd,
preload: argv.preload || [],
// In order for `plop` to always pick up the `plopfile.js` despite the CWD, you must use `__dirname`
configPath: 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
},
function (env) {
Plop.execute(env, function (env) {
return run(env, undefined, true);
});
},
);

View File

View File

@@ -0,0 +1,7 @@
{
"name": "plop-example-wrap",
"type": "module",
"engines": {
"node": ">=18"
}
}

View File

@@ -0,0 +1,37 @@
module.exports = function (plop) {
plop.setGenerator("test", {
description: "this is a test",
prompts: [
{
type: "input",
name: "name",
message: "What is your name?",
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return "name is required";
},
},
{
type: "checkbox",
name: "toppings",
message: "What pizza toppings do you like?",
choices: [
{ name: "Cheese", value: "cheese", checked: true },
{ name: "Pepperoni", value: "pepperoni" },
{ name: "Pineapple", value: "pineapple" },
{ name: "Mushroom", value: "mushroom" },
{ name: "Bacon", value: "bacon", checked: true },
],
},
],
actions: [
{
type: "add",
path: "./output/added.txt",
templateFile: "./templates/to-add.txt",
},
],
});
};

View File

@@ -0,0 +1 @@
Hello