- Added a new interface class SerializableObjectInterface
to implement serializable objects, BytecodeObjectInterface
extends this interface to allow for serialization of compiled assets - Updated class `\ncc\Objects\ComposerJson > Author` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > Autoloader` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > Funding` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > NamespacePointer` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > PackageLink` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > Suggestion` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ComposerJson > Support` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\ExecutionPointers > ExecutionPointer` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\NccVersionInformation > Component` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\Package > Component` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\Package > ExecutionUnit` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\Package > Header` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\Package > Installer` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\Package > MagicBytes` to use method calls rather than direct property access and implemented `SerializableObjectInterface` - Updated class `\ncc\Objects\Package > Resource` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\PackageLock > DependencyEntry` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\PackageLock > PackageEntry` to use method calls rather than direct property access and implemented `BytecodeObjectInterface` - Updated class `\ncc\Objects\PackageLock > VersionEntry` to use method calls rather than direct property access and implemented `BytecodeObjectInterface`
This commit is contained in:
parent
2ea1dfc27a
commit
729c9cb217
44 changed files with 1845 additions and 884 deletions
1
.idea/inspectionProfiles/Project_Default.xml
generated
1
.idea/inspectionProfiles/Project_Default.xml
generated
|
@ -1,6 +1,7 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="ContractViolationInspection" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<Languages>
|
||||
<language minSize="133" name="PHP" />
|
||||
|
|
38
CHANGELOG.md
38
CHANGELOG.md
|
@ -19,6 +19,8 @@ features and reduced the number of exceptions down to 15 exceptions.
|
|||
- Added new exception `GitException` in `\ncc\Exceptions` to replace all git related exceptions
|
||||
- Added new exception `PackageException` in `\ncc\Exceptions` to replace all package related exceptions
|
||||
- Added new exception `OperationException` in `\ncc\Exceptions` to replace all generic related exceptions
|
||||
- Added a new interface class `SerializableObjectInterface` to implement serializable objects, `BytecodeObjectInterface`
|
||||
extends this interface to allow for serialization of compiled assets
|
||||
|
||||
### Fixed
|
||||
- Fixed MITM attack vector in `\ncc\Classes > HttpClient > prepareCurl()`
|
||||
|
@ -137,6 +139,42 @@ features and reduced the number of exceptions down to 15 exceptions.
|
|||
- Updated class `\ncc\Objects\ProjectConfiguration > Installer` to use method calls rather than direct property access
|
||||
- Updated class `\ncc\Objects\ProjectConfiguration > Project` to use method calls rather than direct property access
|
||||
- Updated class `\ncc\Objects\ProjectConfiguration > UpdateSource` to use method calls rather than direct property access
|
||||
- Updated class `\ncc\Objects\ComposerJson > Author` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > Autoloader` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > Funding` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > NamespacePointer` to use method calls rather than direct property access
|
||||
and implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > PackageLink` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > Suggestion` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ComposerJson > Support` to use method calls rather than direct property access and
|
||||
implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\ExecutionPointers > ExecutionPointer` to use method calls rather than direct property
|
||||
access and implemented `BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\NccVersionInformation > Component` to use method calls rather than direct property access
|
||||
and implemented `SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > Component` to use method calls rather than direct property access and
|
||||
implemented `BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > ExecutionUnit` to use method calls rather than direct property access and
|
||||
implemented `BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > Header` to use method calls rather than direct property access and implemented
|
||||
`BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > Installer` to use method calls rather than direct property access and implemented
|
||||
`BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > MagicBytes` to use method calls rather than direct property access and implemented
|
||||
`SerializableObjectInterface`
|
||||
- Updated class `\ncc\Objects\Package > Resource` to use method calls rather than direct property access and implemented
|
||||
`BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\PackageLock > DependencyEntry` to use method calls rather than direct property access
|
||||
and implemented `BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\PackageLock > PackageEntry` to use method calls rather than direct property access
|
||||
and implemented `BytecodeObjectInterface`
|
||||
- Updated class `\ncc\Objects\PackageLock > VersionEntry` to use method calls rather than direct property access
|
||||
and implemented `BytecodeObjectInterface`
|
||||
|
||||
### Removed
|
||||
- Removed `FileNotFoundException` and `DirectoryNotFoundException` from `\ncc\Exceptions`
|
||||
|
|
|
@ -291,7 +291,7 @@
|
|||
|
||||
foreach($VersionInformation->Components as $component)
|
||||
{
|
||||
$full_name = $component->vendor . '/' . $component->package_name;
|
||||
$full_name = $component->getVendor() . '/' . $component->getPackageName();
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
@ -81,7 +81,7 @@ namespace ncc\CLI\Commands;
|
|||
|
||||
try
|
||||
{
|
||||
$units = $execution_pointer_manager->getUnits($package_entry->Name, $version_entry->Version);
|
||||
$units = $execution_pointer_manager->getUnits($package_entry->getName(), $version_entry->getVersion());
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
|
@ -106,7 +106,7 @@ namespace ncc\CLI\Commands;
|
|||
|
||||
try
|
||||
{
|
||||
exit($execution_pointer_manager->executeUnit($package_entry->Name, $version_entry->Version, $unit_name, $options));
|
||||
exit($execution_pointer_manager->executeUnit($package_entry->getName(), $version_entry->getVersion(), $unit_name, $options));
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
|
|
|
@ -237,7 +237,7 @@
|
|||
Console::out('resources:');
|
||||
foreach($package->resources as $resource)
|
||||
{
|
||||
Console::out(' - ' . sprintf('%s - (%s)', $resource->Name, Functions::b2u(strlen($resource->Data))));
|
||||
Console::out(' - ' . sprintf('%s - (%s)', $resource->getName(), Functions::b2u(strlen($resource->getData()))));
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -252,7 +252,7 @@
|
|||
{
|
||||
try
|
||||
{
|
||||
Console::out(' - ' . sprintf('#%s %s - %s', $component->data_types, $component->name, json_encode(($component->flags ?? []), JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES)));
|
||||
Console::out(' - ' . sprintf('#%s %s - %s', $component->getDataType(), $component->getName(), json_encode(($component->getFlags() ?? []), JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES)));
|
||||
}
|
||||
catch(JsonException $e)
|
||||
{
|
||||
|
@ -315,7 +315,7 @@
|
|||
Console::out(sprintf('%s=%s (%s)',
|
||||
Console::formatColor($package, ConsoleColors::LIGHT_GREEN),
|
||||
Console::formatColor($version, ConsoleColors::LIGHT_MAGENTA),
|
||||
$package_manager->getPackageVersion($package, $version)->Compiler->getExtension()
|
||||
$package_manager->getPackageVersion($package, $version)->getCompiler()->getExtension()
|
||||
));
|
||||
}
|
||||
catch(Exception $e)
|
||||
|
@ -559,21 +559,21 @@
|
|||
}
|
||||
|
||||
Console::out(sprintf('Extension: %s',
|
||||
Console::formatColor($package->header->CompilerExtension->getExtension(), ConsoleColors::GREEN)
|
||||
Console::formatColor($package->header->getCompilerExtension()->getExtension(), ConsoleColors::GREEN)
|
||||
));
|
||||
|
||||
if($package->header->CompilerExtension->getMinimumVersion() !== null)
|
||||
if($package->header->getCompilerExtension()->getMinimumVersion() !== null)
|
||||
{
|
||||
Console::out(sprintf('Maximum Version: %s',
|
||||
Console::formatColor($package->header->CompilerExtension->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
|
||||
Console::formatColor($package->header->getCompilerExtension()->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
if($package->header->CompilerExtension->getMinimumVersion() !== null)
|
||||
if($package->header->getCompilerExtension()->getMinimumVersion() !== null)
|
||||
{
|
||||
Console::out(sprintf('Minimum Version: %s',
|
||||
Console::formatColor($package->header->CompilerExtension->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
|
||||
Console::formatColor($package->header->getCompilerExtension()->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
|
||||
));
|
||||
}
|
||||
|
||||
|
|
|
@ -43,8 +43,8 @@ namespace ncc\Classes\BashExtension;
|
|||
}
|
||||
|
||||
$execution_unit = new ExecutionUnit();
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -346,7 +346,7 @@
|
|||
foreach ($composer_package->require as $item)
|
||||
{
|
||||
// Check if the dependency is already in the project configuration
|
||||
$package_name = self::toPackageName($item->package_name);
|
||||
$package_name = self::toPackageName($item->getPackageName());
|
||||
|
||||
if($package_name === null)
|
||||
{
|
||||
|
@ -356,7 +356,7 @@
|
|||
$dependency = new ProjectConfiguration\Dependency();
|
||||
$dependency->setName($package_name);
|
||||
$dependency->setSourceType(DependencySourceType::LOCAL);
|
||||
$dependency->setVersion(self::versionMap($item->package_name, $version_map));
|
||||
$dependency->setVersion(self::versionMap($item->getPackageName(), $version_map));
|
||||
$dependency->setSource($package_name . '.ncc');
|
||||
$project_configuration->build->addDependency($dependency);
|
||||
}
|
||||
|
@ -688,34 +688,34 @@
|
|||
$static_files = [];
|
||||
|
||||
// Extract all the source directories
|
||||
if ($composer_package->autoload->psr_4 !== null && count($composer_package->autoload->psr_4) > 0)
|
||||
if ($composer_package->autoload->getPsr4() !== null && count($composer_package->autoload->getPsr4()) > 0)
|
||||
{
|
||||
Console::outVerbose('Extracting PSR-4 source directories');
|
||||
foreach ($composer_package->autoload->psr_4 as $namespace_pointer)
|
||||
foreach ($composer_package->autoload->getPsr4() as $namespace_pointer)
|
||||
{
|
||||
if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true))
|
||||
if ($namespace_pointer->getPath() !== null && !in_array($namespace_pointer->getPath(), $source_directories, true))
|
||||
{
|
||||
$source_directories[] = $package_path . DIRECTORY_SEPARATOR . $namespace_pointer->Path;
|
||||
$source_directories[] = $package_path . DIRECTORY_SEPARATOR . $namespace_pointer->getPath();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($composer_package->autoload->psr_0 !== null && count($composer_package->autoload->psr_0) > 0)
|
||||
if ($composer_package->autoload->getPsr0() !== null && count($composer_package->autoload->getPsr0()) > 0)
|
||||
{
|
||||
Console::outVerbose('Extracting PSR-0 source directories');
|
||||
foreach ($composer_package->autoload->psr_0 as $namespace_pointer)
|
||||
foreach ($composer_package->autoload->getPsr0() as $namespace_pointer)
|
||||
{
|
||||
if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true))
|
||||
if ($namespace_pointer->getPath() !== null && !in_array($namespace_pointer->getPath(), $source_directories, true))
|
||||
{
|
||||
$source_directories[] = $package_path . DIRECTORY_SEPARATOR . $namespace_pointer->Path;
|
||||
$source_directories[] = $package_path . DIRECTORY_SEPARATOR . $namespace_pointer->getPath();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($composer_package->autoload->files !== null && count($composer_package->autoload->files) > 0)
|
||||
if ($composer_package->autoload->getFiles() !== null && count($composer_package->autoload->getFiles()) > 0)
|
||||
{
|
||||
Console::outVerbose('Extracting static files');
|
||||
foreach ($composer_package->autoload->files as $file)
|
||||
foreach ($composer_package->autoload->getFiles() as $file)
|
||||
{
|
||||
$static_files[] = $package_path . DIRECTORY_SEPARATOR . $file;
|
||||
}
|
||||
|
@ -800,21 +800,21 @@
|
|||
Console::out(sprintf('Authors for package %s:', $composer_package->name));
|
||||
foreach($composer_package->authors as $author)
|
||||
{
|
||||
Console::out(sprintf(' - %s', $author->Name));
|
||||
Console::out(sprintf(' - %s', $author->getName()));
|
||||
|
||||
if($author->Email !== null)
|
||||
if($author->getEmail() !== null)
|
||||
{
|
||||
Console::out(sprintf(' %s', $author->Email));
|
||||
Console::out(sprintf(' %s', $author->getEmail()));
|
||||
}
|
||||
|
||||
if($author->Homepage !== null)
|
||||
if($author->getHomepage() !== null)
|
||||
{
|
||||
Console::out(sprintf(' %s', $author->Homepage));
|
||||
Console::out(sprintf(' %s', $author->getHomepage()));
|
||||
}
|
||||
|
||||
if($author->Role !== null)
|
||||
if($author->getRole() !== null)
|
||||
{
|
||||
Console::out(sprintf(' %s', $author->Role));
|
||||
Console::out(sprintf(' %s', $author->getRole()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,8 +38,8 @@ namespace ncc\Classes\LuaExtension;
|
|||
public static function processUnit(string $path, ExecutionPolicy $policy): ExecutionUnit
|
||||
{
|
||||
$execution_unit = new ExecutionUnit();
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@
|
|||
$units = [];
|
||||
foreach($package->execution_units as $executionUnit)
|
||||
{
|
||||
Console::outDebug(sprintf('compiling execution unit constant %s (%s)', $executionUnit->execution_policy->getName(), implode(', ', array_keys($refs))));
|
||||
Console::outDebug(sprintf('compiling execution unit constant %s (%s)', $executionUnit->getExecutionPolicy()->getName(), implode(', ', array_keys($refs))));
|
||||
$units[] = self::compileExecutionUnitConstants($executionUnit, $refs);
|
||||
}
|
||||
$package->execution_units = $units;
|
||||
|
@ -271,14 +271,14 @@
|
|||
}
|
||||
|
||||
$compiled_constants = [];
|
||||
foreach($package->header->RuntimeConstants as $name => $value)
|
||||
foreach($package->header->getRuntimeConstants() as $name => $value)
|
||||
{
|
||||
Console::outDebug(sprintf('compiling runtime constant %s (%s)', $name, implode(', ', array_keys($refs))));
|
||||
$compiled_constants[$name] = self::compileConstants($value, $refs);
|
||||
}
|
||||
|
||||
$options = [];
|
||||
foreach($package->header->Options as $name => $value)
|
||||
foreach($package->header->getOptions() as $name => $value)
|
||||
{
|
||||
if(is_array($value))
|
||||
{
|
||||
|
@ -301,8 +301,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
$package->header->Options = $options;
|
||||
$package->header->RuntimeConstants = $compiled_constants;
|
||||
$package->header->setOptions($options);
|
||||
$package->header->setRuntimeConstants($compiled_constants);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -314,47 +314,47 @@
|
|||
*/
|
||||
public static function compileExecutionUnitConstants(Package\ExecutionUnit $unit, array $refs): Package\ExecutionUnit
|
||||
{
|
||||
$unit->execution_policy->setMessage(self::compileConstants($unit->execution_policy->getMessage(), $refs));
|
||||
$unit->getExecutionPolicy()->setMessage(self::compileConstants($unit->getExecutionPolicy()->getMessage(), $refs));
|
||||
|
||||
if($unit->execution_policy->getExitHandlers() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers() !== null)
|
||||
{
|
||||
if($unit->execution_policy->getExitHandlers()->getSuccess()?->getMessage() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers()->getSuccess()?->getMessage() !== null)
|
||||
{
|
||||
$unit->execution_policy->getExitHandlers()->getSuccess()?->setMessage(
|
||||
self::compileConstants($unit->execution_policy->getExitHandlers()->getSuccess()->getMessage(), $refs)
|
||||
$unit->getExecutionPolicy()->getExitHandlers()->getSuccess()?->setMessage(
|
||||
self::compileConstants($unit->getExecutionPolicy()->getExitHandlers()->getSuccess()->getMessage(), $refs)
|
||||
);
|
||||
}
|
||||
|
||||
if($unit->execution_policy->getExitHandlers()->getError()?->getMessage() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers()->getError()?->getMessage() !== null)
|
||||
{
|
||||
$unit->execution_policy->getExitHandlers()->getError()?->setMessage(
|
||||
self::compileConstants($unit->execution_policy->getExitHandlers()->getError()->getMessage(), $refs)
|
||||
$unit->getExecutionPolicy()->getExitHandlers()->getError()?->setMessage(
|
||||
self::compileConstants($unit->getExecutionPolicy()->getExitHandlers()->getError()->getMessage(), $refs)
|
||||
);
|
||||
}
|
||||
|
||||
if($unit->execution_policy->getExitHandlers()->getWarning()?->getMessage() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers()->getWarning()?->getMessage() !== null)
|
||||
{
|
||||
$unit->execution_policy->getExitHandlers()->getWarning()?->setMessage(
|
||||
self::compileConstants($unit->execution_policy->getExitHandlers()->getWarning()->getMessage(), $refs)
|
||||
$unit->getExecutionPolicy()->getExitHandlers()->getWarning()?->setMessage(
|
||||
self::compileConstants($unit->getExecutionPolicy()->getExitHandlers()->getWarning()->getMessage(), $refs)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($unit->execution_policy->getExecute() !== null)
|
||||
if($unit->getExecutionPolicy()->getExecute() !== null)
|
||||
{
|
||||
$unit->execution_policy->getExecute()->setTarget(self::compileConstants($unit->execution_policy->getExecute()->getTarget(), $refs));
|
||||
$unit->execution_policy->getExecute()->setWorkingDirectory(self::compileConstants($unit->execution_policy->getExecute()->getWorkingDirectory(), $refs));
|
||||
$unit->getExecutionPolicy()->getExecute()->setTarget(self::compileConstants($unit->getExecutionPolicy()->getExecute()->getTarget(), $refs));
|
||||
$unit->getExecutionPolicy()->getExecute()->setWorkingDirectory(self::compileConstants($unit->getExecutionPolicy()->getExecute()->getWorkingDirectory(), $refs));
|
||||
|
||||
if(count($unit->execution_policy->getExecute()->getOptions()) > 0)
|
||||
if(count($unit->getExecutionPolicy()->getExecute()->getOptions()) > 0)
|
||||
{
|
||||
$options = [];
|
||||
foreach($unit->execution_policy->getExecute()->getOptions() as $key=> $value)
|
||||
foreach($unit->getExecutionPolicy()->getExecute()->getOptions() as $key=> $value)
|
||||
{
|
||||
$options[self::compileConstants($key, $refs)] = self::compileConstants($value, $refs);
|
||||
}
|
||||
|
||||
$unit->execution_policy->getExecute()->setOptions($options);
|
||||
$unit->getExecutionPolicy()->getExecute()->setOptions($options);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
|
||||
$ExecutionPointerManager = new ExecutionPointerManager();
|
||||
$ExecutionPointerManager->addUnit($package, $version, $unit, true);
|
||||
$ExecutionPointerManager->executeUnit($package, $version, $unit->execution_policy->getName());
|
||||
$ExecutionPointerManager->executeUnit($package, $version, $unit->getExecutionPolicy()->getName());
|
||||
$ExecutionPointerManager->cleanTemporaryUnits();
|
||||
}
|
||||
}
|
|
@ -49,8 +49,8 @@
|
|||
throw new PathNotFoundException($path);
|
||||
}
|
||||
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
/**
|
||||
* @var ProjectConfiguration
|
||||
*/
|
||||
private $project;
|
||||
private $project_configuration;
|
||||
|
||||
/**
|
||||
* @var Package|null
|
||||
|
@ -76,7 +76,7 @@
|
|||
*/
|
||||
public function __construct(ProjectConfiguration $project, string $path)
|
||||
{
|
||||
$this->project = $project;
|
||||
$this->project_configuration = $project;
|
||||
$this->path = $path;
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,7 @@
|
|||
try
|
||||
{
|
||||
/** @noinspection PhpRedundantOptionalArgumentInspection */
|
||||
$this->project->validate(True);
|
||||
$this->project_configuration->validate(True);
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
|
@ -103,36 +103,35 @@
|
|||
}
|
||||
|
||||
// Select the build configuration
|
||||
$selected_build_configuration = $this->project->build->getBuildConfiguration($build_configuration);
|
||||
$selected_build_configuration = $this->project_configuration->build->getBuildConfiguration($build_configuration);
|
||||
|
||||
// Create the package object
|
||||
$this->package = new Package();
|
||||
$this->package->assembly = $this->project->assembly;
|
||||
$this->package->dependencies = $this->project->build->getDependencies();
|
||||
$this->package->main_execution_policy = $this->project->build->getMain();
|
||||
$this->package->assembly = $this->project_configuration->assembly;
|
||||
$this->package->dependencies = $this->project_configuration->build->getDependencies();
|
||||
$this->package->main_execution_policy = $this->project_configuration->build->getMain();
|
||||
|
||||
// Add the option to create a symbolic link to the package
|
||||
if(isset($this->project->project->getOptions()['create_symlink']) && $this->project->project->getOptions()['create_symlink'] === True)
|
||||
if(isset($this->project_configuration->project->getOptions()['create_symlink']) && $this->project_configuration->project->getOptions()['create_symlink'] === True)
|
||||
{
|
||||
$this->package->header->Options['create_symlink'] = true;
|
||||
$this->package->header->setOption('create_symlink', true);
|
||||
}
|
||||
|
||||
// Add both the defined constants from the build configuration and the global constants.
|
||||
// Global constants are overridden
|
||||
$this->package->header->RuntimeConstants = [];
|
||||
$this->package->header->RuntimeConstants = array_merge(
|
||||
$this->package->header->setRuntimeConstants(array_merge(
|
||||
$selected_build_configuration->getDefineConstants(),
|
||||
($this->project->build->getDefineConstants()),
|
||||
($this->package->header->RuntimeConstants ?? [])
|
||||
);
|
||||
($this->project_configuration->build->getDefineConstants()),
|
||||
($this->package->header->getRuntimeConstants() ?? [])
|
||||
));
|
||||
|
||||
$this->package->header->CompilerExtension = $this->project->project->getCompiler();
|
||||
$this->package->header->CompilerVersion = NCC_VERSION_NUMBER;
|
||||
$this->package->header->Options = $this->project->project->getOptions();
|
||||
$this->package->header->setCompilerExtension($this->project_configuration->project->getCompiler());
|
||||
$this->package->header->setCompilerVersion(NCC_VERSION_NUMBER);
|
||||
$this->package->header->setOptions($this->project_configuration->project->getOptions());
|
||||
|
||||
if($this->project->project->getUpdateSource() !== null)
|
||||
if($this->project_configuration->project->getUpdateSource() !== null)
|
||||
{
|
||||
$this->package->header->UpdateSource = $this->project->project->getUpdateSource();
|
||||
$this->package->header->setUpdateSource($this->project_configuration->project->getUpdateSource());
|
||||
}
|
||||
|
||||
Console::outDebug('scanning project files');
|
||||
|
@ -158,7 +157,7 @@
|
|||
$directory_scanner->setExcludes($selected_build_configuration->getExcludeFiles());
|
||||
}
|
||||
|
||||
$source_path = $this->path . $this->project->build->getSourcePath();
|
||||
$source_path = $this->path . $this->project_configuration->build->getSourcePath();
|
||||
|
||||
// TODO: Re-implement the scanning process outside the compiler, as this is will be redundant
|
||||
// Scan for components first.
|
||||
|
@ -176,10 +175,10 @@
|
|||
}
|
||||
|
||||
$component = new Package\Component();
|
||||
$component->name = Functions::removeBasename($item->getPathname(), $this->path);
|
||||
$component->setName(Functions::removeBasename($item->getPathname(), $this->path));
|
||||
$this->package->components[] = $component;
|
||||
|
||||
Console::outVerbose(sprintf('Found component %s', $component->name));
|
||||
Console::outVerbose(sprintf('Found component %s', $component->getName()));
|
||||
}
|
||||
|
||||
if(count($this->package->components) > 0)
|
||||
|
@ -216,10 +215,10 @@
|
|||
}
|
||||
|
||||
$resource = new Package\Resource();
|
||||
$resource->Name = Functions::removeBasename($item->getPathname(), $this->path);
|
||||
$resource->setName(Functions::removeBasename($item->getPathname(), $this->path));
|
||||
$this->package->resources[] = $resource;
|
||||
|
||||
Console::outVerbose(sprintf('found resource %s', $resource->Name));
|
||||
Console::outVerbose(sprintf('found resource %s', $resource->getName()));
|
||||
}
|
||||
|
||||
if(count($this->package->resources) > 0)
|
||||
|
@ -238,9 +237,9 @@
|
|||
|
||||
$selected_dependencies = [];
|
||||
|
||||
if(count($this->project->build->getDependencies()) > 0)
|
||||
if(count($this->project_configuration->build->getDependencies()) > 0)
|
||||
{
|
||||
$selected_dependencies = array_merge($selected_dependencies, $this->project->build->getDependencies());
|
||||
$selected_dependencies = array_merge($selected_dependencies, $this->project_configuration->build->getDependencies());
|
||||
}
|
||||
|
||||
if(count($selected_build_configuration->getDependencies()) > 0)
|
||||
|
@ -292,7 +291,7 @@
|
|||
$filesystem->mkdir($lib_path);
|
||||
}
|
||||
|
||||
$filesystem->copy($version->Location, $out_path);
|
||||
$filesystem->copy($version->location, $out_path);
|
||||
$dependency->Source = 'libs' . DIRECTORY_SEPARATOR . sprintf('%s=%s.lib', $dependency->getName(), $dependency->getVersion());
|
||||
|
||||
}
|
||||
|
@ -339,7 +338,7 @@
|
|||
$this->compileResources();
|
||||
|
||||
PackageCompiler::compilePackageConstants($this->package, [
|
||||
ConstantReferences::ASSEMBLY => $this->project->assembly,
|
||||
ConstantReferences::ASSEMBLY => $this->project_configuration->assembly,
|
||||
ConstantReferences::BUILD => null,
|
||||
ConstantReferences::DATE_TIME => time()
|
||||
]);
|
||||
|
@ -386,13 +385,12 @@
|
|||
}
|
||||
|
||||
// Get the data and
|
||||
$resource->Data = IO::fread(Functions::correctDirectorySeparator($this->path . $resource->Name));
|
||||
$resource->Data = Base64::encode($resource->Data);
|
||||
$resource->Name = str_replace($this->project->build->getSourcePath(), (string)null, $resource->Name);
|
||||
$resource->setData(Base64::encode(IO::fread(Functions::correctDirectorySeparator($this->path . $resource->getName()))));
|
||||
$resource->setName(str_replace($this->project_configuration->build->getSourcePath(), (string)null, $resource->getName()));
|
||||
$resource->updateChecksum();
|
||||
$resources[] = $resource;
|
||||
|
||||
Console::outDebug(sprintf('processed resource %s', $resource->Name));
|
||||
Console::outDebug(sprintf('processed resource %s', $resource->getName()));
|
||||
}
|
||||
|
||||
// Update the resources
|
||||
|
@ -436,7 +434,7 @@
|
|||
Console::inlineProgressBar($processed_items, $total_items);
|
||||
}
|
||||
|
||||
$content = IO::fread(Functions::correctDirectorySeparator($this->path . $component->name));
|
||||
$content = IO::fread(Functions::correctDirectorySeparator($this->path . $component->getName()));
|
||||
$parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7);
|
||||
|
||||
try
|
||||
|
@ -444,24 +442,24 @@
|
|||
$stmts = $parser->parse($content);
|
||||
$encoded = json_encode($stmts, JSON_THROW_ON_ERROR);
|
||||
unset($stmts);
|
||||
$component->data_types = ComponentDataType::AST;
|
||||
$component->data = json_decode($encoded, true, 512, JSON_THROW_ON_ERROR);
|
||||
$component->setDataType(ComponentDataType::AST);
|
||||
$component->setData(json_decode($encoded, true, 512, JSON_THROW_ON_ERROR));
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
$component->data_types = ComponentDataType::BASE64_ENCODED;
|
||||
$component->data = Base64::encode($content);
|
||||
$component->setDataType(ComponentDataType::BASE64_ENCODED);
|
||||
$component->setData(Base64::encode($content));
|
||||
unset($e);
|
||||
}
|
||||
|
||||
unset($parser);
|
||||
|
||||
$component->name = str_replace($this->project->build->getSourcePath(), (string)null, $component->name);
|
||||
$component->setName(str_replace($this->project_configuration->build->getSourcePath(), (string)null, $component->getName()));
|
||||
$component->updateChecksum();
|
||||
$components[] = $component;
|
||||
++$processed_items;
|
||||
|
||||
Console::outDebug(sprintf('processed component %s (%s)', $component->name, $component->data_types));
|
||||
Console::outDebug(sprintf('processed component %s (%s)', $component->getName(), $component->getDataType()));
|
||||
}
|
||||
|
||||
// Update the components
|
||||
|
@ -476,7 +474,7 @@
|
|||
*/
|
||||
public function compileExecutionPolicies(): void
|
||||
{
|
||||
$this->package->execution_units = PackageCompiler::compileExecutionPolicies($this->path, $this->project);
|
||||
$this->package->execution_units = PackageCompiler::compileExecutionPolicies($this->path, $this->project_configuration);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -79,38 +79,38 @@
|
|||
*/
|
||||
public function processComponent(Package\Component $component): ?string
|
||||
{
|
||||
if($component->data === null)
|
||||
if($component->getData() === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if(!$component->validate_checksum())
|
||||
{
|
||||
throw new IntegrityException(sprintf('Checksum validation failed for component: %s', $component->name));
|
||||
throw new IntegrityException(sprintf('Checksum validation failed for component: %s', $component->getName()));
|
||||
}
|
||||
|
||||
switch($component->data_types)
|
||||
switch($component->getDataType())
|
||||
{
|
||||
case ComponentDataType::AST:
|
||||
try
|
||||
{
|
||||
$stmts = $this->decodeRecursive($component->data);
|
||||
$stmts = $this->decodeRecursive($component->getData());
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
throw new IntegrityException(sprintf('Cannot decode component: %s, %s', $component->name, $e->getMessage()));
|
||||
throw new IntegrityException(sprintf('Cannot decode component: %s, %s', $component->getName(), $e->getMessage()));
|
||||
}
|
||||
|
||||
return (new Standard())->prettyPrintFile($stmts);
|
||||
|
||||
case ComponentDataType::BASE64_ENCODED:
|
||||
return Base64::decode($component->data);
|
||||
return Base64::decode($component->getData());
|
||||
|
||||
case ComponentDataType::PLAIN:
|
||||
return $component->data;
|
||||
return $component->getData();
|
||||
|
||||
default:
|
||||
throw new NotSupportedException(sprintf('Component data type %s is not supported.', $component->data_types));
|
||||
throw new NotSupportedException(sprintf('Component data type %s is not supported.', $component->getDataType()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -143,10 +143,10 @@
|
|||
{
|
||||
if(!$resource->validateChecksum())
|
||||
{
|
||||
throw new IntegrityException('Checksum validation failed for resource ' . $resource->Name . ', the package may be corrupted.');
|
||||
throw new IntegrityException('Checksum validation failed for resource ' . $resource->getName() . ', the package may be corrupted.');
|
||||
}
|
||||
|
||||
return Base64::decode($resource->Data);
|
||||
return Base64::decode($resource->getData());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -46,8 +46,8 @@
|
|||
throw new PathNotFoundException($path);
|
||||
}
|
||||
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@
|
|||
throw new PathNotFoundException($path);
|
||||
}
|
||||
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@
|
|||
throw new PathNotFoundException($path);
|
||||
}
|
||||
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@
|
|||
throw new PathNotFoundException($path);
|
||||
}
|
||||
|
||||
$execution_unit->execution_policy = $policy;
|
||||
$execution_unit->Data = IO::fread($path);
|
||||
$execution_unit->setExecutionPolicy($policy);
|
||||
$execution_unit->setData(IO::fread($path));
|
||||
|
||||
return $execution_unit;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
namespace ncc\Interfaces;
|
||||
|
||||
interface BytecodeObjectInterface
|
||||
interface BytecodeObjectInterface extends SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
|
|
41
src/ncc/Interfaces/SerializableObjectInterface.php
Normal file
41
src/ncc/Interfaces/SerializableObjectInterface.php
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Interfaces;
|
||||
|
||||
interface SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function toArray(): array;
|
||||
|
||||
/**
|
||||
* Constructs the object from a SerializableObjectInterface array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return SerializableObjectInterface
|
||||
*/
|
||||
public static function fromArray(array $data): SerializableObjectInterface;
|
||||
}
|
|
@ -174,15 +174,15 @@
|
|||
{
|
||||
if(Resolver::resolveScope() !== Scopes::SYSTEM)
|
||||
{
|
||||
throw new AuthenticationException('Cannot add new ExecutionUnit \'' . $unit->execution_policy->getName() .'\' for ' . $package . ', insufficient permissions');
|
||||
throw new AuthenticationException('Cannot add new ExecutionUnit \'' . $unit->getExecutionPolicy()->getName() .'\' for ' . $package . ', insufficient permissions');
|
||||
}
|
||||
|
||||
Console::outVerbose(sprintf('Adding new ExecutionUnit \'%s\' for %s', $unit->execution_policy->getName(), $package));
|
||||
Console::outVerbose(sprintf('Adding new ExecutionUnit \'%s\' for %s', $unit->getExecutionPolicy()->getName(), $package));
|
||||
|
||||
$package_id = $this->getPackageId($package, $version);
|
||||
$package_config_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id . '.inx';
|
||||
$package_bin_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id;
|
||||
$entry_point_path = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->getName()) . '.entrypoint';
|
||||
$entry_point_path = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->getExecutionPolicy()->getName()) . '.entrypoint';
|
||||
|
||||
Console::outDebug(sprintf('package_id=%s', $package_id));
|
||||
Console::outDebug(sprintf('package_config_path=%s', $package_config_path));
|
||||
|
@ -201,8 +201,8 @@
|
|||
$execution_pointers = ExecutionPointers::fromArray(ZiProto::decode(IO::fread($package_config_path)));
|
||||
}
|
||||
|
||||
$bin_file = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->getName());
|
||||
$bin_file .= match ($unit->execution_policy->getRunner())
|
||||
$bin_file = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->getExecutionPolicy()->getName());
|
||||
$bin_file .= match ($unit->getExecutionPolicy()->getRunner())
|
||||
{
|
||||
Runners::BASH => BashRunner::getFileExtension(),
|
||||
Runners::PHP => PhpRunner::getFileExtension(),
|
||||
|
@ -211,7 +211,7 @@
|
|||
Runners::PYTHON_2 => Python2Runner::getFileExtension(),
|
||||
Runners::PYTHON_3 => Python3Runner::getFileExtension(),
|
||||
Runners::LUA => LuaRunner::getFileExtension(),
|
||||
default => throw new NotSupportedException('The runner \'' . $unit->execution_policy->getRunner() . '\' is not supported'),
|
||||
default => throw new NotSupportedException('The runner \'' . $unit->getExecutionPolicy()->getRunner() . '\' is not supported'),
|
||||
};
|
||||
|
||||
Console::outDebug(sprintf('bin_file=%s', $bin_file));
|
||||
|
@ -231,13 +231,13 @@
|
|||
$filesystem->remove($bin_file);
|
||||
}
|
||||
|
||||
IO::fwrite($bin_file, $unit->Data);
|
||||
IO::fwrite($bin_file, $unit->getData());
|
||||
$execution_pointers->addUnit($unit, $bin_file);
|
||||
IO::fwrite($package_config_path, ZiProto::encode($execution_pointers->toArray(true)));
|
||||
|
||||
$entry_point = sprintf("#!%s\nncc exec --package=\"%s\" --exec-version=\"%s\" --exec-unit=\"%s\" --exec-args \"$@\"",
|
||||
'/bin/bash',
|
||||
$package, $version, $unit->execution_policy->getName()
|
||||
$package, $version, $unit->getExecutionPolicy()->getName()
|
||||
);
|
||||
|
||||
if(file_exists($entry_point_path))
|
||||
|
@ -250,11 +250,11 @@
|
|||
|
||||
if($temporary)
|
||||
{
|
||||
Console::outVerbose(sprintf('Adding temporary ExecutionUnit \'%s\' for %s', $unit->execution_policy->getName(), $package));
|
||||
Console::outVerbose(sprintf('Adding temporary ExecutionUnit \'%s\' for %s', $unit->getExecutionPolicy()->getName(), $package));
|
||||
$this->temporary_units[] = [
|
||||
'package' => $package,
|
||||
'version' => $version,
|
||||
'unit' => $unit->execution_policy->getName()
|
||||
'unit' => $unit->getExecutionPolicy()->getName()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -314,9 +314,9 @@
|
|||
}
|
||||
|
||||
// Delete the single execution pointer file
|
||||
if($filesystem->exists($unit->file_pointer))
|
||||
if($filesystem->exists($unit->getFilePointer()))
|
||||
{
|
||||
$filesystem->remove($unit->file_pointer);
|
||||
$filesystem->remove($unit->getFilePointer());
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
@ -351,8 +351,8 @@
|
|||
$results = [];
|
||||
foreach($execution_pointers->getPointers() as $pointer)
|
||||
{
|
||||
Console::outDebug(sprintf('unit %s', $pointer->execution_policy->getName()));
|
||||
$results[] = $pointer->execution_policy->getName();
|
||||
Console::outDebug(sprintf('unit %s', $pointer->getExecutionPolicy()->getName()));
|
||||
$results[] = $pointer->getExecutionPolicy()->getName();
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
@ -390,32 +390,32 @@
|
|||
throw new OperationException('The execution unit \'' . $name . '\' was not found for \'' . $package . '=' .$version .'\'');
|
||||
}
|
||||
|
||||
Console::outDebug(sprintf('unit=%s', $unit->execution_policy->getName()));
|
||||
Console::outDebug(sprintf('runner=%s', $unit->execution_policy->getRunner()));
|
||||
Console::outDebug(sprintf('file=%s', $unit->file_pointer));
|
||||
Console::outDebug(sprintf('unit=%s', $unit->getExecutionPolicy()->getName()));
|
||||
Console::outDebug(sprintf('runner=%s', $unit->getExecutionPolicy()->getRunner()));
|
||||
Console::outDebug(sprintf('file=%s', $unit->getFilePointer()));
|
||||
Console::outDebug(sprintf('pass_thru_args=%s', implode(' ', $args)));
|
||||
|
||||
// Handle the arguments
|
||||
if(count($unit->execution_policy->getExecute()->getOptions()) > 0)
|
||||
if(count($unit->getExecutionPolicy()->getExecute()->getOptions()) > 0)
|
||||
{
|
||||
$args = array_merge($args, $unit->execution_policy->getExecute()->getOptions());
|
||||
$args = array_merge($args, $unit->getExecutionPolicy()->getExecute()->getOptions());
|
||||
|
||||
foreach($unit->execution_policy->getExecute()->getOptions() as $option)
|
||||
foreach($unit->getExecutionPolicy()->getExecute()->getOptions() as $option)
|
||||
{
|
||||
$args[] = ConstantCompiler::compileRuntimeConstants($option);
|
||||
}
|
||||
}
|
||||
|
||||
$process = new Process(array_merge(
|
||||
[PathFinder::findRunner(strtolower($unit->execution_policy->getRunner())), $unit->file_pointer], $args)
|
||||
[PathFinder::findRunner(strtolower($unit->getExecutionPolicy()->getRunner())), $unit->getFilePointer()], $args)
|
||||
);
|
||||
|
||||
$process->setWorkingDirectory(ConstantCompiler::compileRuntimeConstants($unit->execution_policy->getExecute()->getWorkingDirectory()));
|
||||
$process->setWorkingDirectory(ConstantCompiler::compileRuntimeConstants($unit->getExecutionPolicy()->getExecute()->getWorkingDirectory()));
|
||||
|
||||
|
||||
if(is_null($unit->execution_policy->getExecute()->getTimeout()))
|
||||
if(is_null($unit->getExecutionPolicy()->getExecute()->getTimeout()))
|
||||
{
|
||||
$process->setTimeout((float)$unit->execution_policy->getExecute()->getTimeout());
|
||||
$process->setTimeout((float)$unit->getExecutionPolicy()->getExecute()->getTimeout());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -425,12 +425,12 @@
|
|||
|
||||
try
|
||||
{
|
||||
if($unit->execution_policy->getExecute()->isSilent())
|
||||
if($unit->getExecutionPolicy()->getExecute()->isSilent())
|
||||
{
|
||||
$process->disableOutput();
|
||||
$process->setTty(false);
|
||||
}
|
||||
elseif($unit->execution_policy->getExecute()->isTty())
|
||||
elseif($unit->getExecutionPolicy()->getExecute()->isTty())
|
||||
{
|
||||
$process->enableOutput();
|
||||
$process->setTty(true);
|
||||
|
@ -457,16 +457,16 @@
|
|||
|
||||
Console::outDebug(sprintf('working_directory=%s', $process->getWorkingDirectory()));
|
||||
Console::outDebug(sprintf('timeout=%s', (int)$process->getTimeout()));
|
||||
Console::outDebug(sprintf('silent=%s', ($unit->execution_policy->getExecute()->isSilent() ? 'true' : 'false')));
|
||||
Console::outDebug(sprintf('tty=%s', ($unit->execution_policy->getExecute()->isTty() ? 'true' : 'false')));
|
||||
Console::outDebug(sprintf('silent=%s', ($unit->getExecutionPolicy()->getExecute()->isSilent() ? 'true' : 'false')));
|
||||
Console::outDebug(sprintf('tty=%s', ($unit->getExecutionPolicy()->getExecute()->isTty() ? 'true' : 'false')));
|
||||
Console::outDebug(sprintf('options=%s', implode(' ', $args)));
|
||||
Console::outDebug(sprintf('cmd=%s', $process->getCommandLine()));
|
||||
|
||||
try
|
||||
{
|
||||
if($unit->execution_policy->getMessage() !== null)
|
||||
if($unit->getExecutionPolicy()->getMessage() !== null)
|
||||
{
|
||||
Console::out($unit->execution_policy->getMessage());
|
||||
Console::out($unit->getExecutionPolicy()->getMessage());
|
||||
}
|
||||
|
||||
$process->run(function ($type, $buffer)
|
||||
|
@ -478,33 +478,33 @@
|
|||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
if($unit->execution_policy->getExitHandlers() !== null && $unit->execution_policy->getExitHandlers()->getError() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers()?->getError() !== null)
|
||||
{
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError());
|
||||
$this->handleExit($package, $version, $unit->getExecutionPolicy()?->getExitHandlers()?->getError());
|
||||
}
|
||||
|
||||
Console::outException(sprintf('An error occurred while executing the unit \'%s\' for \'%s\' (exit code %s)', $unit->execution_policy->getName(), $package, $process->getExitCode()), $e);
|
||||
Console::outException(sprintf('An error occurred while executing the unit \'%s\' for \'%s\' (exit code %s)', $unit->getExecutionPolicy()->getName(), $package, $process->getExitCode()), $e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console::outDebug(sprintf('exit_code=%s', $process->getExitCode()));
|
||||
}
|
||||
|
||||
if($unit->execution_policy->getExitHandlers() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers() !== null)
|
||||
{
|
||||
if($unit->execution_policy->getExitHandlers()->getSuccess() !== null && $process->isSuccessful())
|
||||
if($unit->getExecutionPolicy()->getExitHandlers()->getSuccess() !== null && $process->isSuccessful())
|
||||
{
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getSuccess());
|
||||
$this->handleExit($package, $version, $unit->getExecutionPolicy()->getExitHandlers()->getSuccess());
|
||||
}
|
||||
elseif($unit->execution_policy->getExitHandlers()->getError() !== null && $process->isSuccessful())
|
||||
elseif($unit->getExecutionPolicy()->getExitHandlers()->getError() !== null && $process->isSuccessful())
|
||||
{
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError());
|
||||
$this->handleExit($package, $version, $unit->getExecutionPolicy()->getExitHandlers()->getError());
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getSuccess(), $process);
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getWarning(), $process);
|
||||
$this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError(), $process);
|
||||
$this->handleExit($package, $version, $unit->getExecutionPolicy()->getExitHandlers()->getSuccess(), $process);
|
||||
$this->handleExit($package, $version, $unit->getExecutionPolicy()->getExitHandlers()->getWarning(), $process);
|
||||
$this->handleExit($package, $version, $unit->executigetExecutionPolicy()on_policy->getExitHandlers()->getError(), $process);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -535,21 +535,21 @@
|
|||
|
||||
// Get the required units
|
||||
$required_units = [];
|
||||
if($unit->execution_policy->getExitHandlers() !== null)
|
||||
if($unit->getExecutionPolicy()->getExitHandlers() !== null)
|
||||
{
|
||||
$required_unit = $unit->execution_policy?->getExitHandlers()?->getSuccess()?->getRun();
|
||||
$required_unit = $unit->getExecutionPolicy()?->getExitHandlers()?->getSuccess()?->getRun();
|
||||
if($required_unit !== null)
|
||||
{
|
||||
$required_units[] = $required_unit;
|
||||
}
|
||||
|
||||
$required_unit = $unit->execution_policy?->getExitHandlers()?->getWarning()?->getRun();
|
||||
$required_unit = $unit->getExecutionPolicy()?->getExitHandlers()?->getWarning()?->getRun();
|
||||
if($required_unit !== null)
|
||||
{
|
||||
$required_units[] = $required_unit;
|
||||
}
|
||||
|
||||
$required_unit = $unit->execution_policy?->getExitHandlers()?->getError()?->getRun();
|
||||
$required_unit = $unit->getExecutionPolicy()?->getExitHandlers()?->getError()?->getRun();
|
||||
if($required_unit !== null)
|
||||
{
|
||||
$required_units = $required_unit;
|
||||
|
|
|
@ -124,7 +124,7 @@
|
|||
return $package->assembly->getPackage();
|
||||
}
|
||||
|
||||
$extension = $package->header->CompilerExtension->getExtension();
|
||||
$extension = $package->header->getCompilerExtension()->getExtension();
|
||||
$installation_paths = new InstallationPaths($this->packages_path . DIRECTORY_SEPARATOR . $package->assembly->getPackage() . '=' . $package->assembly->getVersion());
|
||||
|
||||
$installer = match ($extension)
|
||||
|
@ -191,7 +191,7 @@
|
|||
Console::outDebug(sprintf('assembly.%s: %s', $prop, ($value ?? 'n/a')));
|
||||
}
|
||||
|
||||
foreach($package->header->CompilerExtension->toArray() as $prop => $value)
|
||||
foreach($package->header->getCompilerExtension()->toArray() as $prop => $value)
|
||||
{
|
||||
Console::outDebug(sprintf('header.compiler.%s: %s', $prop, ($value ?? 'n/a')));
|
||||
}
|
||||
|
@ -203,14 +203,14 @@
|
|||
$steps = (4 + count($package->components) + count ($package->resources) + count ($package->execution_units));
|
||||
|
||||
// Include the Execution units
|
||||
if($package->installer?->PreInstall !== null)
|
||||
if($package->installer?->getPreInstall() !== null)
|
||||
{
|
||||
$steps += count($package->installer->PreInstall);
|
||||
$steps += count($package->installer->getPreInstall());
|
||||
}
|
||||
|
||||
if($package->installer?->PostInstall!== null)
|
||||
if($package->installer?->getPostInstall()!== null)
|
||||
{
|
||||
$steps += count($package->installer->PostInstall);
|
||||
$steps += count($package->installer->getPostInstall());
|
||||
}
|
||||
|
||||
$current_steps = 0;
|
||||
|
@ -258,9 +258,9 @@
|
|||
throw new OperationException('Pre installation stage failed, ' . $e->getMessage(), $e);
|
||||
}
|
||||
|
||||
if($package->installer?->PreInstall !== null && count($package->installer->PreInstall) > 0)
|
||||
if($package->installer?->getPreInstall() !== null && count($package->installer->getPreInstall()) > 0)
|
||||
{
|
||||
foreach($package->installer->PreInstall as $unit_name)
|
||||
foreach($package->installer->getPreInstall() as $unit_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -279,14 +279,14 @@
|
|||
// Process & Install the components
|
||||
foreach($package->components as $component)
|
||||
{
|
||||
Console::outDebug(sprintf('processing component %s (%s)', $component->name, $component->data_types));
|
||||
Console::outDebug(sprintf('processing component %s (%s)', $component->getName(), $component->getDataType()));
|
||||
|
||||
try
|
||||
{
|
||||
$data = $installer->processComponent($component);
|
||||
if($data !== null)
|
||||
{
|
||||
$component_path = $installation_paths->getSourcePath() . DIRECTORY_SEPARATOR . $component->name;
|
||||
$component_path = $installation_paths->getSourcePath() . DIRECTORY_SEPARATOR . $component->getName();
|
||||
$component_dir = dirname($component_path);
|
||||
|
||||
if(!$filesystem->exists($component_dir))
|
||||
|
@ -309,14 +309,14 @@
|
|||
// Process & Install the resources
|
||||
foreach($package->resources as $resource)
|
||||
{
|
||||
Console::outDebug(sprintf('processing resource %s', $resource->Name));
|
||||
Console::outDebug(sprintf('processing resource %s', $resource->getName()));
|
||||
|
||||
try
|
||||
{
|
||||
$data = $installer->processResource($resource);
|
||||
if($data !== null)
|
||||
{
|
||||
$resource_path = $installation_paths->getSourcePath() . DIRECTORY_SEPARATOR . $resource->Name;
|
||||
$resource_path = $installation_paths->getSourcePath() . DIRECTORY_SEPARATOR . $resource->getName();
|
||||
$resource_dir = dirname($resource_path);
|
||||
|
||||
if(!$filesystem->exists($resource_dir))
|
||||
|
@ -347,7 +347,7 @@
|
|||
/** @var Package\ExecutionUnit $executionUnit */
|
||||
foreach($package->execution_units as $executionUnit)
|
||||
{
|
||||
Console::outDebug(sprintf('processing execution unit %s', $executionUnit->execution_policy->getName()));
|
||||
Console::outDebug(sprintf('processing execution unit %s', $executionUnit->getExecutionPolicy()->getName()));
|
||||
$execution_pointer_manager->addUnit($package->assembly->getPackage(), $package->assembly->getVersion(), $executionUnit);
|
||||
++$current_steps;
|
||||
Console::inlineProgressBar($current_steps, $steps);
|
||||
|
@ -361,7 +361,7 @@
|
|||
}
|
||||
|
||||
// After execution units are installed, create a symlink if needed
|
||||
if(isset($package->header->Options['create_symlink']) && $package->header->Options['create_symlink'])
|
||||
if(!is_null($package->header->getOption('create_symlink')) && $package->header->getOption('create_symlink'))
|
||||
{
|
||||
if($package->main_execution_policy === null)
|
||||
{
|
||||
|
@ -389,11 +389,11 @@
|
|||
throw new OperationException('Post installation stage failed, ' . $e->getMessage(), $e);
|
||||
}
|
||||
|
||||
if($package->installer?->PostInstall !== null && count($package->installer->PostInstall) > 0)
|
||||
if($package->installer?->getPostInstall() !== null && count($package->installer->getPostInstall()) > 0)
|
||||
{
|
||||
Console::outDebug('executing post-installation units');
|
||||
|
||||
foreach($package->installer->PostInstall as $unit_name)
|
||||
foreach($package->installer->getPostInstall() as $unit_name)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -415,18 +415,18 @@
|
|||
Console::outDebug('no post-installation units to execute');
|
||||
}
|
||||
|
||||
if($package->header->UpdateSource !== null && $package->header->UpdateSource->getRepository() !== null)
|
||||
if($package->header->getUpdateSource()?->getRepository() !== null)
|
||||
{
|
||||
$sources_manager = new RemoteSourcesManager();
|
||||
if($sources_manager->getRemoteSource($package->header->UpdateSource->getRepository()->getName()) === null)
|
||||
if($sources_manager->getRemoteSource($package->header->getUpdateSource()->getRepository()->getName()) === null)
|
||||
{
|
||||
Console::outVerbose('Adding remote source ' . $package->header->UpdateSource->getRepository()->getName());
|
||||
Console::outVerbose('Adding remote source ' . $package->header->getUpdateSource()->getRepository()->getName());
|
||||
|
||||
$defined_remote_source = new DefinedRemoteSource();
|
||||
$defined_remote_source->name = $package->header->UpdateSource->getRepository()->getName();
|
||||
$defined_remote_source->host = $package->header->UpdateSource->getRepository()->getHost();
|
||||
$defined_remote_source->type = $package->header->UpdateSource->getRepository()->getType();
|
||||
$defined_remote_source->ssl = $package->header->UpdateSource->getRepository()->isSsl();
|
||||
$defined_remote_source->name = $package->header->getUpdateSource()?->getRepository()->getName();
|
||||
$defined_remote_source->host = $package->header->getUpdateSource()?->getRepository()->getHost();
|
||||
$defined_remote_source->type = $package->header->getUpdateSource()?->getRepository()->getType();
|
||||
$defined_remote_source->ssl = $package->header->getUpdateSource()?->getRepository()->isSsl();
|
||||
|
||||
$sources_manager->addRemoteSource($defined_remote_source);
|
||||
}
|
||||
|
@ -790,11 +790,11 @@
|
|||
throw new OperationException('Version ' . $exploded[1] . ' not found for package ' . $exploded[0]);
|
||||
}
|
||||
|
||||
foreach ($version->Dependencies as $dependency)
|
||||
foreach ($version->getDependencies() as $dependency)
|
||||
{
|
||||
if(!in_array($dependency->PackageName . '=' . $dependency->Version, $tree, true))
|
||||
if(!in_array($dependency->getPackageName() . '=' . $dependency->getVersion(), $tree, true))
|
||||
{
|
||||
$packages[] = $dependency->PackageName . '=' . $dependency->Version;
|
||||
$packages[] = $dependency->getPackageName() . '=' . $dependency->getVersion();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -840,12 +840,12 @@
|
|||
else
|
||||
{
|
||||
$tree[$package_iter] = null;
|
||||
if($version_entry->Dependencies !== null && count($version_entry->Dependencies) > 0)
|
||||
if(count($version_entry->getDependencies()) > 0)
|
||||
{
|
||||
$tree[$package_iter] = [];
|
||||
foreach($version_entry->Dependencies as $dependency)
|
||||
foreach($version_entry->getDependencies() as $dependency)
|
||||
{
|
||||
$dependency_name = sprintf('%s=%s', $dependency->PackageName, $dependency->Version);
|
||||
$dependency_name = sprintf('%s=%s', $dependency->getPackageName(), $dependency->getVersion());
|
||||
$tree[$package_iter] = $this->getPackageTree($tree[$package_iter], $dependency_name);
|
||||
}
|
||||
}
|
||||
|
@ -898,13 +898,13 @@
|
|||
$scanner = new DirectoryScanner();
|
||||
$filesystem = new Filesystem();
|
||||
|
||||
if($filesystem->exists($version_entry->Location))
|
||||
if($filesystem->exists($version_entry->location))
|
||||
{
|
||||
Console::outVerbose(sprintf('Removing package files from %s', $version_entry->Location));
|
||||
Console::outVerbose(sprintf('Removing package files from %s', $version_entry->location));
|
||||
|
||||
/** @var SplFileInfo $item */
|
||||
/** @noinspection PhpRedundantOptionalArgumentInspection */
|
||||
foreach($scanner($version_entry->Location, true) as $item)
|
||||
foreach($scanner($version_entry->location, true) as $item)
|
||||
{
|
||||
if(is_file($item->getPath()))
|
||||
{
|
||||
|
@ -916,21 +916,21 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
Console::outWarning(sprintf('warning: package location %s does not exist', $version_entry->Location));
|
||||
Console::outWarning(sprintf('warning: package location %s does not exist', $version_entry->location));
|
||||
}
|
||||
|
||||
$filesystem->remove($version_entry->Location);
|
||||
$filesystem->remove($version_entry->location);
|
||||
|
||||
if($version_entry->ExecutionUnits !== null && count($version_entry->ExecutionUnits) > 0)
|
||||
if(count($version_entry->getExecutionUnits()) > 0)
|
||||
{
|
||||
Console::outVerbose('Uninstalling execution units');
|
||||
|
||||
$execution_pointer_manager = new ExecutionPointerManager();
|
||||
foreach($version_entry->ExecutionUnits as $executionUnit)
|
||||
foreach($version_entry->getExecutionUnits() as $executionUnit)
|
||||
{
|
||||
if(!$execution_pointer_manager->removeUnit($package, $version, $executionUnit->execution_policy->getName()))
|
||||
if(!$execution_pointer_manager->removeUnit($package, $version, $executionUnit->getExecutionPolicy()->getName()))
|
||||
{
|
||||
Console::outDebug(sprintf('warning: removing execution unit %s failed', $executionUnit->execution_policy->getName()));
|
||||
Console::outDebug(sprintf('warning: removing execution unit %s failed', $executionUnit->getExecutionPolicy()->getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -973,11 +973,11 @@
|
|||
|
||||
try
|
||||
{
|
||||
$this->uninstallPackageVersion($package, $version_entry->Version);
|
||||
$this->uninstallPackageVersion($package, $version_entry->getVersion());
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
Console::outDebug(sprintf('warning: unable to uninstall package %s=%s, %s (%s)', $package, $version_entry->Version, $e->getMessage(), $e->getCode()));
|
||||
Console::outDebug(sprintf('warning: unable to uninstall package %s=%s, %s (%s)', $package, $version_entry->getVersion(), $e->getMessage(), $e->getCode()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -999,14 +999,10 @@
|
|||
}
|
||||
|
||||
$data_files = [
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'assembly' =>
|
||||
ZiProto::encode($package->assembly->toArray(true)),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'ext' =>
|
||||
ZiProto::encode($package->header->CompilerExtension->toArray()),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'const' =>
|
||||
ZiProto::encode($package->header->RuntimeConstants),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'dependencies' =>
|
||||
ZiProto::encode($dependencies),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'assembly' => ZiProto::encode($package->assembly->toArray(true)),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'ext' => ZiProto::encode($package->header->getCompilerExtension()->toArray()),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'const' => ZiProto::encode($package->header->getRuntimeConstants()),
|
||||
$paths->getDataPath() . DIRECTORY_SEPARATOR . 'dependencies' => ZiProto::encode($dependencies),
|
||||
];
|
||||
|
||||
foreach($data_files as $file => $data)
|
||||
|
|
|
@ -315,7 +315,7 @@
|
|||
$_require = [];
|
||||
foreach($this->require as $require)
|
||||
{
|
||||
$_require[$require->package_name] = $require->version;
|
||||
$_require[$require->getPackageName()] = $require->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -325,7 +325,7 @@
|
|||
$_require_dev = [];
|
||||
foreach($this->require_dev as $require)
|
||||
{
|
||||
$_require_dev[$require->package_name] = $require->version;
|
||||
$_require_dev[$require->getPackageName()] = $require->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -335,7 +335,7 @@
|
|||
$_conflict = [];
|
||||
foreach($this->conflict as $require)
|
||||
{
|
||||
$_conflict[$require->package_name] = $require->version;
|
||||
$_conflict[$require->getPackageName()] = $require->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -345,7 +345,7 @@
|
|||
$_replace = [];
|
||||
foreach($this->replace as $require)
|
||||
{
|
||||
$_replace[$require->package_name] = $require->version;
|
||||
$_replace[$require->getPackageName()] = $require->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -355,7 +355,7 @@
|
|||
$_provide = [];
|
||||
foreach($this->provide as $require)
|
||||
{
|
||||
$_provide[$require->package_name] = $require->version;
|
||||
$_provide[$require->getPackageName()] = $require->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -365,7 +365,7 @@
|
|||
$_suggest = [];
|
||||
foreach($this->suggest as $suggestion)
|
||||
{
|
||||
$_suggest[$suggestion->package_name] = $suggestion->comment;
|
||||
$_suggest[$suggestion->getPackageName()] = $suggestion->getComment();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,95 +1,132 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
class Author
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class Author implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The author's name. Usually their real name
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Name;
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* The author's email address
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Email;
|
||||
private $email;
|
||||
|
||||
/**
|
||||
* URL to the author's website
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Homepage;
|
||||
private $homepage;
|
||||
|
||||
/**
|
||||
* The author's role in the project (eg. developer or translator)
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Role;
|
||||
private $role;
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @return string|null
|
||||
*/
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getEmail(): ?string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getHomepage(): ?string
|
||||
{
|
||||
return $this->homepage;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getRole(): ?string
|
||||
{
|
||||
return $this->role;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'name' => $this->Name,
|
||||
'email' => $this->Email,
|
||||
'homepage' => $this->Homepage,
|
||||
'role' => $this->Role
|
||||
'name' => $this->name,
|
||||
'email' => $this->email,
|
||||
'homepage' => $this->homepage,
|
||||
'role' => $this->role
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return Author
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Author
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
if(isset($data['name']))
|
||||
$object->Name = $data['name'];
|
||||
{
|
||||
$object->name = $data['name'];
|
||||
}
|
||||
|
||||
if(isset($data['email']))
|
||||
$object->Email = $data['email'];
|
||||
{
|
||||
$object->email = $data['email'];
|
||||
}
|
||||
|
||||
if(isset($data['homepage']))
|
||||
$object->Homepage = $data['homepage'];
|
||||
{
|
||||
$object->homepage = $data['homepage'];
|
||||
}
|
||||
|
||||
if(isset($data['role']))
|
||||
$object->Role = $data['role'];
|
||||
{
|
||||
$object->role = $data['role'];
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -1,56 +1,98 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
class Autoloader
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class Autoloader implements SerializableObjectInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NamespacePointer[]|null
|
||||
*/
|
||||
public $psr_4;
|
||||
private $psr_4;
|
||||
|
||||
/**
|
||||
* @var NamespacePointer[]|null
|
||||
*/
|
||||
public $psr_0;
|
||||
private $psr_0;
|
||||
|
||||
/**
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $class_map;
|
||||
private $class_map;
|
||||
|
||||
/**
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $files;
|
||||
private $files;
|
||||
|
||||
/**
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $exclude_from_class_map;
|
||||
private $exclude_from_class_map;
|
||||
|
||||
/**
|
||||
* @return NamespacePointer[]|null
|
||||
*/
|
||||
public function getPsr4(): ?array
|
||||
{
|
||||
return $this->psr_4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NamespacePointer[]|null
|
||||
*/
|
||||
public function getPsr0(): ?array
|
||||
{
|
||||
return $this->psr_0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getClassMap(): ?array
|
||||
{
|
||||
return $this->class_map;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getFiles(): ?array
|
||||
{
|
||||
return $this->files;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getExcludeFromClassMap(): ?array
|
||||
{
|
||||
return $this->exclude_from_class_map;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $psr
|
||||
|
@ -60,33 +102,31 @@
|
|||
*/
|
||||
private static function psrRestructure(array $psr, NamespacePointer $pointer): array
|
||||
{
|
||||
if (isset($psr[(string)$pointer->Namespace]))
|
||||
if (isset($psr[(string)$pointer->getNamespace()]))
|
||||
{
|
||||
if (!is_array($psr[(string)$pointer->Namespace]))
|
||||
if (!is_array($psr[(string)$pointer->getNamespace()]))
|
||||
{
|
||||
$r = [
|
||||
$psr[(string)$pointer->Namespace],
|
||||
$pointer->Path
|
||||
$psr[(string)$pointer->getNamespace()],
|
||||
$pointer->getPath()
|
||||
];
|
||||
|
||||
$psr[(string)$pointer->Namespace] = $r;
|
||||
$psr[(string)$pointer->getNamespace()] = $r;
|
||||
}
|
||||
elseif (!in_array($pointer->Path, $psr[(string)$pointer->Namespace], true))
|
||||
elseif (!in_array($pointer->getPath(), $psr[(string)$pointer->getNamespace()], true))
|
||||
{
|
||||
$psr[(string)$pointer->Namespace][] = $pointer->Path;
|
||||
$psr[(string)$pointer->getNamespace()][] = $pointer->getPath();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$psr[(string)$pointer->Namespace] = $pointer->Path;
|
||||
$psr[(string)$pointer->getNamespace()] = $pointer->getPath();
|
||||
}
|
||||
return $psr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
|
@ -116,10 +156,9 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return static
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Autoloader
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
|
|
|
@ -1,28 +1,33 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
class Funding
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class Funding implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The type of funding, or the platform through which
|
||||
|
@ -31,7 +36,7 @@ namespace ncc\Objects\ComposerJson;
|
|||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Type;
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* URL to a website with details, and a way to fund
|
||||
|
@ -39,36 +44,51 @@ namespace ncc\Objects\ComposerJson;
|
|||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $URL;
|
||||
private $url;
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType(): ?string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getUrl(): ?string
|
||||
{
|
||||
return $this->url;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'type' => $this->Type,
|
||||
'url' => $this->URL
|
||||
'type' => $this->type,
|
||||
'url' => $this->url
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return static
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Funding
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
if(isset($data['type']))
|
||||
$object->Type = $data['type'];
|
||||
{
|
||||
$object->type = $data['type'];
|
||||
}
|
||||
|
||||
if(isset($data['url']))
|
||||
$object->URL = $data['url'];
|
||||
{
|
||||
$object->url = $data['url'];
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -1,42 +1,63 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
class NamespacePointer
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class NamespacePointer implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* Namespace name that maps to the path route
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $Namespace;
|
||||
private $namespace;
|
||||
|
||||
/**
|
||||
* The relative path to the source code to index
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Path;
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNamespace(): ?string
|
||||
{
|
||||
return $this->namespace;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPath(): ?string
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public constructor
|
||||
|
@ -46,38 +67,37 @@ namespace ncc\Objects\ComposerJson;
|
|||
*/
|
||||
public function __construct(?string $name=null, ?string $path=null)
|
||||
{
|
||||
$this->Namespace = $name;
|
||||
$this->Path = $path;
|
||||
$this->namespace = $name;
|
||||
$this->path = $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'namespace' => $this->Namespace,
|
||||
'path' => $this->Path
|
||||
'namespace' => $this->namespace,
|
||||
'path' => $this->path
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs the object from an array representation
|
||||
*
|
||||
* @param array $array
|
||||
* @return static
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $array): self
|
||||
public static function fromArray(array $array): NamespacePointer
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
if(isset($array['namespace']))
|
||||
$object->Namespace = $array['namespace'];
|
||||
{
|
||||
$object->namespace = $array['namespace'];
|
||||
}
|
||||
|
||||
if(isset($array['path']))
|
||||
$object->Path = $array['path'];
|
||||
{
|
||||
$object->path = $array['path'];
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -25,21 +25,23 @@
|
|||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
class PackageLink
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class PackageLink implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The name of the package that is required
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $package_name;
|
||||
private $package_name;
|
||||
|
||||
/**
|
||||
* The version of the package that is required
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $version;
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @param string|null $package_name
|
||||
|
@ -52,9 +54,23 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of object
|
||||
*
|
||||
* @return array
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPackageName(): ?string
|
||||
{
|
||||
return $this->package_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getVersion(): ?string
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
|
@ -65,10 +81,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructs an object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return PackageLink
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): PackageLink
|
||||
{
|
||||
|
|
|
@ -1,42 +1,47 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
class Suggestion
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class Suggestion implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The name of the package suggestion
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $package_name;
|
||||
private $package_name;
|
||||
|
||||
/**
|
||||
* The comment for the suggestion
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $comment;
|
||||
private $comment;
|
||||
|
||||
/**
|
||||
* @param string|null $packageName
|
||||
|
@ -49,9 +54,23 @@ namespace ncc\Objects\ComposerJson;
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPackageName(): ?string
|
||||
{
|
||||
return $this->package_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getComment(): ?string
|
||||
{
|
||||
return $this->comment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
|
@ -62,20 +81,21 @@ namespace ncc\Objects\ComposerJson;
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return Suggestion
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Suggestion
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
if(isset($data['package_name']))
|
||||
{
|
||||
$object->package_name = $data['package_name'];
|
||||
}
|
||||
|
||||
if(isset($data['comment']))
|
||||
{
|
||||
$object->comment = $data['comment'];
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -25,75 +25,147 @@
|
|||
|
||||
namespace ncc\Objects\ComposerJson;
|
||||
|
||||
class Support
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class Support implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* Email address for support
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $email;
|
||||
private $email;
|
||||
|
||||
/**
|
||||
* URL to the issue tracker
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $issues;
|
||||
private $issues;
|
||||
|
||||
/**
|
||||
* URL to the forum
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $forum;
|
||||
private $forum;
|
||||
|
||||
/**
|
||||
* URL to the Wiki
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $wiki;
|
||||
private $wiki;
|
||||
|
||||
/**
|
||||
* The IRC channel for support, as irc://server/channel
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $irc;
|
||||
private $irc;
|
||||
|
||||
/**
|
||||
* URL to browse or download the sources
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $source;
|
||||
private $source;
|
||||
|
||||
/**
|
||||
* URL to the documentation
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $docs;
|
||||
private $docs;
|
||||
|
||||
/**
|
||||
* URL to the RSS feed
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $rss;
|
||||
private $rss;
|
||||
|
||||
/**
|
||||
* URL to the chat channel
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $chat;
|
||||
private $chat;
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @return string|null
|
||||
*/
|
||||
public function getEmail(): ?string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIssues(): ?string
|
||||
{
|
||||
return $this->issues;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getForum(): ?string
|
||||
{
|
||||
return $this->forum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getWiki(): ?string
|
||||
{
|
||||
return $this->wiki;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getIrc(): ?string
|
||||
{
|
||||
return $this->irc;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getSource(): ?string
|
||||
{
|
||||
return $this->source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDocs(): ?string
|
||||
{
|
||||
return $this->docs;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getRss(): ?string
|
||||
{
|
||||
return $this->rss;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getChat(): ?string
|
||||
{
|
||||
return $this->chat;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
|
@ -111,12 +183,9 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* Constructs object from array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return Support
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Support
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
|
|
|
@ -82,9 +82,9 @@
|
|||
|
||||
if($overwrite)
|
||||
{
|
||||
$this->deleteUnit($unit->execution_policy->getName());
|
||||
$this->deleteUnit($unit->getExecutionPolicy()->getName());
|
||||
}
|
||||
elseif($this->getUnit($unit->execution_policy->getName()) !== null)
|
||||
elseif($this->getUnit($unit->getExecutionPolicy()->getName()) !== null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -111,7 +111,7 @@
|
|||
$new_pointers = [];
|
||||
foreach($this->pointers as $pointer)
|
||||
{
|
||||
if($pointer->execution_policy->getName() !== $name)
|
||||
if($pointer->getExecutionPolicy()->getName() !== $name)
|
||||
{
|
||||
$new_pointers[] = $pointer;
|
||||
}
|
||||
|
@ -132,7 +132,7 @@
|
|||
/** @var ExecutionPointer $pointer */
|
||||
foreach($this->pointers as $pointer)
|
||||
{
|
||||
if($pointer->execution_policy->getName() === $name)
|
||||
if($pointer->getExecutionPolicy()->getName() === $name)
|
||||
{
|
||||
return $pointer;
|
||||
}
|
||||
|
|
|
@ -1,53 +1,78 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\ExecutionPointers;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\Package\ExecutionUnit;
|
||||
use ncc\Objects\ProjectConfiguration\ExecutionPolicy;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class ExecutionPointer
|
||||
class ExecutionPointer implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
public $id;
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* The execution policy for this execution unit
|
||||
*
|
||||
* @var ExecutionPolicy
|
||||
*/
|
||||
public $execution_policy;
|
||||
private $execution_policy;
|
||||
|
||||
/**
|
||||
* The file pointer for where the target script should be executed
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $file_pointer;
|
||||
private $file_pointer;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getId(): string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ExecutionPolicy
|
||||
*/
|
||||
public function getExecutionPolicy(): ExecutionPolicy
|
||||
{
|
||||
return $this->execution_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getFilePointer(): ?string
|
||||
{
|
||||
return $this->file_pointer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public Constructor with optional ExecutionUnit parameter to construct object from
|
||||
|
@ -63,7 +88,7 @@
|
|||
}
|
||||
|
||||
$this->id = $unit->getId();
|
||||
$this->execution_policy = $unit->execution_policy;
|
||||
$this->execution_policy = $unit->getExecutionPolicy();
|
||||
$this->file_pointer = $bin_file;
|
||||
}
|
||||
|
||||
|
@ -88,7 +113,7 @@
|
|||
* @param array $data
|
||||
* @return ExecutionPointer
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): ExecutionPointer
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
|
|
|
@ -26,24 +26,25 @@
|
|||
|
||||
use ncc\Exceptions\IOException;
|
||||
use ncc\Exceptions\PathNotFoundException;
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
use ncc\Utilities\IO;
|
||||
use RuntimeException;
|
||||
|
||||
class Component
|
||||
class Component implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The Vendor of the component
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $vendor;
|
||||
private $vendor;
|
||||
|
||||
/**
|
||||
* The name of the package
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $package_name;
|
||||
private $package_name;
|
||||
|
||||
/**
|
||||
* Attempts to resolve the component's build version
|
||||
|
@ -65,6 +66,22 @@
|
|||
return IO::fread($component_path . 'VERSION');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVendor(): string
|
||||
{
|
||||
return $this->vendor;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPackageName(): string
|
||||
{
|
||||
return $this->package_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
|
|
|
@ -214,7 +214,7 @@
|
|||
{
|
||||
foreach($this->execution_units as $unit)
|
||||
{
|
||||
if($unit->execution_policy->getName() === $name)
|
||||
if($unit->getExecutionPolicy()->getName() === $name)
|
||||
{
|
||||
return $unit;
|
||||
}
|
||||
|
@ -276,33 +276,33 @@
|
|||
$package_type = substr($encoding_header, 3, 2);
|
||||
|
||||
$magic_bytes = new MagicBytes();
|
||||
$magic_bytes->PackageStructureVersion = $package_structure_version;
|
||||
$magic_bytes->setPackageStructureVersion($package_structure_version);
|
||||
|
||||
// Determine the encoding type
|
||||
switch($encoding_type)
|
||||
{
|
||||
case '300':
|
||||
$magic_bytes->Encoder = EncoderType::ZI_PROTO;
|
||||
$magic_bytes->IsCompressed = false;
|
||||
$magic_bytes->IsEncrypted = false;
|
||||
$magic_bytes->setEncoder(EncoderType::ZI_PROTO);
|
||||
$magic_bytes->setCompressed(false);
|
||||
$magic_bytes->setCompressed(false);
|
||||
break;
|
||||
|
||||
case '301':
|
||||
$magic_bytes->Encoder = EncoderType::ZI_PROTO;
|
||||
$magic_bytes->IsCompressed = true;
|
||||
$magic_bytes->IsEncrypted = false;
|
||||
$magic_bytes->setEncoder(EncoderType::ZI_PROTO);
|
||||
$magic_bytes->setCompressed(true);
|
||||
$magic_bytes->setEncrypted(false);
|
||||
break;
|
||||
|
||||
case '310':
|
||||
$magic_bytes->Encoder = EncoderType::ZI_PROTO;
|
||||
$magic_bytes->IsCompressed = false;
|
||||
$magic_bytes->IsEncrypted = true;
|
||||
$magic_bytes->setEncoder(EncoderType::ZI_PROTO);
|
||||
$magic_bytes->setCompressed(false);
|
||||
$magic_bytes->setEncrypted(true);
|
||||
break;
|
||||
|
||||
case '311':
|
||||
$magic_bytes->Encoder = EncoderType::ZI_PROTO;
|
||||
$magic_bytes->IsCompressed = true;
|
||||
$magic_bytes->IsEncrypted = true;
|
||||
$magic_bytes->setEncoder(EncoderType::ZI_PROTO);
|
||||
$magic_bytes->setCompressed(true);
|
||||
$magic_bytes->setEncrypted(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -313,18 +313,18 @@
|
|||
switch($package_type)
|
||||
{
|
||||
case '40':
|
||||
$magic_bytes->IsInstallable = true;
|
||||
$magic_bytes->IsExecutable = false;
|
||||
$magic_bytes->setInstallable(true);
|
||||
$magic_bytes->setExecutable(false);
|
||||
break;
|
||||
|
||||
case '41':
|
||||
$magic_bytes->IsInstallable = false;
|
||||
$magic_bytes->IsExecutable = true;
|
||||
$magic_bytes->setInstallable(false);
|
||||
$magic_bytes->setExecutable(true);
|
||||
break;
|
||||
|
||||
case '42':
|
||||
$magic_bytes->IsInstallable = true;
|
||||
$magic_bytes->IsExecutable = true;
|
||||
$magic_bytes->setInstallable(true);
|
||||
$magic_bytes->setExecutable(true);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -24,30 +24,31 @@
|
|||
|
||||
namespace ncc\Objects\Package;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class Component
|
||||
class Component implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The name of the component or the file name of the component
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $name;
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* Flags associated with the component created by the compiler extension
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $flags;
|
||||
private $flags;
|
||||
|
||||
/**
|
||||
* The data type of the component
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $data_types;
|
||||
private $data_type;
|
||||
|
||||
/**
|
||||
* A sha1 hash checksum of the component, this will be compared against the data to determine
|
||||
|
@ -62,7 +63,7 @@
|
|||
*
|
||||
* @var mixed
|
||||
*/
|
||||
public $data;
|
||||
private $data;
|
||||
|
||||
/**
|
||||
* Validates the checksum of the component, returns false if the checksum or data is invalid or if the checksum
|
||||
|
@ -82,12 +83,7 @@
|
|||
return true; // Return true if the data is null
|
||||
}
|
||||
|
||||
if(hash('sha1', $this->data, true) !== $this->checksum)
|
||||
{
|
||||
return false; // Return false if the checksum failed
|
||||
}
|
||||
|
||||
return true;
|
||||
return hash_equals($this->checksum, hash('sha1', $this->data, true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,6 +101,106 @@
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName(string $name): void
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getFlags(): array
|
||||
{
|
||||
return $this->flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $flags
|
||||
*/
|
||||
public function setFlags(array $flags): void
|
||||
{
|
||||
$this->flags = $flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $flag
|
||||
* @return void
|
||||
*/
|
||||
public function addFlag(string $flag): void
|
||||
{
|
||||
$this->flags[] = $flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $flag
|
||||
* @return void
|
||||
*/
|
||||
public function removeFlag(string $flag): void
|
||||
{
|
||||
$this->flags = array_filter($this->flags, static function($f) use ($flag) {
|
||||
return $f !== $flag;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDataType(): string
|
||||
{
|
||||
return $this->data_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $data_type
|
||||
*/
|
||||
public function setDataType(string $data_type): void
|
||||
{
|
||||
$this->data_type = $data_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getChecksum(): string
|
||||
{
|
||||
return $this->checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $checksum
|
||||
*/
|
||||
public function setChecksum(string $checksum): void
|
||||
{
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getData(): mixed
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $data
|
||||
*/
|
||||
public function setData(mixed $data): void
|
||||
{
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the component.
|
||||
*
|
||||
|
@ -116,7 +212,7 @@
|
|||
return [
|
||||
($bytecode ? Functions::cbc('name') : 'name') => $this->name,
|
||||
($bytecode ? Functions::cbc('flags') : 'flags') => $this->flags,
|
||||
($bytecode ? Functions::cbc('data_type') : 'data_type') => $this->data_types,
|
||||
($bytecode ? Functions::cbc('data_type') : 'data_type') => $this->data_type,
|
||||
($bytecode ? Functions::cbc('checksum') : 'checksum') => $this->checksum,
|
||||
($bytecode ? Functions::cbc('data') : 'data') => $this->data,
|
||||
];
|
||||
|
@ -128,16 +224,16 @@
|
|||
* @param array $data
|
||||
* @return Component
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Component
|
||||
{
|
||||
$Object = new self();
|
||||
$object = new self();
|
||||
|
||||
$Object->name = Functions::array_bc($data, 'name');
|
||||
$Object->flags = Functions::array_bc($data, 'flags');
|
||||
$Object->data_types = Functions::array_bc($data, 'data_type');
|
||||
$Object->checksum = Functions::array_bc($data, 'checksum');
|
||||
$Object->data = Functions::array_bc($data, 'data');
|
||||
$object->name = Functions::array_bc($data, 'name');
|
||||
$object->flags = Functions::array_bc($data, 'flags');
|
||||
$object->data_type = Functions::array_bc($data, 'data_type');
|
||||
$object->checksum = Functions::array_bc($data, 'checksum');
|
||||
$object->data = Functions::array_bc($data, 'data');
|
||||
|
||||
return $Object;
|
||||
return $object;
|
||||
}
|
||||
}
|
|
@ -1,33 +1,34 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\Package;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\ProjectConfiguration\ExecutionPolicy;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class ExecutionUnit
|
||||
class ExecutionUnit implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* @var string|null
|
||||
|
@ -39,54 +40,21 @@
|
|||
*
|
||||
* @var ExecutionPolicy
|
||||
*/
|
||||
public $execution_policy;
|
||||
private $execution_policy;
|
||||
|
||||
/**
|
||||
* The data of the unit to execute
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Data;
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @param bool $bytecode
|
||||
* @return array
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
return [
|
||||
($bytecode ? Functions::cbc('execution_policy') : 'execution_policy') => $this->execution_policy->toArray($bytecode),
|
||||
($bytecode ? Functions::cbc('data') : 'data') => $this->Data,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return static
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->execution_policy = Functions::array_bc($data, 'execution_policy');
|
||||
$object->Data = Functions::array_bc($data, 'data');
|
||||
|
||||
if($object->execution_policy !== null)
|
||||
$object->execution_policy = ExecutionPolicy::fromArray($object->execution_policy);
|
||||
|
||||
return $object;
|
||||
}
|
||||
private $data;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getId(): string
|
||||
{
|
||||
if($this->id == null)
|
||||
if($this->id === null)
|
||||
{
|
||||
$this->id = hash('sha1', $this->execution_policy->getName());
|
||||
}
|
||||
|
@ -94,4 +62,64 @@
|
|||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ExecutionPolicy
|
||||
*/
|
||||
public function getExecutionPolicy(): ExecutionPolicy
|
||||
{
|
||||
return $this->execution_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ExecutionPolicy $execution_policy
|
||||
*/
|
||||
public function setExecutionPolicy(ExecutionPolicy $execution_policy): void
|
||||
{
|
||||
$this->execution_policy = $execution_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getData(): string
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $data
|
||||
*/
|
||||
public function setData(string $data): void
|
||||
{
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
return [
|
||||
($bytecode ? Functions::cbc('execution_policy') : 'execution_policy') => $this->execution_policy->toArray($bytecode),
|
||||
($bytecode ? Functions::cbc('data') : 'data') => $this->data,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): ExecutionUnit
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->execution_policy = Functions::array_bc($data, 'execution_policy');
|
||||
$object->data = Functions::array_bc($data, 'data');
|
||||
|
||||
if($object->execution_policy !== null)
|
||||
{
|
||||
$object->execution_policy = ExecutionPolicy::fromArray($object->execution_policy);
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
}
|
|
@ -24,94 +24,202 @@
|
|||
|
||||
namespace ncc\Objects\Package;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\ProjectConfiguration\Compiler;
|
||||
use ncc\Objects\ProjectConfiguration\UpdateSource;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class Header
|
||||
class Header implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The compiler extension information that was used to build the package
|
||||
*
|
||||
* @var Compiler
|
||||
*/
|
||||
public $CompilerExtension;
|
||||
private $compiler_extension;
|
||||
|
||||
/**
|
||||
* An array of constants that are set when the package is imported or executed during runtime.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $RuntimeConstants;
|
||||
private $runtime_constants;
|
||||
|
||||
/**
|
||||
* The version of NCC that was used to compile the package, can be used for backwards compatibility
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $CompilerVersion;
|
||||
private $compiler_version;
|
||||
|
||||
/**
|
||||
* An array of options to pass on to the extension
|
||||
*
|
||||
* @var array|null
|
||||
*/
|
||||
public $Options;
|
||||
private $options;
|
||||
|
||||
/**
|
||||
* The optional update source to where the package can be updated from
|
||||
*
|
||||
* @var UpdateSource|null
|
||||
*/
|
||||
public $UpdateSource;
|
||||
private $update_source;
|
||||
|
||||
/**
|
||||
* Public Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->CompilerExtension = new Compiler();
|
||||
$this->RuntimeConstants = [];
|
||||
$this->Options = [];
|
||||
$this->compiler_extension = new Compiler();
|
||||
$this->runtime_constants = [];
|
||||
$this->options = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Compiler
|
||||
*/
|
||||
public function getCompilerExtension(): Compiler
|
||||
{
|
||||
return $this->compiler_extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Compiler $compiler_extension
|
||||
*/
|
||||
public function setCompilerExtension(Compiler $compiler_extension): void
|
||||
{
|
||||
$this->compiler_extension = $compiler_extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @param bool $bytecode
|
||||
* @return array
|
||||
*/
|
||||
public function getRuntimeConstants(): array
|
||||
{
|
||||
return $this->runtime_constants;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $runtime_constants
|
||||
*/
|
||||
public function setRuntimeConstants(array $runtime_constants): void
|
||||
{
|
||||
$this->runtime_constants = $runtime_constants;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCompilerVersion(): string
|
||||
{
|
||||
return $this->compiler_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $compiler_version
|
||||
*/
|
||||
public function setCompilerVersion(string $compiler_version): void
|
||||
{
|
||||
$this->compiler_version = $compiler_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|null
|
||||
*/
|
||||
public function getOptions(): ?array
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array|null $options
|
||||
*/
|
||||
public function setOptions(?array $options): void
|
||||
{
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param $value
|
||||
* @return void
|
||||
*/
|
||||
public function setOption(string $key, $value): void
|
||||
{
|
||||
$this->options[$key] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return void
|
||||
*/
|
||||
public function removeOption(string $key): void
|
||||
{
|
||||
unset($this->options[$key]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return mixed|null
|
||||
*/
|
||||
public function getOption(string $key): mixed
|
||||
{
|
||||
return $this->options[$key] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return UpdateSource|null
|
||||
*/
|
||||
public function getUpdateSource(): ?UpdateSource
|
||||
{
|
||||
return $this->update_source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UpdateSource|null $update_source
|
||||
*/
|
||||
public function setUpdateSource(?UpdateSource $update_source): void
|
||||
{
|
||||
$this->update_source = $update_source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
return [
|
||||
($bytecode ? Functions::cbc('compiler_extension') : 'compiler_extension') => $this->CompilerExtension->toArray(),
|
||||
($bytecode ? Functions::cbc('runtime_constants') : 'runtime_constants') => $this->RuntimeConstants,
|
||||
($bytecode ? Functions::cbc('compiler_version') : 'compiler_version') => $this->CompilerVersion,
|
||||
($bytecode ? Functions::cbc('update_source') : 'update_source') => ($this->UpdateSource?->toArray($bytecode) ?? null),
|
||||
($bytecode ? Functions::cbc('options') : 'options') => $this->Options,
|
||||
($bytecode ? Functions::cbc('compiler_extension') : 'compiler_extension') => $this->compiler_extension->toArray(),
|
||||
($bytecode ? Functions::cbc('runtime_constants') : 'runtime_constants') => $this->runtime_constants,
|
||||
($bytecode ? Functions::cbc('compiler_version') : 'compiler_version') => $this->compiler_version,
|
||||
($bytecode ? Functions::cbc('update_source') : 'update_source') => ($this->update_source?->toArray($bytecode)),
|
||||
($bytecode ? Functions::cbc('options') : 'options') => $this->options,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs the object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return static
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Header
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->CompilerExtension = Functions::array_bc($data, 'compiler_extension');
|
||||
$object->RuntimeConstants = Functions::array_bc($data, 'runtime_constants');
|
||||
$object->CompilerVersion = Functions::array_bc($data, 'compiler_version');
|
||||
$object->UpdateSource = Functions::array_bc($data, 'update_source');
|
||||
$object->Options = Functions::array_bc($data, 'options');
|
||||
$object->compiler_extension = Functions::array_bc($data, 'compiler_extension');
|
||||
$object->runtime_constants = Functions::array_bc($data, 'runtime_constants');
|
||||
$object->compiler_version = Functions::array_bc($data, 'compiler_version');
|
||||
$object->update_source = Functions::array_bc($data, 'update_source');
|
||||
$object->options = Functions::array_bc($data, 'options');
|
||||
|
||||
if($object->CompilerExtension !== null)
|
||||
$object->CompilerExtension = Compiler::fromArray($object->CompilerExtension);
|
||||
if($object->UpdateSource !== null)
|
||||
$object->UpdateSource = UpdateSource::fromArray($object->UpdateSource);
|
||||
if($object->compiler_extension !== null)
|
||||
{
|
||||
$object->compiler_extension = Compiler::fromArray($object->compiler_extension);
|
||||
}
|
||||
|
||||
if($object->update_source !== null)
|
||||
{
|
||||
$object->update_source = UpdateSource::fromArray($object->update_source);
|
||||
}
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -1,120 +1,209 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\Package;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class Installer
|
||||
class Installer implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* An array of execution policies to execute pre install
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PreInstall;
|
||||
private $pre_install;
|
||||
|
||||
/**
|
||||
* An array of execution policies to execute post install
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PostInstall;
|
||||
private $post_install;
|
||||
|
||||
/**
|
||||
* An array of execution policies to execute pre uninstall
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PreUninstall;
|
||||
private $pre_uninstall;
|
||||
|
||||
/**
|
||||
* An array of execution policies to execute post uninstall
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PostUninstall;
|
||||
private $post_uninstall;
|
||||
|
||||
/**
|
||||
* An array of execution policies to execute pre update
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PreUpdate;
|
||||
private $pre_update;
|
||||
|
||||
/**
|
||||
* An array of execution policies to execute post update
|
||||
*
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $PostUpdate;
|
||||
private $post_update;
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
* Returns null if all properties are not set
|
||||
*
|
||||
* @param bool $bytecode
|
||||
* @return array|null
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): ?array
|
||||
public function getPreInstall(): ?array
|
||||
{
|
||||
return $this->pre_install;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $pre_install
|
||||
*/
|
||||
public function setPreInstall(?array $pre_install): void
|
||||
{
|
||||
$this->pre_install = $pre_install;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getPostInstall(): ?array
|
||||
{
|
||||
return $this->post_install;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $post_install
|
||||
*/
|
||||
public function setPostInstall(?array $post_install): void
|
||||
{
|
||||
$this->post_install = $post_install;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getPreUninstall(): ?array
|
||||
{
|
||||
return $this->pre_uninstall;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $pre_uninstall
|
||||
*/
|
||||
public function setPreUninstall(?array $pre_uninstall): void
|
||||
{
|
||||
$this->pre_uninstall = $pre_uninstall;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getPostUninstall(): ?array
|
||||
{
|
||||
return $this->post_uninstall;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $post_uninstall
|
||||
*/
|
||||
public function setPostUninstall(?array $post_uninstall): void
|
||||
{
|
||||
$this->post_uninstall = $post_uninstall;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getPreUpdate(): ?array
|
||||
{
|
||||
return $this->pre_update;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $pre_update
|
||||
*/
|
||||
public function setPreUpdate(?array $pre_update): void
|
||||
{
|
||||
$this->pre_update = $pre_update;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]|null
|
||||
*/
|
||||
public function getPostUpdate(): ?array
|
||||
{
|
||||
return $this->post_update;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string[]|null $post_update
|
||||
*/
|
||||
public function setPostUpdate(?array $post_update): void
|
||||
{
|
||||
$this->post_update = $post_update;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
if(
|
||||
$this->PreInstall == null && $this->PostInstall == null &&
|
||||
$this->PreUninstall == null && $this->PostUninstall == null &&
|
||||
$this->PreUpdate == null && $this->PostUpdate == null
|
||||
$this->pre_install === null && $this->post_install === null &&
|
||||
$this->pre_uninstall === null && $this->post_uninstall === null &&
|
||||
$this->pre_update === null && $this->post_update === null
|
||||
)
|
||||
{
|
||||
return null;
|
||||
return [];
|
||||
}
|
||||
|
||||
return [
|
||||
($bytecode ? Functions::cbc('pre_install') : 'pre_install') => ($this->PreInstall == null ? null : $this->PreInstall),
|
||||
($bytecode ? Functions::cbc('post_install') : 'post_install') => ($this->PostInstall == null ? null : $this->PostInstall),
|
||||
($bytecode ? Functions::cbc('pre_uninstall') : 'pre_uninstall') => ($this->PreUninstall == null ? null : $this->PreUninstall),
|
||||
($bytecode? Functions::cbc('post_uninstall') : 'post_uninstall') => ($this->PostUninstall == null ? null : $this->PostUninstall),
|
||||
($bytecode? Functions::cbc('pre_update') : 'pre_update') => ($this->PreUpdate == null ? null : $this->PreUpdate),
|
||||
($bytecode? Functions::cbc('post_update') : 'post_update') => ($this->PostUpdate == null ? null : $this->PostUpdate)
|
||||
($bytecode ? Functions::cbc('pre_install') : 'pre_install') => $this->pre_install,
|
||||
($bytecode ? Functions::cbc('post_install') : 'post_install') => $this->post_install,
|
||||
($bytecode ? Functions::cbc('pre_uninstall') : 'pre_uninstall') => $this->pre_uninstall,
|
||||
($bytecode? Functions::cbc('post_uninstall') : 'post_uninstall') => $this->post_uninstall,
|
||||
($bytecode? Functions::cbc('pre_update') : 'pre_update') => $this->pre_update,
|
||||
($bytecode? Functions::cbc('post_update') : 'post_update') => $this->post_update
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return Installer
|
||||
* @noinspection DuplicatedCode
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): Installer
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->PreInstall = Functions::array_bc($data, 'pre_install');
|
||||
$object->PostInstall = Functions::array_bc($data, 'post_install');
|
||||
$object->PreUninstall = Functions::array_bc($data, 'pre_uninstall');
|
||||
$object->PostUninstall = Functions::array_bc($data, 'post_uninstall');
|
||||
$object->PreUpdate = Functions::array_bc($data, 'pre_update');
|
||||
$object->PostUpdate = Functions::array_bc($data, 'post_update');
|
||||
$object->pre_install = Functions::array_bc($data, 'pre_install');
|
||||
$object->post_install = Functions::array_bc($data, 'post_install');
|
||||
$object->pre_uninstall = Functions::array_bc($data, 'pre_uninstall');
|
||||
$object->post_uninstall = Functions::array_bc($data, 'post_uninstall');
|
||||
$object->pre_update = Functions::array_bc($data, 'pre_update');
|
||||
$object->post_update = Functions::array_bc($data, 'post_update');
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
|
@ -26,95 +26,189 @@
|
|||
|
||||
use ncc\Enums\EncoderType;
|
||||
use ncc\Enums\Versions;
|
||||
use ncc\Interfaces\SerializableObjectInterface;
|
||||
|
||||
class MagicBytes
|
||||
class MagicBytes implements SerializableObjectInterface
|
||||
{
|
||||
/**
|
||||
* The version of the package structure standard that is used
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $PackageStructureVersion;
|
||||
private $package_structure_version;
|
||||
|
||||
/**
|
||||
* The type of encoder that was used to encode the package structure
|
||||
*
|
||||
* @var string|EncoderType
|
||||
*/
|
||||
public $Encoder;
|
||||
private $encoder;
|
||||
|
||||
/**
|
||||
* Indicates whether the package structure is compressed
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $IsCompressed;
|
||||
private $compressed;
|
||||
|
||||
/**
|
||||
* Indicates whether the package structure is encrypted
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $IsEncrypted;
|
||||
private $encrypted;
|
||||
|
||||
/**
|
||||
* Indicates whether the package is installable
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $IsInstallable;
|
||||
private $installable;
|
||||
|
||||
/**
|
||||
* Indicates whether the package is a executable
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
public $IsExecutable;
|
||||
private $executable;
|
||||
|
||||
/**
|
||||
* Basic Public Constructor with default values
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->PackageStructureVersion = Versions::PACKAGE_STRUCTURE_VERSION;
|
||||
$this->Encoder = EncoderType::ZI_PROTO;
|
||||
$this->IsCompressed = false;
|
||||
$this->IsEncrypted = false;
|
||||
$this->IsInstallable = false;
|
||||
$this->IsExecutable = false;
|
||||
$this->package_structure_version = Versions::PACKAGE_STRUCTURE_VERSION;
|
||||
$this->encoder = EncoderType::ZI_PROTO;
|
||||
$this->compressed = false;
|
||||
$this->encrypted = false;
|
||||
$this->installable = false;
|
||||
$this->executable = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @return array
|
||||
* @return string
|
||||
*/
|
||||
public function getPackageStructureVersion(): string
|
||||
{
|
||||
return $this->package_structure_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $package_structure_version
|
||||
*/
|
||||
public function setPackageStructureVersion(string $package_structure_version): void
|
||||
{
|
||||
$this->package_structure_version = $package_structure_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return EncoderType|string
|
||||
*/
|
||||
public function getEncoder(): EncoderType|string
|
||||
{
|
||||
return $this->encoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param EncoderType|string $encoder
|
||||
*/
|
||||
public function setEncoder(EncoderType|string $encoder): void
|
||||
{
|
||||
$this->encoder = $encoder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isCompressed(): bool
|
||||
{
|
||||
return $this->compressed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $compressed
|
||||
*/
|
||||
public function setCompressed(bool $compressed): void
|
||||
{
|
||||
$this->compressed = $compressed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isEncrypted(): bool
|
||||
{
|
||||
return $this->encrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $encrypted
|
||||
*/
|
||||
public function setEncrypted(bool $encrypted): void
|
||||
{
|
||||
$this->encrypted = $encrypted;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isInstallable(): bool
|
||||
{
|
||||
return $this->installable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $installable
|
||||
*/
|
||||
public function setInstallable(bool $installable): void
|
||||
{
|
||||
$this->installable = $installable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isExecutable(): bool
|
||||
{
|
||||
return $this->executable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $executable
|
||||
*/
|
||||
public function setExecutable(bool $executable): void
|
||||
{
|
||||
$this->executable = $executable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'package_structure_version' => $this->PackageStructureVersion,
|
||||
'encoder' => $this->Encoder,
|
||||
'is_compressed' => $this->IsCompressed,
|
||||
'is_encrypted' => $this->IsEncrypted,
|
||||
'is_installable' => $this->IsInstallable,
|
||||
'is_executable' => $this->IsExecutable
|
||||
'package_structure_version' => $this->package_structure_version,
|
||||
'encoder' => $this->encoder,
|
||||
'is_compressed' => $this->compressed,
|
||||
'is_encrypted' => $this->encrypted,
|
||||
'is_installable' => $this->installable,
|
||||
'is_executable' => $this->executable
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return MagicBytes
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
$Object = new self();
|
||||
$object = new self();
|
||||
|
||||
if(isset($data['is_executable']))
|
||||
$Object->IsExecutable = (bool)$data['is_executable'];
|
||||
{
|
||||
$object->executable = (bool)$data['is_executable'];
|
||||
}
|
||||
|
||||
return $Object;
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -125,12 +219,12 @@
|
|||
public function toString(): string
|
||||
{
|
||||
// NCC_PACKAGE1.0
|
||||
$magic_bytes = 'NCC_PACKAGE' . $this->PackageStructureVersion;
|
||||
$magic_bytes = 'NCC_PACKAGE' . $this->package_structure_version;
|
||||
|
||||
// NCC_PACKAGE1.03
|
||||
$magic_bytes .= $this->Encoder;
|
||||
$magic_bytes .= $this->encoder;
|
||||
|
||||
if($this->IsEncrypted)
|
||||
if($this->encrypted)
|
||||
{
|
||||
// NCC_PACKAGE1.031
|
||||
$magic_bytes .= '1';
|
||||
|
@ -141,7 +235,7 @@
|
|||
$magic_bytes .= '0';
|
||||
}
|
||||
|
||||
if($this->IsCompressed)
|
||||
if($this->compressed)
|
||||
{
|
||||
// NCC_PACKAGE1.0301
|
||||
$magic_bytes .= '1';
|
||||
|
@ -152,17 +246,17 @@
|
|||
$magic_bytes .= '0';
|
||||
}
|
||||
|
||||
if($this->IsExecutable && $this->IsInstallable)
|
||||
if($this->executable && $this->installable)
|
||||
{
|
||||
// NCC_PACKAGE1.030142
|
||||
$magic_bytes .= '42';
|
||||
}
|
||||
elseif($this->IsExecutable)
|
||||
elseif($this->executable)
|
||||
{
|
||||
// NCC_PACKAGE1.030141
|
||||
$magic_bytes .= '41';
|
||||
}
|
||||
elseif($this->IsInstallable)
|
||||
elseif($this->installable)
|
||||
{
|
||||
// NCC_PACKAGE1.030140
|
||||
$magic_bytes .= '40';
|
||||
|
|
|
@ -1,39 +1,40 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\Package;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class Resource
|
||||
class Resource implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The file/path name of the resource
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Name;
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* A sha1 hash checksum of the resource, this will be compared against the data to determine
|
||||
|
@ -41,14 +42,14 @@
|
|||
*
|
||||
* @var string
|
||||
*/
|
||||
private $Checksum;
|
||||
private $checksum;
|
||||
|
||||
/**
|
||||
* The raw data of the resource
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Data;
|
||||
private $data;
|
||||
|
||||
/**
|
||||
* Validates the checksum of the resource, returns false if the checksum or data is invalid or if the checksum
|
||||
|
@ -58,16 +59,17 @@
|
|||
*/
|
||||
public function validateChecksum(): bool
|
||||
{
|
||||
if($this->Checksum === null)
|
||||
if($this->checksum === null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($this->Data === null)
|
||||
if($this->data === null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(hash('sha1', $this->Data, true) !== $this->Checksum)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return hash_equals($this->checksum, hash('sha1', $this->data, true));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,42 +79,84 @@
|
|||
*/
|
||||
public function updateChecksum(): void
|
||||
{
|
||||
$this->Checksum = null;
|
||||
$this->checksum = null;
|
||||
|
||||
if(gettype($this->Data) == 'string')
|
||||
if(is_string($this->data))
|
||||
{
|
||||
$this->Checksum = hash('sha1', $this->Data, true);
|
||||
$this->checksum = hash('sha1', $this->data, true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the resource.
|
||||
*
|
||||
* @param bool $bytecode
|
||||
* @return array
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName(string $name): void
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getChecksum(): string
|
||||
{
|
||||
return $this->checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $checksum
|
||||
*/
|
||||
public function setChecksum(string $checksum): void
|
||||
{
|
||||
$this->checksum = $checksum;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getData(): string
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $data
|
||||
*/
|
||||
public function setData(string $data): void
|
||||
{
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
return [
|
||||
($bytecode ? Functions::cbc('name') : 'name') => $this->Name,
|
||||
($bytecode ? Functions::cbc('checksum') : 'checksum') => $this->Checksum,
|
||||
($bytecode ? Functions::cbc('data') : 'data') => $this->Data,
|
||||
($bytecode ? Functions::cbc('name') : 'name') => $this->name,
|
||||
($bytecode ? Functions::cbc('checksum') : 'checksum') => $this->checksum,
|
||||
($bytecode ? Functions::cbc('data') : 'data') => $this->data,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return Resource
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->Name = Functions::array_bc($data, 'name');
|
||||
$object->Checksum = Functions::array_bc($data, 'checksum');
|
||||
$object->Data = Functions::array_bc($data, 'data');
|
||||
$object->name = Functions::array_bc($data, 'name');
|
||||
$object->checksum = Functions::array_bc($data, 'checksum');
|
||||
$object->data = Functions::array_bc($data, 'data');
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -88,18 +88,16 @@
|
|||
{
|
||||
$package_entry = new PackageEntry();
|
||||
$package_entry->addVersion($package, $install_path, true);
|
||||
$package_entry->Name = $package->assembly->getPackage();
|
||||
$package_entry->UpdateSource = $package->header->UpdateSource;
|
||||
$package_entry->getDataPath();
|
||||
$package_entry->setName($package->assembly->getPackage());
|
||||
$package_entry->setUpdateSource($package->header->getUpdateSource());
|
||||
$this->Packages[$package->assembly->getPackage()] = $package_entry;
|
||||
$this->update();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$this->Packages[$package->assembly->getPackage()]->UpdateSource = $package->header->UpdateSource;
|
||||
$this->Packages[$package->assembly->getPackage()]->setUpdateSource($package->header->getUpdateSource());
|
||||
$this->Packages[$package->assembly->getPackage()]->addVersion($package, $install_path, true);
|
||||
$this->Packages[$package->assembly->getPackage()]->getDataPath();
|
||||
$this->update();
|
||||
}
|
||||
|
||||
|
@ -254,7 +252,7 @@
|
|||
foreach($packages as $_datum)
|
||||
{
|
||||
$entry = PackageEntry::fromArray($_datum);
|
||||
$object->Packages[$entry->Name] = $entry;
|
||||
$object->Packages[$entry->getName()] = $entry;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,83 +1,113 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\PackageLock;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\ProjectConfiguration\Dependency;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class DependencyEntry
|
||||
class DependencyEntry implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The name of the package dependency
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $PackageName;
|
||||
private $package_name;
|
||||
|
||||
/**
|
||||
* The version of the package dependency
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Version;
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @param Dependency|null $dependency
|
||||
*/
|
||||
public function __construct(?Dependency $dependency=null)
|
||||
{
|
||||
if($dependency !== null)
|
||||
{
|
||||
$this->PackageName = $dependency->getName();
|
||||
$this->Version = $dependency->getVersion();
|
||||
$this->package_name = $dependency->getName();
|
||||
$this->version = $dependency->getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
* @param bool $bytecode
|
||||
* @return array
|
||||
* @return string
|
||||
*/
|
||||
public function getPackageName(): string
|
||||
{
|
||||
return $this->package_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $package_name
|
||||
*/
|
||||
public function setPackageName(string $package_name): void
|
||||
{
|
||||
$this->package_name = $package_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion(): string
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
*/
|
||||
public function setVersion(string $version): void
|
||||
{
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
return [
|
||||
($bytecode ? Functions::cbc('package_name') : 'package_name') => $this->PackageName,
|
||||
($bytecode ? Functions::cbc('version') : 'version') => $this->Version,
|
||||
($bytecode ? Functions::cbc('package_name') : 'package_name') => $this->package_name,
|
||||
($bytecode ? Functions::cbc('version') : 'version') => $this->version,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs object from an array representation
|
||||
*
|
||||
* @param array $data
|
||||
* @return DependencyEntry
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): DependencyEntry
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->PackageName = Functions::array_bc($data, 'package_name');
|
||||
$object->Version = Functions::array_bc($data, 'version');
|
||||
$object->package_name = Functions::array_bc($data, 'package_name');
|
||||
$object->version = Functions::array_bc($data, 'version');
|
||||
|
||||
return $object;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
use ncc\Enums\Versions;
|
||||
use ncc\Exceptions\ConfigurationException;
|
||||
use ncc\Exceptions\IOException;
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\Package;
|
||||
use ncc\Objects\ProjectConfiguration\UpdateSource;
|
||||
use ncc\ThirdParty\jelix\Version\VersionComparator;
|
||||
|
@ -36,42 +37,42 @@
|
|||
use ncc\Utilities\PathFinder;
|
||||
use ncc\Utilities\Resolver;
|
||||
|
||||
class PackageEntry
|
||||
class PackageEntry implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The name of the package that's installed
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Name;
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* The latest version of the package entry, this is updated automatically
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
private $LatestVersion;
|
||||
private $latest_version;
|
||||
|
||||
/**
|
||||
* An array of installed versions for this package
|
||||
*
|
||||
* @var VersionEntry[]
|
||||
*/
|
||||
public $Versions;
|
||||
private $versions;
|
||||
|
||||
/**
|
||||
* The update source of the package entry
|
||||
*
|
||||
* @var UpdateSource|null
|
||||
*/
|
||||
public $UpdateSource;
|
||||
private $update_source;
|
||||
|
||||
/**
|
||||
* Public Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->Versions = [];
|
||||
$this->versions = [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -84,15 +85,15 @@
|
|||
*/
|
||||
public function getVersion(string $version, bool $throw_exception=false): ?VersionEntry
|
||||
{
|
||||
if($version === Versions::LATEST && $this->LatestVersion !== null)
|
||||
if($version === Versions::LATEST && $this->latest_version !== null)
|
||||
{
|
||||
/** @noinspection CallableParameterUseCaseInTypeContextInspection */
|
||||
$version = $this->LatestVersion;
|
||||
$version = $this->latest_version;
|
||||
}
|
||||
|
||||
foreach($this->Versions as $versionEntry)
|
||||
foreach($this->versions as $versionEntry)
|
||||
{
|
||||
if($versionEntry->Version === $version)
|
||||
if($versionEntry->getVersion() === $version)
|
||||
{
|
||||
return $versionEntry;
|
||||
}
|
||||
|
@ -100,7 +101,7 @@
|
|||
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new IOException(sprintf('Version %s of %s is not installed', $version, $this->Name));
|
||||
throw new IOException(sprintf('Version %s of %s is not installed', $version, $this->name));
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -118,9 +119,9 @@
|
|||
$count = 0;
|
||||
$found_node = false;
|
||||
|
||||
foreach($this->Versions as $versionEntry)
|
||||
foreach($this->versions as $versionEntry)
|
||||
{
|
||||
if($versionEntry->Version === $version)
|
||||
if($versionEntry->getVersion() === $version)
|
||||
{
|
||||
$found_node = true;
|
||||
break;
|
||||
|
@ -131,7 +132,7 @@
|
|||
|
||||
if($found_node)
|
||||
{
|
||||
unset($this->Versions[$count]);
|
||||
unset($this->versions[$count]);
|
||||
$this->updateLatestVersion();
|
||||
return true;
|
||||
}
|
||||
|
@ -169,23 +170,23 @@
|
|||
}
|
||||
|
||||
$version = new VersionEntry();
|
||||
$version->Version = $package->assembly->getVersion();
|
||||
$version->Compiler = $package->header->CompilerExtension;
|
||||
$version->ExecutionUnits = $package->execution_units;
|
||||
$version->MainExecutionPolicy = $package->main_execution_policy;
|
||||
$version->Location = $install_path;
|
||||
$version->setVersion($package->assembly->getVersion());
|
||||
$version->setCompiler($package->header->getCompilerExtension());
|
||||
$version->setExecutionUnits($package->execution_units);
|
||||
$version->main_execution_policy = $package->main_execution_policy;
|
||||
$version->location = $install_path;
|
||||
|
||||
foreach($version->ExecutionUnits as $unit)
|
||||
foreach($version->getExecutionUnits() as $unit)
|
||||
{
|
||||
$unit->Data = null;
|
||||
$unit->setData(null);
|
||||
}
|
||||
|
||||
foreach($package->dependencies as $dependency)
|
||||
{
|
||||
$version->Dependencies[] = new DependencyEntry($dependency);
|
||||
$version->addDependency(new DependencyEntry($dependency));
|
||||
}
|
||||
|
||||
$this->Versions[] = $version;
|
||||
$this->versions[] = $version;
|
||||
$this->updateLatestVersion();
|
||||
return true;
|
||||
}
|
||||
|
@ -199,9 +200,9 @@
|
|||
{
|
||||
$latest_version = null;
|
||||
|
||||
foreach($this->Versions as $version)
|
||||
foreach($this->versions as $version)
|
||||
{
|
||||
$version = $version->Version;
|
||||
$version = $version->getVersion();
|
||||
|
||||
if($latest_version === null)
|
||||
{
|
||||
|
@ -215,7 +216,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
$this->LatestVersion = $latest_version;
|
||||
$this->latest_version = $latest_version;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -223,7 +224,7 @@
|
|||
*/
|
||||
public function getLatestVersion(): ?string
|
||||
{
|
||||
return $this->LatestVersion;
|
||||
return $this->latest_version;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -235,12 +236,13 @@
|
|||
{
|
||||
$r = [];
|
||||
|
||||
foreach($this->Versions as $version)
|
||||
foreach($this->versions as $version)
|
||||
{
|
||||
$r[] = $version->Version;
|
||||
$r[] = $version->getVersion();
|
||||
}
|
||||
|
||||
return $r;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -249,7 +251,7 @@
|
|||
*/
|
||||
public function getDataPath(): string
|
||||
{
|
||||
$path = PathFinder::getPackageDataPath($this->Name);
|
||||
$path = PathFinder::getPackageDataPath($this->name);
|
||||
|
||||
if(!file_exists($path) && Resolver::resolveScope() === Scopes::SYSTEM)
|
||||
{
|
||||
|
@ -260,6 +262,38 @@
|
|||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName(string $name): void
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return UpdateSource|null
|
||||
*/
|
||||
public function getUpdateSource(): ?UpdateSource
|
||||
{
|
||||
return $this->update_source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UpdateSource|null $update_source
|
||||
*/
|
||||
public function setUpdateSource(?UpdateSource $update_source): void
|
||||
{
|
||||
$this->update_source = $update_source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array representation of the object
|
||||
*
|
||||
|
@ -270,16 +304,16 @@
|
|||
{
|
||||
$versions = [];
|
||||
|
||||
foreach($this->Versions as $version)
|
||||
foreach($this->versions as $version)
|
||||
{
|
||||
$versions[] = $version->toArray($bytecode);
|
||||
}
|
||||
|
||||
return [
|
||||
($bytecode ? Functions::cbc('name') : 'name') => $this->Name,
|
||||
($bytecode ? Functions::cbc('latest_version') : 'latest_version') => $this->LatestVersion,
|
||||
($bytecode ? Functions::cbc('name') : 'name') => $this->name,
|
||||
($bytecode ? Functions::cbc('latest_version') : 'latest_version') => $this->latest_version,
|
||||
($bytecode ? Functions::cbc('versions') : 'versions') => $versions,
|
||||
($bytecode ? Functions::cbc('update_source') : 'update_source') => ($this->UpdateSource?->toArray($bytecode)),
|
||||
($bytecode ? Functions::cbc('update_source') : 'update_source') => ($this->update_source?->toArray($bytecode)),
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -289,25 +323,25 @@
|
|||
* @param array $data
|
||||
* @return PackageEntry
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): PackageEntry
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
$object->Name = Functions::array_bc($data, 'name');
|
||||
$object->LatestVersion = Functions::array_bc($data, 'latest_version');
|
||||
$object->UpdateSource = Functions::array_bc($data, 'update_source');
|
||||
$object->name = Functions::array_bc($data, 'name');
|
||||
$object->latest_version = Functions::array_bc($data, 'latest_version');
|
||||
$object->update_source = Functions::array_bc($data, 'update_source');
|
||||
$versions = Functions::array_bc($data, 'versions');
|
||||
|
||||
if($object->UpdateSource !== null)
|
||||
if($object->update_source !== null)
|
||||
{
|
||||
$object->UpdateSource = UpdateSource::fromArray($object->UpdateSource);
|
||||
$object->update_source = UpdateSource::fromArray($object->update_source);
|
||||
}
|
||||
|
||||
if($versions !== null)
|
||||
{
|
||||
foreach($versions as $_datum)
|
||||
{
|
||||
$object->Versions[] = VersionEntry::fromArray($_datum);
|
||||
$object->versions[] = VersionEntry::fromArray($_datum);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,83 +1,84 @@
|
|||
<?php
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
* associated documentation files (the "Software"), to deal in the Software without restriction, including without
|
||||
* limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
||||
* Software, and to permit persons to whom the Software is furnished to do so, subject to the following
|
||||
* conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
* PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\PackageLock;
|
||||
|
||||
use ncc\Interfaces\BytecodeObjectInterface;
|
||||
use ncc\Objects\InstallationPaths;
|
||||
use ncc\Objects\Package\ExecutionUnit;
|
||||
use ncc\Objects\ProjectConfiguration\Compiler;
|
||||
use ncc\Utilities\Functions;
|
||||
|
||||
class VersionEntry
|
||||
class VersionEntry implements BytecodeObjectInterface
|
||||
{
|
||||
/**
|
||||
* The version of the package that's installed
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Version;
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* The compiler extension used for the package
|
||||
*
|
||||
* @var Compiler
|
||||
*/
|
||||
public $Compiler;
|
||||
private $compiler;
|
||||
|
||||
/**
|
||||
* An array of packages that this package depends on
|
||||
*
|
||||
* @var DependencyEntry[]
|
||||
*/
|
||||
public $Dependencies;
|
||||
private $dependencies;
|
||||
|
||||
/**
|
||||
* @var ExecutionUnit[]
|
||||
*/
|
||||
public $ExecutionUnits;
|
||||
public $execution_units;
|
||||
|
||||
/**
|
||||
* The main execution policy for this version entry if applicable
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
public $MainExecutionPolicy;
|
||||
public $main_execution_policy;
|
||||
|
||||
/**
|
||||
* The path where the package is located
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public $Location;
|
||||
public $location;
|
||||
|
||||
/**
|
||||
* Public Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->Dependencies = [];
|
||||
$this->ExecutionUnits = [];
|
||||
$this->dependencies = [];
|
||||
$this->execution_units = [];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -87,7 +88,112 @@
|
|||
*/
|
||||
public function getInstallPaths(): InstallationPaths
|
||||
{
|
||||
return new InstallationPaths($this->Location);
|
||||
return new InstallationPaths($this->location);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion(): string
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
*/
|
||||
public function setVersion(string $version): void
|
||||
{
|
||||
$this->version = $version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Compiler
|
||||
*/
|
||||
public function getCompiler(): Compiler
|
||||
{
|
||||
return $this->compiler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Compiler $compiler
|
||||
*/
|
||||
public function setCompiler(Compiler $compiler): void
|
||||
{
|
||||
$this->compiler = $compiler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|DependencyEntry[]
|
||||
*/
|
||||
public function getDependencies(): array
|
||||
{
|
||||
return $this->dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array|DependencyEntry[] $dependencies
|
||||
*/
|
||||
public function setDependencies(array $dependencies): void
|
||||
{
|
||||
$this->dependencies = $dependencies;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DependencyEntry $dependency
|
||||
* @return void
|
||||
*/
|
||||
public function addDependency(DependencyEntry $dependency): void
|
||||
{
|
||||
$this->dependencies[] = $dependency;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|ExecutionUnit[]
|
||||
*/
|
||||
public function getExecutionUnits(): array
|
||||
{
|
||||
return $this->execution_units;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array|ExecutionUnit[] $execution_units
|
||||
*/
|
||||
public function setExecutionUnits(array $execution_units): void
|
||||
{
|
||||
$this->execution_units = $execution_units;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getMainExecutionPolicy(): ?string
|
||||
{
|
||||
return $this->main_execution_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $main_execution_policy
|
||||
*/
|
||||
public function setMainExecutionPolicy(?string $main_execution_policy): void
|
||||
{
|
||||
$this->main_execution_policy = $main_execution_policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLocation(): string
|
||||
{
|
||||
return $this->location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $location
|
||||
*/
|
||||
public function setLocation(string $location): void
|
||||
{
|
||||
$this->location = $location;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -99,24 +205,24 @@
|
|||
public function toArray(bool $bytecode=false): array
|
||||
{
|
||||
$dependencies = [];
|
||||
foreach($this->Dependencies as $dependency)
|
||||
foreach($this->dependencies as $dependency)
|
||||
{
|
||||
$dependencies[] = $dependency->toArray($bytecode);
|
||||
}
|
||||
|
||||
$execution_units = [];
|
||||
foreach($this->ExecutionUnits as $executionUnit)
|
||||
foreach($this->execution_units as $executionUnit)
|
||||
{
|
||||
$execution_units[] = $executionUnit->toArray($bytecode);
|
||||
}
|
||||
|
||||
return [
|
||||
($bytecode ? Functions::cbc('version') : 'version') => $this->Version,
|
||||
($bytecode ? Functions::cbc('compiler') : 'compiler') => $this->Compiler->toArray(),
|
||||
($bytecode ? Functions::cbc('version') : 'version') => $this->version,
|
||||
($bytecode ? Functions::cbc('compiler') : 'compiler') => $this->compiler->toArray(),
|
||||
($bytecode ? Functions::cbc('dependencies') : 'dependencies') => $dependencies,
|
||||
($bytecode ? Functions::cbc('execution_units') : 'execution_units') => $execution_units,
|
||||
($bytecode ? Functions::cbc('main_execution_policy') : 'main_execution_policy') => $this->MainExecutionPolicy,
|
||||
($bytecode ? Functions::cbc('location') : 'location') => $this->Location,
|
||||
($bytecode ? Functions::cbc('main_execution_policy') : 'main_execution_policy') => $this->main_execution_policy,
|
||||
($bytecode ? Functions::cbc('location') : 'location') => $this->location,
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -126,20 +232,20 @@
|
|||
* @param array $data
|
||||
* @return VersionEntry
|
||||
*/
|
||||
public static function fromArray(array $data): self
|
||||
public static function fromArray(array $data): VersionEntry
|
||||
{
|
||||
$object = new self();
|
||||
$object->Version = Functions::array_bc($data, 'version');
|
||||
$object->Compiler = Compiler::fromArray(Functions::array_bc($data, 'compiler'));
|
||||
$object->MainExecutionPolicy = Functions::array_bc($data, 'main_execution_policy');
|
||||
$object->Location = Functions::array_bc($data, 'location');
|
||||
$object->version = Functions::array_bc($data, 'version');
|
||||
$object->compiler = Compiler::fromArray(Functions::array_bc($data, 'compiler'));
|
||||
$object->main_execution_policy = Functions::array_bc($data, 'main_execution_policy');
|
||||
$object->location = Functions::array_bc($data, 'location');
|
||||
|
||||
$dependencies = Functions::array_bc($data, 'dependencies');
|
||||
if($dependencies !== null)
|
||||
{
|
||||
foreach($dependencies as $_datum)
|
||||
{
|
||||
$object->Dependencies[] = DependencyEntry::fromArray($_datum);
|
||||
$object->dependencies[] = DependencyEntry::fromArray($_datum);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -148,7 +254,7 @@
|
|||
{
|
||||
foreach($execution_units as $_datum)
|
||||
{
|
||||
$object->ExecutionUnits[] = ExecutionUnit::fromArray($_datum);
|
||||
$object->execution_units[] = ExecutionUnit::fromArray($_datum);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -140,26 +140,26 @@
|
|||
throw new ImportException(sprintf('Failed to check if package %s is imported', $package), $e);
|
||||
}
|
||||
|
||||
if($version_entry->Dependencies !== null && count($version_entry->Dependencies) > 0)
|
||||
if(count($version_entry->getDependencies()) > 0)
|
||||
{
|
||||
// Import all dependencies first
|
||||
/** @var Dependency $dependency */
|
||||
foreach($version_entry->Dependencies as $dependency)
|
||||
foreach($version_entry->getDependencies() as $dependency)
|
||||
{
|
||||
self::import($dependency->PackageName, $dependency->getVersion(), $options);
|
||||
self::import($dependency->getPackageName(), $dependency->getVersion(), $options);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
switch($version_entry->Compiler->getExtension())
|
||||
switch($version_entry->getCompiler()->getExtension())
|
||||
{
|
||||
case CompilerExtensions::PHP:
|
||||
PhpRuntime::import($version_entry, $options);
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new ImportException(sprintf('Compiler extension %s is not supported in this runtime', $version_entry->Compiler->getExtension()));
|
||||
throw new ImportException(sprintf('Compiler extension %s is not supported in this runtime', $version_entry->getCompiler()->getExtension()));
|
||||
}
|
||||
}
|
||||
catch(Exception $e)
|
||||
|
|
Loading…
Add table
Reference in a new issue