private function resolvePackageDependencies($repository, $packages, $packageName)
{
$config = $packages[$packageName];
$dependencies = $config['deps'];
if (isset($config['deps-dev'])) {
$dependencies = array_merge($dependencies, $config['deps-dev']);
}
foreach ($dependencies as $dependencyName) {
$isVendor = strpos($dependencyName, 'vendor/') === 0;
if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) {
continue;
// Meta-dependencies that composer checks
}
if (!isset($packages[$dependencyName])) {
if ($dependencyName == 'vendor/composer-plugin-api') {
continue;
}
if ($isVendor) {
throw new \RuntimeException("Requiring non-existent composer-package '" . $dependencyName . "' in '" . $packageName . "'. Please ensure it is present in composer.json.");
} else {
throw new \RuntimeException("Requiring non-existent repo-module '" . $dependencyName . "' in '" . $packageName . "'. Please check that the subdirectory exists, or append \"vendor/\" to reference a composer-package.");
}
}
$dependency = $packages[$dependencyName];
$package = new Package($dependency['path'], "@stable", "@stable");
$package->setType('monorepo');
if (isset($dependency['autoload']) && is_array($dependency['autoload'])) {
$package->setAutoload($dependency['autoload']);
}
if (isset($dependency['bin']) && is_array($dependency['bin'])) {
$package->setBinaries($dependency['bin']);
}
if (!$repository->hasPackage($package)) {
$repository->addPackage($package);
$this->resolvePackageDependencies($repository, $packages, $dependencyName);
}
}
}