@nestjs/cli
Version:
Nest - modern, fast, powerful node.js web framework (@cli)
62 lines (61 loc) • 3.16 kB
JavaScript
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);
});
}
}