- Updated class \ncc\Objects\ProjectConfiguration\Build > BuildConfiguration to use method calls rather than direct

property access
 - Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > Execute` to use method calls rather than direct
   property access
 - Changed all uppercase occurrences of `NCC` to `ncc` in the entire project
 - Corrected code-smell and code style issues in `\ncc\Utilities > Base64`
 - Corrected code-smell and code style issues in `\ncc\Utilities > Console`
 - Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > ExitHandle` to use method calls rather than direct
   property access
 - Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > ExitHandlers` to use method calls rather than
   direct property access
 - Updated class `\ncc\Objects\ProjectConfiguration\UpdateSource > Repository` to use method calls rather than direct
   property access
 - Updated class `\ncc\Objects\ProjectConfiguration > Assembly` to use method calls rather than direct property access
 - Updated class `\ncc\Objects\ProjectConfiguration > Build` to use method calls rather than direct property access
 - Updated class `\ncc\Objects\ProjectConfiguration > Compiler` to use method calls rather than direct property access
 - Updated class `\ncc\Objects\ProjectConfiguration > ExecutionPolicy` to use method calls rather than direct property access
 - Updated class `\ncc\Objects\ProjectConfiguration > Installer` to use method calls rather than direct property access
 - Fixed all @throw tags in the project to use the correct exception class
 - Removed unused `scope` property from `\ncc\Objects\ProjectConfiguration > Build`
This commit is contained in:
Netkas 2023-08-27 01:04:35 -04:00
parent 9c76d31de9
commit dc7fcfc757
No known key found for this signature in database
GPG key ID: 5DAF58535614062B
63 changed files with 2178 additions and 972 deletions

View file

@ -22,6 +22,7 @@ features and reduced the number of exceptions down to 15 exceptions.
### Fixed ### Fixed
- Fixed MITM attack vector in `\ncc\Classes > HttpClient > prepareCurl()` - Fixed MITM attack vector in `\ncc\Classes > HttpClient > prepareCurl()`
- Fixed all @throw tags in the project to use the correct exception class
### Changed ### Changed
- Corrected code-smell and code style issues in `\ncc\Classes > HttpClient` - Corrected code-smell and code style issues in `\ncc\Classes > HttpClient`
@ -116,6 +117,24 @@ features and reduced the number of exceptions down to 15 exceptions.
- Corrected code-smell and code style issues in `\ncc\Objects > PackageLock` - Corrected code-smell and code style issues in `\ncc\Objects > PackageLock`
- Corrected code-smell and code style issues in `\ncc\Classes\PhpExtension > PhpRuntime` - Corrected code-smell and code style issues in `\ncc\Classes\PhpExtension > PhpRuntime`
- Updated class `\ncc\Objects\ProjectConfiguration > Dependency` to use method calls rather than direct property access - Updated class `\ncc\Objects\ProjectConfiguration > Dependency` to use method calls rather than direct property access
- Updated class `\ncc\Objects\ProjectConfiguration\Build > BuildConfiguration` to use method calls rather than direct
property access
- Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > Execute` to use method calls rather than direct
property access
- Changed all uppercase occurrences of `NCC` to `ncc` in the entire project
- Corrected code-smell and code style issues in `\ncc\Utilities > Base64`
- Corrected code-smell and code style issues in `\ncc\Utilities > Console`
- Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > ExitHandle` to use method calls rather than direct
property access
- Updated class `\ncc\Objects\ProjectConfiguration\ExecutionPolicy > ExitHandlers` to use method calls rather than
direct property access
- Updated class `\ncc\Objects\ProjectConfiguration\UpdateSource > Repository` to use method calls rather than direct
property access
- Updated class `\ncc\Objects\ProjectConfiguration > Assembly` to use method calls rather than direct property access
- Updated class `\ncc\Objects\ProjectConfiguration > Build` to use method calls rather than direct property access
- Updated class `\ncc\Objects\ProjectConfiguration > Compiler` to use method calls rather than direct property access
- Updated class `\ncc\Objects\ProjectConfiguration > ExecutionPolicy` to use method calls rather than direct property access
- Updated class `\ncc\Objects\ProjectConfiguration > Installer` to use method calls rather than direct property access
### Removed ### Removed
- Removed `FileNotFoundException` and `DirectoryNotFoundException` from `\ncc\Exceptions` - Removed `FileNotFoundException` and `DirectoryNotFoundException` from `\ncc\Exceptions`
@ -174,6 +193,7 @@ features and reduced the number of exceptions down to 15 exceptions.
- Removed unused exception `NoAvailableUnitsException` in `\ncc\Exceptions` in favor for `OperationException` - Removed unused exception `NoAvailableUnitsException` in `\ncc\Exceptions` in favor for `OperationException`
- Removed unused exception `InstallationException` in `\ncc\Exceptions` in favor for `OperationException` - Removed unused exception `InstallationException` in `\ncc\Exceptions` in favor for `OperationException`
- Removed all unused exceptions from the project, reduced the number of exceptions in total. - Removed all unused exceptions from the project, reduced the number of exceptions in total.
- Removed unused `scope` property from `\ncc\Objects\ProjectConfiguration > Build`
@ -211,7 +231,7 @@ features and reduced the number of exceptions down to 15 exceptions.
- Updated `\ncc\Managers > PackageManager` to display more logging messages - Updated `\ncc\Managers > PackageManager` to display more logging messages
### Added ### Added
- Dockerfile for building a docker image of NCC - Dockerfile for building a docker image of ncc
@ -236,4 +256,4 @@ features and reduced the number of exceptions down to 15 exceptions.
## [1.0.0] - 2022-01-29 ## [1.0.0] - 2022-01-29
### Added ### Added
- Initial release of NCC - Initial release of ncc

View file

@ -1,4 +1,4 @@
# Contributing to NCC # Contributing to ncc
We welcome contributions to NCC! If you have an idea for how to improve the project, please don't hesitate to reach out. We welcome contributions to NCC! If you have an idea for how to improve the project, please don't hesitate to reach out.
There are many ways to contribute, and we appreciate all forms of support. There are many ways to contribute, and we appreciate all forms of support.

View file

@ -1,25 +1,25 @@
# NCC Documentation # ncc Documentation
This document serves the purpose of presenting the documentation for using/developing This document serves the purpose of presenting the documentation for using/developing
NCC, from basic installation, basic usage, standards and much more. ncc, from basic installation, basic usage, standards and much more.
## Table of contents ## Table of contents
<!-- TOC --> <!-- TOC -->
* [NCC Documentation](#ncc-documentation) * [ncc Documentation](#ncc-documentation)
* [Table of contents](#table-of-contents) * [Table of contents](#table-of-contents)
* [Introduction](#introduction) * [Introduction](#introduction)
* [What is NCC?](#what-is-ncc) * [What is ncc?](#what-is-ncc)
* [Building NCC from source](#building-ncc-from-source) * [Building ncc from source](#building-ncc-from-source)
* [Requirements to build](#requirements-to-build) * [Requirements to build](#requirements-to-build)
* [Installing phpab](#installing-phpab) * [Installing phpab](#installing-phpab)
* [Building NCC](#building-ncc) * [Building ncc](#building-ncc)
* [Redist](#redist) * [Redist](#redist)
* [Tar](#tar) * [Tar](#tar)
* [Installing NCC](#installing-ncc) * [Installing ncc](#installing-ncc)
* [Command line arguments](#command-line-arguments) * [Command line arguments](#command-line-arguments)
* [Uninstalling NCC](#uninstalling-ncc) * [Uninstalling ncc](#uninstalling-ncc)
* [NCC Command-line Interface](#ncc-command-line-interface) * [ncc Command-line Interface](#ncc-command-line-interface)
* [Management Commands](#management-commands) * [Management Commands](#management-commands)
* [Utility Commands](#utility-commands) * [Utility Commands](#utility-commands)
* [Options](#options) * [Options](#options)
@ -66,17 +66,17 @@ NCC, from basic installation, basic usage, standards and much more.
## Introduction ## Introduction
This section serves the basic introduction of NCC, what it's used for and how you can use it in your own projects or use This section serves the basic introduction of ncc, what it's used for and how you can use it in your own projects or use
it to run and build other projects that are designed to be used with NCC. it to run and build other projects that are designed to be used with ncc.
## What is NCC? ## What is ncc?
NCC (*Acronym for **N**osial **C**ode **C**ompiler*) is a multi-purpose compiler, package manager and toolkit. Allowing ncc (*Acronym for **N**osial **C**ode **C**ompiler*) is a multi-purpose compiler, package manager and toolkit. Allowing
projects to be managed and built more easily without having to mess with all the traditional tools that comes with your projects to be managed and built more easily without having to mess with all the traditional tools that comes with your
language of choice. Right now NCC only supports PHP as it's written in PHP but extensions for other languages/frameworks language of choice. Right now ncc only supports PHP as it's written in PHP but extensions for other languages/frameworks
can be built into the software in the future when the need comes for it. can be built into the software in the future when the need comes for it.
NCC can make the process of building your code into a redistributable package much more efficient by treating each ncc can make the process of building your code into a redistributable package much more efficient by treating each
building block of your project as a component that is interconnected in your environment instead of the more popular building block of your project as a component that is interconnected in your environment instead of the more popular
route taken by package/dependency managers such as [composer](https://getcomposer.org/),[npm](https://www.npmjs.com/) or route taken by package/dependency managers such as [composer](https://getcomposer.org/),[npm](https://www.npmjs.com/) or
[pypi (or pip)](https://pypi.org/). [pypi (or pip)](https://pypi.org/).
@ -84,9 +84,9 @@ route taken by package/dependency managers such as [composer](https://getcompose
------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------
# Building NCC from source # Building ncc from source
Building NCC from source is easy with very few requirements to start building. At the moment ncc can only be debugged or Building ncc from source is easy with very few requirements to start building. At the moment ncc can only be debugged or
tested by building a redistributable source and installing it. tested by building a redistributable source and installing it.
## Requirements to build ## Requirements to build
@ -142,9 +142,9 @@ phive install phpab
ln -s /home/user/.phive/phars/phpab-x.xx.x.phar /usr/local/bin/phpab ln -s /home/user/.phive/phars/phpab-x.xx.x.phar /usr/local/bin/phpab
``` ```
## Building NCC ## Building ncc
First, navigate to the main directory of NCC's source code where the [Makefile](Makefile) is present. If you First, navigate to the main directory of ncc's source code where the [Makefile](Makefile) is present. If you
already attempted to or had built ncc before, it's recommended to use `make clean` before building. already attempted to or had built ncc before, it's recommended to use `make clean` before building.
### Redist ### Redist
@ -171,9 +171,9 @@ ncc onto the running machine.
------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------
# Installing NCC # Installing ncc
Installing NCC is easy, you can either download the redistributable source from the [releases](https://git.n64.cc/nosial/ncc/-/releases) Installing ncc is easy, you can either download the redistributable source from the [releases](https://git.n64.cc/nosial/ncc/-/releases)
page or you can build it from source using the instructions above. page or you can build it from source using the instructions above.
Once you have the redistributable source, you can simply run execute the `INSTALL` file to install ncc onto the running Once you have the redistributable source, you can simply run execute the `INSTALL` file to install ncc onto the running
@ -207,9 +207,9 @@ the Makefile task will automatically rebuild the checksum file for you.
------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------
# Uninstalling NCC # Uninstalling ncc
Uninstalling NCC is easy, simply delete the directory where ncc was installed to, by default this is `/etc/ncc`. Uninstalling ncc is easy, simply delete the directory where ncc was installed to, by default this is `/etc/ncc`.
It's recommended to run `ncc package --uninstall-all` before uninstalling ncc, this will uninstall all the packages It's recommended to run `ncc package --uninstall-all` before uninstalling ncc, this will uninstall all the packages
that were installed using ncc and remove any artifacts that were created by these packages. that were installed using ncc and remove any artifacts that were created by these packages.
@ -220,9 +220,9 @@ that were installed using ncc and remove any artifacts that were created by thes
------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------
# NCC Command-line Interface # ncc Command-line Interface
NCC provides a command-line interface that can be used to manage packages, create projects, compile source code, manage ncc provides a command-line interface that can be used to manage packages, create projects, compile source code, manage
remote sources, configure ncc, and more. You can run `ncc --help` to see a list of all the available commands. remote sources, configure ncc, and more. You can run `ncc --help` to see a list of all the available commands.
![ncc cli](assets/ncc_cli.png) ![ncc cli](assets/ncc_cli.png)
@ -250,7 +250,7 @@ Utility commands are used to perform tasks in the current directory or project.
## Options ## Options
NCC also accepts a few command line arguments that can be used to alter the behavior of the command-line interface. ncc also accepts a few command line arguments that can be used to alter the behavior of the command-line interface.
`-l <level>, --log-level <level>` Sets the log level, this can be one of `debug`, `verbose`, `info`, `warn`, `error`, `fatal` `-l <level>, --log-level <level>` Sets the log level, this can be one of `debug`, `verbose`, `info`, `warn`, `error`, `fatal`
@ -262,7 +262,7 @@ NCC also accepts a few command line arguments that can be used to alter the beha
`--no-color` Disables colored output `--no-color` Disables colored output
`--no-banner` Omits displaying the NCC graphical banner `--no-banner` Omits displaying the ncc graphical banner
------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------
@ -283,7 +283,7 @@ file.
This is the first step in using ncc, you must create a project before you can do anything else (*not really because you This is the first step in using ncc, you must create a project before you can do anything else (*not really because you
can install packages without needing to create a project and run them directly, but you get the point*) can install packages without needing to create a project and run them directly, but you get the point*)
The NCC command-line tool provides a management command called `project` that can be used to create a new project The ncc command-line tool provides a management command called `project` that can be used to create a new project
or to manage an existing project. or to manage an existing project.
```shell ```shell
@ -317,7 +317,7 @@ to the compiler, and more.
| Name | Type | Required | Description | | Name | Type | Required | Description |
|---------------|--------------------------------------|----------|----------------------------------------------------------------------------------------------------| |---------------|--------------------------------------|----------|----------------------------------------------------------------------------------------------------|
| compiler | [project.compiler](#projectcompiler) | Yes | The compiler extension that the project uses to compile the program | | compiler | [project.compiler](#projectcompiler) | Yes | The compiler extension that the project uses to compile the program |
| options | `array` | No | An array of options to pass on to the compiler, the options vary depending on the compiler and NCC | | options | `array` | No | An array of options to pass on to the compiler, the options vary depending on the compiler and ncc |
| update_source | `project.update_source` | No | The source for where the program can fetch updates from | | update_source | `project.update_source` | No | The source for where the program can fetch updates from |
### project.compiler ### project.compiler
@ -338,11 +338,11 @@ The `project.update_source` field contains information about the source where th
| Name | Type | Required | Description | | Name | Type | Required | Description |
|------------|------------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------| |------------|------------------------------------|----------|-----------------------------------------------------------------------------------------------------------------------|
| source | `string` | Yes | The source where the program can fetch updates from, see [Remote Sources](#remote-sources) for additional information | | source | `string` | Yes | The source where the program can fetch updates from, see [Remote Sources](#remote-sources) for additional information |
| repository | `project.update_source.repository` | Yes | The source to configure in NCC when installing the package | | repository | `project.update_source.repository` | Yes | The source to configure in ncc when installing the package |
### project.update_source.repository ### project.update_source.repository
The `project.update_source.repository` field contains information about the source to configure in NCC when installing The `project.update_source.repository` field contains information about the source to configure in ncc when installing
the package. This allows you to set up a remote source that your package can use to fetch updates from, this is useful the package. This allows you to set up a remote source that your package can use to fetch updates from, this is useful
if you want to distribute your program to other people. if you want to distribute your program to other people.
@ -350,7 +350,7 @@ It would be useful to read more about [Remote Sources](#remote-sources) before c
| Name | Type | Required | Description | | Name | Type | Required | Description |
|------|----------|----------|---------------------------------------------------------------------------------------| |------|----------|----------|---------------------------------------------------------------------------------------|
| name | `string` | Yes | The name of the source to configure in NCC when installing the package (eg; `github`) | | name | `string` | Yes | The name of the source to configure in ncc when installing the package (eg; `github`) |
| type | `string` | Yes | The API type to use with this source, see [Supported sources](#supported-sources) | | type | `string` | Yes | The API type to use with this source, see [Supported sources](#supported-sources) |
| host | `string` | Yes | The host of the source, this is the domain name of the source (eg; `api.github.com`) | | host | `string` | Yes | The host of the source, this is the domain name of the source (eg; `api.github.com`) |
| ssl | `bool` | No | Whether to use SSL or not when connecting to this source | | ssl | `bool` | No | Whether to use SSL or not when connecting to this source |
@ -443,7 +443,7 @@ running.
The `installer` field contains allows you to configure the execution of policies during different stages of the The `installer` field contains allows you to configure the execution of policies during different stages of the
installation process of the package. Note that these files only accepts an array of strings, which are the names of installation process of the package. Note that these files only accepts an array of strings, which are the names of
the execution policies that you want to run during the specified stage. NCC will reject the package if the execution the execution policies that you want to run during the specified stage. ncc will reject the package if the execution
policy does not exist. policy does not exist.
| Name | Type | Required | Description | | Name | Type | Required | Description |
@ -468,7 +468,7 @@ configured correctly for the package to be built successfully.
| exclude_files | `string[]` | No | The files to exclude from the build process. | | exclude_files | `string[]` | No | The files to exclude from the build process. |
| options | `string[]` | No | The options to pass to the build process. | | options | `string[]` | No | The options to pass to the build process. |
| main | `string` | No | The main execution policy to run when the package is executed, this is like the main entry point of the package. | | main | `string` | No | The main execution policy to run when the package is executed, this is like the main entry point of the package. |
| define_constants | `string[]` | No | Environment constants to define during the execution of your program, these values can be accessed by the NCC Runtime API. | | define_constants | `string[]` | No | Environment constants to define during the execution of your program, these values can be accessed by the ncc Runtime API. |
| pre_build | `string[]` | No | The execution policies to run before the build process. | | pre_build | `string[]` | No | The execution policies to run before the build process. |
| post_build | `string[]` | No | The execution policies to run after the build process. | | post_build | `string[]` | No | The execution policies to run after the build process. |
| dependencies | `dependency[]` | No | The dependencies that the package requires | | dependencies | `dependency[]` | No | The dependencies that the package requires |
@ -481,9 +481,9 @@ The `dependency` object contains information about a dependency that the package
| Name | Type | Required | Description | | Name | Type | Required | Description |
|-------------|----------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-------------|----------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| name | `string` | Yes | The package name of the dependency (eg; com.example.package) | | name | `string` | Yes | The package name of the dependency (eg; com.example.package) |
| source_type | `string` | No | Where NCC should get the dependency from, accepted values are `static`, `local` or `remote`. If not specified, NCC will assume `remote`. | | source_type | `string` | No | Where ncc should get the dependency from, accepted values are `static`, `local` or `remote`. If not specified, ncc will assume `remote`. |
| source | `string` | No | The source of the dependency, this can a remote source (see [Remote Sources](#remote-sources)) if the source is `remote` or a a local file path if the source is `static` | | source | `string` | No | The source of the dependency, this can a remote source (see [Remote Sources](#remote-sources)) if the source is `remote` or a a local file path if the source is `static` |
| version | `string` | No | The version of the dependency to use, if not specified, NCC will use the latest version of the dependency. (eg; 'latest') | | version | `string` | No | The version of the dependency to use, if not specified, ncc will use the latest version of the dependency. (eg; 'latest') |
#### Source Types #### Source Types

View file

@ -1,4 +1,4 @@
# ![NCC](assets/icon/ncc@32px.png "NCC") NCC # ![ncc](assets/icon/ncc@32px.png "ncc") ncc
[![wakatime](https://wakatime.com/badge/user/bc15cc8e-c9b9-4c11-bad9-3e3cfacf01e4/project/273bc06f-12e7-43d7-824d-40a78b02aada.svg)](https://wakatime.com/badge/user/bc15cc8e-c9b9-4c11-bad9-3e3cfacf01e4/project/273bc06f-12e7-43d7-824d-40a78b02aada) [![wakatime](https://wakatime.com/badge/user/bc15cc8e-c9b9-4c11-bad9-3e3cfacf01e4/project/273bc06f-12e7-43d7-824d-40a78b02aada.svg)](https://wakatime.com/badge/user/bc15cc8e-c9b9-4c11-bad9-3e3cfacf01e4/project/273bc06f-12e7-43d7-824d-40a78b02aada)
@ -8,19 +8,19 @@ toolkit offering more features, security and proper code licensing and copyright
## Alpha Stage ## Alpha Stage
NCC is currently in alpha stage, meaning that it's not fully functional and may not work on your system. If you find any bugs ncc is currently in alpha stage, meaning that it's not fully functional and may not work on your system. If you find any bugs
or issues please report them to the [GitHub Issue Tracker](https://git.n64.cc/nosial/ncc/issues). or issues please report them to the [GitHub Issue Tracker](https://git.n64.cc/nosial/ncc/issues).
At the moment NCC is currently being used while developing other software, this serves as a test run to At the moment ncc is currently being used while developing other software, this serves as a test run to
improve on changes for the next version. improve on changes for the next version.
## Changelog ## Changelog
The changelog for NCC can be found in the [CHANGELOG.md](CHANGELOG.md) file. The changelog for ncc can be found in the [CHANGELOG.md](CHANGELOG.md) file.
## Repository Mirrors ## Repository Mirrors
The official repository for NCC is hosted on [GitLab](https://git.n64.cc/nosial/ncc), however, you can also find The official repository for ncc is hosted on [GitLab](https://git.n64.cc/nosial/ncc), however, you can also find
mirrors of the repository mirrored on different platforms, including mirrors of the repository mirrored on different platforms, including
community powered mirrors. (more to come) community powered mirrors. (more to come)
@ -31,7 +31,7 @@ community powered mirrors. (more to come)
# Contributing # Contributing
We welcome contributions to NCC! If you have an idea for how to improve the project, please don't hesitate to reach out. We welcome contributions to ncc! If you have an idea for how to improve the project, please don't hesitate to reach out.
There are many ways to contribute, and we appreciate all forms of support. There are many ways to contribute, and we appreciate all forms of support.
For more information on how to contribute, please read the [CONTRIBUTING.md](CONTRIBUTING.md) file. For more information on how to contribute, please read the [CONTRIBUTING.md](CONTRIBUTING.md) file.
@ -60,7 +60,7 @@ We are committed to maintaining a welcoming and inclusive environment for all co
# Licenses # Licenses
NCC is licensed under the MIT License, see [LICENSE](LICENSE) for more information. ncc is licensed under the MIT License, see [LICENSE](LICENSE) for more information.
Multiple licenses for the open source components used in this Multiple licenses for the open source components used in this
project can be found at [LICENSE](LICENSES) project can be found at [LICENSE](LICENSES)

View file

@ -23,6 +23,7 @@
namespace ncc\CLI; namespace ncc\CLI;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Exceptions\PathNotFoundException;
use ncc\Objects\CliHelpSection; use ncc\Objects\CliHelpSection;
use ncc\Utilities\Console; use ncc\Utilities\Console;
use ncc\Utilities\Functions; use ncc\Utilities\Functions;
@ -35,6 +36,7 @@
* @param $args * @param $args
* @return void * @return void
* @throws IOException * @throws IOException
* @throws PathNotFoundException
*/ */
public static function start($args): void public static function start($args): void
{ {
@ -69,11 +71,11 @@
Console::out('Options:'); Console::out('Options:');
Console::outHelpSections([ Console::outHelpSections([
new CliHelpSection(['{command} --help'], 'Displays help information about a specific command'), new CliHelpSection(['{command} --help'], 'Displays help information about a specific command'),
new CliHelpSection(['-v', '--version'], 'Display NCC version information'), new CliHelpSection(['-v', '--version'], 'Display ncc version information'),
new CliHelpSection(['-l', '--log-level={silent|debug|verbose|info|warn|error|fatal}'], 'Set the logging level', 'info'), new CliHelpSection(['-l', '--log-level={silent|debug|verbose|info|warn|error|fatal}'], 'Set the logging level', 'info'),
new CliHelpSection(['--basic-ascii'], 'Uses basic ascii characters'), new CliHelpSection(['--basic-ascii'], 'Uses basic ascii characters'),
new CliHelpSection(['--no-color'], 'Omits the use of colors'), new CliHelpSection(['--no-color'], 'Omits the use of colors'),
new CliHelpSection(['--no-banner'], 'Omits displaying the NCC ascii banner') new CliHelpSection(['--no-banner'], 'Omits displaying the ncc ascii banner')
]); ]);
} }
@ -89,7 +91,7 @@
new CliHelpSection(['project'], 'Manages the current project'), new CliHelpSection(['project'], 'Manages the current project'),
new CliHelpSection(['package'], 'Manages the package system'), new CliHelpSection(['package'], 'Manages the package system'),
new CliHelpSection(['cred'], 'Manages credentials'), new CliHelpSection(['cred'], 'Manages credentials'),
new CliHelpSection(['config'], 'Changes NCC configuration values'), new CliHelpSection(['config'], 'Changes ncc configuration values'),
new CliHelpSection(['source'], 'Manages remote sources'), new CliHelpSection(['source'], 'Manages remote sources'),
]); ]);
} }

View file

@ -65,18 +65,18 @@
if(isset(self::$args['ncc-cli'])) if(isset(self::$args['ncc-cli']))
{ {
// Initialize NCC // Initialize ncc
try try
{ {
ncc::initialize(); ncc::initialize();
} }
catch (PathNotFoundException $e) catch (PathNotFoundException $e)
{ {
Console::outException('Cannot initialize NCC, one or more files were not found.', $e, 1); Console::outException('Cannot initialize ncc, one or more files were not found.', $e, 1);
} }
catch (Exception $e) catch (Exception $e)
{ {
Console::outException('Cannot initialize NCC due to an unexpected error.', $e, 1); Console::outException('Cannot initialize ncc due to an unexpected error.', $e, 1);
} }
define('NCC_CLI_MODE', 1); define('NCC_CLI_MODE', 1);
@ -118,7 +118,7 @@
if(in_array(NccBuildFlags::UNSTABLE, NCC_VERSION_FLAGS, true)) if(in_array(NccBuildFlags::UNSTABLE, NCC_VERSION_FLAGS, true))
{ {
Console::outWarning('This is an unstable build of NCC, expect some features to not work as expected'); Console::outWarning('This is an unstable build of ncc, expect some features to not work as expected');
} }
if(isset(self::$args['version'])) if(isset(self::$args['version']))
@ -184,17 +184,17 @@
} }
/** /**
* Displays the current version of NCC * Displays the current version of ncc
* *
* @return void * @return void
*/ */
private static function displayVersion(): void private static function displayVersion(): void
{ {
Console::out(sprintf('NCC version %s (%s)', NCC_VERSION_NUMBER, NCC_VERSION_BRANCH)); Console::out(sprintf('ncc version %s (%s)', ncc_VERSION_NUMBER, ncc_VERSION_BRANCH));
} }
/** /**
* Returns the arguments passed to NCC * Returns the arguments passed to ncc
* *
* @return array * @return array
*/ */
@ -241,7 +241,7 @@
} }
catch (Exception $e) catch (Exception $e)
{ {
Console::outWarning('An error occurred while shutting down NCC, ' . $e->getMessage()); Console::outWarning('An error occurred while shutting down ncc, ' . $e->getMessage());
} }
} }

View file

@ -24,6 +24,7 @@
use JsonException; use JsonException;
use ncc\Enums\Scopes; use ncc\Enums\Scopes;
use ncc\Exceptions\AuthenticationException;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Managers\ConfigurationManager; use ncc\Managers\ConfigurationManager;
use ncc\Objects\CliHelpSection; use ncc\Objects\CliHelpSection;
@ -40,6 +41,7 @@
* @param $args * @param $args
* @return void * @return void
* @throws IOException * @throws IOException
* @throws AuthenticationException
*/ */
public static function start($args): void public static function start($args): void
{ {

View file

@ -134,29 +134,21 @@ namespace ncc\CLI\Management;
while(true) while(true)
{ {
try $password = Console::passwordInput('Password/Secret: ');
if (!$entry->unlock($password))
{ {
$password = Console::passwordInput('Password/Secret: '); $tries++;
if (!$entry->unlock($password)) if ($tries >= 3)
{ {
$tries++; Console::outError('Too many failed attempts.', true, 1);
if ($tries >= 3)
{
Console::outError('Too many failed attempts.', true, 1);
return;
}
Console::outError('Invalid password.', true, 1);
}
else
{
Console::out('Authentication successful.');
return; return;
} }
Console::outError('Invalid password.', true, 1);
} }
catch (RuntimeException $e) else
{ {
Console::outException('Cannot unlock entry.', $e, 1); Console::out('Authentication successful.');
return; return;
} }
} }

View file

@ -315,7 +315,7 @@
Console::out(sprintf('%s=%s (%s)', Console::out(sprintf('%s=%s (%s)',
Console::formatColor($package, ConsoleColors::LIGHT_GREEN), Console::formatColor($package, ConsoleColors::LIGHT_GREEN),
Console::formatColor($version, ConsoleColors::LIGHT_MAGENTA), Console::formatColor($version, ConsoleColors::LIGHT_MAGENTA),
$package_manager->getPackageVersion($package, $version)->Compiler->extension $package_manager->getPackageVersion($package, $version)->Compiler->getExtension()
)); ));
} }
catch(Exception $e) catch(Exception $e)
@ -458,49 +458,49 @@
Console::out('Package installation details' . PHP_EOL); Console::out('Package installation details' . PHP_EOL);
if(!is_null($package->assembly->uuid)) if(!is_null($package->assembly->getUuid()))
{ {
Console::out(' UUID: ' . Console::formatColor($package->assembly->uuid, ConsoleColors::LIGHT_GREEN)); Console::out(' UUID: ' . Console::formatColor($package->assembly->getUuid(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->package)) if(!is_null($package->assembly->getPackage()))
{ {
Console::out(' Package: ' . Console::formatColor($package->assembly->package, ConsoleColors::LIGHT_GREEN)); Console::out(' Package: ' . Console::formatColor($package->assembly->getPackage(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->name)) if(!is_null($package->assembly->getName()))
{ {
Console::out(' Name: ' . Console::formatColor($package->assembly->name, ConsoleColors::LIGHT_GREEN)); Console::out(' Name: ' . Console::formatColor($package->assembly->getName(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->version)) if(!is_null($package->assembly->getVersion()))
{ {
Console::out(' Version: ' . Console::formatColor($package->assembly->version, ConsoleColors::LIGHT_GREEN)); Console::out(' Version: ' . Console::formatColor($package->assembly->getVersion(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->description)) if(!is_null($package->assembly->getDescription()))
{ {
Console::out(' Description: ' . Console::formatColor($package->assembly->description, ConsoleColors::LIGHT_GREEN)); Console::out(' Description: ' . Console::formatColor($package->assembly->getDescription(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->product)) if(!is_null($package->assembly->getProduct()))
{ {
Console::out(' Product: ' . Console::formatColor($package->assembly->product, ConsoleColors::LIGHT_GREEN)); Console::out(' Product: ' . Console::formatColor($package->assembly->getProduct(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->company)) if(!is_null($package->assembly->getCompany()))
{ {
Console::out(' Company: ' . Console::formatColor($package->assembly->company, ConsoleColors::LIGHT_GREEN)); Console::out(' Company: ' . Console::formatColor($package->assembly->getCompany(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->copyright)) if(!is_null($package->assembly->getCopyright()))
{ {
Console::out(' Copyright: ' . Console::formatColor($package->assembly->copyright, ConsoleColors::LIGHT_GREEN)); Console::out(' Copyright: ' . Console::formatColor($package->assembly->getCopyright(), ConsoleColors::LIGHT_GREEN));
} }
if(!is_null($package->assembly->trademark)) if(!is_null($package->assembly->getTrademark()))
{ {
Console::out(' Trademark: ' . Console::formatColor($package->assembly->trademark, ConsoleColors::LIGHT_GREEN)); Console::out(' Trademark: ' . Console::formatColor($package->assembly->getTrademark(), ConsoleColors::LIGHT_GREEN));
} }
Console::out((string)null); Console::out((string)null);
@ -559,28 +559,28 @@
} }
Console::out(sprintf('Extension: %s', Console::out(sprintf('Extension: %s',
Console::formatColor($package->header->CompilerExtension->extension, ConsoleColors::GREEN) Console::formatColor($package->header->CompilerExtension->getExtension(), ConsoleColors::GREEN)
)); ));
if($package->header->CompilerExtension->maximum_version !== null) if($package->header->CompilerExtension->getMinimumVersion() !== null)
{ {
Console::out(sprintf('Maximum Version: %s', Console::out(sprintf('Maximum Version: %s',
Console::formatColor($package->header->CompilerExtension->maximum_version, ConsoleColors::LIGHT_MAGENTA) Console::formatColor($package->header->CompilerExtension->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
)); ));
} }
if($package->header->CompilerExtension->minimum_version !== null) if($package->header->CompilerExtension->getMinimumVersion() !== null)
{ {
Console::out(sprintf('Minimum Version: %s', Console::out(sprintf('Minimum Version: %s',
Console::formatColor($package->header->CompilerExtension->minimum_version, ConsoleColors::LIGHT_MAGENTA) Console::formatColor($package->header->CompilerExtension->getMinimumVersion(), ConsoleColors::LIGHT_MAGENTA)
)); ));
} }
if(!$user_confirmation) if(!$user_confirmation)
{ {
$user_confirmation = Console::getBooleanInput(sprintf('Do you want to install %s', $package->assembly->package)); $user_confirmation = Console::getBooleanInput(sprintf('Do you want to install %s', $package->assembly->getPackage()));
} }
if($user_confirmation) if($user_confirmation)
@ -588,7 +588,7 @@
try try
{ {
$package_manager->install($package_path, $credential, $installer_options); $package_manager->install($package_path, $credential, $installer_options);
Console::out(sprintf('Package %s installed successfully', $package->assembly->package)); Console::out(sprintf('Package %s installed successfully', $package->assembly->getPackage()));
} }
catch(Exception $e) catch(Exception $e)
{ {

View file

@ -114,7 +114,7 @@
if(in_array($compiler_extension, CompilerExtensions::ALL)) if(in_array($compiler_extension, CompilerExtensions::ALL))
{ {
$Compiler->extension = $compiler_extension; $Compiler->setExtension($compiler_extension);
} }
else else
{ {
@ -125,7 +125,7 @@
else else
{ {
// Default PHP Extension // Default PHP Extension
$Compiler->extension = CompilerExtensions::PHP; $Compiler->setExtension(CompilerExtensions::PHP);
} }
// If a minimum and maximum version is specified // If a minimum and maximum version is specified
@ -137,28 +137,28 @@
$max_version = strtolower($args['max-version'] ?? $args['max-ver']); $max_version = strtolower($args['max-version'] ?? $args['max-ver']);
$min_version = strtolower($args['min-version'] ?? $args['min-ver']); $min_version = strtolower($args['min-version'] ?? $args['min-ver']);
switch($Compiler->extension) switch($Compiler->getExtension())
{ {
case CompilerExtensions::PHP: case CompilerExtensions::PHP:
if(!in_array($max_version, CompilerExtensionSupportedVersions::PHP)) if(!in_array($max_version, CompilerExtensionSupportedVersions::PHP))
{ {
Console::outError('The extension \'' . $Compiler->extension . '\' does not support version ' . $max_version, true, 1); Console::outError('The extension \'' . $Compiler->getExtension() . '\' does not support version ' . $max_version, true, 1);
return; return;
} }
if(!in_array($min_version, CompilerExtensionSupportedVersions::PHP)) if(!in_array($min_version, CompilerExtensionSupportedVersions::PHP))
{ {
Console::outError('The extension \'' . $Compiler->extension . '\' does not support version ' . $min_version, true, 1); Console::outError('The extension \'' . $Compiler->getExtension() . '\' does not support version ' . $min_version, true, 1);
return; return;
} }
$Compiler->maximum_version = $max_version; $Compiler->setMaximumVersion($max_version);
$Compiler->minimum_version = $min_version; $Compiler->setMinimumVersion($min_version);
break; break;
default: default:
Console::outError('Unsupported extension: ' . $Compiler->extension, true, 1); Console::outError('Unsupported extension: ' . $Compiler->getExtension(), true, 1);
return; return;
} }
} }
@ -166,37 +166,37 @@
elseif(isset($args['version']) || isset($args['ver'])) elseif(isset($args['version']) || isset($args['ver']))
{ {
$version = strtolower($args['version'] ?? $args['ver']); $version = strtolower($args['version'] ?? $args['ver']);
switch($Compiler->extension) switch($Compiler->getExtension())
{ {
case CompilerExtensions::PHP: case CompilerExtensions::PHP:
if(!in_array($version, CompilerExtensionSupportedVersions::PHP)) if(!in_array($version, CompilerExtensionSupportedVersions::PHP))
{ {
Console::outError('The extension \'' . $Compiler->extension . '\' does not support version ' . $version, true, 1); Console::outError('The extension \'' . $Compiler->getExtension() . '\' does not support version ' . $version, true, 1);
return; return;
} }
$Compiler->maximum_version = $version; $Compiler->setMaximumVersion($version);
$Compiler->minimum_version = $version; $Compiler->setMinimumVersion($version);
break; break;
default: default:
Console::outError('Unsupported extension: ' . $Compiler->extension, true, 1); Console::outError('Unsupported extension: ' . $Compiler->getExtension(), true, 1);
return; return;
} }
} }
// If no version is specified, use the default version // If no version is specified, use the default version
else else
{ {
switch($Compiler->extension) switch($Compiler->getExtension())
{ {
case CompilerExtensions::PHP: case CompilerExtensions::PHP:
$Compiler->minimum_version = CompilerExtensionDefaultVersions::PHP[0]; $Compiler->setMinimumVersion(CompilerExtensionDefaultVersions::PHP[0]);
$Compiler->maximum_version = CompilerExtensionDefaultVersions::PHP[1]; $Compiler->setMaximumVersion(CompilerExtensionDefaultVersions::PHP[1]);
break; break;
default: default:
Console::outError('Unsupported extension: ' . $Compiler->extension, true, 1); Console::outError('Unsupported extension: ' . $Compiler->getExtension(), true, 1);
return; return;
} }
} }

View file

@ -46,8 +46,6 @@ namespace ncc\Classes\BashExtension;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);
$policy->execute->target = null;
return $execution_unit; return $execution_unit;
} }

View file

@ -214,13 +214,13 @@
foreach ($composer_lock->Packages as $package) foreach ($composer_lock->Packages as $package)
{ {
$package_path = $base_dir . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package->Name; $package_path = $base_dir . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package->name;
// Load the composer lock file // Load the composer lock file
$composer_package = $composer_lock->getPackage($package->Name); $composer_package = $composer_lock->getPackage($package->name);
if ($composer_package === null) if ($composer_package === null)
{ {
throw new PackageException(sprintf('Package "%s" not found in composer lock file', $package->Name)); throw new PackageException(sprintf('Package "%s" not found in composer lock file', $package->name));
} }
// Convert it to an NCC project configuration // Convert it to an NCC project configuration
@ -232,10 +232,10 @@
$built_package = $project_manager->build(); $built_package = $project_manager->build();
// Copy the project to the build directory // Copy the project to the build directory
$out_path = $base_dir . DIRECTORY_SEPARATOR . 'build' . DIRECTORY_SEPARATOR . sprintf('%s.ncc', $project_configuration->assembly->package); $out_path = $base_dir . DIRECTORY_SEPARATOR . 'build' . DIRECTORY_SEPARATOR . sprintf('%s.ncc', $project_configuration->assembly->getPackage());
$filesystem->copy($built_package, $out_path); $filesystem->copy($built_package, $out_path);
$filesystem->remove($built_package); $filesystem->remove($built_package);
$built_packages[$project_configuration->assembly->package] = $out_path; $built_packages[$project_configuration->assembly->getPackage()] = $out_path;
} }
return $built_packages; return $built_packages;
@ -252,7 +252,7 @@
$version_map = []; $version_map = [];
foreach($composerLock->Packages as $package) foreach($composerLock->Packages as $package)
{ {
$version_map[$package->Name] = $package->Version; $version_map[$package->name] = $package->version;
} }
return $version_map; return $version_map;
} }
@ -311,42 +311,42 @@
// Generate a new project configuration object // Generate a new project configuration object
$project_configuration = new ProjectConfiguration(); $project_configuration = new ProjectConfiguration();
if (isset($composer_package->Name)) if (isset($composer_package->name))
{ {
$project_configuration->assembly->name = $composer_package->Name; $project_configuration->assembly->setName($composer_package->name);
} }
if (isset($composer_package->Description)) if (isset($composer_package->description))
{ {
$project_configuration->assembly->description = $composer_package->Description; $project_configuration->assembly->setDescription($composer_package->description);
} }
if(isset($version_map[$composer_package->Name])) if(isset($version_map[$composer_package->name]))
{ {
$project_configuration->assembly->version = self::versionMap($composer_package->Name, $version_map); $project_configuration->assembly->setVersion(self::versionMap($composer_package->name, $version_map));
} }
if($project_configuration->assembly->version === null || $project_configuration->assembly->version === '') if($project_configuration->assembly->getVersion() === null || $project_configuration->assembly->getVersion() === '')
{ {
$project_configuration->assembly->version = '1.0.0'; $project_configuration->assembly->setVersion('1.0.0');
} }
$project_configuration->assembly->uuid = Uuid::v1()->toRfc4122(); $project_configuration->assembly->setUuid(Uuid::v1()->toRfc4122());
$project_configuration->assembly->package = self::toPackageName($composer_package->Name); $project_configuration->assembly->setPackage(self::toPackageName($composer_package->name));
// Add the update source // Add the update source
$project_configuration->project->update_source = new ProjectConfiguration\UpdateSource(); $project_configuration->project->update_source = new ProjectConfiguration\UpdateSource();
$project_configuration->project->update_source->source = sprintf('%s@composer', str_ireplace('\\', '/', $composer_package->Name)); $project_configuration->project->update_source->source = sprintf('%s@composer', str_ireplace('\\', '/', $composer_package->name));
$project_configuration->project->update_source->repository = null; $project_configuration->project->update_source->repository = null;
// Process the dependencies // Process the dependencies
if($composer_package->Require !== null && count($composer_package->Require) > 0) if($composer_package->require !== null && count($composer_package->require) > 0)
{ {
foreach ($composer_package->Require as $item) foreach ($composer_package->require as $item)
{ {
// Check if the dependency is already in the project configuration // Check if the dependency is already in the project configuration
$package_name = self::toPackageName($item->PackageName); $package_name = self::toPackageName($item->package_name);
if($package_name === null) if($package_name === null)
{ {
@ -356,7 +356,7 @@
$dependency = new ProjectConfiguration\Dependency(); $dependency = new ProjectConfiguration\Dependency();
$dependency->setName($package_name); $dependency->setName($package_name);
$dependency->setSourceType(DependencySourceType::LOCAL); $dependency->setSourceType(DependencySourceType::LOCAL);
$dependency->setVersion(self::versionMap($item->PackageName, $version_map)); $dependency->setVersion(self::versionMap($item->package_name, $version_map));
$dependency->setSource($package_name . '.ncc'); $dependency->setSource($package_name . '.ncc');
$project_configuration->build->addDependency($dependency); $project_configuration->build->addDependency($dependency);
} }
@ -364,18 +364,18 @@
// Create a build configuration // Create a build configuration
$build_configuration = new ProjectConfiguration\Build\BuildConfiguration(); $build_configuration = new ProjectConfiguration\Build\BuildConfiguration();
$build_configuration->name = 'default'; $build_configuration->setName('default');
$build_configuration->output_path = 'build'; $build_configuration->setOutputPath('build');
// Apply the final properties // Apply the final properties
$project_configuration->build->build_configurations[] = $build_configuration; $project_configuration->build->addBuildConfiguration($build_configuration);
$project_configuration->build->default_configuration = 'default'; $project_configuration->build->setDefaultConfiguration('default');
$project_configuration->build->source_path = '.src'; $project_configuration->build->setSourcePath('.src');
// Apply a compiler extension // Apply a compiler extension
$project_configuration->project->compiler->extension = CompilerExtensions::PHP; $project_configuration->project->compiler->setExtension(CompilerExtensions::PHP);
$project_configuration->project->compiler->minimum_version = CompilerExtensionSupportedVersions::PHP[0]; $project_configuration->project->compiler->setMaximumVersion(CompilerExtensionSupportedVersions::PHP[0]);
$project_configuration->project->compiler->maximum_version = CompilerExtensionSupportedVersions::PHP[(count(CompilerExtensionSupportedVersions::PHP) - 1)]; $project_configuration->project->compiler->setMinimumVersion(CompilerExtensionSupportedVersions::PHP[(count(CompilerExtensionSupportedVersions::PHP) - 1)]);
return $project_configuration; return $project_configuration;
} }
@ -674,7 +674,7 @@
$filesystem = new Filesystem(); $filesystem = new Filesystem();
// Process the source files // Process the source files
if ($composer_package->Autoload !== null) if ($composer_package->autoload !== null)
{ {
$source_directory = $package_path . DIRECTORY_SEPARATOR . '.src'; $source_directory = $package_path . DIRECTORY_SEPARATOR . '.src';
@ -688,10 +688,10 @@
$static_files = []; $static_files = [];
// Extract all the source directories // Extract all the source directories
if ($composer_package->Autoload->Psr4 !== null && count($composer_package->Autoload->Psr4) > 0) if ($composer_package->autoload->psr_4 !== null && count($composer_package->autoload->psr_4) > 0)
{ {
Console::outVerbose('Extracting PSR-4 source directories'); Console::outVerbose('Extracting PSR-4 source directories');
foreach ($composer_package->Autoload->Psr4 as $namespace_pointer) foreach ($composer_package->autoload->psr_4 as $namespace_pointer)
{ {
if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true)) if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true))
{ {
@ -700,10 +700,10 @@
} }
} }
if ($composer_package->Autoload->Psr0 !== null && count($composer_package->Autoload->Psr0) > 0) if ($composer_package->autoload->psr_0 !== null && count($composer_package->autoload->psr_0) > 0)
{ {
Console::outVerbose('Extracting PSR-0 source directories'); Console::outVerbose('Extracting PSR-0 source directories');
foreach ($composer_package->Autoload->Psr0 as $namespace_pointer) foreach ($composer_package->autoload->psr_0 as $namespace_pointer)
{ {
if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true)) if ($namespace_pointer->Path !== null && !in_array($namespace_pointer->Path, $source_directories, true))
{ {
@ -712,10 +712,10 @@
} }
} }
if ($composer_package->Autoload->Files !== null && count($composer_package->Autoload->Files) > 0) if ($composer_package->autoload->files !== null && count($composer_package->autoload->files) > 0)
{ {
Console::outVerbose('Extracting static files'); Console::outVerbose('Extracting static files');
foreach ($composer_package->Autoload->Files as $file) foreach ($composer_package->autoload->files as $file)
{ {
$static_files[] = $package_path . DIRECTORY_SEPARATOR . $file; $static_files[] = $package_path . DIRECTORY_SEPARATOR . $file;
} }
@ -751,7 +751,7 @@
$parsed_path = str_ireplace($package_path . DIRECTORY_SEPARATOR, '', $item->getPathName()); $parsed_path = str_ireplace($package_path . DIRECTORY_SEPARATOR, '', $item->getPathName());
Console::outDebug(sprintf('copying file %s for package %s', $parsed_path, $composer_package->Name)); Console::outDebug(sprintf('copying file %s for package %s', $parsed_path, $composer_package->name));
$filesystem->copy($item->getPathName(), $source_directory . DIRECTORY_SEPARATOR . $parsed_path); $filesystem->copy($item->getPathName(), $source_directory . DIRECTORY_SEPARATOR . $parsed_path);
} }
} }
@ -763,7 +763,7 @@
foreach ($static_files as $file) foreach ($static_files as $file)
{ {
$parsed_path = str_ireplace($package_path . DIRECTORY_SEPARATOR, '', $file); $parsed_path = str_ireplace($package_path . DIRECTORY_SEPARATOR, '', $file);
Console::outDebug(sprintf('copying file %s for package %s', $parsed_path, $composer_package->Name)); Console::outDebug(sprintf('copying file %s for package %s', $parsed_path, $composer_package->name));
$filesystem->copy($file, $source_directory . DIRECTORY_SEPARATOR . $parsed_path); $filesystem->copy($file, $source_directory . DIRECTORY_SEPARATOR . $parsed_path);
unset($file); unset($file);
} }
@ -789,16 +789,16 @@
// Check configuration if composer.extension.display_licenses is set // Check configuration if composer.extension.display_licenses is set
if($filesystem->exists($package_path . DIRECTORY_SEPARATOR . $license_file) && Functions::cbool(Functions::getConfigurationProperty('composer.extension.display_licenses'))) if($filesystem->exists($package_path . DIRECTORY_SEPARATOR . $license_file) && Functions::cbool(Functions::getConfigurationProperty('composer.extension.display_licenses')))
{ {
Console::out(sprintf('License for package %s:', $composer_package->Name)); Console::out(sprintf('License for package %s:', $composer_package->name));
Console::out(IO::fread($package_path . DIRECTORY_SEPARATOR . $license_file)); Console::out(IO::fread($package_path . DIRECTORY_SEPARATOR . $license_file));
break; break;
} }
} }
if(Functions::cbool(!is_null($composer_package->Authors) && count($composer_package->Authors) > 0 && Functions::getConfigurationProperty('composer.extension.display_authors'))) if(Functions::cbool(!is_null($composer_package->authors) && count($composer_package->authors) > 0 && Functions::getConfigurationProperty('composer.extension.display_authors')))
{ {
Console::out(sprintf('Authors for package %s:', $composer_package->Name)); Console::out(sprintf('Authors for package %s:', $composer_package->name));
foreach($composer_package->Authors as $author) foreach($composer_package->authors as $author)
{ {
Console::out(sprintf(' - %s', $author->Name)); Console::out(sprintf(' - %s', $author->Name));

View file

@ -27,6 +27,7 @@
use ncc\Classes\HttpClient; use ncc\Classes\HttpClient;
use ncc\Exceptions\AuthenticationException; use ncc\Exceptions\AuthenticationException;
use ncc\Exceptions\GitException; use ncc\Exceptions\GitException;
use ncc\Exceptions\IOException;
use ncc\Exceptions\NetworkException; use ncc\Exceptions\NetworkException;
use ncc\Interfaces\RepositorySourceInterface; use ncc\Interfaces\RepositorySourceInterface;
use ncc\Objects\DefinedRemoteSource; use ncc\Objects\DefinedRemoteSource;
@ -49,6 +50,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
public static function getGitRepository(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): RepositoryQueryResults public static function getGitRepository(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): RepositoryQueryResults
{ {
@ -80,6 +82,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
public static function getRelease(RemotePackageInput $package_input, DefinedRemoteSource $defined_remote_source, ?Entry $entry = null): RepositoryQueryResults public static function getRelease(RemotePackageInput $package_input, DefinedRemoteSource $defined_remote_source, ?Entry $entry = null): RepositoryQueryResults
{ {
@ -94,6 +97,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
public static function getNccPackage(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): RepositoryQueryResults public static function getNccPackage(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): RepositoryQueryResults
{ {
@ -110,6 +114,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
private static function getReleases(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): array private static function getReleases(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry = null): array
{ {
@ -180,6 +185,7 @@
* @return array * @return array
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws IOException
* @throws NetworkException * @throws NetworkException
*/ */
private static function getJsonResponse(HttpRequest $httpRequest, ?Entry $entry): array private static function getJsonResponse(HttpRequest $httpRequest, ?Entry $entry): array
@ -207,6 +213,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
private static function processReleases(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry): mixed private static function processReleases(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry): mixed
{ {

View file

@ -26,6 +26,7 @@
use ncc\Classes\HttpClient; use ncc\Classes\HttpClient;
use ncc\Exceptions\AuthenticationException; use ncc\Exceptions\AuthenticationException;
use ncc\Exceptions\GitException; use ncc\Exceptions\GitException;
use ncc\Exceptions\IOException;
use ncc\Exceptions\NetworkException; use ncc\Exceptions\NetworkException;
use ncc\Exceptions\NotSupportedException; use ncc\Exceptions\NotSupportedException;
use ncc\Interfaces\RepositorySourceInterface; use ncc\Interfaces\RepositorySourceInterface;
@ -49,6 +50,7 @@
* @return RepositoryQueryResults * @return RepositoryQueryResults
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws IOException
* @throws NetworkException * @throws NetworkException
*/ */
public static function getGitRepository(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry=null): RepositoryQueryResults public static function getGitRepository(RemotePackageInput $packageInput, DefinedRemoteSource $definedRemoteSource, ?Entry $entry=null): RepositoryQueryResults
@ -91,6 +93,7 @@
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws NetworkException * @throws NetworkException
* @throws IOException
*/ */
public static function getRelease(RemotePackageInput $package_input, DefinedRemoteSource $defined_remote_source, ?Entry $entry = null): RepositoryQueryResults public static function getRelease(RemotePackageInput $package_input, DefinedRemoteSource $defined_remote_source, ?Entry $entry = null): RepositoryQueryResults
{ {
@ -181,6 +184,7 @@
* @return array * @return array
* @throws AuthenticationException * @throws AuthenticationException
* @throws GitException * @throws GitException
* @throws IOException
* @throws NetworkException * @throws NetworkException
*/ */
private static function getReleases(string $owner, string $repository, DefinedRemoteSource $definedRemoteSource, ?Entry $entry): array private static function getReleases(string $owner, string $repository, DefinedRemoteSource $definedRemoteSource, ?Entry $entry): array

View file

@ -22,6 +22,7 @@
namespace ncc\Classes\LuaExtension; namespace ncc\Classes\LuaExtension;
use ncc\Exceptions\PathNotFoundException;
use ncc\Interfaces\RunnerInterface; use ncc\Interfaces\RunnerInterface;
use ncc\Objects\Package\ExecutionUnit; use ncc\Objects\Package\ExecutionUnit;
use ncc\Objects\ProjectConfiguration\ExecutionPolicy; use ncc\Objects\ProjectConfiguration\ExecutionPolicy;
@ -32,11 +33,11 @@ namespace ncc\Classes\LuaExtension;
/** /**
* @inheritDoc * @inheritDoc
* @throws PathNotFoundException
*/ */
public static function processUnit(string $path, ExecutionPolicy $policy): ExecutionUnit public static function processUnit(string $path, ExecutionPolicy $policy): ExecutionUnit
{ {
$execution_unit = new ExecutionUnit(); $execution_unit = new ExecutionUnit();
$policy->execute->target = null;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);

View file

@ -46,49 +46,49 @@ namespace ncc\Classes\NccExtension;
return null; return null;
} }
if($assembly->name !== null) if($assembly->getName() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_NAME, $assembly->name, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_NAME, $assembly->getName(), $input);
} }
if($assembly->package !== null) if($assembly->getPackage() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_PACKAGE, $assembly->package, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_PACKAGE, $assembly->getPackage(), $input);
} }
if($assembly->description !== null) if($assembly->getDescription() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_DESCRIPTION, $assembly->description, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_DESCRIPTION, $assembly->getDescription(), $input);
} }
if($assembly->company !== null) if($assembly->getCompany() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_COMPANY, $assembly->company, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_COMPANY, $assembly->getCompany(), $input);
} }
if($assembly->product !== null) if($assembly->getProduct() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_PRODUCT, $assembly->product, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_PRODUCT, $assembly->getProduct(), $input);
} }
if($assembly->copyright !== null) if($assembly->getCopyright() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_COPYRIGHT, $assembly->copyright, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_COPYRIGHT, $assembly->getCopyright(), $input);
} }
if($assembly->trademark !== null) if($assembly->getTrademark() !== null)
{ {
$input =str_replace(AssemblyConstants::ASSEMBLY_TRADEMARK, $assembly->trademark, $input); $input =str_replace(AssemblyConstants::ASSEMBLY_TRADEMARK, $assembly->getTrademark(), $input);
} }
if($assembly->version !== null) if($assembly->getVersion() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_VERSION, $assembly->version, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_VERSION, $assembly->getVersion(), $input);
} }
if($assembly->uuid !== null) if($assembly->getUuid() !== null)
{ {
$input = str_replace(AssemblyConstants::ASSEMBLY_UID, $assembly->uuid, $input); $input = str_replace(AssemblyConstants::ASSEMBLY_UID, $assembly->getUuid(), $input);
} }
return $input; return $input;

View file

@ -78,18 +78,18 @@
} }
// Select the correct compiler for the specified extension // Select the correct compiler for the specified extension
if (strtolower($configuration->project->compiler->extension) === CompilerExtensions::PHP) if (strtolower($configuration->project->compiler->getExtension()) === CompilerExtensions::PHP)
{ {
/** @var CompilerInterface $Compiler */ /** @var CompilerInterface $Compiler */
$Compiler = new PhpCompiler($configuration, $manager->getProjectPath()); $Compiler = new PhpCompiler($configuration, $manager->getProjectPath());
} }
else else
{ {
throw new NotSupportedException('The compiler extension \'' . $configuration->project->compiler->extension . '\' is not supported'); throw new NotSupportedException('The compiler extension \'' . $configuration->project->compiler->getExtension() . '\' is not supported');
} }
$build_configuration = $configuration->build->getBuildConfiguration($build_configuration)->name; $build_configuration = $configuration->build->getBuildConfiguration($build_configuration)->getName();
Console::out(sprintf('Building %s=%s', $configuration->assembly->package, $configuration->assembly->version)); Console::out(sprintf('Building %s=%s', $configuration->assembly->getPackage(), $configuration->assembly->getVersion()));
$Compiler->prepare($build_configuration); $Compiler->prepare($build_configuration);
$Compiler->build(); $Compiler->build();
@ -120,7 +120,7 @@
elseif($project_type->ProjectType === ProjectType::NCC) elseif($project_type->ProjectType === ProjectType::NCC)
{ {
$project_manager = new ProjectManager($project_type->ProjectPath); $project_manager = new ProjectManager($project_type->ProjectPath);
$project_manager->getProjectConfiguration()->assembly->version = $version; $project_manager->getProjectConfiguration()->assembly->setVersion($version);
$project_path = $project_manager->build(); $project_path = $project_manager->build();
} }
else else
@ -131,7 +131,7 @@
if($version !== null) if($version !== null)
{ {
$package = Package::load($project_path); $package = Package::load($project_path);
$package->assembly->version = Functions::convertToSemVer($version); $package->assembly->setVersion(Functions::convertToSemVer($version));
$package->save($project_path); $package->save($project_path);
} }
@ -169,7 +169,7 @@
/** @var ProjectConfiguration\ExecutionPolicy $policy */ /** @var ProjectConfiguration\ExecutionPolicy $policy */
foreach($configuration->execution_policies as $policy) foreach($configuration->execution_policies as $policy)
{ {
Console::outVerbose(sprintf('Compiling Execution Policy %s', $policy->name)); Console::outVerbose(sprintf('Compiling Execution Policy %s', $policy->getName()));
/** @noinspection DisconnectedForeachInstructionInspection */ /** @noinspection DisconnectedForeachInstructionInspection */
if($total_items > 5) if($total_items > 5)
@ -177,7 +177,7 @@
Console::inlineProgressBar($processed_items, $total_items); Console::inlineProgressBar($processed_items, $total_items);
} }
$unit_path = Functions::correctDirectorySeparator($path . $policy->execute->target); $unit_path = Functions::correctDirectorySeparator($path . $policy->getExecute()->getTarget());
$execution_units[] = Functions::compileRunner($unit_path, $policy); $execution_units[] = Functions::compileRunner($unit_path, $policy);
} }
@ -207,15 +207,15 @@
// Write the package to disk // Write the package to disk
$FileSystem = new Filesystem(); $FileSystem = new Filesystem();
$BuildConfiguration = $configuration->build->getBuildConfiguration($build_configuration); $BuildConfiguration = $configuration->build->getBuildConfiguration($build_configuration);
if(!$FileSystem->exists($path . $BuildConfiguration->output_path)) if(!$FileSystem->exists($path . $BuildConfiguration->getOutputPath()))
{ {
Console::outDebug(sprintf('creating output directory %s', $path . $BuildConfiguration->output_path)); Console::outDebug(sprintf('creating output directory %s', $path . $BuildConfiguration->getOutputPath()));
$FileSystem->mkdir($path . $BuildConfiguration->output_path); $FileSystem->mkdir($path . $BuildConfiguration->getOutputPath());
} }
// Finally write the package to the disk // Finally write the package to the disk
$FileSystem->mkdir($path . $BuildConfiguration->output_path); $FileSystem->mkdir($path . $BuildConfiguration->getOutputPath());
$output_file = $path . $BuildConfiguration->output_path . DIRECTORY_SEPARATOR . $package->assembly->package . '.ncc'; $output_file = $path . $BuildConfiguration->getOutputPath() . DIRECTORY_SEPARATOR . $package->assembly->getPackage() . '.ncc';
if($FileSystem->exists($output_file)) if($FileSystem->exists($output_file))
{ {
Console::outDebug(sprintf('removing existing package %s', $output_file)); Console::outDebug(sprintf('removing existing package %s', $output_file));
@ -263,7 +263,7 @@
$units = []; $units = [];
foreach($package->execution_units as $executionUnit) foreach($package->execution_units as $executionUnit)
{ {
Console::outDebug(sprintf('compiling execution unit constant %s (%s)', $executionUnit->execution_policy->name, implode(', ', array_keys($refs)))); Console::outDebug(sprintf('compiling execution unit constant %s (%s)', $executionUnit->execution_policy->getName(), implode(', ', array_keys($refs))));
$units[] = self::compileExecutionUnitConstants($executionUnit, $refs); $units[] = self::compileExecutionUnitConstants($executionUnit, $refs);
} }
$package->execution_units = $units; $package->execution_units = $units;
@ -314,46 +314,47 @@
*/ */
public static function compileExecutionUnitConstants(Package\ExecutionUnit $unit, array $refs): Package\ExecutionUnit public static function compileExecutionUnitConstants(Package\ExecutionUnit $unit, array $refs): Package\ExecutionUnit
{ {
$unit->execution_policy->message = self::compileConstants($unit->execution_policy->message, $refs); $unit->execution_policy->setMessage(self::compileConstants($unit->execution_policy->getMessage(), $refs));
if($unit->execution_policy->exit_handlers !== null) if($unit->execution_policy->getExitHandlers() !== null)
{ {
if($unit->execution_policy->exit_handlers->success !== null) if($unit->execution_policy->getExitHandlers()->getSuccess()?->getMessage() !== null)
{ {
$unit->execution_policy->exit_handlers->success->message = self::compileConstants($unit->execution_policy->exit_handlers->success->message, $refs); $unit->execution_policy->getExitHandlers()->getSuccess()?->setMessage(
self::compileConstants($unit->execution_policy->getExitHandlers()->getSuccess()->getMessage(), $refs)
);
} }
if($unit->execution_policy->exit_handlers->error !== null) if($unit->execution_policy->getExitHandlers()->getError()?->getMessage() !== null)
{ {
$unit->execution_policy->exit_handlers->error->message = self::compileConstants($unit->execution_policy->exit_handlers->error->message, $refs); $unit->execution_policy->getExitHandlers()->getError()?->setMessage(
self::compileConstants($unit->execution_policy->getExitHandlers()->getError()->getMessage(), $refs)
);
} }
if($unit->execution_policy->exit_handlers->warning !== null) if($unit->execution_policy->getExitHandlers()->getWarning()?->getMessage() !== null)
{ {
$unit->execution_policy->exit_handlers->warning->message = self::compileConstants($unit->execution_policy->exit_handlers->warning->message, $refs); $unit->execution_policy->getExitHandlers()->getWarning()?->setMessage(
self::compileConstants($unit->execution_policy->getExitHandlers()->getWarning()->getMessage(), $refs)
);
} }
} }
if($unit->execution_policy->execute !== null) if($unit->execution_policy->getExecute() !== null)
{ {
if($unit->execution_policy->execute->target !== 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->execution_policy->execute->target = self::compileConstants($unit->execution_policy->execute->target, $refs);
}
if($unit->execution_policy->execute->working_directory !== null) if(count($unit->execution_policy->getExecute()->getOptions()) > 0)
{
$unit->execution_policy->execute->working_directory = self::compileConstants($unit->execution_policy->execute->working_directory, $refs);
}
if($unit->execution_policy->execute->options !== null && count($unit->execution_policy->execute->options) > 0)
{ {
$options = []; $options = [];
foreach($unit->execution_policy->execute->options as $key=> $value) foreach($unit->execution_policy->getExecute()->getOptions() as $key=> $value)
{ {
$options[self::compileConstants($key, $refs)] = self::compileConstants($value, $refs); $options[self::compileConstants($key, $refs)] = self::compileConstants($value, $refs);
} }
$unit->execution_policy->execute->options = $options;
$unit->execution_policy->getExecute()->setOptions($options);
} }
} }

View file

@ -56,7 +56,7 @@
$ExecutionPointerManager = new ExecutionPointerManager(); $ExecutionPointerManager = new ExecutionPointerManager();
$ExecutionPointerManager->addUnit($package, $version, $unit, true); $ExecutionPointerManager->addUnit($package, $version, $unit, true);
$ExecutionPointerManager->executeUnit($package, $version, $unit->execution_policy->name); $ExecutionPointerManager->executeUnit($package, $version, $unit->execution_policy->getName());
$ExecutionPointerManager->cleanTemporaryUnits(); $ExecutionPointerManager->cleanTemporaryUnits();
} }
} }

View file

@ -43,7 +43,6 @@
public static function processUnit(string $path, ExecutionPolicy $policy): ExecutionUnit public static function processUnit(string $path, ExecutionPolicy $policy): ExecutionUnit
{ {
$execution_unit = new ExecutionUnit(); $execution_unit = new ExecutionUnit();
$policy->execute->target = null;
if(!file_exists($path) && !is_file($path)) if(!file_exists($path) && !is_file($path))
{ {

View file

@ -35,6 +35,7 @@
use ncc\Exceptions\BuildException; use ncc\Exceptions\BuildException;
use ncc\Exceptions\ConfigurationException; use ncc\Exceptions\ConfigurationException;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Exceptions\NotSupportedException;
use ncc\Exceptions\OperationException; use ncc\Exceptions\OperationException;
use ncc\Exceptions\PackageException; use ncc\Exceptions\PackageException;
use ncc\Exceptions\PathNotFoundException; use ncc\Exceptions\PathNotFoundException;
@ -42,6 +43,7 @@
use ncc\Managers\PackageLockManager; use ncc\Managers\PackageLockManager;
use ncc\Objects\Package; use ncc\Objects\Package;
use ncc\Objects\ProjectConfiguration; use ncc\Objects\ProjectConfiguration;
use ncc\Objects\ProjectConfiguration\Dependency;
use ncc\ThirdParty\nikic\PhpParser\ParserFactory; use ncc\ThirdParty\nikic\PhpParser\ParserFactory;
use ncc\ThirdParty\Symfony\Filesystem\Filesystem; use ncc\ThirdParty\Symfony\Filesystem\Filesystem;
use ncc\ThirdParty\theseer\DirectoryScanner\DirectoryScanner; use ncc\ThirdParty\theseer\DirectoryScanner\DirectoryScanner;
@ -106,8 +108,8 @@
// Create the package object // Create the package object
$this->package = new Package(); $this->package = new Package();
$this->package->assembly = $this->project->assembly; $this->package->assembly = $this->project->assembly;
$this->package->dependencies = $this->project->build->dependencies; $this->package->dependencies = $this->project->build->getDependencies();
$this->package->main_execution_policy = $this->project->build->main; $this->package->main_execution_policy = $this->project->build->getMain();
// Add the option to create a symbolic link to the package // Add the option to create a symbolic link to the package
if(isset($this->project->project->options['create_symlink']) && $this->project->project->options['create_symlink'] === True) if(isset($this->project->project->options['create_symlink']) && $this->project->project->options['create_symlink'] === True)
@ -119,8 +121,8 @@
// Global constants are overridden // Global constants are overridden
$this->package->header->RuntimeConstants = []; $this->package->header->RuntimeConstants = [];
$this->package->header->RuntimeConstants = array_merge( $this->package->header->RuntimeConstants = array_merge(
($selected_build_configuration->define_constants ?? []), $selected_build_configuration->getDefineConstants(),
($this->project->build->define_constants ?? []), ($this->project->build->getDefineConstants()),
($this->package->header->RuntimeConstants ?? []) ($this->package->header->RuntimeConstants ?? [])
); );
@ -137,11 +139,11 @@
Console::outDebug('theseer\DirectoryScanner - Copyright (c) 2009-2014 Arne Blankerts <arne@blankerts.de> All rights reserved.'); Console::outDebug('theseer\DirectoryScanner - Copyright (c) 2009-2014 Arne Blankerts <arne@blankerts.de> All rights reserved.');
// First scan the project files and create a file struct. // First scan the project files and create a file struct.
$DirectoryScanner = new DirectoryScanner(); $directory_scanner = new DirectoryScanner();
try try
{ {
$DirectoryScanner->unsetFlag(FilesystemIterator::FOLLOW_SYMLINKS); $directory_scanner->unsetFlag(FilesystemIterator::FOLLOW_SYMLINKS);
} }
catch (Exception $e) catch (Exception $e)
{ {
@ -149,14 +151,14 @@
} }
// Include file components that can be compiled // Include file components that can be compiled
$DirectoryScanner->setIncludes(ComponentFileExtensions::PHP); $directory_scanner->setIncludes(ComponentFileExtensions::PHP);
if($selected_build_configuration->exclude_files !== null && count($selected_build_configuration->exclude_files) > 0) if(count($selected_build_configuration->getExcludeFiles()) > 0)
{ {
$DirectoryScanner->setExcludes($selected_build_configuration->exclude_files); $directory_scanner->setExcludes($selected_build_configuration->getExcludeFiles());
} }
$source_path = $this->path . $this->project->build->source_path; $source_path = $this->path . $this->project->build->getSourcePath();
// TODO: Re-implement the scanning process outside the compiler, as this is will be redundant // TODO: Re-implement the scanning process outside the compiler, as this is will be redundant
// Scan for components first. // Scan for components first.
@ -165,7 +167,7 @@
Console::outVerbose('Scanning for components... '); Console::outVerbose('Scanning for components... ');
/** @var SplFileInfo $item */ /** @var SplFileInfo $item */
/** @noinspection PhpRedundantOptionalArgumentInspection */ /** @noinspection PhpRedundantOptionalArgumentInspection */
foreach($DirectoryScanner($source_path, True) as $item) foreach($directory_scanner($source_path, True) as $item)
{ {
// Ignore directories, they're not important. :-) // Ignore directories, they're not important. :-)
if(is_dir($item->getPathName())) if(is_dir($item->getPathName()))
@ -173,11 +175,11 @@
continue; continue;
} }
$Component = new Package\Component(); $component = new Package\Component();
$Component->name = Functions::removeBasename($item->getPathname(), $this->path); $component->name = Functions::removeBasename($item->getPathname(), $this->path);
$this->package->components[] = $Component; $this->package->components[] = $component;
Console::outVerbose(sprintf('Found component %s', $Component->name)); Console::outVerbose(sprintf('Found component %s', $component->name));
} }
if(count($this->package->components) > 0) if(count($this->package->components) > 0)
@ -190,22 +192,22 @@
} }
// Clear previously excludes and includes // Clear previously excludes and includes
$DirectoryScanner->setExcludes(); $directory_scanner->setExcludes();
$DirectoryScanner->setIncludes(); $directory_scanner->setIncludes();
// Ignore component files // Ignore component files
if($selected_build_configuration->exclude_files !== null && count($selected_build_configuration->exclude_files) > 0) if(count($selected_build_configuration->getExcludeFiles()) > 0)
{ {
$DirectoryScanner->setExcludes(array_merge($selected_build_configuration->exclude_files, ComponentFileExtensions::PHP)); $directory_scanner->setExcludes(array_merge($selected_build_configuration->getExcludeFiles(), ComponentFileExtensions::PHP));
} }
else else
{ {
$DirectoryScanner->setExcludes(ComponentFileExtensions::PHP); $directory_scanner->setExcludes(ComponentFileExtensions::PHP);
} }
Console::outVerbose('Scanning for resources... '); Console::outVerbose('Scanning for resources... ');
/** @var SplFileInfo $item */ /** @var SplFileInfo $item */
foreach($DirectoryScanner($source_path) as $item) foreach($directory_scanner($source_path) as $item)
{ {
// Ignore directories, they're not important. :-) // Ignore directories, they're not important. :-)
if(is_dir($item->getPathName())) if(is_dir($item->getPathName()))
@ -213,11 +215,11 @@
continue; continue;
} }
$Resource = new Package\Resource(); $resource = new Package\Resource();
$Resource->Name = Functions::removeBasename($item->getPathname(), $this->path); $resource->Name = Functions::removeBasename($item->getPathname(), $this->path);
$this->package->resources[] = $Resource; $this->package->resources[] = $resource;
Console::outVerbose(sprintf('found resource %s', $Resource->Name)); Console::outVerbose(sprintf('found resource %s', $resource->Name));
} }
if(count($this->package->resources) > 0) if(count($this->package->resources) > 0)
@ -236,14 +238,14 @@
$selected_dependencies = []; $selected_dependencies = [];
if($this->project->build->dependencies !== null && count($this->project->build->dependencies) > 0) if(count($this->project->build->getDependencies()) > 0)
{ {
$selected_dependencies = array_merge($selected_dependencies, $this->project->build->dependencies); $selected_dependencies = array_merge($selected_dependencies, $this->project->build->getDependencies());
} }
if($selected_build_configuration->dependencies !== null && count($selected_build_configuration->dependencies) > 0) if(count($selected_build_configuration->getDependencies()) > 0)
{ {
$selected_dependencies = array_merge($selected_dependencies, $selected_build_configuration->dependencies); $selected_dependencies = array_merge($selected_dependencies, $selected_build_configuration->getDependencies());
} }
// Process the dependencies // Process the dependencies
@ -252,14 +254,14 @@
$package_lock_manager = new PackageLockManager(); $package_lock_manager = new PackageLockManager();
$filesystem = new Filesystem(); $filesystem = new Filesystem();
$lib_path = $selected_build_configuration->output_path . DIRECTORY_SEPARATOR . 'libs'; $lib_path = $selected_build_configuration->getOutputPath() . DIRECTORY_SEPARATOR . 'libs';
if($filesystem->exists($lib_path)) if($filesystem->exists($lib_path))
{ {
$filesystem->remove($lib_path); $filesystem->remove($lib_path);
} }
Console::outVerbose('Scanning for dependencies... '); Console::outVerbose('Scanning for dependencies... ');
/** @var \ncc\Objects\ProjectConfiguration\Dependency $dependency */ /** @var Dependency $dependency */
foreach($selected_dependencies as $dependency) foreach($selected_dependencies as $dependency)
{ {
Console::outVerbose(sprintf('processing dependency %s', $dependency->getName())); Console::outVerbose(sprintf('processing dependency %s', $dependency->getName()));
@ -325,10 +327,10 @@
* Executes the compile process in the correct order and returns the finalized Package object * Executes the compile process in the correct order and returns the finalized Package object
* *
* @return Package|null * @return Package|null
* @throws \ncc\Exceptions\BuildException * @throws BuildException
* @throws \ncc\Exceptions\IOException * @throws IOException
* @throws \ncc\Exceptions\NotSupportedException * @throws NotSupportedException
* @throws \ncc\Exceptions\PathNotFoundException * @throws PathNotFoundException
*/ */
public function build(): ?Package public function build(): ?Package
{ {
@ -386,7 +388,7 @@
// Get the data and // Get the data and
$resource->Data = IO::fread(Functions::correctDirectorySeparator($this->path . $resource->Name)); $resource->Data = IO::fread(Functions::correctDirectorySeparator($this->path . $resource->Name));
$resource->Data = Base64::encode($resource->Data); $resource->Data = Base64::encode($resource->Data);
$resource->Name = str_replace($this->project->build->source_path, (string)null, $resource->Name); $resource->Name = str_replace($this->project->build->getSourcePath(), (string)null, $resource->Name);
$resource->updateChecksum(); $resource->updateChecksum();
$resources[] = $resource; $resources[] = $resource;
@ -454,7 +456,7 @@
unset($parser); unset($parser);
$component->name = str_replace($this->project->build->source_path, (string)null, $component->name); $component->name = str_replace($this->project->build->getSourcePath(), (string)null, $component->name);
$component->updateChecksum(); $component->updateChecksum();
$components[] = $component; $components[] = $component;
++$processed_items; ++$processed_items;
@ -468,9 +470,9 @@
/** /**
* @return void * @return void
* @throws \ncc\Exceptions\IOException * @throws IOException
* @throws \ncc\Exceptions\NotSupportedException * @throws NotSupportedException
* @throws \ncc\Exceptions\PathNotFoundException * @throws PathNotFoundException
*/ */
public function compileExecutionPolicies(): void public function compileExecutionPolicies(): void
{ {

View file

@ -46,8 +46,6 @@
throw new PathNotFoundException($path); throw new PathNotFoundException($path);
} }
$policy->execute->target = null;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);

View file

@ -84,7 +84,7 @@
try try
{ {
Constants::register($assembly->package, $name, $value, true); Constants::register($assembly->getPackage(), $name, $value, true);
} }
catch (IntegrityException $e) catch (IntegrityException $e)
{ {

View file

@ -49,7 +49,6 @@
throw new PathNotFoundException($path); throw new PathNotFoundException($path);
} }
$policy->execute->target = null;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);

View file

@ -49,7 +49,6 @@
throw new PathNotFoundException($path); throw new PathNotFoundException($path);
} }
$policy->execute->target = null;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);

View file

@ -49,7 +49,6 @@
throw new PathNotFoundException($path); throw new PathNotFoundException($path);
} }
$policy->execute->target = null;
$execution_unit->execution_policy = $policy; $execution_unit->execution_policy = $policy;
$execution_unit->Data = IO::fread($path); $execution_unit->Data = IO::fread($path);

View file

@ -22,10 +22,11 @@
namespace ncc\Exceptions; namespace ncc\Exceptions;
use Exception;
use ncc\Enums\ExceptionCodes; use ncc\Enums\ExceptionCodes;
use Throwable; use Throwable;
class IntegrityException extends \Exception class IntegrityException extends Exception
{ {
public function __construct(string $message = "", ?Throwable $previous = null) public function __construct(string $message = "", ?Throwable $previous = null)
{ {

View file

@ -28,8 +28,30 @@
class PathNotFoundException extends Exception class PathNotFoundException extends Exception
{ {
/**
* @var string
*/
private string $path;
/**
* PathNotFoundException constructor.
*
* @param string $path
* @param Throwable|null $previous
*/
public function __construct(string $path, ?Throwable $previous = null) public function __construct(string $path, ?Throwable $previous = null)
{ {
parent::__construct(sprintf('Path "%s" not found', $path), ExceptionCodes::PATH_NOT_FOUND, $previous); parent::__construct(sprintf('Path "%s" not found', $path), ExceptionCodes::PATH_NOT_FOUND, $previous);
$this->path = $path;
}
/**
* Returns the path that was not found
*
* @return string
*/
public function getPath(): string
{
return $this->path;
} }
} }

View file

@ -44,5 +44,4 @@
* @return string * @return string
*/ */
public static function getFileExtension(): string; public static function getFileExtension(): string;
} }

View file

@ -82,6 +82,7 @@
* Saves the configuration file to disk * Saves the configuration file to disk
* *
* @return void * @return void
* @throws AuthenticationException
* @throws IOException * @throws IOException
*/ */
public function save(): void public function save(): void
@ -142,6 +143,7 @@
* @param $value * @param $value
* @return bool * @return bool
* @throws IOException * @throws IOException
* @throws AuthenticationException
*/ */
public function updateProperty(string $property, $value): bool public function updateProperty(string $property, $value): bool
{ {

View file

@ -29,6 +29,7 @@
use ncc\Enums\Versions; use ncc\Enums\Versions;
use ncc\Exceptions\AuthenticationException; use ncc\Exceptions\AuthenticationException;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Exceptions\PathNotFoundException;
use ncc\Exceptions\RuntimeException; use ncc\Exceptions\RuntimeException;
use ncc\Objects\Vault; use ncc\Objects\Vault;
use ncc\Utilities\Console; use ncc\Utilities\Console;
@ -76,6 +77,7 @@
* Constructs the store file if it doesn't exist on the system (First initialization) * Constructs the store file if it doesn't exist on the system (First initialization)
* *
* @return void * @return void
* @throws AuthenticationException
* @throws IOException * @throws IOException
*/ */
public function constructStore(): void public function constructStore(): void
@ -105,6 +107,7 @@
* *
* @return void * @return void
* @throws IOException * @throws IOException
* @throws PathNotFoundException
* @throws RuntimeException * @throws RuntimeException
*/ */
private function loadVault(): void private function loadVault(): void
@ -137,6 +140,7 @@
* Saves the vault to the disk * Saves the vault to the disk
* *
* @return void * @return void
* @throws AuthenticationException
* @throws IOException * @throws IOException
*/ */
public function saveVault(): void public function saveVault(): void

View file

@ -174,15 +174,15 @@
{ {
if(Resolver::resolveScope() !== Scopes::SYSTEM) if(Resolver::resolveScope() !== Scopes::SYSTEM)
{ {
throw new AuthenticationException('Cannot add new ExecutionUnit \'' . $unit->execution_policy->name .'\' for ' . $package . ', insufficient permissions'); throw new AuthenticationException('Cannot add new ExecutionUnit \'' . $unit->execution_policy->getName() .'\' for ' . $package . ', insufficient permissions');
} }
Console::outVerbose(sprintf('Adding new ExecutionUnit \'%s\' for %s', $unit->execution_policy->name, $package)); Console::outVerbose(sprintf('Adding new ExecutionUnit \'%s\' for %s', $unit->execution_policy->getName(), $package));
$package_id = $this->getPackageId($package, $version); $package_id = $this->getPackageId($package, $version);
$package_config_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id . '.inx'; $package_config_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id . '.inx';
$package_bin_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id; $package_bin_path = $this->runner_path . DIRECTORY_SEPARATOR . $package_id;
$entry_point_path = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->name) . '.entrypoint'; $entry_point_path = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->getName()) . '.entrypoint';
Console::outDebug(sprintf('package_id=%s', $package_id)); Console::outDebug(sprintf('package_id=%s', $package_id));
Console::outDebug(sprintf('package_config_path=%s', $package_config_path)); 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))); $execution_pointers = ExecutionPointers::fromArray(ZiProto::decode(IO::fread($package_config_path)));
} }
$bin_file = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->name); $bin_file = $package_bin_path . DIRECTORY_SEPARATOR . hash('haval128,4', $unit->execution_policy->getName());
$bin_file .= match ($unit->execution_policy->runner) $bin_file .= match ($unit->execution_policy->getRunner())
{ {
Runners::BASH => BashRunner::getFileExtension(), Runners::BASH => BashRunner::getFileExtension(),
Runners::PHP => PhpRunner::getFileExtension(), Runners::PHP => PhpRunner::getFileExtension(),
@ -211,7 +211,7 @@
Runners::PYTHON_2 => Python2Runner::getFileExtension(), Runners::PYTHON_2 => Python2Runner::getFileExtension(),
Runners::PYTHON_3 => Python3Runner::getFileExtension(), Runners::PYTHON_3 => Python3Runner::getFileExtension(),
Runners::LUA => LuaRunner::getFileExtension(), Runners::LUA => LuaRunner::getFileExtension(),
default => throw new NotSupportedException('The runner \'' . $unit->execution_policy->runner . '\' is not supported'), default => throw new NotSupportedException('The runner \'' . $unit->execution_policy->getRunner() . '\' is not supported'),
}; };
Console::outDebug(sprintf('bin_file=%s', $bin_file)); Console::outDebug(sprintf('bin_file=%s', $bin_file));
@ -237,7 +237,7 @@
$entry_point = sprintf("#!%s\nncc exec --package=\"%s\" --exec-version=\"%s\" --exec-unit=\"%s\" --exec-args \"$@\"", $entry_point = sprintf("#!%s\nncc exec --package=\"%s\" --exec-version=\"%s\" --exec-unit=\"%s\" --exec-args \"$@\"",
'/bin/bash', '/bin/bash',
$package, $version, $unit->execution_policy->name $package, $version, $unit->execution_policy->getName()
); );
if(file_exists($entry_point_path)) if(file_exists($entry_point_path))
@ -250,11 +250,11 @@
if($temporary) if($temporary)
{ {
Console::outVerbose(sprintf('Adding temporary ExecutionUnit \'%s\' for %s', $unit->execution_policy->name, $package)); Console::outVerbose(sprintf('Adding temporary ExecutionUnit \'%s\' for %s', $unit->execution_policy->getName(), $package));
$this->temporary_units[] = [ $this->temporary_units[] = [
'package' => $package, 'package' => $package,
'version' => $version, 'version' => $version,
'unit' => $unit->execution_policy->name 'unit' => $unit->execution_policy->getName()
]; ];
} }
} }
@ -351,8 +351,8 @@
$results = []; $results = [];
foreach($execution_pointers->getPointers() as $pointer) foreach($execution_pointers->getPointers() as $pointer)
{ {
Console::outDebug(sprintf('unit %s', $pointer->execution_policy->name)); Console::outDebug(sprintf('unit %s', $pointer->execution_policy->getName()));
$results[] = $pointer->execution_policy->name; $results[] = $pointer->execution_policy->getName();
} }
return $results; return $results;
@ -390,34 +390,32 @@
throw new OperationException('The execution unit \'' . $name . '\' was not found for \'' . $package . '=' .$version .'\''); throw new OperationException('The execution unit \'' . $name . '\' was not found for \'' . $package . '=' .$version .'\'');
} }
Console::outDebug(sprintf('unit=%s', $unit->execution_policy->name)); Console::outDebug(sprintf('unit=%s', $unit->execution_policy->getName()));
Console::outDebug(sprintf('runner=%s', $unit->execution_policy->runner)); Console::outDebug(sprintf('runner=%s', $unit->execution_policy->getRunner()));
Console::outDebug(sprintf('file=%s', $unit->file_pointer)); Console::outDebug(sprintf('file=%s', $unit->file_pointer));
Console::outDebug(sprintf('pass_thru_args=%s', implode(' ', $args))); Console::outDebug(sprintf('pass_thru_args=%s', implode(' ', $args)));
// Handle the arguments // Handle the arguments
if($unit->execution_policy->execute->options !== null && count($unit->execution_policy->execute->options) > 0) if(count($unit->execution_policy->getExecute()->getOptions()) > 0)
{ {
$args = array_merge($args, $unit->execution_policy->execute->options); $args = array_merge($args, $unit->execution_policy->getExecute()->getOptions());
foreach($unit->execution_policy->execute->options as $option) foreach($unit->execution_policy->getExecute()->getOptions() as $option)
{ {
$args[] = ConstantCompiler::compileRuntimeConstants($option); $args[] = ConstantCompiler::compileRuntimeConstants($option);
} }
} }
$process = new Process(array_merge( $process = new Process(array_merge(
[PathFinder::findRunner(strtolower($unit->execution_policy->runner)), $unit->file_pointer], $args) [PathFinder::findRunner(strtolower($unit->execution_policy->getRunner())), $unit->file_pointer], $args)
); );
if($unit->execution_policy->execute->working_directory !== null) $process->setWorkingDirectory(ConstantCompiler::compileRuntimeConstants($unit->execution_policy->getExecute()->getWorkingDirectory()));
{
$process->setWorkingDirectory(ConstantCompiler::compileRuntimeConstants($unit->execution_policy->execute->working_directory));
}
if($unit->execution_policy->execute->timeout !== null)
if(is_null($unit->execution_policy->getExecute()->getTimeout()))
{ {
$process->setTimeout((float)$unit->execution_policy->execute->timeout); $process->setTimeout((float)$unit->execution_policy->getExecute()->getTimeout());
} }
else else
{ {
@ -427,12 +425,12 @@
try try
{ {
if($unit->execution_policy->execute->silent) if($unit->execution_policy->getExecute()->isSilent())
{ {
$process->disableOutput(); $process->disableOutput();
$process->setTty(false); $process->setTty(false);
} }
elseif($unit->execution_policy->execute->tty) elseif($unit->execution_policy->getExecute()->isTty())
{ {
$process->enableOutput(); $process->enableOutput();
$process->setTty(true); $process->setTty(true);
@ -459,16 +457,16 @@
Console::outDebug(sprintf('working_directory=%s', $process->getWorkingDirectory())); Console::outDebug(sprintf('working_directory=%s', $process->getWorkingDirectory()));
Console::outDebug(sprintf('timeout=%s', (int)$process->getTimeout())); Console::outDebug(sprintf('timeout=%s', (int)$process->getTimeout()));
Console::outDebug(sprintf('silent=%s', ($unit->execution_policy->execute->silent ? 'true' : 'false'))); Console::outDebug(sprintf('silent=%s', ($unit->execution_policy->getExecute()->isSilent() ? 'true' : 'false')));
Console::outDebug(sprintf('tty=%s', ($unit->execution_policy->execute->tty ? 'true' : 'false'))); Console::outDebug(sprintf('tty=%s', ($unit->execution_policy->getExecute()->isTty() ? 'true' : 'false')));
Console::outDebug(sprintf('options=%s', implode(' ', $args))); Console::outDebug(sprintf('options=%s', implode(' ', $args)));
Console::outDebug(sprintf('cmd=%s', $process->getCommandLine())); Console::outDebug(sprintf('cmd=%s', $process->getCommandLine()));
try try
{ {
if($unit->execution_policy->message !== null) if($unit->execution_policy->getMessage() !== null)
{ {
Console::out($unit->execution_policy->message); Console::out($unit->execution_policy->getMessage());
} }
$process->run(function ($type, $buffer) $process->run(function ($type, $buffer)
@ -480,33 +478,33 @@
} }
catch(Exception $e) catch(Exception $e)
{ {
if($unit->execution_policy->exit_handlers !== null && $unit->execution_policy->exit_handlers->error !== null) if($unit->execution_policy->getExitHandlers() !== null && $unit->execution_policy->getExitHandlers()->getError() !== null)
{ {
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->error); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError());
} }
Console::outException(sprintf('An error occurred while executing the unit \'%s\' for \'%s\' (exit code %s)', $unit->execution_policy->name, $package, $process->getExitCode()), $e); Console::outException(sprintf('An error occurred while executing the unit \'%s\' for \'%s\' (exit code %s)', $unit->execution_policy->getName(), $package, $process->getExitCode()), $e);
} }
finally finally
{ {
Console::outDebug(sprintf('exit_code=%s', $process->getExitCode())); Console::outDebug(sprintf('exit_code=%s', $process->getExitCode()));
} }
if($unit->execution_policy->exit_handlers !== null) if($unit->execution_policy->getExitHandlers() !== null)
{ {
if($unit->execution_policy->exit_handlers->success !== null && $process->isSuccessful()) if($unit->execution_policy->getExitHandlers()->getSuccess() !== null && $process->isSuccessful())
{ {
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->success); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getSuccess());
} }
elseif($unit->execution_policy->exit_handlers->error !== null && $process->isSuccessful()) elseif($unit->execution_policy->getExitHandlers()->getError() !== null && $process->isSuccessful())
{ {
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->error); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError());
} }
else else
{ {
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->success, $process); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getSuccess(), $process);
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->warning, $process); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getWarning(), $process);
$this->handleExit($package, $version, $unit->execution_policy->exit_handlers->error, $process); $this->handleExit($package, $version, $unit->execution_policy->getExitHandlers()->getError(), $process);
} }
} }
@ -532,26 +530,26 @@
if($unit === null) if($unit === null)
{ {
throw new OperationException(sprintf('No execution unit named \'%s\' is available for package \'%s\'', $unit_name, $package->assembly->package)); throw new OperationException(sprintf('No execution unit named \'%s\' is available for package \'%s\'', $unit_name, $package->assembly->getPackage()));
} }
// Get the required units // Get the required units
$required_units = []; $required_units = [];
if($unit->execution_policy->exit_handlers !== null) if($unit->execution_policy->getExitHandlers() !== null)
{ {
$required_unit = $unit->execution_policy?->exit_handlers?->success?->run; $required_unit = $unit->execution_policy?->getExitHandlers()?->getSuccess()?->getRun();
if($required_unit !== null) if($required_unit !== null)
{ {
$required_units[] = $required_unit; $required_units[] = $required_unit;
} }
$required_unit = $unit->execution_policy?->exit_handlers?->warning?->run; $required_unit = $unit->execution_policy?->getExitHandlers()?->getWarning()?->getRun();
if($required_unit !== null) if($required_unit !== null)
{ {
$required_units[] = $required_unit; $required_units[] = $required_unit;
} }
$required_unit = $unit->execution_policy?->exit_handlers?->error?->run; $required_unit = $unit->execution_policy?->getExitHandlers()?->getError()?->getRun();
if($required_unit !== null) if($required_unit !== null)
{ {
$required_units = $required_unit; $required_units = $required_unit;
@ -559,13 +557,13 @@
} }
// Install the units temporarily // Install the units temporarily
$this->addUnit($package->assembly->package, $package->assembly->version, $unit, true); $this->addUnit($package->assembly->getPackage(), $package->assembly->getVersion(), $unit, true);
foreach($required_units as $r_unit) foreach($required_units as $r_unit)
{ {
$this->addUnit($package->assembly->package, $package->assembly->version, $r_unit, true); $this->addUnit($package->assembly->getPackage(), $package->assembly->getVersion(), $r_unit, true);
} }
$this->executeUnit($package->assembly->package, $package->assembly->version, $unit_name); $this->executeUnit($package->assembly->getPackage(), $package->assembly->getVersion(), $unit_name);
$this->cleanTemporaryUnits(); $this->cleanTemporaryUnits();
} }
@ -586,28 +584,28 @@
*/ */
public function handleExit(string $package, string $version, ExitHandle $exit_handler, ?Process $process=null): bool public function handleExit(string $package, string $version, ExitHandle $exit_handler, ?Process $process=null): bool
{ {
if($exit_handler->message !== null) if($exit_handler->getMessage() !== null)
{ {
Console::out($exit_handler->message); Console::out($exit_handler->getMessage());
} }
if($process !== null && !$exit_handler->end_process) if($process !== null && !$exit_handler->getEndProcess())
{ {
if($exit_handler->exit_code !== $process->getExitCode()) if($exit_handler->getExitCode() !== $process->getExitCode())
{ {
return false; return false;
} }
} }
elseif($exit_handler->end_process) elseif($exit_handler->getEndProcess())
{ {
Console::outDebug(sprintf('exit_code=%s', $process->getExitCode())); Console::outDebug(sprintf('exit_code=%s', $process->getExitCode()));
exit($exit_handler->exit_code); exit($exit_handler->getExitCode());
} }
if($exit_handler->run !== null) if($exit_handler->getRun() !== null)
{ {
Console::outVerbose('Running unit \'' . $exit_handler->run . '\''); Console::outVerbose('Running unit \'' . $exit_handler->getRun() . '\'');
$this->executeUnit($package, $version, $exit_handler->run); $this->executeUnit($package, $version, $exit_handler->getRun());
} }
return true; return true;

View file

@ -39,6 +39,7 @@
use ncc\Classes\PhpExtension\PhpInstaller; use ncc\Classes\PhpExtension\PhpInstaller;
use ncc\CLI\Main; use ncc\CLI\Main;
use ncc\Exceptions\AuthenticationException; use ncc\Exceptions\AuthenticationException;
use ncc\Exceptions\ConfigurationException;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Exceptions\NotSupportedException; use ncc\Exceptions\NotSupportedException;
use ncc\Exceptions\OperationException; use ncc\Exceptions\OperationException;
@ -101,6 +102,7 @@
* @throws OperationException * @throws OperationException
* @throws PackageException * @throws PackageException
* @throws PathNotFoundException * @throws PathNotFoundException
* @throws ConfigurationException
*/ */
public function install(string $package_path, ?Entry $entry=null, array $options=[]): string public function install(string $package_path, ?Entry $entry=null, array $options=[]): string
{ {
@ -116,14 +118,14 @@
$package = Package::load($package_path); $package = Package::load($package_path);
if(RuntimeCache::get(sprintf('installed.%s=%s', $package->assembly->package, $package->assembly->version))) if(RuntimeCache::get(sprintf('installed.%s=%s', $package->assembly->getPackage(), $package->assembly->getVersion())))
{ {
Console::outDebug(sprintf('skipping installation of %s=%s, already processed', $package->assembly->package, $package->assembly->version)); Console::outDebug(sprintf('skipping installation of %s=%s, already processed', $package->assembly->getPackage(), $package->assembly->getVersion()));
return $package->assembly->package; return $package->assembly->getPackage();
} }
$extension = $package->header->CompilerExtension->extension; $extension = $package->header->CompilerExtension->getExtension();
$installation_paths = new InstallationPaths($this->packages_path . DIRECTORY_SEPARATOR . $package->assembly->package . '=' . $package->assembly->version); $installation_paths = new InstallationPaths($this->packages_path . DIRECTORY_SEPARATOR . $package->assembly->getPackage() . '=' . $package->assembly->getVersion());
$installer = match ($extension) $installer = match ($extension)
{ {
@ -131,20 +133,20 @@
default => throw new NotSupportedException(sprintf('Compiler extension %s is not supported with ncc', $extension)) default => throw new NotSupportedException(sprintf('Compiler extension %s is not supported with ncc', $extension))
}; };
if($this->getPackageVersion($package->assembly->package, $package->assembly->version) !== null) if($this->getPackageVersion($package->assembly->getPackage(), $package->assembly->getVersion()) !== null)
{ {
if(in_array(InstallPackageOptions::REINSTALL, $options, true)) if(in_array(InstallPackageOptions::REINSTALL, $options, true))
{ {
if($this->getPackageLockManager()?->getPackageLock()?->packageExists($package->assembly->package, $package->assembly->version)) if($this->getPackageLockManager()?->getPackageLock()?->packageExists($package->assembly->getPackage(), $package->assembly->getVersion()))
{ {
$this->getPackageLockManager()?->getPackageLock()?->removePackageVersion( $this->getPackageLockManager()?->getPackageLock()?->removePackageVersion(
$package->assembly->package, $package->assembly->version $package->assembly->getPackage(), $package->assembly->getVersion()
); );
} }
} }
else else
{ {
throw new PackageException('The package ' . $package->assembly->package . '=' . $package->assembly->version . ' is already installed'); throw new PackageException('The package ' . $package->assembly->getPackage() . '=' . $package->assembly->getVersion() . ' is already installed');
} }
} }
@ -195,7 +197,7 @@
} }
} }
Console::out('Installing ' . $package->assembly->package); Console::out('Installing ' . $package->assembly->getPackage());
// Four For Directory Creation, preInstall, postInstall & initData methods // Four For Directory Creation, preInstall, postInstall & initData methods
$steps = (4 + count($package->components) + count ($package->resources) + count ($package->execution_units)); $steps = (4 + count($package->components) + count ($package->resources) + count ($package->execution_units));
@ -345,8 +347,8 @@
/** @var Package\ExecutionUnit $executionUnit */ /** @var Package\ExecutionUnit $executionUnit */
foreach($package->execution_units as $executionUnit) foreach($package->execution_units as $executionUnit)
{ {
Console::outDebug(sprintf('processing execution unit %s', $executionUnit->execution_policy->name)); Console::outDebug(sprintf('processing execution unit %s', $executionUnit->execution_policy->getName()));
$execution_pointer_manager->addUnit($package->assembly->package, $package->assembly->version, $executionUnit); $execution_pointer_manager->addUnit($package->assembly->getPackage(), $package->assembly->getVersion(), $executionUnit);
++$current_steps; ++$current_steps;
Console::inlineProgressBar($current_steps, $steps); Console::inlineProgressBar($current_steps, $steps);
} }
@ -366,10 +368,10 @@
throw new OperationException('Cannot create symlink, no main execution policy is defined'); throw new OperationException('Cannot create symlink, no main execution policy is defined');
} }
Console::outDebug(sprintf('creating symlink to %s', $package->assembly->package)); Console::outDebug(sprintf('creating symlink to %s', $package->assembly->getPackage()));
$SymlinkManager = new SymlinkManager(); $SymlinkManager = new SymlinkManager();
$SymlinkManager->add($package->assembly->package, $package->main_execution_policy); $SymlinkManager->add($package->assembly->getPackage(), $package->main_execution_policy);
} }
// Execute the post-installation stage after the installation is complete // Execute the post-installation stage after the installation is complete
@ -416,15 +418,15 @@
if($package->header->UpdateSource !== null && $package->header->UpdateSource->repository !== null) if($package->header->UpdateSource !== null && $package->header->UpdateSource->repository !== null)
{ {
$sources_manager = new RemoteSourcesManager(); $sources_manager = new RemoteSourcesManager();
if($sources_manager->getRemoteSource($package->header->UpdateSource->repository->name) === null) if($sources_manager->getRemoteSource($package->header->UpdateSource->repository->getName()) === null)
{ {
Console::outVerbose('Adding remote source ' . $package->header->UpdateSource->repository->name); Console::outVerbose('Adding remote source ' . $package->header->UpdateSource->repository->getName());
$defined_remote_source = new DefinedRemoteSource(); $defined_remote_source = new DefinedRemoteSource();
$defined_remote_source->name = $package->header->UpdateSource->repository->name; $defined_remote_source->name = $package->header->UpdateSource->repository->getName();
$defined_remote_source->host = $package->header->UpdateSource->repository->host; $defined_remote_source->host = $package->header->UpdateSource->repository->getHost();
$defined_remote_source->type = $package->header->UpdateSource->repository->type; $defined_remote_source->type = $package->header->UpdateSource->repository->getType();
$defined_remote_source->ssl = $package->header->UpdateSource->repository->ssl; $defined_remote_source->ssl = $package->header->UpdateSource->repository->isSsl();
$sources_manager->addRemoteSource($defined_remote_source); $sources_manager->addRemoteSource($defined_remote_source);
} }
@ -433,9 +435,9 @@
$this->getPackageLockManager()?->getPackageLock()?->addPackage($package, $installation_paths->getInstallationPath()); $this->getPackageLockManager()?->getPackageLock()?->addPackage($package, $installation_paths->getInstallationPath());
$this->getPackageLockManager()?->save(); $this->getPackageLockManager()?->save();
RuntimeCache::set(sprintf('installed.%s=%s', $package->assembly->package, $package->assembly->version), true); RuntimeCache::set(sprintf('installed.%s=%s', $package->assembly->getPackage(), $package->assembly->getVersion()), true);
return $package->assembly->package; return $package->assembly->getPackage();
} }
/** /**
@ -639,6 +641,7 @@
* @throws OperationException * @throws OperationException
* @throws PackageException * @throws PackageException
* @throws PathNotFoundException * @throws PathNotFoundException
* @throws ConfigurationException
*/ */
private function processDependency(Dependency $dependency, Package $package, string $package_path, ?Entry $entry=null, array $options=[]): void private function processDependency(Dependency $dependency, Package $package, string $package_path, ?Entry $entry=null, array $options=[]): void
{ {
@ -671,7 +674,7 @@
if ($dependency->getSourceType() !== null && !$dependency_met) if ($dependency->getSourceType() !== null && !$dependency_met)
{ {
Console::outVerbose(sprintf('Installing dependency %s=%s for %s=%s', $dependency->getName(), $dependency->getVersion(), $package->assembly->package, $package->assembly->version)); Console::outVerbose(sprintf('Installing dependency %s=%s for %s=%s', $dependency->getName(), $dependency->getVersion(), $package->assembly->getPackage(), $package->assembly->getVersion()));
switch ($dependency->getSourceType()) switch ($dependency->getSourceType())
{ {
case DependencySourceType::LOCAL: case DependencySourceType::LOCAL:
@ -925,9 +928,9 @@
$execution_pointer_manager = new ExecutionPointerManager(); $execution_pointer_manager = new ExecutionPointerManager();
foreach($version_entry->ExecutionUnits as $executionUnit) foreach($version_entry->ExecutionUnits as $executionUnit)
{ {
if(!$execution_pointer_manager->removeUnit($package, $version, $executionUnit->execution_policy->name)) if(!$execution_pointer_manager->removeUnit($package, $version, $executionUnit->execution_policy->getName()))
{ {
Console::outDebug(sprintf('warning: removing execution unit %s failed', $executionUnit->execution_policy->name)); Console::outDebug(sprintf('warning: removing execution unit %s failed', $executionUnit->execution_policy->getName()));
} }
} }
} }
@ -986,7 +989,7 @@
*/ */
private static function initData(Package $package, InstallationPaths $paths): void private static function initData(Package $package, InstallationPaths $paths): void
{ {
Console::outVerbose(sprintf('Initializing data for %s', $package->assembly->name)); Console::outVerbose(sprintf('Initializing data for %s', $package->assembly->getName()));
// Create data files // Create data files
$dependencies = []; $dependencies = [];

View file

@ -128,38 +128,38 @@
$this->project_configuration->project->compiler = $compiler; $this->project_configuration->project->compiler = $compiler;
// Set the assembly information // Set the assembly information
$this->project_configuration->assembly->name = $name; $this->project_configuration->assembly->setName($name);
$this->project_configuration->assembly->package = $package; $this->project_configuration->assembly->setPackage($package);
$this->project_configuration->assembly->version = '1.0.0'; $this->project_configuration->assembly->setVersion('1.0.0');
$this->project_configuration->assembly->uuid = Uuid::v1()->toRfc4122(); $this->project_configuration->assembly->setUuid(Uuid::v1()->toRfc4122());
// Set the build information // Set the build information
$this->project_configuration->build->source_path = $src; $this->project_configuration->build->setSourcePath($src);
if($this->project_configuration->build->source_path === null) if($this->project_configuration->build->getSourcePath() === null)
{ {
$this->project_configuration->build->source_path = $this->project_path; $this->project_configuration->build->setSourcePath($this->project_path);
} }
$this->project_configuration->build->default_configuration = 'debug'; $this->project_configuration->build->setDefaultConfiguration('debug');
// Assembly constants if the program wishes to check for this // Assembly constants if the program wishes to check for this
$this->project_configuration->build->define_constants['ASSEMBLY_NAME'] = '%ASSEMBLY.NAME%'; $this->project_configuration->build->addDefineConstant('ASSEMBLY_PACKAGE', '%ASSEMBLY.PACKAGE%');
$this->project_configuration->build->define_constants['ASSEMBLY_PACKAGE'] = '%ASSEMBLY.PACKAGE%'; $this->project_configuration->build->addDefineConstant('ASSEMBLY_VERSION', '%ASSEMBLY.VERSION%');
$this->project_configuration->build->define_constants['ASSEMBLY_VERSION'] = '%ASSEMBLY.VERSION%'; $this->project_configuration->build->addDefineConstant('ASSEMBLY_UID', '%ASSEMBLY.UID%');
$this->project_configuration->build->define_constants['ASSEMBLY_UID'] = '%ASSEMBLY.UID%';
// Generate configurations // Generate configurations
$DebugConfiguration = new ProjectConfiguration\Build\BuildConfiguration(); $debug_configuration = new ProjectConfiguration\Build\BuildConfiguration();
$DebugConfiguration->name = 'debug'; $debug_configuration->setName('debug');
$DebugConfiguration->output_path = 'build/debug'; $debug_configuration->setOutputPath('build/debug');
$DebugConfiguration->define_constants["DEBUG"] = '1'; // Debugging constant if the program wishes to check for this $debug_configuration->setDefinedConstant('DEBUG', '1'); // Debugging constant if the program wishes to check for this
$this->project_configuration->build->build_configurations[] = $DebugConfiguration; $this->project_configuration->build->addBuildConfiguration($debug_configuration);
$ReleaseConfiguration = new ProjectConfiguration\Build\BuildConfiguration();
$ReleaseConfiguration->name = 'release'; $release_configuration = new ProjectConfiguration\Build\BuildConfiguration();
$ReleaseConfiguration->output_path = 'build/release'; $release_configuration->setName('release');
$ReleaseConfiguration->define_constants["DEBUG"] = '0'; // Debugging constant if the program wishes to check for this $release_configuration->setOutputPath('build/release');
$this->project_configuration->build->build_configurations[] = $ReleaseConfiguration; $release_configuration->setDefinedConstant('DEBUG', '0'); // Debugging constant if the program wishes to check for this
$this->project_configuration->build->addBuildConfiguration($release_configuration);
// Finally, create project.json // Finally, create project.json
$this->project_configuration->toFile($this->project_path . DIRECTORY_SEPARATOR . 'project.json'); $this->project_configuration->toFile($this->project_path . DIRECTORY_SEPARATOR . 'project.json');
@ -184,8 +184,8 @@
{ {
if ( if (
$option === InitializeProjectOptions::CREATE_SOURCE_DIRECTORY && $option === InitializeProjectOptions::CREATE_SOURCE_DIRECTORY &&
!file_exists($this->project_configuration->build->source_path) && !file_exists($this->project_configuration->build->getSourcePath()) &&
!mkdir($concurrentDirectory = $this->project_configuration->build->source_path) && !mkdir($concurrentDirectory = $this->project_configuration->build->getSourcePath()) &&
!is_dir($concurrentDirectory) !is_dir($concurrentDirectory)
) )
{ {
@ -226,6 +226,7 @@
* Saves the project configuration * Saves the project configuration
* *
* @return void * @return void
* @throws IOException
*/ */
public function save(): void public function save(): void
{ {

View file

@ -85,6 +85,7 @@
* *
* @return void * @return void
* @throws AuthenticationException * @throws AuthenticationException
* @throws IOException
*/ */
public function load(): void public function load(): void
{ {
@ -279,6 +280,7 @@
* @param string $package * @param string $package
* @return void * @return void
* @throws AuthenticationException * @throws AuthenticationException
* @throws IOException
*/ */
private function setAsRegistered(string $package): void private function setAsRegistered(string $package): void
{ {
@ -299,6 +301,7 @@
* *
* @return void * @return void
* @throws AuthenticationException * @throws AuthenticationException
* @throws IOException
*/ */
public function sync(): void public function sync(): void
{ {

View file

@ -86,18 +86,24 @@
*/ */
public static function fromArray(array $data): CliHelpSection public static function fromArray(array $data): CliHelpSection
{ {
$Object = new CliHelpSection(); $object = new CliHelpSection();
if(isset($data['parameters'])) if(isset($data['parameters']))
$Object->Parameters = $data['parameters']; {
$object->Parameters = $data['parameters'];
}
if(isset($data['description'])) if(isset($data['description']))
$Object->Description = $data['description']; {
$object->Description = $data['description'];
}
if(isset($data['default'])) if(isset($data['default']))
$Object->Default = $data['default']; {
$object->Default = $data['default'];
}
return $Object; return $object;
} }
/** /**
@ -125,16 +131,13 @@
$out[] .= $result; $out[] .= $result;
} }
elseif($basic)
{
$out[] .= implode(' ', $this->Parameters);
}
else else
{ {
if($basic) $out[] .= Console::formatColor(implode(' ', $this->Parameters), ConsoleColors::GREEN);
{
$out[] .= implode(' ', $this->Parameters);
}
else
{
$out[] .= Console::formatColor(implode(' ', $this->Parameters), ConsoleColors::GREEN);
}
} }
} }

View file

@ -40,7 +40,7 @@
* *
* @var string * @var string
*/ */
public $Name; public $name;
/** /**
* A short description of the package. Usually * A short description of the package. Usually
@ -48,7 +48,7 @@
* *
* @var string * @var string
*/ */
public $Description; public $description;
/** /**
* The version of the package, in most cases this is not * The version of the package, in most cases this is not
@ -60,14 +60,14 @@
* *
* @var string|null * @var string|null
*/ */
public $Version; public $version;
/** /**
* The type of package, it defaults to library * The type of package, it defaults to library
* *
* @var string * @var string
*/ */
public $Type; public $type;
/** /**
* An array of keywords that the package is related to. * An array of keywords that the package is related to.
@ -82,21 +82,21 @@
* *
* @var string[] * @var string[]
*/ */
public $Keywords; public $keywords;
/** /**
* A URL to the website of the project * A URL to the website of the project
* *
* @var string|null * @var string|null
*/ */
public $Homepage; public $homepage;
/** /**
* A relative path to the readme document * A relative path to the readme document
* *
* @var string|null * @var string|null
*/ */
public $Readme; public $readme;
/** /**
* Release date of the version * Release date of the version
@ -105,7 +105,7 @@
* *
* @var string|null * @var string|null
*/ */
public $Time; public $time;
/** /**
* The license of the package. This can either be a string or * The license of the package. This can either be a string or
@ -113,17 +113,17 @@
* *
* @var string|string[]|null * @var string|string[]|null
*/ */
public $License; public $license;
/** /**
* @var Author[]|null * @var Author[]|null
*/ */
public $Authors; public $authors;
/** /**
* @var Support|null * @var Support|null
*/ */
public $Support; public $support;
/** /**
* Map of packages required by this package. The package * Map of packages required by this package. The package
@ -131,7 +131,7 @@
* *
* @var PackageLink[]|null * @var PackageLink[]|null
*/ */
public $Require; public $require;
/** /**
* Map of packages required for developing this package, or running tests, * Map of packages required for developing this package, or running tests,
@ -141,7 +141,7 @@
* *
* @var PackageLink[]|null * @var PackageLink[]|null
*/ */
public $RequireDev; public $require_dev;
/** /**
* Map of packages that conflict with this version of this package. They will * Map of packages that conflict with this version of this package. They will
@ -149,7 +149,7 @@
* *
* @var PackageLink[]|null * @var PackageLink[]|null
*/ */
public $Conflict; public $conflict;
/** /**
* Map of packages that are replaced by this package. This allows you to fork a * Map of packages that are replaced by this package. This allows you to fork a
@ -159,7 +159,7 @@
* *
* @var PackageLink[]|null * @var PackageLink[]|null
*/ */
public $Replace; public $replace;
/** /**
* Map of packages that are provided by this package. This is mostly useful for * Map of packages that are provided by this package. This is mostly useful for
@ -169,7 +169,7 @@
* *
* @var PackageLink[]|null * @var PackageLink[]|null
*/ */
public $Provide; public $provide;
/** /**
* Suggested packages that can enhance or work well with this package. These are * Suggested packages that can enhance or work well with this package. These are
@ -179,35 +179,35 @@
* *
* @var Suggestion[]|null * @var Suggestion[]|null
*/ */
public $Suggest; public $suggest;
/** /**
* Autoload mapping for a PHP autoloader. * Autoload mapping for a PHP autoloader.
* *
* @var Autoloader|null * @var Autoloader|null
*/ */
public $Autoload; public $autoload;
/** /**
* This section allows defining autoload rules for development purposes. * This section allows defining autoload rules for development purposes.
* *
* @var Autoloader|null * @var Autoloader|null
*/ */
public $AutoloadDev; public $autoload_dev;
/** /**
* A list of paths which should get appended to PHP's include_path. * A list of paths which should get appended to PHP's include_path.
* *
* @var string[]|null * @var string[]|null
*/ */
public $IncludePath; public $include_path;
/** /**
* Defines the installation target. * Defines the installation target.
* *
* @var string|null * @var string|null
*/ */
public $TargetDirectory; public $target_directory;
/** /**
* This defines the default behavior for filtering packages by * This defines the default behavior for filtering packages by
@ -222,31 +222,21 @@
* *
* @var ComposerPackageTypes|null * @var ComposerPackageTypes|null
*/ */
public $MinimumStability; public $minimum_stability;
/**
* When this is enabled, Composer will prefer more stable packages over
* unstable ones when finding compatible stable packages is possible.
* If you require a dev version or only alphas are available for a package,
* those will still be selected granted that the minimum-stability allows for it.
*
* @var bool
*/
public $PreferStable;
/** /**
* Custom package repositories to use. * Custom package repositories to use.
* *
* @var array|null * @var array|null
*/ */
public $Repositories; public $repositories;
/** /**
* A set of configuration options. It is only used for projects. * A set of configuration options. It is only used for projects.
* *
* @var array|null * @var array|null
*/ */
public $Configuration; public $configuration;
/** /**
* Composer allows you to hook into various parts of the installation * Composer allows you to hook into various parts of the installation
@ -254,14 +244,14 @@
* *
* @var array|null * @var array|null
*/ */
public $Scripts; public $scripts;
/** /**
* Arbitrary extra data for consumption by scripts. * Arbitrary extra data for consumption by scripts.
* *
* @var array|null * @var array|null
*/ */
public $Extra; public $extra;
/** /**
* A set of files that should be treated as binaries and made available into the bin-dir (from config). * A set of files that should be treated as binaries and made available into the bin-dir (from config).
@ -275,14 +265,14 @@
* *
* @var array|null * @var array|null
*/ */
public $Archive; public $archive;
/** /**
* Indicates whether this package has been abandoned. * Indicates whether this package has been abandoned.
* *
* @var bool * @var bool
*/ */
public $Abandoned; public $abandoned;
/** /**
* A list of regex patterns of branch names that are * A list of regex patterns of branch names that are
@ -292,14 +282,14 @@
* *
* @var array|null * @var array|null
*/ */
public $NonFeatureBranches; public $non_feature_branches;
public function __construct() public function __construct()
{ {
$this->Type = ComposerPackageTypes::LIBRARY; $this->type = ComposerPackageTypes::LIBRARY;
$this->MinimumStability = ComposerStabilityTypes::STABLE; $this->minimum_stability = ComposerStabilityTypes::STABLE;
$this->PreferStable = false; $this->PreferStable = false;
$this->Abandoned = false; $this->abandoned = false;
} }
/** /**
@ -310,106 +300,106 @@
public function toArray(): array public function toArray(): array
{ {
$_authors = null; $_authors = null;
if($this->Authors !== null && count($this->Authors) > 0) if($this->authors !== null && count($this->authors) > 0)
{ {
$_authors = []; $_authors = [];
foreach($this->Authors as $author) foreach($this->authors as $author)
{ {
$_authors[] = $author->toArray(); $_authors[] = $author->toArray();
} }
} }
$_require = null; $_require = null;
if($this->Require !== null && count($this->Require) > 0) if($this->require !== null && count($this->require) > 0)
{ {
$_require = []; $_require = [];
foreach($this->Require as $require) foreach($this->require as $require)
{ {
$_require[$require->PackageName] = $require->Version; $_require[$require->package_name] = $require->version;
} }
} }
$_require_dev = null; $_require_dev = null;
if($this->RequireDev !== null && count($this->RequireDev) > 0) if($this->require_dev !== null && count($this->require_dev) > 0)
{ {
$_require_dev = []; $_require_dev = [];
foreach($this->RequireDev as $require) foreach($this->require_dev as $require)
{ {
$_require_dev[$require->PackageName] = $require->Version; $_require_dev[$require->package_name] = $require->version;
} }
} }
$_conflict = null; $_conflict = null;
if($this->Conflict !== null && count($this->Conflict) > 0) if($this->conflict !== null && count($this->conflict) > 0)
{ {
$_conflict = []; $_conflict = [];
foreach($this->Conflict as $require) foreach($this->conflict as $require)
{ {
$_conflict[$require->PackageName] = $require->Version; $_conflict[$require->package_name] = $require->version;
} }
} }
$_replace = null; $_replace = null;
if($this->Replace !== null && count($this->Replace) > 0) if($this->replace !== null && count($this->replace) > 0)
{ {
$_replace = []; $_replace = [];
foreach($this->Replace as $require) foreach($this->replace as $require)
{ {
$_replace[$require->PackageName] = $require->Version; $_replace[$require->package_name] = $require->version;
} }
} }
$_provide = null; $_provide = null;
if($this->Provide !== null && count($this->Provide) > 0) if($this->provide !== null && count($this->provide) > 0)
{ {
$_provide = []; $_provide = [];
foreach($this->Provide as $require) foreach($this->provide as $require)
{ {
$_provide[$require->PackageName] = $require->Version; $_provide[$require->package_name] = $require->version;
} }
} }
$_suggest = null; $_suggest = null;
if($this->Suggest !== null && count($this->Suggest) > 0) if($this->suggest !== null && count($this->suggest) > 0)
{ {
$_suggest = []; $_suggest = [];
foreach($this->Suggest as $suggestion) foreach($this->suggest as $suggestion)
{ {
$_suggest[$suggestion->PackageName] = $suggestion->Comment; $_suggest[$suggestion->package_name] = $suggestion->comment;
} }
} }
return [ return [
'name' => $this->Name, 'name' => $this->name,
'description' => $this->Description, 'description' => $this->description,
'version' => $this->Version, 'version' => $this->version,
'type' => $this->Type, 'type' => $this->type,
'keywords' => $this->Keywords, 'keywords' => $this->keywords,
'homepage' => $this->Homepage, 'homepage' => $this->homepage,
'readme' => $this->Readme, 'readme' => $this->readme,
'time' => $this->Time, 'time' => $this->time,
'license' => $this->License, 'license' => $this->license,
'authors' => $_authors, 'authors' => $_authors,
'support' => $this->Support?->toArray(), 'support' => $this->support?->toArray(),
'require' => $_require, 'require' => $_require,
'require_dev' => $_require_dev, 'require_dev' => $_require_dev,
'conflict' => $_conflict, 'conflict' => $_conflict,
'replace' => $_replace, 'replace' => $_replace,
'provide' => $_provide, 'provide' => $_provide,
'suggest' => $_suggest, 'suggest' => $_suggest,
'autoload' => $this->Autoload?->toArray(), 'autoload' => $this->autoload?->toArray(),
'autoload-dev' => $this->AutoloadDev?->toArray(), 'autoload-dev' => $this->autoload_dev?->toArray(),
'include-path' => $this->IncludePath, 'include-path' => $this->include_path,
'target-dir' => $this->TargetDirectory, 'target-dir' => $this->target_directory,
'minimum-stability' => $this->MinimumStability, 'minimum-stability' => $this->minimum_stability,
'repositories' => $this->Repositories, 'repositories' => $this->repositories,
'config' => $this->Configuration, 'config' => $this->configuration,
'scripts' => $this->Scripts, 'scripts' => $this->scripts,
'extra' => $this->Extra, 'extra' => $this->extra,
'bin' => $this->Bin, 'bin' => $this->Bin,
'archive' => $this->Archive, 'archive' => $this->archive,
'abandoned' => $this->Abandoned, 'abandoned' => $this->abandoned,
'non-feature-branches' => $this->NonFeatureBranches 'non-feature-branches' => $this->non_feature_branches
]; ];
} }
@ -418,136 +408,182 @@
$object = new self(); $object = new self();
if(isset($data['name'])) if(isset($data['name']))
$object->Name = $data['name']; {
$object->name = $data['name'];
}
if(isset($data['description'])) if(isset($data['description']))
$object->Description = $data['description']; {
$object->description = $data['description'];
}
if(isset($data['version'])) if(isset($data['version']))
$object->Version = $data['version']; {
$object->version = $data['version'];
}
if(isset($data['type'])) if(isset($data['type']))
$object->Type = $data['type']; {
$object->type = $data['type'];
}
if(isset($data['keywords'])) if(isset($data['keywords']))
$object->Keywords = $data['keywords']; {
$object->keywords = $data['keywords'];
}
if(isset($data['homepage'])) if(isset($data['homepage']))
$object->Homepage = $data['homepage']; {
$object->homepage = $data['homepage'];
}
if(isset($data['readme'])) if(isset($data['readme']))
$object->Readme = $data['readme']; {
$object->readme = $data['readme'];
}
if(isset($data['time'])) if(isset($data['time']))
$object->Time = $data['time']; {
$object->time = $data['time'];
}
if(isset($data['license'])) if(isset($data['license']))
$object->License = $data['license']; {
$object->license = $data['license'];
}
if(isset($data['authors'])) if(isset($data['authors']))
{ {
$object->Authors = []; $object->authors = [];
foreach($data['authors'] as $author) foreach($data['authors'] as $author)
{ {
$object->Authors[] = Author::fromArray($author); $object->authors[] = Author::fromArray($author);
} }
} }
if(isset($data['support'])) if(isset($data['support']))
$object->Support = Support::fromArray($data['support']); {
$object->support = Support::fromArray($data['support']);
}
if(isset($data['require'])) if(isset($data['require']))
{ {
$object->Require = []; $object->require = [];
foreach($data['require'] as $package => $version) foreach($data['require'] as $package => $version)
{ {
$object->Require[] = new PackageLink($package, $version); $object->require[] = new PackageLink($package, $version);
} }
} }
if(isset($data['require_dev'])) if(isset($data['require_dev']))
{ {
$object->RequireDev = []; $object->require_dev = [];
foreach($data['require_dev'] as $package => $version) foreach($data['require_dev'] as $package => $version)
{ {
$object->RequireDev[] = new PackageLink($package, $version); $object->require_dev[] = new PackageLink($package, $version);
} }
} }
if(isset($data['conflict'])) if(isset($data['conflict']))
{ {
$object->Conflict = []; $object->conflict = [];
foreach($data['conflict'] as $package => $version) foreach($data['conflict'] as $package => $version)
{ {
$object->Conflict[] = new PackageLink($package, $version); $object->conflict[] = new PackageLink($package, $version);
} }
} }
if(isset($data['replace'])) if(isset($data['replace']))
{ {
$object->Replace = []; $object->replace = [];
foreach($data['replace'] as $package => $version) foreach($data['replace'] as $package => $version)
{ {
$object->Replace[] = new PackageLink($package, $version); $object->replace[] = new PackageLink($package, $version);
} }
} }
if(isset($data['provide'])) if(isset($data['provide']))
{ {
$object->Provide = []; $object->provide = [];
foreach($data['provide'] as $package => $version) foreach($data['provide'] as $package => $version)
{ {
$object->Provide[] = new PackageLink($package, $version); $object->provide[] = new PackageLink($package, $version);
} }
} }
if(isset($data['suggest'])) if(isset($data['suggest']))
{ {
$object->Suggest = []; $object->suggest = [];
foreach($data['suggest'] as $package => $comment) foreach($data['suggest'] as $package => $comment)
{ {
$object->Suggest[] = new Suggestion($package, $comment); $object->suggest[] = new Suggestion($package, $comment);
} }
} }
if(isset($data['autoload'])) if(isset($data['autoload']))
$object->Autoload = Autoloader::fromArray($data['autoload']); {
$object->autoload = Autoloader::fromArray($data['autoload']);
}
if(isset($data['autoload-dev'])) if(isset($data['autoload-dev']))
$object->AutoloadDev = Autoloader::fromArray($data['autoload-dev']); {
$object->autoload_dev = Autoloader::fromArray($data['autoload-dev']);
}
if(isset($data['include-path'])) if(isset($data['include-path']))
$object->IncludePath = $data['include-path']; {
$object->include_path = $data['include-path'];
}
if(isset($data['target-dir'])) if(isset($data['target-dir']))
$object->TargetDirectory = $data['target-dir']; {
$object->target_directory = $data['target-dir'];
}
if(isset($data['minimum-stability'])) if(isset($data['minimum-stability']))
$object->MinimumStability = $data['minimum-stability']; {
$object->minimum_stability = $data['minimum-stability'];
}
if(isset($data['repositories'])) if(isset($data['repositories']))
$object->Repositories = $data['repositories']; {
$object->repositories = $data['repositories'];
}
if(isset($data['config'])) if(isset($data['config']))
$object->Configuration = $data['config']; {
$object->configuration = $data['config'];
}
if(isset($data['scripts'])) if(isset($data['scripts']))
$object->Scripts = $data['scripts']; {
$object->scripts = $data['scripts'];
}
if(isset($data['extra'])) if(isset($data['extra']))
$object->Extra = $data['extra']; {
$object->extra = $data['extra'];
}
if(isset($data['bin'])) if(isset($data['bin']))
{
$object->Bin = $data['bin']; $object->Bin = $data['bin'];
}
if(isset($data['archive'])) if(isset($data['archive']))
$object->Archive = $data['archive']; {
$object->archive = $data['archive'];
}
if(isset($data['abandoned'])) if(isset($data['abandoned']))
$object->Abandoned = $data['abandoned']; {
$object->abandoned = $data['abandoned'];
}
if(isset($data['non-feature-branches'])) if(isset($data['non-feature-branches']))
$object->NonFeatureBranches = $data['non-feature-branches']; {
$object->non_feature_branches = $data['non-feature-branches'];
}
return $object; return $object;
} }

View file

@ -30,32 +30,33 @@
/** /**
* @var NamespacePointer[]|null * @var NamespacePointer[]|null
*/ */
public $Psr4; public $psr_4;
/** /**
* @var NamespacePointer[]|null * @var NamespacePointer[]|null
*/ */
public $Psr0; public $psr_0;
/** /**
* @var string[]|null * @var string[]|null
*/ */
public $Classmap; public $class_map;
/** /**
* @var string[]|null * @var string[]|null
*/ */
public $Files; public $files;
/** /**
* @var string[]|null * @var string[]|null
*/ */
public $ExcludeFromClassMap; public $exclude_from_class_map;
/** /**
* @param array $psr * @param array $psr
* @param mixed $pointer * @param mixed $pointer
* @return array * @return array
* @noinspection PhpUnusedPrivateMethodInspection
*/ */
private static function psrRestructure(array $psr, NamespacePointer $pointer): array private static function psrRestructure(array $psr, NamespacePointer $pointer): array
{ {
@ -70,7 +71,7 @@
$psr[(string)$pointer->Namespace] = $r; $psr[(string)$pointer->Namespace] = $r;
} }
elseif (!in_array($pointer->Path, $psr[(string)$pointer->Namespace])) elseif (!in_array($pointer->Path, $psr[(string)$pointer->Namespace], true))
{ {
$psr[(string)$pointer->Namespace][] = $pointer->Path; $psr[(string)$pointer->Namespace][] = $pointer->Path;
} }
@ -90,27 +91,27 @@
public function toArray(): array public function toArray(): array
{ {
$_psr4 = null; $_psr4 = null;
if($this->Psr4 !== null && count($this->Psr4) > 0) if($this->psr_4 !== null && count($this->psr_4) > 0)
{ {
$_psr4 = []; $_psr4 = array_map(static function(NamespacePointer $pointer) {
foreach($this->Psr4 as $_psr) return $pointer->toArray();
$_psr4 = self::psrRestructure($_psr4, $_psr); }, $this->psr_4);
} }
$_psr0 = null; $_psr0 = null;
if($this->Psr0 !== null && count($this->Psr0) > 0) if($this->psr_0 !== null && count($this->psr_0) > 0)
{ {
$_psr0 = []; $_psr0 = array_map(static function(NamespacePointer $pointer) {
foreach($this->Psr0 as $_psr) return $pointer->toArray();
$_psr4 = self::psrRestructure($_psr0, $_psr); }, $this->psr_0);
} }
return [ return [
'psr-4' => $_psr4, 'psr-4' => $_psr4,
'psr-0' => $_psr0, 'psr-0' => $_psr0,
'classmap' => $this->Classmap, 'classmap' => $this->class_map,
'files' => $this->Files, 'files' => $this->files,
'exclude-from-classmap' => $this->ExcludeFromClassMap, 'exclude-from-classmap' => $this->exclude_from_class_map,
]; ];
} }
@ -124,50 +125,56 @@
if(isset($data['psr-4'])) if(isset($data['psr-4']))
{ {
$object->Psr4 = []; $object->psr_4 = [];
foreach($data['psr-4'] as $namespace => $path) foreach($data['psr-4'] as $namespace => $path)
{ {
if(is_array($path)) if(is_array($path))
{ {
foreach($path as $datum) foreach($path as $datum)
{ {
$object->Psr4[] = new NamespacePointer($namespace, $datum); $object->psr_4[] = new NamespacePointer($namespace, $datum);
} }
} }
else else
{ {
$object->Psr4[] = new NamespacePointer($namespace, $path); $object->psr_4[] = new NamespacePointer($namespace, $path);
} }
} }
} }
if(isset($data['psr-0'])) if(isset($data['psr-0']))
{ {
$object->Psr0 = []; $object->psr_0 = [];
foreach($data['psr-0'] as $namespace => $path) foreach($data['psr-0'] as $namespace => $path)
{ {
if(is_array($path)) if(is_array($path))
{ {
foreach($path as $datum) foreach($path as $datum)
{ {
$object->Psr0[] = new NamespacePointer($namespace, $datum); $object->psr_0[] = new NamespacePointer($namespace, $datum);
} }
} }
else else
{ {
$object->Psr0[] = new NamespacePointer($namespace, $path); $object->psr_0[] = new NamespacePointer($namespace, $path);
} }
} }
} }
if(isset($data['classmap'])) if(isset($data['classmap']))
$object->Classmap = $data['classmap']; {
$object->class_map = $data['classmap'];
}
if(isset($data['files'])) if(isset($data['files']))
$object->Files = $data['files']; {
$object->files = $data['files'];
}
if(isset($data['exclude-from-classmap'])) if(isset($data['exclude-from-classmap']))
$object->ExcludeFromClassMap = $data['exclude-from-classmap']; {
$object->exclude_from_class_map = $data['exclude-from-classmap'];
}
return $object; return $object;
} }

View file

@ -1,26 +1,29 @@
<?php <?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 */
/*
* 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;
class PackageLink class PackageLink
{ {
@ -29,23 +32,23 @@ namespace ncc\Objects\ComposerJson;
* *
* @var string|null * @var string|null
*/ */
public $PackageName; public $package_name;
/** /**
* The version of the package that is required * The version of the package that is required
* *
* @var string|null * @var string|null
*/ */
public $Version; public $version;
/** /**
* @param string|null $packageName * @param string|null $package_name
* @param string|null $version * @param string|null $version
*/ */
public function __construct(?string $packageName=null, ?string $version=null) public function __construct(?string $package_name=null, ?string $version=null)
{ {
$this->PackageName = $packageName; $this->package_name = $package_name;
$this->Version = $version; $this->version = $version;
} }
/** /**
@ -56,13 +59,13 @@ namespace ncc\Objects\ComposerJson;
public function toArray(): array public function toArray(): array
{ {
return [ return [
'package_name' => $this->PackageName, 'package_name' => $this->package_name,
'version' => $this->Version 'version' => $this->version
]; ];
} }
/** /**
* Constructs object from an array representation * Constructs an object from an array representation
* *
* @param array $data * @param array $data
* @return PackageLink * @return PackageLink
@ -72,10 +75,14 @@ namespace ncc\Objects\ComposerJson;
$object = new self(); $object = new self();
if(isset($data['package_name'])) if(isset($data['package_name']))
$object->PackageName = $data['package_name']; {
$object->package_name = $data['package_name'];
}
if(isset($data['version'])) if(isset($data['version']))
$object->Version = $data['version']; {
$object->version = $data['version'];
}
return $object; return $object;
} }

View file

@ -29,14 +29,14 @@ namespace ncc\Objects\ComposerJson;
* *
* @var string * @var string
*/ */
public $PackageName; public $package_name;
/** /**
* The comment for the suggestion * The comment for the suggestion
* *
* @var string * @var string
*/ */
public $Comment; public $comment;
/** /**
* @param string|null $packageName * @param string|null $packageName
@ -44,8 +44,8 @@ namespace ncc\Objects\ComposerJson;
*/ */
public function __construct(?string $packageName=null, ?string $comment=null) public function __construct(?string $packageName=null, ?string $comment=null)
{ {
$this->PackageName = $packageName; $this->package_name = $packageName;
$this->Comment = $comment; $this->comment = $comment;
} }
/** /**
@ -56,8 +56,8 @@ namespace ncc\Objects\ComposerJson;
public function toArray(): array public function toArray(): array
{ {
return [ return [
'package_name' => $this->PackageName, 'package_name' => $this->package_name,
'comment' => $this->Comment, 'comment' => $this->comment,
]; ];
} }
@ -72,10 +72,10 @@ namespace ncc\Objects\ComposerJson;
$object = new self(); $object = new self();
if(isset($data['package_name'])) if(isset($data['package_name']))
$object->PackageName = $data['package_name']; $object->package_name = $data['package_name'];
if(isset($data['comment'])) if(isset($data['comment']))
$object->Comment = $data['comment']; $object->comment = $data['comment'];
return $object; return $object;
} }

View file

@ -1,26 +1,29 @@
<?php <?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 */
/*
* 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;
class Support class Support
{ {
@ -29,63 +32,63 @@ namespace ncc\Objects\ComposerJson;
* *
* @var string|null * @var string|null
*/ */
public $Email; public $email;
/** /**
* URL to the issue tracker * URL to the issue tracker
* *
* @var string|null * @var string|null
*/ */
public $Issues; public $issues;
/** /**
* URL to the forum * URL to the forum
* *
* @var string|null * @var string|null
*/ */
public $Forum; public $forum;
/** /**
* URL to the Wiki * URL to the Wiki
* *
* @var string|null * @var string|null
*/ */
public $Wiki; public $wiki;
/** /**
* The IRC channel for support, as irc://server/channel * The IRC channel for support, as irc://server/channel
* *
* @var string|null * @var string|null
*/ */
public $IRC; public $irc;
/** /**
* URL to browse or download the sources * URL to browse or download the sources
* *
* @var string|null * @var string|null
*/ */
public $Source; public $source;
/** /**
* URL to the documentation * URL to the documentation
* *
* @var string|null * @var string|null
*/ */
public $Docs; public $docs;
/** /**
* URL to the RSS feed * URL to the RSS feed
* *
* @var string|null * @var string|null
*/ */
public $RSS; public $rss;
/** /**
* URL to the chat channel * URL to the chat channel
* *
* @var string|null * @var string|null
*/ */
public $Chat; public $chat;
/** /**
* Returns an array representation of the object * Returns an array representation of the object
@ -95,15 +98,15 @@ namespace ncc\Objects\ComposerJson;
public function toArray(): array public function toArray(): array
{ {
return [ return [
'email' => $this->Email, 'email' => $this->email,
'issues' => $this->Issues, 'issues' => $this->issues,
'forum' => $this->Forum, 'forum' => $this->forum,
'wiki' => $this->Wiki, 'wiki' => $this->wiki,
'irc' => $this->IRC, 'irc' => $this->irc,
'source' => $this->Source, 'source' => $this->source,
'docs' => $this->Docs, 'docs' => $this->docs,
'rss' => $this->RSS, 'rss' => $this->rss,
'chat' => $this->Chat 'chat' => $this->chat
]; ];
} }
@ -118,31 +121,49 @@ namespace ncc\Objects\ComposerJson;
$object = new self(); $object = new self();
if(isset($data['email'])) if(isset($data['email']))
$object->Email = $data['email']; {
$object->email = $data['email'];
}
if(isset($data['issues'])) if(isset($data['issues']))
$object->Issues = $data['issues']; {
$object->issues = $data['issues'];
}
if(isset($data['forum'])) if(isset($data['forum']))
$object->Forum = $data['forum']; {
$object->forum = $data['forum'];
}
if(isset($data['wiki'])) if(isset($data['wiki']))
$object->Wiki = $data['wiki']; {
$object->wiki = $data['wiki'];
}
if(isset($data['irc'])) if(isset($data['irc']))
$object->IRC = $data['irc']; {
$object->irc = $data['irc'];
}
if(isset($data['source'])) if(isset($data['source']))
$object->Source = $data['source']; {
$object->source = $data['source'];
}
if(isset($data['docs'])) if(isset($data['docs']))
$object->Docs = $data['docs']; {
$object->docs = $data['docs'];
}
if(isset($data['rss'])) if(isset($data['rss']))
$object->RSS = $data['rss']; {
$object->rss = $data['rss'];
}
if(isset($data['chat'])) if(isset($data['chat']))
$object->Chat = $data['chat']; {
$object->chat = $data['chat'];
}
return $object; return $object;
} }

View file

@ -96,7 +96,7 @@
{ {
foreach($this->Packages as $package) foreach($this->Packages as $package)
{ {
if($package->Name == $name) if($package->name === $name)
{ {
return $package; return $package;
} }
@ -113,10 +113,12 @@
public function toArray(): array public function toArray(): array
{ {
$_packages = []; $_packages = [];
if($this->Packages != null) if($this->Packages !== null)
{ {
foreach($this->Packages as $package) foreach($this->Packages as $package)
{
$_packages[] = $package->toArray(); $_packages[] = $package->toArray();
}
} }
return [ return [
'_readme' => $this->Readme, '_readme' => $this->Readme,
@ -140,26 +142,30 @@
* @param array $data * @param array $data
* @return static * @return static
*/ */
public static function fromArray(array $data): self public static function fromArray(array $data): ComposerLock
{ {
$obj = new self(); $object = new self();
$obj->Readme = $data['_readme'];
$obj->ContentHash = $data['content-hash']; $object->Readme = $data['_readme'];
$obj->Packages = []; $object->ContentHash = $data['content-hash'];
if($data['packages'] != null) $object->Packages = [];
if($data['packages'] !== null)
{ {
foreach($data['packages'] as $package) foreach($data['packages'] as $package)
$obj->Packages[] = ComposerJson::fromArray($package); {
$object->Packages[] = ComposerJson::fromArray($package);
}
} }
$obj->PackagesDev = $data['packages-dev']; $object->PackagesDev = $data['packages-dev'];
$obj->Aliases = $data['aliases']; $object->Aliases = $data['aliases'];
$obj->MinimumStability = $data['minimum-stability']; $object->MinimumStability = $data['minimum-stability'];
$obj->StabilityFlags = $data['stability-flags']; $object->StabilityFlags = $data['stability-flags'];
$obj->PreferStable = $data['prefer-stable']; $object->PreferStable = $data['prefer-stable'];
$obj->PreferLowest = $data['prefer-lowest']; $object->PreferLowest = $data['prefer-lowest'];
$obj->Platform = $data['platform']; $object->Platform = $data['platform'];
$obj->PlatformDev = $data['platform-dev']; $object->PlatformDev = $data['platform-dev'];
$obj->PluginApiVersion = $data['plugin-api-version']; $object->PluginApiVersion = $data['plugin-api-version'];
return $obj;
return $object;
} }
} }

View file

@ -82,9 +82,9 @@
if($overwrite) if($overwrite)
{ {
$this->deleteUnit($unit->execution_policy->name); $this->deleteUnit($unit->execution_policy->getName());
} }
elseif($this->getUnit($unit->execution_policy->name) !== null) elseif($this->getUnit($unit->execution_policy->getName()) !== null)
{ {
return false; return false;
} }
@ -111,7 +111,7 @@
$new_pointers = []; $new_pointers = [];
foreach($this->pointers as $pointer) foreach($this->pointers as $pointer)
{ {
if($pointer->execution_policy->name !== $name) if($pointer->execution_policy->getName() !== $name)
{ {
$new_pointers[] = $pointer; $new_pointers[] = $pointer;
} }
@ -132,7 +132,7 @@
/** @var ExecutionPointer $pointer */ /** @var ExecutionPointer $pointer */
foreach($this->pointers as $pointer) foreach($this->pointers as $pointer)
{ {
if($pointer->execution_policy->name === $name) if($pointer->execution_policy->getName() === $name)
{ {
return $pointer; return $pointer;
} }

View file

@ -214,7 +214,7 @@
{ {
foreach($this->execution_units as $unit) foreach($this->execution_units as $unit)
{ {
if($unit->execution_policy->name === $name) if($unit->execution_policy->getName() === $name)
{ {
return $unit; return $unit;
} }

View file

@ -87,7 +87,10 @@
public function getId(): string public function getId(): string
{ {
if($this->id == null) if($this->id == null)
$this->id = hash('sha1', $this->execution_policy->name); {
$this->id = hash('sha1', $this->execution_policy->getName());
}
return $this->id; return $this->id;
} }

View file

@ -25,6 +25,7 @@
namespace ncc\Objects; namespace ncc\Objects;
use ncc\Enums\Versions; use ncc\Enums\Versions;
use ncc\Exceptions\ConfigurationException;
use ncc\Exceptions\IOException; use ncc\Exceptions\IOException;
use ncc\Objects\PackageLock\PackageEntry; use ncc\Objects\PackageLock\PackageEntry;
use ncc\Utilities\Console; use ncc\Utilities\Console;
@ -77,27 +78,28 @@
* @param Package $package * @param Package $package
* @param string $install_path * @param string $install_path
* @return void * @return void
* @throws ConfigurationException
*/ */
public function addPackage(Package $package, string $install_path): void public function addPackage(Package $package, string $install_path): void
{ {
Console::outVerbose("Adding package {$package->assembly->package} to package lock file"); Console::outVerbose("Adding package {$package->assembly->getPackage()} to package lock file");
if(!isset($this->Packages[$package->assembly->package])) if(!isset($this->Packages[$package->assembly->getPackage()]))
{ {
$package_entry = new PackageEntry(); $package_entry = new PackageEntry();
$package_entry->addVersion($package, $install_path, true); $package_entry->addVersion($package, $install_path, true);
$package_entry->Name = $package->assembly->package; $package_entry->Name = $package->assembly->getPackage();
$package_entry->UpdateSource = $package->header->UpdateSource; $package_entry->UpdateSource = $package->header->UpdateSource;
$package_entry->getDataPath(); $package_entry->getDataPath();
$this->Packages[$package->assembly->package] = $package_entry; $this->Packages[$package->assembly->getPackage()] = $package_entry;
$this->update(); $this->update();
return; return;
} }
$this->Packages[$package->assembly->package]->UpdateSource = $package->header->UpdateSource; $this->Packages[$package->assembly->getPackage()]->UpdateSource = $package->header->UpdateSource;
$this->Packages[$package->assembly->package]->addVersion($package, $install_path, true); $this->Packages[$package->assembly->getPackage()]->addVersion($package, $install_path, true);
$this->Packages[$package->assembly->package]->getDataPath(); $this->Packages[$package->assembly->getPackage()]->getDataPath();
$this->update(); $this->update();
} }

View file

@ -153,14 +153,14 @@
{ {
try try
{ {
if ($this->getVersion($package->assembly->version) !== null) if ($this->getVersion($package->assembly->getVersion()) !== null)
{ {
if(!$overwrite) if(!$overwrite)
{ {
return false; return false;
} }
$this->removeVersion($package->assembly->version); $this->removeVersion($package->assembly->getVersion());
} }
} }
catch (IOException $e) catch (IOException $e)
@ -169,7 +169,7 @@
} }
$version = new VersionEntry(); $version = new VersionEntry();
$version->Version = $package->assembly->version; $version->Version = $package->assembly->getVersion();
$version->Compiler = $package->header->CompilerExtension; $version->Compiler = $package->header->CompilerExtension;
$version->ExecutionUnits = $package->execution_units; $version->ExecutionUnits = $package->execution_units;
$version->MainExecutionPolicy = $package->main_execution_policy; $version->MainExecutionPolicy = $package->main_execution_policy;

View file

@ -131,13 +131,13 @@
return false; return false;
} }
if($this->build->main !== null) if($this->build->getMain() !== null)
{ {
if($this->execution_policies === null || count($this->execution_policies) === 0) if($this->execution_policies === null || count($this->execution_policies) === 0)
{ {
if($throw_exception) if($throw_exception)
{ {
throw new ConfigurationException(sprintf('Build configuration build.main uses an execution policy "%s" but no policies are defined', $this->build->main)); throw new ConfigurationException(sprintf('Build configuration build.main uses an execution policy "%s" but no policies are defined', $this->build->getMain()));
} }
return false; return false;
@ -147,7 +147,7 @@
$found = false; $found = false;
foreach($this->execution_policies as $policy) foreach($this->execution_policies as $policy)
{ {
if($policy->name === $this->build->main) if($policy->getName() === $this->build->getMain())
{ {
$found = true; $found = true;
break; break;
@ -158,12 +158,12 @@
{ {
if($throw_exception) if($throw_exception)
{ {
throw new ConfigurationException(sprintf('Build configuration build.main points to a undefined execution policy "%s"', $this->build->main)); throw new ConfigurationException(sprintf('Build configuration build.main points to a undefined execution policy "%s"', $this->build->getMain()));
} }
return false; return false;
} }
if($this->build->main === BuildConfigurationValues::ALL) if($this->build->getMain() === BuildConfigurationValues::ALL)
{ {
if($throw_exception) if($throw_exception)
{ {
@ -185,7 +185,7 @@
{ {
foreach($this->execution_policies as $executionPolicy) foreach($this->execution_policies as $executionPolicy)
{ {
if($executionPolicy->name === $name) if($executionPolicy->getName() === $name)
{ {
return $executionPolicy; return $executionPolicy;
} }
@ -214,7 +214,7 @@
/** @var ExecutionPolicy $execution_policy */ /** @var ExecutionPolicy $execution_policy */
foreach($this->execution_policies as $execution_policy) foreach($this->execution_policies as $execution_policy)
{ {
$defined_polices[] = $execution_policy->name; $defined_polices[] = $execution_policy->getName();
//$execution_policy->validate(); //$execution_policy->validate();
} }
@ -245,9 +245,9 @@
} }
} }
if($this->build->pre_build !== null && count($this->build->post_build) > 0) if(count($this->build->getPostBuild()) > 0)
{ {
foreach($this->build->post_build as $unit) foreach($this->build->getPostBuild() as $unit)
{ {
if(!in_array($unit, $defined_polices, true)) if(!in_array($unit, $defined_polices, true))
{ {
@ -261,9 +261,9 @@
} }
} }
if($this->build->post_build !== null && count($this->build->post_build) > 0) if(count($this->build->getPreBuild()) > 0)
{ {
foreach($this->build->post_build as $unit) foreach($this->build->getPreBuild() as $unit)
{ {
if(!in_array($unit, $defined_polices, true)) if(!in_array($unit, $defined_polices, true))
{ {
@ -282,7 +282,7 @@
{ {
case BuildConfigurationValues::ALL: case BuildConfigurationValues::ALL:
/** @var BuildConfiguration $configuration */ /** @var BuildConfiguration $configuration */
foreach($this->build->build_configurations as $configuration) foreach($this->build->getBuildConfigurations() as $configuration)
{ {
foreach($this->processBuildPolicies($configuration, $defined_polices) as $policy) foreach($this->processBuildPolicies($configuration, $defined_polices) as $policy)
{ {
@ -309,47 +309,44 @@
foreach($required_policies as $policy) foreach($required_policies as $policy)
{ {
$execution_policy = $this->getExecutionPolicy($policy); $execution_policy = $this->getExecutionPolicy($policy);
if($execution_policy?->exit_handlers !== null) if($execution_policy?->getExitHandlers() !== null)
{ {
if( if($execution_policy?->getExitHandlers()->getSuccess()?->getRun() !== null)
$execution_policy?->exit_handlers->success !== null &&
$execution_policy?->exit_handlers->success->run !== null
)
{ {
if(!in_array($execution_policy?->exit_handlers->success->run, $defined_polices, true)) if(!in_array($execution_policy?->getExitHandlers()->getSuccess()?->getRun(), $defined_polices, true))
{ {
throw new ConfigurationException('The execution policy \'' . $execution_policy?->name . '\' Success exit handler points to a undefined execution policy \'' . $execution_policy?->exit_handlers->success->run . '\''); throw new ConfigurationException('The execution policy \'' . $execution_policy?->getName() . '\' Success exit handler points to a undefined execution policy \'' . $execution_policy?->getExitHandlers()->getSuccess()?->getRun() . '\'');
} }
if(!in_array($execution_policy?->exit_handlers->success->run, $required_policies, true)) if(!in_array($execution_policy?->getExitHandlers()->getSuccess()?->getRun(), $required_policies, true))
{ {
$required_policies[] = $execution_policy?->exit_handlers->success->run; $required_policies[] = $execution_policy?->getExitHandlers()->getSuccess()?->getRun();
} }
} }
if($execution_policy?->exit_handlers->warning !== null && $execution_policy?->exit_handlers->warning->run !== null) if($execution_policy?->getExitHandlers()->getWarning()?->getRun() !== null)
{ {
if(!in_array($execution_policy?->exit_handlers->warning->run, $defined_polices, true)) if(!in_array($execution_policy?->getExitHandlers()->getWarning()?->getRun(), $defined_polices, true))
{ {
throw new ConfigurationException('The execution policy \'' . $execution_policy?->name . '\' Warning exit handler points to a undefined execution policy \'' . $execution_policy?->exit_handlers->warning->run . '\''); throw new ConfigurationException('The execution policy \'' . $execution_policy?->getName() . '\' Warning exit handler points to a undefined execution policy \'' . $execution_policy?->getExitHandlers()->getWarning()?->getRun() . '\'');
} }
if(!in_array($execution_policy?->exit_handlers->warning->run, $required_policies, true)) if(!in_array($execution_policy?->getExitHandlers()->getWarning()?->getRun(), $required_policies, true))
{ {
$required_policies[] = $execution_policy?->exit_handlers->warning->run; $required_policies[] = $execution_policy?->getExitHandlers()->getWarning()?->getRun();
} }
} }
if($execution_policy?->exit_handlers->error !== null && $execution_policy?->exit_handlers->error->run !== null) if($execution_policy?->getExitHandlers()->getError()?->getRun() !== null)
{ {
if(!in_array($execution_policy?->exit_handlers->error->run, $defined_polices, true)) if(!in_array($execution_policy?->getExitHandlers()->getError()?->getRun(), $defined_polices, true))
{ {
throw new ConfigurationException('The execution policy \'' . $execution_policy?->name . '\' Error exit handler points to a undefined execution policy \'' . $execution_policy?->exit_handlers->error->run . '\''); throw new ConfigurationException('The execution policy \'' . $execution_policy?->getName() . '\' Error exit handler points to a undefined execution policy \'' . $execution_policy?->getExitHandlers()->getError()?->getRun() . '\'');
} }
if(!in_array($execution_policy?->exit_handlers->error->run, $required_policies, true)) if(!in_array($execution_policy?->getExitHandlers()->getError()?->getRun(), $required_policies, true))
{ {
$required_policies[] = $execution_policy?->exit_handlers->error->run; $required_policies[] = $execution_policy?->getExitHandlers()->getError()?->getRun();
} }
} }
} }
@ -401,26 +398,26 @@
{ {
$required_policies = []; $required_policies = [];
if ($configuration->pre_build !== null && count($configuration->pre_build) > 0) if (count($configuration->getPreBuild()) > 0)
{ {
foreach ($configuration->pre_build as $unit) foreach ($configuration->getPreBuild() as $unit)
{ {
if (!in_array($unit, $defined_polices, true)) if (!in_array($unit, $defined_polices, true))
{ {
throw new ConfigurationException(sprintf("The property 'pre_build' in the build configuration '%s' calls for an undefined execution policy '%s'", $configuration->name, $unit)); throw new ConfigurationException(sprintf("The property 'pre_build' in the build configuration '%s' calls for an undefined execution policy '%s'", $configuration->getName(), $unit));
} }
$required_policies[] = $unit; $required_policies[] = $unit;
} }
} }
if ($configuration->post_build !== null && count($configuration->post_build) > 0) if (count($configuration->getPostBuild()) > 0)
{ {
foreach ($configuration->post_build as $unit) foreach ($configuration->getPostBuild() as $unit)
{ {
if (!in_array($unit, $defined_polices, true)) if (!in_array($unit, $defined_polices, true))
{ {
throw new ConfigurationException(sprintf("The property 'post_build' in the build configuration '%s' calls for an undefined execution policy '%s'", $configuration->name, $unit)); throw new ConfigurationException(sprintf("The property 'post_build' in the build configuration '%s' calls for an undefined execution policy '%s'", $configuration->getName(), $unit));
} }
$required_policies[] = $unit; $required_policies[] = $unit;
@ -441,7 +438,7 @@
$execution_policies = []; $execution_policies = [];
foreach($this->execution_policies as $executionPolicy) foreach($this->execution_policies as $executionPolicy)
{ {
$execution_policies[$executionPolicy->name] = $executionPolicy->toArray($bytecode); $execution_policies[$executionPolicy->getName()] = $executionPolicy->toArray($bytecode);
} }
} }

View file

@ -41,61 +41,205 @@
* *
* @var string * @var string
*/ */
public $name; private $name;
/** /**
* The package name used to identify the package * The package name used to identify the package
* *
* @var string * @var string
*/ */
public $package; private $package;
/** /**
* The software description * The software description
* *
* @var string|null * @var string|null
*/ */
public $description; private $description;
/** /**
* @var string|null * @var string|null
*/ */
public $company; private $company;
/** /**
* The product name * The product name
* *
* @var string|null * @var string|null
*/ */
public $product; private $product;
/** /**
* The copyright header for the product * The copyright header for the product
* *
* @var string|null * @var string|null
*/ */
public $copyright; private $copyright;
/** /**
* Product trademark * Product trademark
* *
* @var string|null * @var string|null
*/ */
public $trademark; private $trademark;
/** /**
* Software version * Software version
* *
* @var string * @var string
*/ */
public $version; private $version;
/** /**
* Universally Unique Identifier * Universally Unique Identifier
* *
* @var string * @var string
*/ */
public $uuid; private $uuid;
/**
* @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 getPackage(): string
{
return $this->package;
}
/**
* @param string $package
*/
public function setPackage(string $package): void
{
$this->package = $package;
}
/**
* @return string|null
*/
public function getDescription(): ?string
{
return $this->description;
}
/**
* @param string|null $description
*/
public function setDescription(?string $description): void
{
$this->description = $description;
}
/**
* @return string|null
*/
public function getCompany(): ?string
{
return $this->company;
}
/**
* @param string|null $company
*/
public function setCompany(?string $company): void
{
$this->company = $company;
}
/**
* @return string|null
*/
public function getProduct(): ?string
{
return $this->product;
}
/**
* @param string|null $product
*/
public function setProduct(?string $product): void
{
$this->product = $product;
}
/**
* @return string|null
*/
public function getCopyright(): ?string
{
return $this->copyright;
}
/**
* @param string|null $copyright
*/
public function setCopyright(?string $copyright): void
{
$this->copyright = $copyright;
}
/**
* @return string|null
*/
public function getTrademark(): ?string
{
return $this->trademark;
}
/**
* @param string|null $trademark
*/
public function setTrademark(?string $trademark): void
{
$this->trademark = $trademark;
}
/**
* @return string
*/
public function getVersion(): string
{
return $this->version;
}
/**
* @param string $version
*/
public function setVersion(string $version): void
{
$this->version = $version;
}
/**
* @return string
*/
public function getUuid(): string
{
return $this->uuid;
}
/**
* @param string $uuid
*/
public function setUuid(string $uuid): void
{
$this->uuid = $uuid;
}
/** /**
* Validates the object information to detect possible errors * Validates the object information to detect possible errors

View file

@ -42,77 +42,70 @@
* *
* @var string * @var string
*/ */
public $source_path; private $source_path;
/** /**
* The default configuration to use when building * The default configuration to use when building
* *
* @var string * @var string
*/ */
public $default_configuration; private $default_configuration;
/** /**
* An array of files to exclude from processing/bundling into the build output * An array of files to exclude from processing/bundling into the build output
* *
* @var string[] * @var string[]
*/ */
public $exclude_files; private $exclude_files;
/** /**
* Build options to pass on to the compiler * Build options to pass on to the compiler
* *
* @var array * @var array
*/ */
public $options; private $options;
/**
* The installation scope for the package (System/User/Shared)
*
* @var [type]
*/
public $scope;
/** /**
* The execution policy to use as the main execution point * The execution policy to use as the main execution point
* *
* @var string|null * @var string|null
*/ */
public $main; private $main;
/** /**
* An array of constants to define by default * An array of constants to define by default
* *
* @var string[] * @var string[]
*/ */
public $define_constants; private $define_constants;
/** /**
* An array of execution policies to execute pre build * An array of execution policies to execute pre build
* *
* @var string[] * @var string[]
*/ */
public $pre_build; private $pre_build;
/** /**
* An array of execution policies to execute post build * An array of execution policies to execute post build
* *
* @var string[] * @var string[]
*/ */
public $post_build; private $post_build;
/** /**
* An array of dependencies that are required by default * An array of dependencies that are required by default
* *
* @var Dependency[] * @var Dependency[]
*/ */
public $dependencies; private $dependencies;
/** /**
* An array of build configurations * An array of build configurations
* *
* @var BuildConfiguration[] * @var BuildConfiguration[]
*/ */
public $build_configurations; private $build_configurations;
/** /**
* Public Constructor * Public Constructor
@ -126,6 +119,138 @@
$this->build_configurations = []; $this->build_configurations = [];
} }
/**
* @return string
*/
public function getSourcePath(): string
{
return $this->source_path;
}
/**
* @param string $source_path
*/
public function setSourcePath(string $source_path): void
{
$this->source_path = $source_path;
}
/**
* @return string
*/
public function getDefaultConfiguration(): string
{
return $this->default_configuration;
}
/**
* @param string $default_configuration
*/
public function setDefaultConfiguration(string $default_configuration): void
{
$this->default_configuration = $default_configuration;
}
/**
* @return array|string[]
*/
public function getExcludeFiles(): array
{
return $this->exclude_files;
}
/**
* @param array|string[] $exclude_files
*/
public function setExcludeFiles(array $exclude_files): void
{
$this->exclude_files = $exclude_files;
}
/**
* @param string $file
* @return void
*/
public function excludeFile(string $file): void
{
$this->exclude_files[] = $file;
}
/**
* @param string $file
* @return void
*/
public function removeExcludedFile(string $file): void
{
foreach($this->exclude_files as $key => $exclude_file)
{
if($exclude_file === $file)
{
unset($this->exclude_files[$key]);
return;
}
}
}
/**
* @return array
*/
public function getOptions(): array
{
return $this->options;
}
/**
* @param array $options
*/
public function setOptions(array $options): void
{
$this->options = $options;
}
/**
* @param string $name
* @param string $value
* @return void
*/
public function setOption(string $name, string $value): void
{
$this->options[$name] = $value;
}
/**
* @param string $name
* @return void
*/
public function removeOption(string $name): void
{
foreach($this->options as $key => $option)
{
if($option === $name)
{
unset($this->options[$key]);
return;
}
}
}
/**
* @return string|null
*/
public function getMain(): ?string
{
return $this->main;
}
/**
* @param string|null $main
* @return void
*/
public function setMain(?string $main): void
{
$this->main = $main;
}
/** /**
* Adds a new dependency to the build if it doesn't already exist * Adds a new dependency to the build if it doesn't already exist
* *
@ -164,6 +289,212 @@
} }
} }
/**
* @return Dependency[]
*/
public function getDependencies(): array
{
return $this->dependencies;
}
/**
* @param Dependency[] $dependencies
* @return void
*/
public function setDependencies(array $dependencies): void
{
$this->dependencies = $dependencies;
}
/**
* @return array|string[]
*/
public function getDefineConstants(): array
{
return $this->define_constants;
}
/**
* @param array|string[] $define_constants
*/
public function setDefineConstants(array $define_constants): void
{
$this->define_constants = $define_constants;
}
/**
* @param string $name
* @param string $value
* @return void
*/
public function addDefineConstant(string $name, string $value): void
{
$this->define_constants[$name] = $value;
}
/**
* @param string $name
* @return void
*/
public function removeDefineConstant(string $name): void
{
foreach($this->define_constants as $key => $define_constant)
{
if($define_constant === $name)
{
unset($this->define_constants[$key]);
return;
}
}
}
/**
* @return string[]
*/
public function getPreBuild(): array
{
return $this->pre_build;
}
/**
* @param string[] $pre_build
*/
public function setPreBuild(array $pre_build): void
{
$this->pre_build = $pre_build;
}
/**
* Adds a new pre build policy to the build
*
* @param string $policy
* @return void
*/
public function addPreBuildPolicy(string $policy): void
{
$this->pre_build[] = $policy;
}
/**
* @param string $policy
* @return void
*/
public function removePreBuildPolicy(string $policy): void
{
foreach($this->pre_build as $key => $pre_build)
{
if($pre_build === $policy)
{
unset($this->pre_build[$key]);
return;
}
}
}
/**
* @return string[]
*/
public function getPostBuild(): array
{
return $this->post_build;
}
/**
* @param string[] $post_build
*/
public function setPostBuild(array $post_build): void
{
$this->post_build = $post_build;
}
/**
* @param string $policy
* @return void
*/
public function addPostBuildPolicy(string $policy): void
{
$this->post_build[] = $policy;
}
/**
* @param string $policy
* @return void
*/
public function removePostBuildPolicy(string $policy): void
{
foreach($this->post_build as $key => $post_build)
{
if($post_build === $policy)
{
unset($this->post_build[$key]);
return;
}
}
}
/**
* Returns an array of all the build configurations defined in the project configuration
*
* @return array
* @noinspection PhpUnused
*/
public function getBuildConfigurations(): array
{
$build_configurations = [];
foreach($this->build_configurations as $configuration)
{
$build_configurations[] = $configuration->getName();
}
return $build_configurations;
}
/**
* Returns the build configurations defined in the project configuration, throw an
* exception if there is no such configuration defined in the project configuration
*
* @param string $name
* @return BuildConfiguration
* @throws ConfigurationException
*/
public function getBuildConfiguration(string $name): BuildConfiguration
{
if($name === BuildConfigurationValues::DEFAULT)
{
$name = $this->default_configuration;
}
foreach($this->build_configurations as $configuration)
{
if($configuration->getName() === $name)
{
return $configuration;
}
}
throw new ConfigurationException(sprintf('The build configuration "%s" does not exist', $name));
}
/**
* @param array $build_configurations
* @return void
*/
public function setBuildConfigurations(array $build_configurations): void
{
$this->build_configurations = $build_configurations;
}
/**
* @param BuildConfiguration $configuration
* @return void
*/
public function addBuildConfiguration(BuildConfiguration $configuration): void
{
$this->build_configurations[] = $configuration;
}
/** /**
* Validates the build configuration object * Validates the build configuration object
* *
@ -186,11 +517,11 @@
$build_configurations = []; $build_configurations = [];
foreach($this->build_configurations as $configuration) foreach($this->build_configurations as $configuration)
{ {
if(in_array($configuration->name, $build_configurations, true)) if(in_array($configuration->getName(), $build_configurations, true))
{ {
if($throw_exception) if($throw_exception)
{ {
throw new ConfigurationException(sprintf('Invalid build configuration name "%s"', $configuration->name)); throw new ConfigurationException(sprintf('Invalid build configuration name "%s"', $configuration->getName()));
} }
return false; return false;
@ -230,50 +561,6 @@
return true; return true;
} }
/**
* Returns an array of all the build configurations defined in the project configuration
*
* @return array
* @noinspection PhpUnused
*/
public function getBuildConfigurations(): array
{
$build_configurations = [];
foreach($this->build_configurations as $configuration)
{
$build_configurations[] = $configuration->name;
}
return $build_configurations;
}
/**
* Returns the build configurations defined in the project configuration, throw an
* exception if there is no such configuration defined in the project configuration
*
* @param string $name
* @return BuildConfiguration
* @throws ConfigurationException
*/
public function getBuildConfiguration(string $name): BuildConfiguration
{
if($name === BuildConfigurationValues::DEFAULT)
{
$name = $this->default_configuration;
}
foreach($this->build_configurations as $configuration)
{
if($configuration->name === $name)
{
return $configuration;
}
}
throw new ConfigurationException(sprintf('The build configuration "%s" does not exist', $name));
}
/** /**
* Returns an array representation of the object * Returns an array representation of the object
* *
@ -301,11 +588,6 @@
$results[($bytecode ? Functions::cbc('options') : 'options')] = $this->options; $results[($bytecode ? Functions::cbc('options') : 'options')] = $this->options;
} }
if($this->scope !== null)
{
$results[($bytecode ? Functions::cbc('scope') : 'scope')] = $this->scope;
}
if($this->main !== null) if($this->main !== null)
{ {
$results[($bytecode ? Functions::cbc('main') : 'main')] = $this->main; $results[($bytecode ? Functions::cbc('main') : 'main')] = $this->main;
@ -363,7 +645,6 @@
$object->default_configuration = Functions::array_bc($data, 'default_configuration'); $object->default_configuration = Functions::array_bc($data, 'default_configuration');
$object->exclude_files = (Functions::array_bc($data, 'exclude_files') ?? []); $object->exclude_files = (Functions::array_bc($data, 'exclude_files') ?? []);
$object->options = (Functions::array_bc($data, 'options') ?? []); $object->options = (Functions::array_bc($data, 'options') ?? []);
$object->scope = Functions::array_bc($data, 'scope');
$object->main = Functions::array_bc($data, 'main'); $object->main = Functions::array_bc($data, 'main');
$object->define_constants = (Functions::array_bc($data, 'define_constants') ?? []); $object->define_constants = (Functions::array_bc($data, 'define_constants') ?? []);
$object->pre_build = (Functions::array_bc($data, 'pre_build') ?? []); $object->pre_build = (Functions::array_bc($data, 'pre_build') ?? []);

View file

@ -41,49 +41,49 @@
* *
* @var string * @var string
*/ */
public $name; private $name;
/** /**
* Options to pass onto the extension compiler * Options to pass onto the extension compiler
* *
* @var array * @var array
*/ */
public $options; private $options;
/** /**
* The build output path for the build configuration, eg; build/%BUILD.NAME% * The build output path for the build configuration, eg; build/%BUILD.NAME%
* *
* @var string * @var string
*/ */
public $output_path; private $output_path;
/** /**
* An array of constants to define for the build when importing or executing. * An array of constants to define for the build when importing or executing.
* *
* @var string[] * @var string[]
*/ */
public $define_constants; private $define_constants;
/** /**
* An array of files to exclude in this build configuration * An array of files to exclude in this build configuration
* *
* @var string[] * @var string[]
*/ */
public $exclude_files; private $exclude_files;
/** /**
* An array of policies to execute pre-building the package * An array of policies to execute pre-building the package
* *
* @var string[]|string * @var string[]
*/ */
public $pre_build; private $pre_build;
/** /**
* An array of policies to execute post-building the package * An array of policies to execute post-building the package
* *
* @var string * @var string[]
*/ */
public $post_build; private $post_build;
/** /**
* Dependencies required for the build configuration, cannot conflict with the * Dependencies required for the build configuration, cannot conflict with the
@ -91,7 +91,7 @@
* *
* @var Dependency[] * @var Dependency[]
*/ */
public $dependencies; private $dependencies;
/** /**
* Public Constructor * Public Constructor
@ -210,6 +210,207 @@
return True; return True;
} }
/**
* @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 getOptions(): array
{
return $this->options;
}
/**
* @param array $options
*/
public function setOptions(array $options): void
{
$this->options = $options;
}
/**
* @return string
*/
public function getOutputPath(): string
{
return $this->output_path;
}
/**
* @param string $output_path
*/
public function setOutputPath(string $output_path): void
{
$this->output_path = $output_path;
}
/**
* @return array|string[]
*/
public function getDefineConstants(): array
{
return $this->define_constants;
}
/**
* Sets a defined constant for the build configuration
*
* @param string $name
* @param string $value
*/
public function setDefinedConstant(string $name, string $value): void
{
$this->define_constants[$name] = $value;
}
/**
* Removes a defined constant from the build configuration
*
* @param string $name
* @return void
*/
public function removeDefinedConstant(string $name): void
{
unset($this->define_constants[$name]);
}
/**
* Returns excluded files
*
* @return array|string[]
*/
public function getExcludeFiles(): array
{
return $this->exclude_files;
}
/**
* Adds a file to the excluded files list
*
* @param string $file
*/
public function addExcludedFile(string $file): void
{
$this->exclude_files[] = $file;
}
/**
* Removes a file from the excluded files list
*
* @param string $file
* @return void
*/
public function removeExcludedFile(string $file): void
{
$this->exclude_files = array_filter($this->exclude_files, static function($item) use ($file)
{
return $item !== $file;
});
}
/**
* @return array|string[]
*/
public function getPreBuild(): array
{
return $this->pre_build;
}
/**
* @param string $pre_build
*/
public function addPreBuild(string $pre_build): void
{
$this->pre_build[] = $pre_build;
}
/**
* Removes a pre-build policy
*
* @param string $pre_build
* @return void
*/
public function removePreBuild(string $pre_build): void
{
$this->pre_build = array_filter($this->pre_build, static function($item) use ($pre_build)
{
return $item !== $pre_build;
});
}
/**
* @return array
*/
public function getPostBuild(): array
{
return $this->post_build;
}
/**
* Adds a post-build policy
*
* @param string $post_build
*/
public function addPostBuild(string $post_build): void
{
$this->post_build[] = $post_build;
}
/**
* @return Dependency[]
*/
public function getDependencies(): array
{
return $this->dependencies;
}
/**
* @param Dependency[] $dependencies
*/
public function setDependencies(array $dependencies): void
{
$this->dependencies = $dependencies;
}
/**
* Adds a dependency to the build configuration
*
* @param Dependency $dependency
* @return void
*/
public function addDependency(Dependency $dependency): void
{
$this->dependencies[] = $dependency;
}
/**
* Removes a dependency from the build configuration
*
* @param Dependency $dependency
* @return void
*/
public function removeDependency(Dependency $dependency): void
{
$this->dependencies = array_filter($this->dependencies, static function($item) use ($dependency)
{
return $item !== $dependency;
});
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@ -268,12 +469,12 @@
$object = new BuildConfiguration(); $object = new BuildConfiguration();
$object->name = Functions::array_bc($data, 'name'); $object->name = Functions::array_bc($data, 'name');
$object->options = Functions::array_bc($data, 'options'); $object->options = Functions::array_bc($data, 'options') ?? [];
$object->output_path = Functions::array_bc($data, 'output_path'); $object->output_path = Functions::array_bc($data, 'output_path');
$object->define_constants = Functions::array_bc($data, 'define_constants'); $object->define_constants = Functions::array_bc($data, 'define_constants') ?? [];
$object->exclude_files = Functions::array_bc($data, 'exclude_files'); $object->exclude_files = Functions::array_bc($data, 'exclude_files') ?? [];
$object->pre_build = Functions::array_bc($data, 'pre_build'); $object->pre_build = Functions::array_bc($data, 'pre_build') ?? [];
$object->post_build = Functions::array_bc($data, 'post_build'); $object->post_build = Functions::array_bc($data, 'post_build') ?? [];
if(Functions::array_bc($data, 'dependencies') !== null) if(Functions::array_bc($data, 'dependencies') !== null)
{ {

View file

@ -44,21 +44,69 @@
* *
* @var string * @var string
*/ */
public $extension; private $extension;
/** /**
* The minimum version that is supported * The minimum version that is supported
* *
* @var string * @var string
*/ */
public $minimum_version; private $minimum_version;
/** /**
* The maximum version that is supported * The maximum version that is supported
* *
* @var string * @var string
*/ */
public $maximum_version; private $maximum_version;
/**
* @return string
*/
public function getExtension(): string
{
return $this->extension;
}
/**
* @param string $extension
*/
public function setExtension(string $extension): void
{
$this->extension = $extension;
}
/**
* @return string
*/
public function getMinimumVersion(): string
{
return $this->minimum_version;
}
/**
* @param string $minimum_version
*/
public function setMinimumVersion(string $minimum_version): void
{
$this->minimum_version = $minimum_version;
}
/**
* @return string
*/
public function getMaximumVersion(): string
{
return $this->maximum_version;
}
/**
* @param string $maximum_version
*/
public function setMaximumVersion(string $maximum_version): void
{
$this->maximum_version = $maximum_version;
}
/** /**
* Validates the compiler object * Validates the compiler object

View file

@ -36,35 +36,115 @@
* *
* @var string * @var string
*/ */
public $name; private $name;
/** /**
* The name of a supported runner instance * The name of a supported runner instance
* *
* @var string * @var string
*/ */
public $runner; private $runner;
/** /**
* The message to display when the policy is invoked * The message to display when the policy is invoked
* *
* @var string|null * @var string|null
*/ */
public $message; private $message;
/** /**
* The execution process of the policy * The execution process of the policy
* *
* @var Execute * @var Execute
*/ */
public $execute; private $execute;
/** /**
* The configuration for exit handling * The configuration for exit handling
* *
* @var ExitHandlers * @var ExitHandlers
*/ */
public $exit_handlers; private $exit_handlers;
/**
* @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 getRunner(): string
{
return $this->runner;
}
/**
* @param string $runner
*/
public function setRunner(string $runner): void
{
$this->runner = $runner;
}
/**
* @return string|null
*/
public function getMessage(): ?string
{
return $this->message;
}
/**
* @param string|null $message
*/
public function setMessage(?string $message): void
{
$this->message = $message;
}
/**
* @return Execute
*/
public function getExecute(): Execute
{
return $this->execute;
}
/**
* @param Execute $execute
*/
public function setExecute(Execute $execute): void
{
$this->execute = $execute;
}
/**
* @return ExitHandlers
*/
public function getExitHandlers(): ExitHandlers
{
return $this->exit_handlers;
}
/**
* @param ExitHandlers $exit_handlers
*/
public function setExitHandlers(ExitHandlers $exit_handlers): void
{
$this->exit_handlers = $exit_handlers;
}
/** /**
* @return bool * @return bool

View file

@ -24,6 +24,7 @@
namespace ncc\Objects\ProjectConfiguration\ExecutionPolicy; namespace ncc\Objects\ProjectConfiguration\ExecutionPolicy;
use ncc\Enums\SpecialConstants\RuntimeConstants;
use ncc\Interfaces\BytecodeObjectInterface; use ncc\Interfaces\BytecodeObjectInterface;
use ncc\Utilities\Functions; use ncc\Utilities\Functions;
@ -34,7 +35,7 @@
* *
* @var string * @var string
*/ */
public $target; private $target;
/** /**
* The working directory to execute the policy in, if not specified the * The working directory to execute the policy in, if not specified the
@ -42,35 +43,35 @@
* *
* @var string|null * @var string|null
*/ */
public $working_directory; private $working_directory;
/** /**
* Options to pass to the process * Options to pass to the process
* *
* @var array * @var array
*/ */
public $options; private $options;
/** /**
* An array of environment variables to pass on to the process * An array of environment variables to pass on to the process
* *
* @var array|null * @var array
*/ */
public $environment_variables; private $environment_variables;
/** /**
* Indicates if the output should be displayed or suppressed * Indicates if the output should be displayed or suppressed
* *
* @var bool|null * @var bool
*/ */
public $silent; private $silent;
/** /**
* Indicates if the process should run in Tty mode (Overrides Silent & Pty mode) * Indicates if the process should run in Tty mode (Overrides Silent & Pty mode)
* *
* @var bool|null * @var bool
*/ */
public $tty; private $tty;
/** /**
* The number of seconds to wait before giving up on the process, will automatically execute the error handler * The number of seconds to wait before giving up on the process, will automatically execute the error handler
@ -78,12 +79,12 @@
* *
* @var int|null * @var int|null
*/ */
public $timeout; private $timeout;
/** /**
* @var int|null * @var int|null
*/ */
public $idle_timeout; private $idle_timeout;
/** /**
* Public Constructor * Public Constructor
@ -92,11 +93,149 @@
{ {
$this->tty = false; $this->tty = false;
$this->silent = false; $this->silent = false;
$this->timeout = null;
$this->idle_timeout = null;
$this->working_directory = "%CWD%"; $this->working_directory = "%CWD%";
} }
/**
* Gets the target file to execute
*
* @return string
*/
public function getTarget(): string
{
return $this->target;
}
/**
* Sets the target file to execute
*
* @param string $target
*/
public function setTarget(string $target): void
{
$this->target = $target;
}
/**
* Returns the working directory to execute the policy in, if not specified the value "%CWD%" will be used as
* the default
*
* @return string
*/
public function getWorkingDirectory(): string
{
return $this->working_directory ?? RuntimeConstants::CWD;
}
/**
* Sets the working directory to execute the policy in, if not specified, the value "%CWD%" will be used as
* the default
*
* @param string|null $working_directory
*/
public function setWorkingDirectory(?string $working_directory): void
{
$this->working_directory = $working_directory;
}
/**
* @return array
*/
public function getOptions(): array
{
return $this->options;
}
/**
* @param array $options
*/
public function setOptions(array $options): void
{
$this->options = $options;
}
/**
* @return array
*/
public function getEnvironmentVariables(): array
{
return $this->environment_variables;
}
/**
* @param array $environment_variables
*/
public function setEnvironmentVariables(array $environment_variables): void
{
$this->environment_variables = $environment_variables;
}
/**
* @return bool
*/
public function isSilent(): bool
{
return $this->silent ?? false;
}
/**
* @param bool $silent
*/
public function setSilent(bool $silent): void
{
$this->silent = $silent;
}
/**
* @return bool
*/
public function isTty(): bool
{
return $this->tty ?? true;
}
/**
* @param bool $tty
*/
public function setTty(bool $tty): void
{
$this->tty = $tty;
}
/**
* @return int|null
*/
public function getTimeout(): ?int
{
return $this->timeout;
}
/**
* @param int|null $timeout
*/
public function setTimeout(?int $timeout): void
{
$this->timeout = $timeout;
}
/**
* @return int|null
*/
public function getIdleTimeout(): ?int
{
return $this->idle_timeout;
}
/**
* @param int|null $idle_timeout
*/
public function setIdleTimeout(?int $idle_timeout): void
{
$this->idle_timeout = $idle_timeout;
}
/** /**
* @inheritDoc * @inheritDoc
*/ */
@ -156,10 +295,10 @@
$object->target = Functions::array_bc($data, 'target'); $object->target = Functions::array_bc($data, 'target');
$object->working_directory = Functions::array_bc($data, 'working_directory'); $object->working_directory = Functions::array_bc($data, 'working_directory');
$object->options = Functions::array_bc($data, 'options'); $object->options = Functions::array_bc($data, 'options') ?? [];
$object->environment_variables = Functions::array_bc($data, 'environment_variables'); $object->environment_variables = Functions::array_bc($data, 'environment_variables') ?? [];
$object->silent = Functions::array_bc($data, 'silent'); $object->silent = Functions::array_bc($data, 'silent') ?? false;
$object->tty = Functions::array_bc($data, 'tty'); $object->tty = Functions::array_bc($data, 'tty') ?? true;
$object->timeout = Functions::array_bc($data, 'timeout'); $object->timeout = Functions::array_bc($data, 'timeout');
$object->idle_timeout = Functions::array_bc($data, 'idle_timeout'); $object->idle_timeout = Functions::array_bc($data, 'idle_timeout');

View file

@ -34,7 +34,7 @@
* *
* @var string|null * @var string|null
*/ */
public $message; private $message;
/** /**
* Indicates if the process should exit if the handle is triggered, * Indicates if the process should exit if the handle is triggered,
@ -43,23 +43,93 @@
* property will be set to true, otherwise for "success" and "warning" * property will be set to true, otherwise for "success" and "warning"
* the property will be false. * the property will be false.
* *
* @var bool|null * @var bool
*/ */
public $end_process; private $end_process;
/** /**
* The name of another execution policy to execute (optionally) when this exit handle is triggered * The name of another execution policy to execute (optionally) when this exit handle is triggered
* *
* @var string|null * @var string|null
*/ */
public $run; private $run;
/** /**
* The exit code that needs to be returned from the process to trigger this handle * The exit code that needs to be returned from the process to trigger this handle
* *
* @var int * @var int
*/ */
public $exit_code; private $exit_code;
public function __construct()
{
$this->end_process = false;
$this->exit_code = 0;
}
/**
* @return string|null
*/
public function getMessage(): ?string
{
return $this->message;
}
/**
* @param string|null $message
*/
public function setMessage(?string $message): void
{
$this->message = $message;
}
/**
* @return bool
*/
public function getEndProcess(): bool
{
return $this->end_process;
}
/**
* @param bool $end_process
*/
public function setEndProcess(bool $end_process): void
{
$this->end_process = $end_process;
}
/**
* @return string|null
*/
public function getRun(): ?string
{
return $this->run;
}
/**
* @param string|null $run
*/
public function setRun(?string $run): void
{
$this->run = $run;
}
/**
* @return int
*/
public function getExitCode(): int
{
return $this->exit_code;
}
/**
* @param int $exit_code
*/
public function setExitCode(int $exit_code): void
{
$this->exit_code = $exit_code;
}
/** /**
* @inheritDoc * @inheritDoc
@ -97,9 +167,9 @@
$object = new self(); $object = new self();
$object->message = Functions::array_bc($data, 'message'); $object->message = Functions::array_bc($data, 'message');
$object->end_process = Functions::array_bc($data, 'end_process'); $object->end_process = Functions::array_bc($data, 'end_process') ?? false;
$object->run = Functions::array_bc($data, 'run'); $object->run = Functions::array_bc($data, 'run');
$object->exit_code = Functions::array_bc($data, 'exit_code'); $object->exit_code = Functions::array_bc($data, 'exit_code') ?? 0;
return $object; return $object;
} }

View file

@ -34,21 +34,69 @@
* *
* @var ExitHandle|null * @var ExitHandle|null
*/ */
public $success; private $success;
/** /**
* The handle to execute when the process exits with a warning exit code * The handle to execute when the process exits with a warning exit code
* *
* @var ExitHandle|null * @var ExitHandle|null
*/ */
public $warning; private $warning;
/** /**
* The handle to execute when the process exits with a error exit code * The handle to execute when the process exits with a error exit code
* *
* @var ExitHandle|null * @var ExitHandle|null
*/ */
public $error; private $error;
/**
* @return ExitHandle|null
*/
public function getSuccess(): ?ExitHandle
{
return $this->success;
}
/**
* @param ExitHandle|null $success
*/
public function setSuccess(?ExitHandle $success): void
{
$this->success = $success;
}
/**
* @return ExitHandle|null
*/
public function getWarning(): ?ExitHandle
{
return $this->warning;
}
/**
* @param ExitHandle|null $warning
*/
public function setWarning(?ExitHandle $warning): void
{
$this->warning = $warning;
}
/**
* @return ExitHandle|null
*/
public function getError(): ?ExitHandle
{
return $this->error;
}
/**
* @param ExitHandle|null $error
*/
public function setError(?ExitHandle $error): void
{
$this->error = $error;
}
/** /**
* @inheritDoc * @inheritDoc
@ -65,26 +113,26 @@
/** /**
* @inheritDoc * @inheritDoc
*/ */
public static function fromArray(array $data): self public static function fromArray(array $data): ExitHandlers
{ {
$object = new self(); $object = new self();
$object->success = Functions::array_bc($data, 'success'); $object->setSuccess(Functions::array_bc($data, 'success'));
if($object->success !== null) if($object->getSuccess() !== null)
{ {
$object->success = ExitHandle::fromArray($object->success); $object->setSuccess(ExitHandle::fromArray((array)$object->getSuccess()));
} }
$object->warning = Functions::array_bc($data, 'warning'); $object->setWarning(Functions::array_bc($data, 'warning'));
if($object->warning !== null) if($object->getWarning() !== null)
{ {
$object->warning = ExitHandle::fromArray($object->warning); $object->setWarning(ExitHandle::fromArray((array)$object->getWarning()));
} }
$object->error = Functions::array_bc($data, 'error'); $object->setError(Functions::array_bc($data, 'error'));
if($object->error !== null) if($object->getError() !== null)
{ {
$object->error = ExitHandle::fromArray($object->error); $object->setError(ExitHandle::fromArray((array)$object->getError()));
} }
return $object; return $object;

View file

@ -34,42 +34,42 @@
* *
* @var string[]|null * @var string[]|null
*/ */
public $pre_install; private $pre_install;
/** /**
* An array of execution policies to execute post-installation * An array of execution policies to execute post-installation
* *
* @var string[]|null * @var string[]|null
*/ */
public $post_install; private $post_install;
/** /**
* An array of execution policies to execute pre-uninstallation * An array of execution policies to execute pre-uninstallation
* *
* @var string[]|null * @var string[]|null
*/ */
public $pre_uninstall; private $pre_uninstall;
/** /**
* An array of execution policies to execute post-uninstallation * An array of execution policies to execute post-uninstallation
* *
* @var string[]|null * @var string[]|null
*/ */
public $post_uninstall; private $post_uninstall;
/** /**
* An array of execution policies to execute pre-update * An array of execution policies to execute pre-update
* *
* @var string[]|null * @var string[]|null
*/ */
public $pre_update; private $pre_update;
/** /**
* An array of execution policies to execute post-update * An array of execution policies to execute post-update
* *
* @var string[]|null * @var string[]|null
*/ */
public $post_update; private $post_update;
/** /**
* @inheritDoc * @inheritDoc

View file

@ -24,6 +24,7 @@
namespace ncc\Objects\ProjectConfiguration\UpdateSource; namespace ncc\Objects\ProjectConfiguration\UpdateSource;
use ncc\Enums\RemoteSourceType;
use ncc\Interfaces\BytecodeObjectInterface; use ncc\Interfaces\BytecodeObjectInterface;
use ncc\Utilities\Functions; use ncc\Utilities\Functions;
@ -34,28 +35,92 @@
* *
* @var string * @var string
*/ */
public $name; private $name;
/** /**
* The type of client that is used to connect to the remote source * The type of client that is used to connect to the remote source
* *
* @var string|null * @var string|null
*/ */
public $type; private $type;
/** /**
* The host of the remote source * The host of the remote source
* *
* @var string * @var string
*/ */
public $host; private $host;
/** /**
* If SSL should be used * If SSL should be used
* *
* @var bool * @var bool
*/ */
public $ssl; private $ssl;
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @param string $name
*/
public function setName(string $name): void
{
$this->name = $name;
}
/**
* @return string|null
*/
public function getType(): ?string
{
return $this->type;
}
/**
* @param string|null $type
*/
public function setType(?string $type): void
{
$this->type = $type;
}
/**
* @return string
*/
public function getHost(): string
{
return $this->host;
}
/**
* @param string $host
*/
public function setHost(string $host): void
{
$this->host = $host;
}
/**
* @return bool
*/
public function isSsl(): bool
{
return $this->ssl;
}
/**
* @param bool $ssl
*/
public function setSsl(bool $ssl): void
{
$this->ssl = $ssl;
}
/** /**
* @inheritDoc * @inheritDoc
@ -78,9 +143,9 @@
$object = new self(); $object = new self();
$object->name = Functions::array_bc($data, 'name'); $object->name = Functions::array_bc($data, 'name');
$object->type = Functions::array_bc($data, 'type'); $object->type = Functions::array_bc($data, 'type') ?? RemoteSourceType::UNKNOWN;
$object->host = Functions::array_bc($data, 'host'); $object->host = Functions::array_bc($data, 'host');
$object->ssl = Functions::array_bc($data, 'ssl'); $object->ssl = Functions::array_bc($data, 'ssl') ?? false;
return $object; return $object;
} }

View file

@ -148,8 +148,6 @@
* @param string $name * @param string $name
* @param string $password * @param string $password
* @return bool * @return bool
* @throws RuntimeException
* @noinspection PhpUnused
*/ */
public function authenticate(string $name, string $password): bool public function authenticate(string $name, string $password): bool
{ {

View file

@ -110,7 +110,7 @@
if($version === Versions::LATEST) if($version === Versions::LATEST)
{ {
$version = $package_entry?->getLatestVersion(); $version = $package_entry->getLatestVersion();
} }
try try
@ -152,14 +152,14 @@
try try
{ {
switch($version_entry->Compiler->extension) switch($version_entry->Compiler->getExtension())
{ {
case CompilerExtensions::PHP: case CompilerExtensions::PHP:
PhpRuntime::import($version_entry, $options); PhpRuntime::import($version_entry, $options);
break; break;
default: default:
throw new ImportException(sprintf('Compiler extension %s is not supported in this runtime', $version_entry->Compiler->extension)); throw new ImportException(sprintf('Compiler extension %s is not supported in this runtime', $version_entry->Compiler->getExtension()));
} }
} }
catch(Exception $e) catch(Exception $e)

View file

@ -39,7 +39,9 @@ namespace ncc\Utilities;
{ {
// Builtin function is faster than raw implementation // Builtin function is faster than raw implementation
if(function_exists('base64_encode')) if(function_exists('base64_encode'))
{
return base64_encode($string); return base64_encode($string);
}
$base64 = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'); $base64 = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
$bit_pattern = ''; $bit_pattern = '';
@ -79,7 +81,9 @@ namespace ncc\Utilities;
public static function decode(string $string): string public static function decode(string $string): string
{ {
if(function_exists('base64_decode')) if(function_exists('base64_decode'))
{
return base64_decode($string); return base64_decode($string);
}
$base64 = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'); $base64 = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/');
$bit_pattern = ''; $bit_pattern = '';
@ -88,7 +92,7 @@ namespace ncc\Utilities;
foreach (str_split($string) as $b64_encoded) foreach (str_split($string) as $b64_encoded)
{ {
$bit_pattern .= sprintf('%06s', decbin(array_search($b64_encoded, $base64))); $bit_pattern .= sprintf('%06s', decbin(array_search($b64_encoded, $base64, true)));
} }
$bit_pattern = str_split($bit_pattern, 8); $bit_pattern = str_split($bit_pattern, 8);

View file

@ -1,24 +1,24 @@
<?php <?php
/* /*
* Copyright (c) Nosial 2022-2023, all rights reserved. * 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 * 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 * 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 * 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 * Software, and to permit persons to whom the Software is furnished to do so, subject to the following
* conditions: * conditions:
* *
* The above copyright notice and this permission notice shall be included in all copies or substantial portions * The above copyright notice and this permission notice shall be included in all copies or substantial portions
* of the Software. * of the Software.
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * 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 * 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 * 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 * 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 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE. * DEALINGS IN THE SOFTWARE.
* *
*/ */
/** @noinspection PhpMissingFieldTypeInspection */ /** @noinspection PhpMissingFieldTypeInspection */
@ -51,76 +51,51 @@
* @param int $size * @param int $size
* @param array $options * @param array $options
* @return void * @return void
*@copyright Copyright (c) 2010, dealnews.com, Inc. All rights reserved. * @copyright Copyright (c) 2010, dealnews.com, Inc. All rights reserved.
* @copyright Copyright (c) 2023, Nosial. All rights reserved
*/ */
public static function inlineProgressBar(int $value, int $total, int $size=38, array $options=[]): void public static function inlineProgressBar(int $value, int $total, int $size = 10, array $options = []): void
{ {
if(!ncc::cliMode())
return;
if(Main::getLogLevel() !== null)
{
switch(Main::getLogLevel())
{
case LogLevel::VERBOSE:
case LogLevel::DEBUG:
case LogLevel::SILENT:
return;
default:
break;
}
}
static $start_time; static $start_time;
// if we go over our bound, just ignore it // Start time initialization
if($value > $total) if (!$start_time)
return;
if(empty($start_time)) $start_time=time();
$now = time();
$perc=(double)($value/$total);
$bar=floor($perc*$size);
$status_bar="\r[ ";
$status_bar.=str_repeat("=", $bar);
if($bar<$size){
$status_bar.=">";
$status_bar.=str_repeat(" ", $size-$bar);
} else {
$status_bar.="=";
}
/** @noinspection PhpRedundantOptionalArgumentInspection */
$disp=number_format($perc*100, 0);
$status_bar.=" ] $disp% $value/$total";
if($value == 0)
return;
$rate = ($now-$start_time)/$value;
$left = $total - $value;
$eta = round($rate * $left, 2);
$elapsed = $now - $start_time;
$remaining_text = 'remaining: ';
if(isset($options['remaining_text']))
{ {
$remaining_text = $options['remaining_text']; $start_time = time();
} }
$status_bar.= " $remaining_text ".number_format($eta)." sec. elapsed: ".number_format($elapsed)." sec."; // If the value is out of bounds or zero, return early
if ($value > $total || $value === 0)
{
return;
}
echo "$status_bar "; // Build status bar
$percentage = $value / $total;
$barLength = floor($percentage * $size);
$statusBar = "\r[ "
. str_repeat("=", $barLength)
. ($barLength < $size ? ">" : "=")
. str_repeat(" ", $size - $barLength)
. " ] "
. number_format($percentage * 100) . " % $value/$total";
// ETA and elapsed time calculation
$rate = (time() - $start_time) / $value;
$eta = round($rate * ($total - $value), 2);
$elapsed = time() - $start_time;
$remaining_text = $options['remaining_text'] ?? 'remaining: ';
$statusBar .= " $remaining_text " . number_format($eta) . " sec. elapsed: " . number_format($elapsed) . " sec.";
print("$statusBar ");
flush(); flush();
// when done, send a newline // Reset variables once the progress is complete
if($value == $total) if ($value === $total)
Console::out((string)null); {
print("\n");
$start_time = null; // This resets the start time for the next progress bar
}
} }
/** /**
@ -162,11 +137,11 @@
if ($timeDiff > 1.0) if ($timeDiff > 1.0)
{ {
$fmt_tick = Console::formatColor($tick_time, ConsoleColors::LIGHT_RED); $fmt_tick = self::formatColor($tick_time, ConsoleColors::LIGHT_RED);
} }
elseif ($timeDiff > 0.5) elseif ($timeDiff > 0.5)
{ {
$fmt_tick = Console::formatColor($tick_time, ConsoleColors::LIGHT_YELLOW); $fmt_tick = self::formatColor($tick_time, ConsoleColors::LIGHT_YELLOW);
} }
} }
@ -185,13 +160,19 @@
public static function out(string $message, bool $newline=true, bool $no_prefix=false): void public static function out(string $message, bool $newline=true, bool $no_prefix=false): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::INFO, Main::getLogLevel())) if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::INFO, Main::getLogLevel()))
{
return; return;
}
if(Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel()) && !$no_prefix) if(!$no_prefix && Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel()))
{
$message = self::setPrefix(LogLevel::INFO, $message); $message = self::setPrefix(LogLevel::INFO, $message);
}
if($newline) if($newline)
{ {
@ -212,34 +193,30 @@
public static function outDebug(string $message, bool $newline=true): void public static function outDebug(string $message, bool $newline=true): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::DEBUG, Main::getLogLevel())) if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::DEBUG, Main::getLogLevel()))
{
return; return;
}
$backtrace = null; $backtrace = null;
if(function_exists('debug_backtrace')) if(function_exists('debug_backtrace'))
{
$backtrace = debug_backtrace(); $backtrace = debug_backtrace();
}
$trace_msg = null; $trace_msg = null;
if($backtrace !== null && isset($backtrace[1])) if($backtrace !== null && isset($backtrace[1]))
{ {
$trace_msg = Console::formatColor($backtrace[1]['class'], ConsoleColors::LIGHT_GREY); $trace_msg = self::formatColor($backtrace[1]['class'], ConsoleColors::LIGHT_GREY);
$trace_msg .= $backtrace[1]['type']; $trace_msg .= $backtrace[1]['type'];
$trace_msg .= Console::formatColor($backtrace[1]['function'] . '()', ConsoleColors::LIGHT_GREEN); $trace_msg .= self::formatColor($backtrace[1]['function'] . '()', ConsoleColors::LIGHT_GREEN);
$trace_msg .= ' > '; $trace_msg .= ' > ';
} }
/** Apply syntax highlighting using regular expressions */ $message = self::setPrefix(LogLevel::DEBUG, $trace_msg . $message);
// Hyperlinks
$message = preg_replace('/(https?:\/\/[^\s]+)/', Console::formatColor('$1', ConsoleColors::LIGHT_BLUE), $message);
// File Paths
$message = preg_replace('/(\/[^\s]+)/', Console::formatColor('$1', ConsoleColors::LIGHT_CYAN), $message);
/** @noinspection PhpUnnecessaryStringCastInspection */
$message = self::setPrefix(LogLevel::DEBUG, (string)$trace_msg . $message);
self::out($message, $newline, true); self::out($message, $newline, true);
} }
@ -253,10 +230,14 @@
public static function outVerbose(string $message, bool $newline=true): void public static function outVerbose(string $message, bool $newline=true): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel())) if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel()))
{
return; return;
}
self::out(self::setPrefix(LogLevel::VERBOSE, $message), $newline, true); self::out(self::setPrefix(LogLevel::VERBOSE, $message), $newline, true);
} }
@ -295,10 +276,14 @@
public static function outWarning(string $message, bool $newline=true): void public static function outWarning(string $message, bool $newline=true): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::WARNING, Main::getLogLevel())) if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::WARNING, Main::getLogLevel()))
{
return; return;
}
if(Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel())) if(Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel()))
{ {
@ -320,10 +305,14 @@
public static function outError(string $message, bool $newline=true, ?int $exit_code=null): void public static function outError(string $message, bool $newline=true, ?int $exit_code=null): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::ERROR, Main::getLogLevel())) if(Main::getLogLevel() !== null && !Resolver::checkLogLevel(LogLevel::ERROR, Main::getLogLevel()))
{
return; return;
}
if(Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel())) if(Main::getLogLevel() !== null && Resolver::checkLogLevel(LogLevel::VERBOSE, Main::getLogLevel()))
{ {
@ -351,14 +340,16 @@
public static function outException(string $message, Exception $e, ?int $exit_code=null): void public static function outException(string $message, Exception $e, ?int $exit_code=null): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
if(strlen($message) > 0 && Resolver::checkLogLevel(LogLevel::ERROR, Main::getLogLevel())) if($message !== '' && Resolver::checkLogLevel(LogLevel::ERROR, Main::getLogLevel()))
{ {
self::out(PHP_EOL . self::formatColor('Error: ', ConsoleColors::RED) . $message); self::out(PHP_EOL . self::formatColor('Error: ', ConsoleColors::RED) . $message);
} }
Console::out(PHP_EOL . '===== Exception Details ====='); self::out(PHP_EOL . '===== Exception Details =====');
self::outExceptionDetails($e); self::outExceptionDetails($e);
if($exit_code !== null) if($exit_code !== null)
@ -377,10 +368,11 @@
private static function outExceptionDetails(Throwable $e, bool $sub=false): void private static function outExceptionDetails(Throwable $e, bool $sub=false): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
// Exception name without namespace // Exception name without namespace
$trace_header = self::formatColor($e->getFile() . ':' . $e->getLine(), ConsoleColors::MAGENTA); $trace_header = self::formatColor($e->getFile() . ':' . $e->getLine(), ConsoleColors::MAGENTA);
$trace_error = self::formatColor( 'Error: ', ConsoleColors::RED); $trace_error = self::formatColor( 'Error: ', ConsoleColors::RED);
self::out($trace_header . ' ' . $trace_error . $e->getMessage()); self::out($trace_header . ' ' . $trace_error . $e->getMessage());
@ -396,16 +388,13 @@
} }
} }
if($e->getPrevious() !== null) // Check if previous is the same as the current
if(($e->getPrevious() !== null) && $e->getPrevious()->getMessage() !== $e->getMessage())
{ {
// Check if previous is the same as the current self::outExceptionDetails($e->getPrevious(), true);
if($e->getPrevious()->getMessage() !== $e->getMessage())
{
self::outExceptionDetails($e->getPrevious(), true);
}
} }
if(Main::getArgs() !== null && !$sub) if(!$sub && Main::getArgs() !== null)
{ {
if(isset(Main::getArgs()['dbg-ex'])) if(isset(Main::getArgs()['dbg-ex']))
{ {
@ -415,7 +404,8 @@
'constants' => ncc::getConstants(), 'constants' => ncc::getConstants(),
'exception' => Functions::exceptionToArray($e) 'exception' => Functions::exceptionToArray($e)
]; ];
IO::fwrite(getcwd() . DIRECTORY_SEPARATOR . time() . '.json', json_encode($dump, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), 0777);
IO::fwrite(getcwd() . DIRECTORY_SEPARATOR . time() . '.json', json_encode($dump, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), 0777);
} }
catch (Exception $e) catch (Exception $e)
{ {
@ -451,12 +441,7 @@
*/ */
public static function getOptionInput(array $args, string $option, string $prompt): string public static function getOptionInput(array $args, string $option, string $prompt): string
{ {
if(isset($args[$option])) return $args[$option] ?? self::getInput($prompt);
{
return $args[$option];
}
return self::getInput($prompt);
} }
/** /**
@ -479,7 +464,7 @@
$r = self::getInput($prompt); $r = self::getInput($prompt);
} }
if(strlen($r) > 0) if($r !== '')
{ {
switch(strtoupper($r)) switch(strtoupper($r))
{ {
@ -506,7 +491,9 @@
public static function passwordInput(string $prompt): ?string public static function passwordInput(string $prompt): ?string
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return null; return null;
}
// passwordInput() is not properly implemented yet, defaulting to prompt // passwordInput() is not properly implemented yet, defaulting to prompt
return self::getInput($prompt); return self::getInput($prompt);
@ -537,12 +524,16 @@
public static function outHelpSections(array $sections): void public static function outHelpSections(array $sections): void
{ {
if(!ncc::cliMode()) if(!ncc::cliMode())
{
return; return;
}
$padding = Functions::detectParametersPadding($sections); $padding = Functions::detectParametersPadding($sections);
foreach($sections as $section) foreach($sections as $section)
Console::out(' ' . $section->toString($padding)); {
self::out(' ' . $section->toString($padding));
}
} }
} }

View file

@ -294,7 +294,7 @@
*/ */
public static function compileRunner(string $path, ExecutionPolicy $policy): ExecutionUnit public static function compileRunner(string $path, ExecutionPolicy $policy): ExecutionUnit
{ {
return match (strtolower($policy->runner)) return match (strtolower($policy->getRunner()))
{ {
Runners::BASH => BashRunner::processUnit($path, $policy), Runners::BASH => BashRunner::processUnit($path, $policy),
Runners::PHP => PhpRunner::processUnit($path, $policy), Runners::PHP => PhpRunner::processUnit($path, $policy),
@ -303,7 +303,7 @@
Runners::PYTHON_2 => Python2Runner::processUnit($path, $policy), Runners::PYTHON_2 => Python2Runner::processUnit($path, $policy),
Runners::PYTHON_3 => Python3Runner::processUnit($path, $policy), Runners::PYTHON_3 => Python3Runner::processUnit($path, $policy),
Runners::LUA => LuaRunner::processUnit($path, $policy), Runners::LUA => LuaRunner::processUnit($path, $policy),
default => throw new NotSupportedException('The runner \'' . $policy->runner . '\' is not supported'), default => throw new NotSupportedException('The runner \'' . $policy->getRunner() . '\' is not supported'),
}; };
} }
@ -371,7 +371,7 @@
if(!$filesystem->exists(PathFinder::getCachePath(Scopes::SYSTEM))) if(!$filesystem->exists(PathFinder::getCachePath(Scopes::SYSTEM)))
{ {
Console::outDebug(sprintf('Initializing %s', PathFinder::getCachePath(Scopes::SYSTEM))); Console::outDebug(sprintf('Initializing %s', PathFinder::getCachePath(Scopes::SYSTEM)));
$filesystem->mkdir(PathFinder::getCachePath(Scopes::SYSTEM), 0777); $filesystem->mkdir(PathFinder::getCachePath(Scopes::SYSTEM));
} }
if(!$filesystem->exists(PathFinder::getRunnerPath(Scopes::SYSTEM))) if(!$filesystem->exists(PathFinder::getRunnerPath(Scopes::SYSTEM)))

View file

@ -46,7 +46,7 @@
private static $version_information; private static $version_information;
/** /**
* Returns the version information object about the current build of NCC * Returns the version information object about the current build of ncc
* *
* @param boolean $reload Indicates if the cached version is to be ignored and the version file to be reloaded and validated * @param boolean $reload Indicates if the cached version is to be ignored and the version file to be reloaded and validated
* @return NccVersionInformation * @return NccVersionInformation
@ -87,10 +87,9 @@
} }
/** /**
* Initializes the NCC environment * Initializes the ncc environment
* *
* @return bool * @return bool
* @throws IOException
* @throws PathNotFoundException * @throws PathNotFoundException
*/ */
public static function initialize(): bool public static function initialize(): bool
@ -102,7 +101,7 @@
// Set debugging/troubleshooting constants // Set debugging/troubleshooting constants
define('NCC_EXEC_LOCATION', __DIR__); // The directory of where ncc.php is located define('NCC_EXEC_LOCATION', __DIR__); // The directory of where ncc.php is located
define('NCC_EXEC_IWD', getcwd()); // The initial working directory when NCC was first invoked define('NCC_EXEC_IWD', getcwd()); // The initial working directory when ncc was first invoked
// Set version information about the current build // Set version information about the current build
$VersionInformation = self::getVersionInformation(true); $VersionInformation = self::getVersionInformation(true);
@ -116,7 +115,7 @@
} }
/** /**
* Determines if NCC is currently in CLI mode or not * Determines if ncc is currently in CLI mode or not
* *
* @return bool * @return bool
*/ */
@ -126,7 +125,7 @@
} }
/** /**
* Returns the constants set by NCC * Returns the constants set by ncc
* *
* @return array * @return array
*/ */
@ -135,7 +134,7 @@
if(!defined('NCC_INIT')) if(!defined('NCC_INIT'))
{ {
/** @noinspection ClassConstantCanBeUsedInspection */ /** @noinspection ClassConstantCanBeUsedInspection */
throw new RuntimeException('NCC Must be initialized before executing ' . get_called_class() . '::getConstants()'); throw new RuntimeException('ncc Must be initialized before executing ' . get_called_class() . '::getConstants()');
} }
return [ return [