{"_id":"@basementuniverse/pqs","_rev":"9-603c6752441dec8210373abe6db049f5","name":"@basementuniverse/pqs","dist-tags":{"latest":"1.5.0"},"versions":{"1.0.0":{"name":"@basementuniverse/pqs","version":"1.0.0","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.0.0","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"3e882063deb3e282dd546f977e86508b25fd6e33","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.0.0.tgz","fileCount":12,"integrity":"sha512-doWItJitPeWkG/tYlb9kybspRJ1En6Nlda4EbGJNJUEWOlsdj5TG7vqkhnHIYfPmp9EaAIaV0eYz8XzhYxV0Gg==","signatures":[{"sig":"MEUCIQD1MEIjLRyVgEbp070KAsJ2PJigoMW8I3QZv9aONXxofwIgYhFdhiFdiqPwgMQkW4mb4Do436pbOXCHV1o7r1hagYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36281},"main":"build/index.js","gitHead":"65e6642f3bd0d38c309c3d400fb1e23eab4a3afe","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","fs-extra":"^11.3.2","commander":"^14.0.1","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/pqs_1.0.0_1759498349973_0.45712981834242816","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@basementuniverse/pqs","version":"1.1.0","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.1.0","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"d7f7519c36542127ffc31bde1c4c0187c88c5d53","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.1.0.tgz","fileCount":12,"integrity":"sha512-YCpSsmzwQ009QXrUmJklPZizST4zMklvWwqLJVWfLrY22kX2dtw5zOBYaNAzCHMj3sf/oIk5tgpIluXqJJ0LMA==","signatures":[{"sig":"MEUCIQCLkM8osjcS2qDcFoKc5kmAQBmJN9Z+nDAbKgJRbFW0wAIgIVtX/OiYS/Y8hV2lu8orNYgApnWg/m2G40kkYRlCtuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38263},"main":"build/index.js","gitHead":"0dd312fad2b767019689e661b68ce5a88ae02172","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","fs-extra":"^11.3.2","commander":"^14.0.1","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/pqs_1.1.0_1759499819642_0.9574116016879137","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@basementuniverse/pqs","version":"1.1.1","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.1.1","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"b678e9374c31d91c2b3d92c88ae1a657efad2bf0","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.1.1.tgz","fileCount":12,"integrity":"sha512-bcynVXhlI1UQTJLxhTXP9WfTnXk6IOgu4LPIBjh4yJkYJEJOLya4YA2GnkPkrpor8Nm1r89l3/FU6fuV388vLw==","signatures":[{"sig":"MEUCIGTAZFClnlgjBlvrOMpmq7vwx5+hMCxz/dhWtpRGbcTAAiEAzaeFE1B+37L+lGdrDZ+R4IkfbNuhw1YdA4W+ALHYwLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38361},"main":"build/index.js","gitHead":"a4a04e5b7ffb78e2d701e41adc6afd9cdea8d2bc","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","fs-extra":"^11.3.2","commander":"^14.0.1","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/pqs_1.1.1_1759499967326_0.3189805417394891","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@basementuniverse/pqs","version":"1.2.0","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.2.0","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"abd8e0a433e0cf4a08fbc311f67b1ab519f22792","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.2.0.tgz","fileCount":12,"integrity":"sha512-Q/kIBFbOmGmgMLINlCgGCn4R5kRLM+BTmsCp7PDMZeNDr/qh2WdBkWSHXq/ntbVXytjPfvB6Dy5Fp+688Sw2UQ==","signatures":[{"sig":"MEYCIQDrMtC5y5OfzK29mDzcTfKaOna97lmgkx4AbhsVJbsk8QIhANBSloLoW4Exr7/avYBWl1LX8MCc4gm2YAF/8NuxqCvy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44241},"main":"build/index.js","gitHead":"fa0015a9b4d0f8b7a136fa48da8ca865074f4fad","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","uuid":"^13.0.0","date-fns":"^4.1.0","fs-extra":"^11.3.2","commander":"^14.0.1","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pqs_1.2.0_1759503976999_0.9208363419082644","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@basementuniverse/pqs","version":"1.2.1","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.2.1","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"3ff49ebeb5e426c56813cc6adbec0ad8f80e5b23","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.2.1.tgz","fileCount":12,"integrity":"sha512-CYJTPTAyuNzljLCHf+HzIYpO+BHmECrPvKD4R7sQcct98XlomV8glE788kRlQLr7zZ6crHsIi2Esofl6J45/0A==","signatures":[{"sig":"MEUCIGta/TJ/vFnNvqwX670DT8ju8TLO74aXiglTiSsYJBtgAiEA9Xk2XfAyf/vACHLI5F6y1S7r7Yay2ZwukxDg+T0282k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44249},"main":"build/index.js","gitHead":"43dfe380d4916914f00847227cd19546b15204ce","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","uuid":"^13.0.0","date-fns":"^4.1.0","fs-extra":"^11.3.2","commander":"^14.0.1","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pqs_1.2.1_1759504104204_0.7172232136172494","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@basementuniverse/pqs","version":"1.3.0","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.3.0","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"53bd75042c2fdc2e5ecba3290c4d9c7039ab84c6","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.3.0.tgz","fileCount":12,"integrity":"sha512-Jl7pK/jzhnFjgjFDAbvqrNPKU9T1WnOcNj4B8CBogHy6IABls/ls2kw3aAe906vSrWdwNSlxHjinsL3bpqIcrg==","signatures":[{"sig":"MEYCIQDiQFXTwSqHs9skGMrnuNP8PlFFxOa8Vwyrs4ARxS4WHAIhALNL3fhB3dgKYDN3z4Z9WTLdor8XjICV0N4LI+qOW5I1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46191},"main":"build/index.js","gitHead":"3976522c7c45fd5ce658deb8e9e99fbf0a291e39","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","uuid":"^13.0.0","date-fns":"^4.1.0","fs-extra":"^11.3.2","commander":"^14.0.1","minimatch":"^10.0.3","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pqs_1.3.0_1759509497644_0.9311771109773703","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@basementuniverse/pqs","version":"1.3.1","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.3.1","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"5bd10952ebd5ff0480d53355e9f3367a0139b60d","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.3.1.tgz","fileCount":12,"integrity":"sha512-y0gSxhUHybBNbQHcYkqkqAZb9w7XKBZSc5ctxswl6MRJwAXqoL9WKshfKQDmQI2jj42C6Jihz6R5jtdhI3IhHQ==","signatures":[{"sig":"MEUCIQD4WadFilfRANW2MvoyUP7mVsHJ3D9kfqrE0zlLMcEbAQIgaBTX/LSgqUTBB1F980fmLLBFW93GOQtDbwZFcslI+BU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46329},"main":"build/index.js","gitHead":"83313b58be683189078668e1bb98b06fdb2296dd","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","uuid":"^13.0.0","date-fns":"^4.1.0","fs-extra":"^11.3.2","commander":"^14.0.1","minimatch":"^10.0.3","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pqs_1.3.1_1759510189523_0.3724918409917386","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@basementuniverse/pqs","version":"1.4.0","author":{"url":"https://gordonlarrigan.com","name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com"},"license":"MIT","_id":"@basementuniverse/pqs@1.4.0","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"bin":{"pqs":"build/index.js"},"dist":{"shasum":"2e1851b565d83104a94017d51346e3cd50f18e69","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.4.0.tgz","fileCount":4,"integrity":"sha512-CEWncCQ1sdy/jgjhe7M7RQH1XYlGyMaRQKLKlNLBlYFi+1TFHEu6Ry6U6lMZORAKN/vsJSxwHZlmG2St7lK+7g==","signatures":[{"sig":"MEUCIQDPbZfKebS+cOGZZLKQRA/ahe9WppO6x2H4Wx1iwHfWOAIge4tVQLhBBmJEm2p5hccEuPcSvYUxcJE8N4BkCdMhJiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":34999},"main":"build/index.js","gitHead":"e5790be93cbe7765d9636deed3c3564b72ab0750","scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"_npmVersion":"11.5.1","description":"PQS - Project Quick Start: Create projects from templates","directories":{},"_nodeVersion":"24.5.0","dependencies":{"glob":"^11.0.3","uuid":"^13.0.0","date-fns":"^4.1.0","fs-extra":"^11.3.2","commander":"^14.0.1","minimatch":"^10.0.3","@inquirer/prompts":"^7.8.6"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pqs_1.4.0_1760131588191_0.10742421803435054","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@basementuniverse/pqs","version":"1.5.0","description":"PQS - Project Quick Start: Create projects from templates","author":{"name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com","url":"https://gordonlarrigan.com"},"license":"MIT","main":"build/index.js","bin":{"pqs":"build/index.js"},"scripts":{"build":"mkdir -p build && cp src/index.js build/index.js && chmod +x build/index.js"},"dependencies":{"@inquirer/prompts":"^7.8.6","commander":"^14.0.1","date-fns":"^4.1.0","fs-extra":"^11.3.2","glob":"^11.0.3","minimatch":"^10.0.3","uuid":"^13.0.0"},"gitHead":"cf007a33e2f37c04d0f6c3fbe9be4f40c41738e5","_id":"@basementuniverse/pqs@1.5.0","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-zEUrr61SjBFk7p2y4CxQZO9Fbh8Jc7xezt5Hix2UN4ainCQylzgQ3xJWiQcHVFRApVk4WmT5Qp9KA5KbFc0YWg==","shasum":"fc1362063537cc6ff06112b45f0effb8c1f442ae","tarball":"https://registry.npmjs.org/@basementuniverse/pqs/-/pqs-1.5.0.tgz","fileCount":4,"unpackedSize":37773,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDZDaFnCZUoYnWCqtckAvvrcLXagFSVdXgm/rxIuj34tAiEA9bw4DfV2/Sun+XOO+gEGqbdi35TRntEZEbZtSgOff9k="}]},"_npmUser":{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"},"directories":{},"maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pqs_1.5.0_1787330759479_0.5037767343620696"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-03T13:32:29.882Z","modified":"2026-08-21T16:45:59.751Z","1.0.0":"2025-10-03T13:32:30.158Z","1.1.0":"2025-10-03T13:56:59.838Z","1.1.1":"2025-10-03T13:59:27.573Z","1.2.0":"2025-10-03T15:06:17.181Z","1.2.1":"2025-10-03T15:08:24.430Z","1.3.0":"2025-10-03T16:38:17.853Z","1.3.1":"2025-10-03T16:49:49.742Z","1.4.0":"2025-10-10T21:26:28.374Z","1.5.0":"2026-08-21T16:45:59.606Z"},"author":{"name":"Gordon Larrigan","email":"gordonlarrigan@gmail.com","url":"https://gordonlarrigan.com"},"license":"MIT","description":"PQS - Project Quick Start: Create projects from templates","maintainers":[{"name":"basementuniverse","email":"gordonlarrigan@gmail.com"}],"readme":"# PQS - Project Quick Start\n\nPQS is a command-line tool for automating the creation of new projects from templates. It allows developers to maintain a collection of project templates and quickly scaffold new projects with customized configurations.\n\n## Installation\n\n```bash\nnpm install -g @basementuniverse/pqs\n```\n\n## Usage\n\n```bash\n# Show version\npqs version\npqs v\n\n# Show help\npqs\npqs help\npqs h\n\n# List available templates\npqs list\npqs l\n\n# Create a new project from a template\n# The project will be created in the current directory\npqs create <template-name> [options]\npqs c <template-name> [options]\n```\n\n## Options\n\n- `--output <directory>` or `-o <directory>`: Specify the output directory for the new project. If not provided, the current directory will be used.\n- `--force` or `-f`: Force the creation of the project even if the output directory is not empty.\n- `--dry-run` or `-d`: Perform a dry run, showing what would be done without actually creating the project.\n\nIf we specify an output directory, template files will be placed directly in this directory. If we do not specify an output directory, a new directory will be created with the name of the project (as provided by the user in `projectName`, `name`, or `project` values). If a project name cannot be determined, we use `new-project` as the directory name.\n\n## Global configuration\n\nPQS uses a global configuration file to define locations for templates and other settings. The configuration file should be placed in one of the following locations (we will check them in this order):\n\n1. `./pqs.config.json` (in the current working directory)\n2. `~/.pqs.config.json` (in the user's home directory)\n3. `/etc/pqs.config.json` (system-wide configuration)\n\nThe configuration file should look something like this:\n\n```json\n{\n  \"templateLocations\": [\n    \"~/templates\"\n  ]\n}\n```\n\n#### `templateLocations`\n\nAn array of directories where PQS will look for project templates. We're basically searching for `pqs.config.js` files in these directories, or in their immediate subdirectories. Every directory where we find such a file is considered a template.\n\n## Template configuration\n\n```js\nmodule.exports = {\n  // The name of the template, used in the CLI command\n  name: 'js-express',\n\n  // An optional description of the template\n  description: 'A minimal JavaScript project template for testing PQS',\n\n  // Default values for placeholders and answers to questions\n  values: {\n    name: 'My JS Project',\n    version: '0.0.1',\n    description: 'A simple JavaScript project',\n    author: process.env.USER || 'Your Name',\n    initialiseGit: true,\n  },\n\n  // Questions to ask the user when creating a new project\n  questions: [\n    {\n      type: 'input',\n      name: 'projectName',\n      message: 'Project name:',\n      argument: 'name',\n      shortArgument: 'n',\n      validate: (input) => input.length > 0 || 'Project name is required',\n    },\n    {\n      type: 'input',\n      name: 'description',\n      message: 'Project description:',\n      argument: 'description',\n      shortArgument: 'c',\n    },\n    {\n      type: 'input',\n      name: 'author',\n      message: 'Author:',\n      argument: 'author',\n      shortArgument: 'a',\n    },\n    {\n      type: 'confirm',\n      name: 'initialiseGit',\n      message: 'Initialise git repository?',\n      argument: 'git',\n      shortArgument: 'g',\n    },\n  ],\n\n  // Exclude certain files or directories from being copied from the template to the new project\n  // These are glob patterns, e.g.:\n  // - 'node_modules/**' would exclude the node_modules directory and all its contents\n  // - '*.log' would exclude all .log files in the root of the template\n  // - '**/*.log' would exclude all .log files in the template and its subdirectories\n  // - '!README.md' would exclude everything except README.md (i.e. README.md would be included)\n  exclude: [\n    'pqs.config.js',\n    '**/node_modules/**',\n    '**/.git/**',\n    '.DS_Store',\n  ],\n\n  // Steps to execute after creating the project\n  steps: [\n    {\n      type: 'replace',\n      // Each entry is a glob pattern, e.g:\n      // - ['*'] would do substitutions in all files in the root of the template\n      // - ['**/*'] would do substitutions in all files in the template and its subdirectories\n      // - ['src/**/*.js'] would do substitutions in all .js files in the src directory and its subdirectories\n      // - ['!README.md'] would exclude README.md from substitutions\n      files: ['package.json', 'README.md', 'index.js'],\n    },\n    {\n      type: 'command',\n      command: 'npm install',\n      description: 'Installing dependencies...',\n    },\n    {\n      type: 'command',\n      command: 'git init',\n      description: 'Initializing git repository...',\n      condition: (answers) => answers.initialiseGit,\n    },\n  ],\n};\n```\n\n## Questions\n\n```js\n{\n  // The type of question to ask (see below)\n  type: 'input',\n\n  // The variable name to store the answer in\n  name: 'projectName',\n\n  // The question to display to the user\n  message: 'Project name:',\n\n  // An optional command-line argument to use for this question\n  // If this is provided and the user has specified a value for this argument, we will use that value instead of asking the question\n  // Arguments are registered dynamically: every question in every discovered template contributes an option to `pqs create`\n  // Reserved long names (`output`, `force`, `dry-run`) are ignored, and the question will always be asked interactively\n  argument: 'name',\n\n  // An optional short version of the command-line argument (single character)\n  // Reserved short names (`o`, `f`, `d`) are ignored, as are short names already claimed by an earlier question\n  // In this case the long argument still works, we just won't have a shorthand for it\n  shortArgument: 'n',\n\n  // An optional function to validate the answer\n  // The function should return true if the answer is valid, or a string with an error message if the answer is invalid\n  validate: (input) => input.length > 0 || 'Project name is required',\n\n  // Optional function to determine if the question should be asked based on previous answers\n  condition: (answers) => true,\n}\n```\n\nMost questions take a value on the command line (e.g. `--name my-project`), but `confirm` questions are boolean flags instead. Each one also gets a negated form, so given `argument: 'git'` we can use:\n\n```bash\n# Answer yes without being asked\npqs create my-template --git\n\n# Answer no without being asked\npqs create my-template --no-git\n\n# Omit both and we'll be asked interactively\npqs create my-template\n```\n\n## Question types\n\n### `input`\n\nA simple text input field.\n\n### `confirm`\n\nA yes/no question. The answer is always a boolean, and its command-line argument is a flag rather than a value (see the \"Questions\" section above).\n\n### `select`\n\nA multiple-choice question where the user can select one option from a list.\n\n`choices` can be an array of strings or an array of objects:\n\n```ts\ntype SelectChoice = string | {\n  name: string;\n  value: string;\n  description?: string;\n  disabled?: boolean;\n};\n```\n\nIf a `choices` entry is the string `---`, a separator line will be added to the list of choices.\n\n### `checkbox`\n\nA multiple-choice question where the user can select multiple options from a list.\n\n`choices` can be an array of strings or an array of objects:\n\n```ts\ntype CheckboxChoice = string | {\n  name: string;\n  value: string;\n  description?: string;\n  disabled?: boolean;\n  checked?: boolean;\n};\n```\n\nIf a `choices` entry is the string `---`, a separator line will be added to the list of choices.\n\n## Steps\n\n```js\n{\n  // The type of step to execute (see below)\n  type: 'command',\n\n  // A description of the step (will be displayed to the user before executing the step)\n  description: 'Installing dependencies...',\n\n  // Optional function to determine if the step should be executed based on answers\n  condition: (answers) => true,\n}\n```\n\n## Step types\n\n### `replace`\n\nReplace placeholders in the specified files.\n\n`files` is an array of glob patterns specifying which files to process. See the \"Template substitutions\" section below for details on how placeholders work.\n\n### `command`\n\nRun a shell command.\n\n`command` is a string containing the command to run.\n\n### `copy`\n\nCopy additional files or directories from the template to the new project.\n\n`source` is the path to the file or directory in the template (relative to the template root).\n\n`destination` is the path to the file or directory in the new project (relative to the project root).\n\nIf `destination` is not provided, the file or directory will be copied to the same relative path in the new project.\n\n`exclude` is an optional array of glob patterns to exclude certain files or directories from being copied.\n\n## Template substitutions\n\nWe can substitute placeholders in any text file within the template. Placeholders are defined using double curly braces, like this: `{{PQS:placeholderName}}`.\n\nWhen creating a new project, PQS will replace these placeholders with the corresponding values from the `values` object or the user's answers to the questions.\n\nSome transformations and aliases are also available:\n\n- `{{PQS:UPPER(placeholderName)}}`: Converts the value to uppercase.\n- `{{PQS:LOWER(placeholderName)}}`: Converts the value to lowercase.\n- `{{PQS:CAMEL(placeholderName)}}`: Converts the value to camelCase.\n- `{{PQS:KEBAB(placeholderName)}}`: Converts the value to kebab-case.\n- `{{PQS:SNAKE(placeholderName)}}`: Converts the value to snake_case.\n- `{{PQS:PASCAL(placeholderName)}}`: Converts the value to PascalCase.\n- `{{PQS:TITLE(placeholderName)}}`: Converts the value to Title Case.\n- `{{PQS:SLUG(placeholderName)}}`: Converts the value to a URL-friendly slug.\n- `{{PQS:DATE(pattern)}}`: Inserts the current date/time formatted according to the provided pattern (using `date-fns` formatting).\n- `{{PQS:UUID()}}`: Inserts a newly generated UUID.\n- `{{PQS:UUID_FIXED(n)}}`: Inserts and caches a UUID for the current project based on the provided fixed name `n`. This ensures that the same UUID is used consistently throughout the project wherever this placeholder appears.\n\nWe can include or omit sections of text based on boolean values using the following syntax:\n\n```\n{{#PQS:conditionName}}\nThis text will be included if 'conditionName' is truthy.\n{{/PQS:conditionName}}\n\n{{^PQS:conditionName}}\nThis text will be included if 'conditionName' is falsey.\n{{/PQS:conditionName}}\n```\n","readmeFilename":"README.md"}