diff --git a/src/ncc/CLI/Commands/ExecCommand.php b/src/ncc/CLI/Commands/ExecCommand.php index 4c4dfcd..4dd9647 100644 --- a/src/ncc/CLI/Commands/ExecCommand.php +++ b/src/ncc/CLI/Commands/ExecCommand.php @@ -24,9 +24,11 @@ use Exception; use ncc\Classes\Runtime; + use ncc\CLI\Main; use ncc\Objects\CliHelpSection; use ncc\Utilities\Console; use ncc\Utilities\Functions; + use ncc\Utilities\Resolver; class ExecCommand { @@ -40,6 +42,12 @@ { $package = $args['package'] ?? null; $version = $args['exec-version'] ?? 'latest'; + $program_arguments = []; + + if(isset($args['exec-args'])) + { + $program_arguments = Resolver::splitArguments(Main::getRawArgs(), '--exec-args'); + } if($package === null) { @@ -58,7 +66,7 @@ try { - return Runtime::execute($package_name); + return Runtime::execute($package_name, $program_arguments); } catch(Exception $e) { diff --git a/src/ncc/CLI/Main.php b/src/ncc/CLI/Main.php index 08c9c25..6c584ae 100644 --- a/src/ncc/CLI/Main.php +++ b/src/ncc/CLI/Main.php @@ -49,6 +49,11 @@ */ private static $args; + /** + * @var array + */ + private static $raw_args; + /** * @var LogLevel|null */ @@ -63,6 +68,7 @@ public static function start(array $argv): int { self::$args = Resolver::parseArguments(implode(' ', $argv)); + self::$raw_args = $argv; if(!isset(self::$args['ncc-cli'])) { @@ -213,6 +219,16 @@ return self::$args; } + /** + * Returns the raw arguments passed to ncc + * + * @return array + */ + public static function getRawArgs(): array + { + return self::$raw_args; + } + /** * @return LogLevel */ diff --git a/src/ncc/Classes/Runtime.php b/src/ncc/Classes/Runtime.php index fd00c99..e1ff27e 100644 --- a/src/ncc/Classes/Runtime.php +++ b/src/ncc/Classes/Runtime.php @@ -84,7 +84,7 @@ * @throws PathNotFoundException * @throws OperationException */ - public static function execute(string $package): int + public static function execute(string $package, array $arguments=[]): int { if(!self::isImported($package)) { @@ -110,7 +110,8 @@ return ExecutionUnitRunner::executeFromSystem( self::$imported_packages[$package], - Metadata::fromArray(ZiProto::decode(IO::fread($metadata_path)))->getMainExecutionPolicy() + Metadata::fromArray(ZiProto::decode(IO::fread($metadata_path)))->getMainExecutionPolicy(), + $arguments ); } diff --git a/src/ncc/Utilities/Resolver.php b/src/ncc/Utilities/Resolver.php index 02c5c56..e3b8af1 100644 --- a/src/ncc/Utilities/Resolver.php +++ b/src/ncc/Utilities/Resolver.php @@ -130,6 +130,25 @@ return $configs; } + /** + * Split arguments + * + * @param array $args List of arguments + * @param string $arg The argument to split from + * @return array Split arguments starting from specified argument + */ + public static function splitArguments(array $args, string $arg): array + { + $index = array_search($arg, $args); + + if($index === false) + { + return []; + } + + return array_slice($args, $index + 1); + } + /** * Resolves the constant's full name *