選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

132 行
4.0KB

  1. <?php
  2. /*
  3. * This file is part of the Fxp Composer Asset Plugin package.
  4. *
  5. * (c) François Pluchino <francois.pluchino@gmail.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Fxp\Composer\AssetPlugin\Util;
  11. use Composer\Composer;
  12. use Composer\IO\IOInterface;
  13. use Composer\Repository\RepositoryManager;
  14. use Composer\Package\PackageInterface;
  15. use Fxp\Composer\AssetPlugin\Assets;
  16. use Fxp\Composer\AssetPlugin\Installer\AssetInstaller;
  17. use Fxp\Composer\AssetPlugin\Installer\BowerInstaller;
  18. use Fxp\Composer\AssetPlugin\Repository\VcsPackageFilter;
  19. /**
  20. * Helper for FxpAssetPlugin.
  21. *
  22. * @author François Pluchino <francois.pluchino@gmail.com>
  23. */
  24. class AssetPlugin
  25. {
  26. /**
  27. * Adds asset installers.
  28. *
  29. * @param Composer $composer
  30. * @param IOInterface $io
  31. */
  32. public static function addInstallers(Composer $composer, IOInterface $io)
  33. {
  34. $im = $composer->getInstallationManager();
  35. $im->addInstaller(new BowerInstaller($io, $composer, Assets::createType('bower')));
  36. $im->addInstaller(new AssetInstaller($io, $composer, Assets::createType('npm')));
  37. }
  38. /**
  39. * Creates the asset options.
  40. *
  41. * @param array $extra The composer extra section of asset options
  42. * @param string $assetType The asset type
  43. *
  44. * @return array The asset registry options
  45. */
  46. public static function createAssetOptions(array $extra, $assetType)
  47. {
  48. $options = array();
  49. foreach ($extra as $key => $value) {
  50. if (0 === strpos($key, $assetType.'-')) {
  51. $key = substr($key, strlen($assetType) + 1);
  52. $options[$key] = $value;
  53. }
  54. }
  55. return $options;
  56. }
  57. /**
  58. * Adds asset registry repositories.
  59. *
  60. * @param RepositoryManager $rm
  61. * @param VcsPackageFilter $filter
  62. * @param array $extra
  63. */
  64. public static function addRegistryRepositories(RepositoryManager $rm, VcsPackageFilter $filter, array $extra)
  65. {
  66. $opts = array_key_exists('asset-registry-options', $extra)
  67. ? $extra['asset-registry-options']
  68. : array();
  69. foreach (Assets::getRegistries() as $assetType => $registryClass) {
  70. $config = array(
  71. 'repository-manager' => $rm,
  72. 'vcs-package-filter' => $filter,
  73. 'asset-options' => static::createAssetOptions($opts, $assetType),
  74. );
  75. $rm->setRepositoryClass($assetType, $registryClass);
  76. $rm->addRepository($rm->createRepository($assetType, $config));
  77. }
  78. }
  79. /**
  80. * Sets vcs type repositories.
  81. *
  82. * @param RepositoryManager $rm
  83. */
  84. public static function setVcsTypeRepositories(RepositoryManager $rm)
  85. {
  86. foreach (Assets::getTypes() as $assetType) {
  87. foreach (Assets::getVcsRepositoryDrivers() as $driverType => $repositoryClass) {
  88. $rm->setRepositoryClass($assetType.'-'.$driverType, $repositoryClass);
  89. }
  90. }
  91. }
  92. /**
  93. * Adds the main file definitions from the root package.
  94. *
  95. * @param Composer $composer
  96. * @param PackageInterface $package
  97. * @param string $section
  98. */
  99. public static function addMainFiles(Composer $composer, PackageInterface $package, $section = 'asset-main-files')
  100. {
  101. if ($package instanceof \Composer\Package\Package) {
  102. $packageExtra = $package->getExtra();
  103. $extra = $composer->getPackage()->getExtra();
  104. if (isset($extra[$section])) {
  105. foreach ($extra[$section] as $packageName => $files) {
  106. if ($packageName === $package->getName()) {
  107. $packageExtra['bower-asset-main'] = $files;
  108. break;
  109. }
  110. }
  111. }
  112. $package->setExtra($packageExtra);
  113. }
  114. return $package;
  115. }
  116. }