*/ protected $arguments = [ 'plugin' => 'The pluginKey and an optional version separated by an @. If version is not provided, the latest will be added by default.', ]; /** * Actually execute a command. * * @param array $params */ #[Override] public function run(array $params): void { parent::run($params); $plugins = $this->parsePluginsParams($params); /** @var PluginsManager $cpm */ $cpm = service('cpm'); $cpm->install($plugins); } /** * @param array $params * @return array */ private function parsePluginsParams(array $params): array { $plugins = []; foreach ($params as $param) { preg_match( '/^(?[a-z0-9]([_.-]?[a-z0-9]+)*\/[a-z0-9]([_.-]?[a-z0-9]+)*)(@(?\S+))?\s*$/', $param, $matches, ); if (array_key_exists('pluginKey', $matches)) { $plugins[$matches['pluginKey']] = $matches['version'] ?? null; } } return $plugins; } }