addArgument( name: 'package-name', mode: InputArgument::REQUIRED, ); } public function execute(InputInterface $input, OutputInterface $output): int { $args = $input->getOption('args'); $workingDir = $input->getOption('working-dir'); $language = $input->getOption('language') ?? (new DetermineProjectLanguage( filesystem: $this->filesystem, workingDir: $workingDir, ))->getLanguage(); switch ($language) { case ProjectLanguage::PHP->value: $process = Process::create( args: explode(separator: ' ', string: $args ?? ''), command: ['composer', 'require', $input->getArgument('package-name')], workingDir: '.', ); $process->setTimeout(null); $process->run(); break; case ProjectLanguage::JavaScript->value: $packageManager = new DeterminePackageManager( filesystem: $this->filesystem, projectLanguage: $language, workingDir: $workingDir, ); switch ($packageManager->getPackageManager()) { case PackageManager::pnpm->value: $command = ['pnpm', 'install']; break; case PackageManager::yarn->value: $command = ['yarn', 'add']; break; default: $command = ['npm', 'install']; break; } $process = Process::create( args: explode(separator: ' ', string: $args ?? ''), command: $command, workingDir: $workingDir, ); $process->setTimeout(null); $process->run(); break; } return Command::SUCCESS; } }