function Plugin::serviceProvidersFromAutoloadFiles
1 call to Plugin::serviceProvidersFromAutoloadFiles()
- Plugin::serviceProviders in vendor/
tbachert/ spi/ src/ Composer/ Plugin.php
File
-
vendor/
tbachert/ spi/ src/ Composer/ Plugin.php, line 215
Class
Namespace
Nevay\SPI\ComposerCode
private function serviceProvidersFromAutoloadFiles(PackageInterface $package, array &$mappings, string $installPath, IOInterface $io) : void {
$autoloadFiles = $package->getAutoload()['files'] ?? [];
$spiAutoloadFiles = $package->getExtra()['spi-config']['autoload-files'] ?? false ?: [];
$spiPruneAutoloadFiles = $package->getExtra()['spi-config']['prune-autoload-files'] ?? null;
if ($spiAutoloadFiles === true) {
$spiAutoloadFiles = $autoloadFiles;
}
if ($spiPruneAutoloadFiles === true) {
$spiPruneAutoloadFiles = $spiAutoloadFiles;
}
$includeFile = (static fn(string $file) => require $file)->bindTo(null, null);
foreach ($spiAutoloadFiles as $index => $file) {
$io->debug(sprintf('Loading service providers from "%s" (%s)', $file, $package->getPrettyString()));
if (!($includedProviders = ServiceLoader::collectProviders($includeFile, $installPath . '/' . $file))) {
unset($spiAutoloadFiles[$index]);
continue;
}
foreach ($includedProviders as $service => $providers) {
$mappings[$service] ??= [];
$mappings[$service] += array_fill_keys($providers, $package->getPrettyString() . ' (' . json_encode($file, flags: JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . ')');
}
}
$spiPruneAutoloadFiles ??= $spiAutoloadFiles;
if ($spiPruneAutoloadFiles && $autoloadFiles && $package instanceof Package) {
$io->debug(sprintf('Pruning autoload.files (%s): %s', $package->getPrettyString(), implode(', ', $spiPruneAutoloadFiles)));
$autoload = $package->getAutoload();
$autoload['files'] = array_diff($autoloadFiles, $spiPruneAutoloadFiles);
$package->setAutoload($autoload);
}
}