diff --git a/src/ncc/Classes/NccExtension/NccCompiler.php b/src/ncc/Classes/NccExtension/NccCompiler.php index 1c4f9d4..2c62b57 100644 --- a/src/ncc/Classes/NccExtension/NccCompiler.php +++ b/src/ncc/Classes/NccExtension/NccCompiler.php @@ -119,7 +119,7 @@ { // Add the static dependencies flag so that the package manager // Won't try to resolve the dependencies from the system. - $package_writer->addFlag(PackageFlags::STATIC_DEPENDENCIES->value); + $package_writer->addFlag(PackageFlags::STATIC_DEPENDENCIES); } // Debugging information @@ -264,19 +264,19 @@ if(isset($build_configuration->getOptions()[BuildConfigurationOptions::COMPRESSION->value])) { - $package_writer->addFlag(PackageFlags::COMPRESSION->value); + $package_writer->addFlag(PackageFlags::COMPRESSION); switch(strtolower($build_configuration->getOptions()[BuildConfigurationOptions::COMPRESSION->value])) { case BuildConfigurationOptions\CompressionOptions::HIGH->value: - $package_writer->addFlag(PackageFlags::HIGH_COMPRESSION->value); + $package_writer->addFlag(PackageFlags::HIGH_COMPRESSION); break; case BuildConfigurationOptions\CompressionOptions::MEDIUM->value: - $package_writer->addFlag(PackageFlags::MEDIUM_COMPRESSION->value); + $package_writer->addFlag(PackageFlags::MEDIUM_COMPRESSION); break; case BuildConfigurationOptions\CompressionOptions::LOW->value: - $package_writer->addFlag(PackageFlags::LOW_COMPRESSION->value); + $package_writer->addFlag(PackageFlags::LOW_COMPRESSION); break; default: diff --git a/src/ncc/Classes/PackageWriter.php b/src/ncc/Classes/PackageWriter.php index d17f8d0..fb6e5a1 100644 --- a/src/ncc/Classes/PackageWriter.php +++ b/src/ncc/Classes/PackageWriter.php @@ -25,6 +25,7 @@ namespace ncc\Classes; + use InvalidArgumentException; use ncc\Enums\Flags\PackageFlags; use ncc\Enums\PackageDirectory; use ncc\Enums\PackageStructure; @@ -153,7 +154,7 @@ /** * Sets the package flags * - * @param array $flags + * @param string[]|PackageFlags[] $flags * @return void * @throws IOException */ @@ -164,19 +165,39 @@ throw new IOException('Cannot set flags after data has been written to the package'); } - $this->headers[PackageStructure::FLAGS->value] = $flags; + foreach($flags as $flag) + { + if(is_string($flag)) + { + $flag = PackageFlags::tryFrom($flag); + if($flag === null) + { + throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag)); + } + } + + $this->headers[PackageStructure::FLAGS->value] = $flag->value; + } } /** * Adds a flag to the package * - * @param string $flag + * @param PackageFlags|string $flag * @return void * @throws IOException */ - // TODO: Package flags should use the PackageFlags enum directly. - public function addFlag(string $flag): void + public function addFlag(PackageFlags|string $flag): void { + if(is_string($flag)) + { + $flag = PackageFlags::tryFrom($flag); + if($flag === null) + { + throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag)); + } + } + if($this->data_written) { throw new IOException('Cannot add a flag after data has been written to the package'); @@ -184,7 +205,7 @@ if(!in_array($flag, $this->headers[PackageStructure::FLAGS->value], true)) { - $this->headers[PackageStructure::FLAGS->value][] = $flag; + $this->headers[PackageStructure::FLAGS->value][] = $flag->value; } } @@ -195,14 +216,23 @@ * @return void * @throws IOException */ - public function removeFlag(string $flag): void + public function removeFlag(PackageFlags|string $flag): void { + if(is_string($flag)) + { + $flag = PackageFlags::tryFrom($flag); + if($flag === null) + { + throw new InvalidArgumentException(sprintf('Unexpected flag: %s', $flag)); + } + } + if($this->data_written) { throw new IOException('Cannot remove a flag after data has been written to the package'); } - $this->headers[PackageStructure::FLAGS->value] = array_diff($this->headers[PackageStructure::FLAGS->value], [$flag]); + $this->headers[PackageStructure::FLAGS->value] = array_diff($this->headers[PackageStructure::FLAGS->value], [$flag->value]); } /**