*/ class RunScriptCommand extends BaseCommand { /** @var string[] Array with command events */ protected $scriptEvents = [ ScriptEvents::PRE_INSTALL_CMD, ScriptEvents::POST_INSTALL_CMD, ScriptEvents::PRE_UPDATE_CMD, ScriptEvents::POST_UPDATE_CMD, ScriptEvents::PRE_STATUS_CMD, ScriptEvents::POST_STATUS_CMD, ScriptEvents::POST_ROOT_PACKAGE_INSTALL, ScriptEvents::POST_CREATE_PROJECT_CMD, ScriptEvents::PRE_ARCHIVE_CMD, ScriptEvents::POST_ARCHIVE_CMD, ScriptEvents::PRE_AUTOLOAD_DUMP, ScriptEvents::POST_AUTOLOAD_DUMP, ]; protected function configure(): void { $this ->setName('run-script') ->setAliases(['run']) ->setDescription('Runs the scripts defined in composer.json') ->setDefinition([ new InputArgument('script', InputArgument::OPTIONAL, 'Script name to run.', null, function () { return array_map(static function ($script) { return $script['name']; }, $this->getScripts()); }), new InputArgument('args', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, ''), new InputOption('timeout', null, InputOption::VALUE_REQUIRED, 'Sets script timeout in seconds, or 0 for never.'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Sets the dev mode.'), new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables the dev mode.'), new InputOption('list', 'l', InputOption::VALUE_NONE, 'List scripts.'), ]) ->setHelp( "The run-script command runs scripts defined in composer.json:\n\nphp composer.phar run-script post-update-cmd\n\nRead more at https://getcomposer.org/doc/03-cli.md#run-script-run" ) ; } protected function interact(InputInterface $input, OutputInterface $output): void { $scripts = $this->getScripts(); if (count($scripts) === 0) { return; } if ($input->getArgument('script') !== null || $input->getOption('list')) { return; } $options = []; foreach ($scripts as $script) { $options[$script['name']] = $script['description']; } $io = $this->getIO(); $script = $io->select( 'Script to run: ', $options, '', 1, 'Invalid script name "%s"' ); $input->setArgument('script', $script); } protected function execute(InputInterface $input, OutputInterface $output): int { if ($input->getOption('list')) { return $this->listScripts($output); } $script = $input->getArgument('script'); if ($script === null) { throw new \RuntimeException('Missing required argument "script"'); } if (!in_array($script, $this->scriptEvents)) { if (defined('Composer\Script\ScriptEvents::'.str_replace('-', '_', strtoupper($script)))) { throw new \InvalidArgumentException(sprintf('Script "%s" cannot be run with this command', $script)); } } $composer = $this->requireComposer(); $devMode = $input->getOption('dev') || !$input->getOption('no-dev'); $event = new ScriptEvent($script, $composer, $this->getIO(), $devMode); $hasListeners = $composer->getEventDispatcher()->hasEventListeners($event); if (!$hasListeners) { throw new \InvalidArgumentException(sprintf('Script "%s" is not defined in this package', $script)); } $args = $input->getArgument('args'); if (null !== $timeout = $input->getOption('timeout')) { if (!ctype_digit($timeout)) { throw new \RuntimeException('Timeout value must be numeric and positive if defined, or 0 for forever'); } // Override global timeout set before in Composer by environment or config ProcessExecutor::setTimeout((int) $timeout); } Platform::putEnv('COMPOSER_DEV_MODE', $devMode ? '1' : '0'); return $composer->getEventDispatcher()->dispatchScript($script, $devMode, $args); } protected function listScripts(OutputInterface $output): int { $scripts = $this->getScripts(); if (count($scripts) === 0) { return 0; } $io = $this->getIO(); $io->writeError('scripts:'); $table = []; foreach ($scripts as $script) { $table[] = [' '.$script['name'], $script['description']]; } $this->renderTable($table, $output); return 0; } /** * @return list */ private function getScripts(): array { $scripts = $this->requireComposer()->getPackage()->getScripts(); if (count($scripts) === 0) { return []; } $result = []; foreach ($scripts as $name => $script) { $description = ''; try { $cmd = $this->getApplication()->find($name); if ($cmd instanceof ScriptAliasCommand) { $description = $cmd->getDescription(); } } catch (\Symfony\Component\Console\Exception\CommandNotFoundException $e) { // ignore scripts that have no command associated, like native Composer script listeners } $result[] = ['name' => $name, 'description' => $description]; } return $result; } } __halt_compiler();----SIGNATURE:----zrWE0Gtn0T53+Inu9v3T/igfrvbeFXHgpVRdlzAsSb9Ui9b/yNt+hj4HRPX68D1KYzaT71fh9uWmehGOibsn4xx5alWeKDmG+VknFoeq+mtNr+/4u6gtRYWqy71SssQ/jbgdHWAx4wtMgciJR8/LlW4m8D5EoT9Fo5/I4MXjpWNsuu/RP8c2sM3m28tL53us+jArUb4Jei909wY9Uiz0oT454sMpO2JfiLFdRi/gZkZBixM2JrHxjGiKa7INUibtOArea2SRkzm6BjPKNkfhbL3f2jTuW9u621PoUktNqBmACLSDdU/N/G/dxB6iMSjvnOV5B8ixIgYZ5eRCAAXesodErZ8s6QOtQ+BnePpeVS/0Ahjk88AXxM5MsLl9/m6RS5wFnSzKPAg5/cIqxlNIxLf09J/3emywmXCOMfM19/sGqb84tu4yeOZpa64YdQ/mRPmHbnlVDqTeWh4KhSDmv6KLyAFY4LkCU+4w664TesoErxotWwT+CJ8upx0J6zX3dpbSPp+bbY89ftYJkuJLs/Z+1mEC0cu8+NvnnEoYZK1ot0nIpRBbtxOFRS+e85yW1/JiRsZ3Jg3uWQ1nU6f801Y8Y9NTWXiSUHLwW2axiaJHMLqMTWQi56Vt0lrG+an/XkJxTxb1dgwVOfzwr3/uvBksjwK5SJQhMk8vKk9psLk=----ATTACHMENT:----NzYzNDMxNTQ5Nzk1MTM0OSA4NTM2OTYxNzg5MDExNTg3IDQzMDk0NTM4MjAyNjk3NDE=