'cleanupProject', 'post-package-update' => 'installPackage', 'post-package-install' => 'installPackage', ]; } /** * Install resources from an installed or updated package * * @param PackageEvent $event */ public function installPackage(PackageEvent $event) { $package = $this->getOperationPackage($event); if ($package) { $installer = new RecipeInstaller($event->getIO(), $event->getComposer()); $installer->installLibrary($package); } } /** * Cleanup the root package on create-project * * @param Event $event */ public function cleanupProject(Event $event) { $file = new JsonFile(Factory::getComposerFile()); $data = $file->read(); // Remove project and public files from project unset($data['extra'][self::PROJECT_FILES]); unset($data['extra'][self::PUBLIC_FILES]); // Remove redundant empty extra if (empty($data['extra'])) { unset($data['extra']); } // Save back to composer.json $file->write($data); } /** * Get target package from operation * * @param PackageEvent $event * @return PackageInterface */ protected function getOperationPackage(PackageEvent $event) { $operation = $event->getOperation(); if ($operation instanceof UpdateOperation) { return $operation->getTargetPackage(); } if ($operation instanceof InstallOperation) { return $operation->getPackage(); } return null; } public function getCapabilities() { return [ CommandProvider::class => RecipeCommandProvider::class ]; } public function deactivate(Composer $composer, IOInterface $io) { } public function uninstall(Composer $composer, IOInterface $io) { } }