getOption('extra-args'); $workingDir = $input->getOption('working-dir'); $language = $input->getOption('language') ?? (new DetermineProjectLanguage( filesystem: $this->filesystem, workingDir: $workingDir, ))->getLanguage(); $filesystem = new Filesystem(); // TODO: Composer in Docker Compose? $process = Process::create( command: $this->getCommand( filesystem: $filesystem, language: $language, workingDir: $workingDir, ), extraArgs: explode(separator: ' ', string: strval($extraArgs)), workingDir: $workingDir, ); $process->setTimeout(null); $process->run(); return Command::SUCCESS; } /** * @param Filesystem $filesystem * @param non-empty-string $language * @param non-empty-string $workingDir * @return non-empty-array */ private function getCommand(Filesystem $filesystem, string $language, string $workingDir): array { if ($language === ProjectLanguage::JavaScript->value) { if ($filesystem->exists($workingDir.'/yarn.lock')) { return ['yarn']; } elseif ($filesystem->exists($workingDir.'/pnpm-lock.yaml')) { return ['pnpm', 'install']; } else { return ['npm', 'install']; } } return ['composer', 'install']; } }