Extract logic to determine which package manager

..is used

Always Composer for PHP.
npm, yarn or pnpm for node.
This commit is contained in:
Oliver Davies 2024-02-26 07:17:04 +00:00
parent b2ccc4027f
commit c6a6b4de5d
9 changed files with 202 additions and 24 deletions

View file

@ -2,7 +2,9 @@
namespace App\Console\Command;
use App\Action\DeterminePackageManager;
use App\Action\DetermineProjectLanguage;
use App\Enum\PackageManager;
use App\Enum\ProjectLanguage;
use App\Process\Process;
use Symfony\Component\Console\Command\Command;
@ -47,12 +49,24 @@ final class PackageInstallCommand extends AbstractCommand
break;
case ProjectLanguage::JavaScript->value:
if ($this->filesystem->exists($workingDir.'/yarn.lock')) {
$command = ['yarn', 'add'];
} elseif ($this->filesystem->exists($workingDir.'/pnpm-lock.yaml')) {
$command = ['pnpm', 'install'];
} else {
$command = ['npm', 'install'];
$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(