UNPKG

@nestjs/cli

Version:

Nest - modern, fast, powerful node.js web framework (@cli)

62 lines (61 loc) 3.16 kB
import { Collection } from '../lib/schematics/index.js'; import { AbstractCommand } from './abstract.command.js'; export class NewCommand extends AbstractCommand { load(program) { program .command('new [name]') .alias('n') .description('Generate Nest application.') .option('--directory [directory]', 'Specify the destination directory') .option('-d, --dry-run', 'Report actions that would be performed without writing out results.', false) .option('-g, --skip-git', 'Skip git repository initialization.', false) .option('-s, --skip-install', 'Skip package installation.', false) .option('-p, --package-manager [packageManager]', 'Specify package manager.') .option('-l, --language [language]', 'Programming language to be used (TypeScript or JavaScript)', 'TypeScript') .option('-c, --collection [collectionName]', 'Schematics collection to use', Collection.NESTJS) .option('--strict', 'Enables strict mode in TypeScript.', true) .option('-t, --skip-tests', 'Do not generate testing files for the new project.', false) .option('--format', 'Format generated files using Prettier.', false) .option('--observe', 'Auto-configure observability with @nestjs/observe.') .option('--no-observe', 'Skip observability setup without being prompted for it.') .action(async (name, options) => { const availableLanguages = ['js', 'ts', 'javascript', 'typescript']; let language = options.language; if (language) { const lowercasedLanguage = language.toLowerCase(); const langMatch = availableLanguages.includes(lowercasedLanguage); if (!langMatch) { throw new Error(`Invalid language "${language}" selected. Available languages are "typescript" or "javascript"`); } switch (lowercasedLanguage) { case 'javascript': language = 'js'; break; case 'typescript': language = 'ts'; break; default: language = lowercasedLanguage; break; } } const context = { name, directory: options.directory, dryRun: options.dryRun, skipGit: options.skipGit, skipInstall: options.skipInstall, skipTests: options.skipTests, packageManager: options.packageManager, language, collection: options.collection, strict: options.strict, format: options.format === true, // Stays undefined unless a flag was given, which is what tells the // action to prompt instead of assuming an answer. observe: options.observe, }; await this.action.handle(context); }); } }