20862be7d0
- slim/slim: ^3.1 - symfony/expression-language: ^3.4 - fxp/composer-asset-plugin: ~1.3 - bower-asset/vue: ^2.5 - bower-asset/vue-resource: ^1.5
140 lines
3.7 KiB
PHP
140 lines
3.7 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Fxp Composer Asset Plugin package.
|
|
*
|
|
* (c) François Pluchino <francois.pluchino@gmail.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Fxp\Composer\AssetPlugin\Installer;
|
|
|
|
use Composer\Composer;
|
|
use Composer\Installer\LibraryInstaller;
|
|
use Composer\IO\IOInterface;
|
|
use Composer\Package\PackageInterface;
|
|
use Composer\Util\Filesystem;
|
|
use Fxp\Composer\AssetPlugin\Config\Config;
|
|
use Fxp\Composer\AssetPlugin\Type\AssetTypeInterface;
|
|
use Fxp\Composer\AssetPlugin\Util\AssetPlugin;
|
|
|
|
/**
|
|
* Installer for asset packages.
|
|
*
|
|
* @author Martin Hasoň <martin.hason@gmail.com>
|
|
* @author François Pluchino <francois.pluchino@gmail.com>
|
|
*/
|
|
class AssetInstaller extends LibraryInstaller
|
|
{
|
|
/**
|
|
* @var Config
|
|
*/
|
|
private $config;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param Config $config
|
|
* @param IOInterface $io
|
|
* @param Composer $composer
|
|
* @param AssetTypeInterface $assetType
|
|
* @param Filesystem $filesystem
|
|
*/
|
|
public function __construct(Config $config, IOInterface $io, Composer $composer, AssetTypeInterface $assetType, Filesystem $filesystem = null)
|
|
{
|
|
parent::__construct($io, $composer, $assetType->getComposerType(), $filesystem);
|
|
|
|
$this->config = $config;
|
|
$paths = $this->config->getArray('installer-paths');
|
|
|
|
if (!empty($paths[$this->type])) {
|
|
$this->vendorDir = rtrim($paths[$this->type], '/');
|
|
} else {
|
|
$this->vendorDir = rtrim($this->vendorDir.'/'.$assetType->getComposerVendorName(), '/');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function supports($packageType)
|
|
{
|
|
return $packageType === $this->type;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getInstallPath(PackageInterface $package)
|
|
{
|
|
$this->initializeVendorDir();
|
|
|
|
$targetDir = $package->getTargetDir();
|
|
|
|
list(, $name) = explode('/', $package->getPrettyName(), 2);
|
|
|
|
return ($this->vendorDir ? $this->vendorDir.'/' : '').$name.($targetDir ? '/'.$targetDir : '');
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function getPackageBasePath(PackageInterface $package)
|
|
{
|
|
return $this->getInstallPath($package);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function installCode(PackageInterface $package)
|
|
{
|
|
$package = AssetPlugin::addMainFiles($this->config, $package);
|
|
|
|
parent::installCode($package);
|
|
|
|
$this->deleteIgnoredFiles($package);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function updateCode(PackageInterface $initial, PackageInterface $target)
|
|
{
|
|
$target = AssetPlugin::addMainFiles($this->config, $target);
|
|
|
|
parent::updateCode($initial, $target);
|
|
|
|
$this->deleteIgnoredFiles($target);
|
|
}
|
|
|
|
/**
|
|
* Deletes files defined in bower.json in section "ignore".
|
|
*
|
|
* @param PackageInterface $package
|
|
*/
|
|
protected function deleteIgnoredFiles(PackageInterface $package)
|
|
{
|
|
$manager = IgnoreFactory::create($this->config, $this->composer, $package, $this->getInstallPath($package));
|
|
|
|
if ($manager->isEnabled() && !$manager->hasPattern()) {
|
|
$this->addIgnorePatterns($manager, $package);
|
|
}
|
|
|
|
$manager->cleanup();
|
|
}
|
|
|
|
/**
|
|
* Add ignore patterns in the manager.
|
|
*
|
|
* @param IgnoreManager $manager The ignore manager instance
|
|
* @param PackageInterface $package The package instance
|
|
*/
|
|
protected function addIgnorePatterns(IgnoreManager $manager, PackageInterface $package)
|
|
{
|
|
// override this method
|
|
}
|
|
}
|