From 7c38be19802d8c4f1641e0bd4afd14d81fe6be5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raimondas=20Rimkevi=C4=8Dius=20=28aka=20MekDrop=29?= Date: Sat, 7 Nov 2020 16:39:55 +0200 Subject: [PATCH 1/4] If specific packages are found in project installation, gets versions from yarn and nodejs from these packages config --- src/NodeComposerPlugin.php | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/NodeComposerPlugin.php b/src/NodeComposerPlugin.php index 9a14e9e..b54a215 100644 --- a/src/NodeComposerPlugin.php +++ b/src/NodeComposerPlugin.php @@ -38,12 +38,26 @@ public function activate(Composer $composer, IOInterface $io) $this->io = $io; $extraConfig = $this->composer->getPackage()->getExtra(); + $packageConfig = $extraConfig['mariusbuescher']['node-composer'] ?? []; - if (!isset($extraConfig['mariusbuescher']['node-composer'])) { + $this->updateConfigFromPackageProvidesConfig( + $packageConfig, + 'node-version', + 'imponeer/composer-nodejs-installer', + 'nodejs' + ); + $this->updateConfigFromPackageProvidesConfig( + $packageConfig, + 'yarn-version', + 'imponeer/composer-yarn-installer', + 'yarn' + ); + + if (empty($packageConfig)) { throw new NodeComposerConfigException('You must configure the node composer plugin'); } - $this->config = Config::fromArray($extraConfig['mariusbuescher']['node-composer']); + $this->config = Config::fromArray($packageConfig); } public static function getSubscribedEvents() @@ -143,4 +157,21 @@ public function deactivate(Composer $composer, IOInterface $io) public function uninstall(Composer $composer, IOInterface $io) { } + + /** + * Updates local config with data from some specific packages + * + * @param array $config Local config for the update + * @param string $configKey Local config key that will be updated if specific package will be found + * @param string $packageName Package name from where to fetch provides section data + * @param string $providesName Provides key name + */ + protected function updateConfigFromPackageProvidesConfig(array &$config, $configKey, $packageName, $providesName) + { + $foundPackages = $this->composer->getRepositoryManager()->getLocalRepository()->findPackages($packageName); + if (isset($foundPackages[0])) { + $provides = $foundPackages[0]->getProvides(); + $config[$configKey] = $provides[$providesName]->getPrettyConstraint(); + } + } } From c865c559608cd70f5841e67e1c423e8d066bdc7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raimondas=20Rimkevi=C4=8Dius=20=28aka=20MekDrop=29?= Date: Sun, 8 Nov 2020 12:09:07 +0200 Subject: [PATCH 2/4] Added suggest part to composer.json --- composer.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/composer.json b/composer.json index 8ccc6c0..cf6e93b 100644 --- a/composer.json +++ b/composer.json @@ -29,6 +29,10 @@ "symfony/process": "^2.7 || >=3.0", "symfony/filesystem": ">=2.7" }, + "suggest": { + "imponeer/composer-yarn-installer": "Lets use composer constraints for updating yarn package version", + "imponeer/composer-nodejs-installer": "Lets use composer constraints for updating nodejs package version" + }, "extra": { "class": "MariusBuescher\\NodeComposer\\NodeComposerPlugin" } From 214eef40d716492f59387217938d03cfcc81c17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raimondas=20Rimkevi=C4=8Dius=20=28aka=20MekDrop=29?= Date: Sun, 8 Nov 2020 12:23:13 +0200 Subject: [PATCH 3/4] Updated provides section names --- src/NodeComposerPlugin.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NodeComposerPlugin.php b/src/NodeComposerPlugin.php index b54a215..1177cac 100644 --- a/src/NodeComposerPlugin.php +++ b/src/NodeComposerPlugin.php @@ -10,8 +10,8 @@ use Composer\Script\Event; use Composer\Script\ScriptEvents; use Composer\Util\RemoteFilesystem; -use MariusBuescher\NodeComposer\Exception\VersionVerificationException; use MariusBuescher\NodeComposer\Exception\NodeComposerConfigException; +use MariusBuescher\NodeComposer\Exception\VersionVerificationException; use MariusBuescher\NodeComposer\Installer\NodeInstaller; use MariusBuescher\NodeComposer\Installer\YarnInstaller; @@ -44,13 +44,13 @@ public function activate(Composer $composer, IOInterface $io) $packageConfig, 'node-version', 'imponeer/composer-nodejs-installer', - 'nodejs' + 'nodejs/node' ); $this->updateConfigFromPackageProvidesConfig( $packageConfig, 'yarn-version', 'imponeer/composer-yarn-installer', - 'yarn' + 'yarnpkg/yarn' ); if (empty($packageConfig)) { From 23dcc4732f531a9e3c6e379142436434e2e270ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Raimondas=20Rimkevi=C4=8Dius=20=28aka=20MekDrop=29?= Date: Sun, 8 Nov 2020 19:53:44 +0200 Subject: [PATCH 4/4] Added optional config options: package-for-node-version and package-for-yarn-version --- src/NodeComposerPlugin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NodeComposerPlugin.php b/src/NodeComposerPlugin.php index 1177cac..fa299f9 100644 --- a/src/NodeComposerPlugin.php +++ b/src/NodeComposerPlugin.php @@ -43,13 +43,13 @@ public function activate(Composer $composer, IOInterface $io) $this->updateConfigFromPackageProvidesConfig( $packageConfig, 'node-version', - 'imponeer/composer-nodejs-installer', + $packageConfig['package-for-node-version'] ?? 'imponeer/composer-nodejs-installer', 'nodejs/node' ); $this->updateConfigFromPackageProvidesConfig( $packageConfig, 'yarn-version', - 'imponeer/composer-yarn-installer', + $packageConfig['package-for-yarn-version'] ?? 'imponeer/composer-yarn-installer', 'yarnpkg/yarn' );