Added package name validation
This commit is contained in:
parent
697d10e4d7
commit
4a1ae8e14c
5 changed files with 137 additions and 5 deletions
43
docs/package_name.md
Normal file
43
docs/package_name.md
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
# Naming a package
|
||||||
|
|
||||||
|
**Updated on Tuesday, July 26, 2022**
|
||||||
|
|
||||||
|
NCC Follows the same naming convention as Java's naming
|
||||||
|
convention. The purpose of naming a package this way is
|
||||||
|
to easily create a "Name" of the package, this string
|
||||||
|
of information contains
|
||||||
|
|
||||||
|
- The developer/organization behind the package
|
||||||
|
- The package name itself
|
||||||
|
|
||||||
|
|
||||||
|
# Naming conventions
|
||||||
|
|
||||||
|
Package names are written in all lower-case due to the
|
||||||
|
fact that some operating systems treats file names
|
||||||
|
differently, for example on Linux `Aa.txt` and `aa.txt`
|
||||||
|
are two entirely different file names because of the
|
||||||
|
capitalization and on Windows it's treated as the same
|
||||||
|
file name.
|
||||||
|
|
||||||
|
Organizations or small developers use their domain name
|
||||||
|
in reverse to begin their package names, for example
|
||||||
|
`net.nosial.example` is a package named `example`
|
||||||
|
created by a programmer at `nosial.net`
|
||||||
|
|
||||||
|
Just like the Java naming convention, to avoid conflicts
|
||||||
|
of the same package name developers can use something
|
||||||
|
different, for example as pointed out in Java's package
|
||||||
|
naming convention developers can instead use something
|
||||||
|
like a region to name packages, for example
|
||||||
|
`net.nosial.region.example`
|
||||||
|
|
||||||
|
|
||||||
|
# References
|
||||||
|
|
||||||
|
For Java's package naming conventions see
|
||||||
|
[Naming a Package](https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html)
|
||||||
|
from the Oracle's Java documentation resource, as the
|
||||||
|
same rules apply to NCC except for *some* illegal naming
|
||||||
|
conventions such as packages not being able to begin
|
||||||
|
with `int` or numbers
|
|
@ -8,6 +8,7 @@
|
||||||
use ncc\Exceptions\DirectoryNotFoundException;
|
use ncc\Exceptions\DirectoryNotFoundException;
|
||||||
use ncc\Exceptions\FileNotFoundException;
|
use ncc\Exceptions\FileNotFoundException;
|
||||||
use ncc\Exceptions\InvalidCredentialsEntryException;
|
use ncc\Exceptions\InvalidCredentialsEntryException;
|
||||||
|
use ncc\Exceptions\InvalidPackageNameException;
|
||||||
use ncc\Exceptions\InvalidProjectConfigurationException;
|
use ncc\Exceptions\InvalidProjectConfigurationException;
|
||||||
use ncc\Exceptions\InvalidScopeException;
|
use ncc\Exceptions\InvalidScopeException;
|
||||||
use ncc\Exceptions\MalformedJsonException;
|
use ncc\Exceptions\MalformedJsonException;
|
||||||
|
@ -68,4 +69,26 @@
|
||||||
* @see ConstantReadonlyException
|
* @see ConstantReadonlyException
|
||||||
*/
|
*/
|
||||||
const ConstantReadonlyException = -1709;
|
const ConstantReadonlyException = -1709;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see InvalidPackageNameException
|
||||||
|
*/
|
||||||
|
const InvalidPackageNameException = -1710;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All the exception codes from NCC
|
||||||
|
*/
|
||||||
|
const All = [
|
||||||
|
self::InvalidProjectConfigurationException,
|
||||||
|
self::FileNotFoundException,
|
||||||
|
self::DirectoryNotFoundException,
|
||||||
|
self::InvalidScopeException,
|
||||||
|
self::AccessDeniedException,
|
||||||
|
self::MalformedJsonException,
|
||||||
|
self::RuntimeException,
|
||||||
|
self::InvalidCredentialsEntryException,
|
||||||
|
self::ComponentVersionNotFoundException,
|
||||||
|
self::ConstantReadonlyException,
|
||||||
|
self::InvalidPackageNameException
|
||||||
|
];
|
||||||
}
|
}
|
19
src/ncc/Exceptions/InvalidPackageNameException.php
Normal file
19
src/ncc/Exceptions/InvalidPackageNameException.php
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ncc\Exceptions;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use ncc\Abstracts\ExceptionCodes;
|
||||||
|
use Throwable;
|
||||||
|
|
||||||
|
class InvalidPackageNameException extends Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $message
|
||||||
|
* @param Throwable|null $previous
|
||||||
|
*/
|
||||||
|
public function __construct(string $message = "", ?Throwable $previous = null)
|
||||||
|
{
|
||||||
|
parent::__construct($message, ExceptionCodes::InvalidPackageNameException, $previous);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,10 +3,12 @@
|
||||||
namespace ncc\Managers;
|
namespace ncc\Managers;
|
||||||
|
|
||||||
use ncc\Abstracts\Options\InitializeProjectOptions;
|
use ncc\Abstracts\Options\InitializeProjectOptions;
|
||||||
|
use ncc\Exceptions\InvalidPackageNameException;
|
||||||
use ncc\Exceptions\MalformedJsonException;
|
use ncc\Exceptions\MalformedJsonException;
|
||||||
use ncc\Objects\ProjectConfiguration;
|
use ncc\Objects\ProjectConfiguration;
|
||||||
use ncc\Objects\ProjectConfiguration\Compiler;
|
use ncc\Objects\ProjectConfiguration\Compiler;
|
||||||
use ncc\Symfony\Component\Uid\Uuid;
|
use ncc\Symfony\Component\Uid\Uuid;
|
||||||
|
use ncc\Utilities\Validate;
|
||||||
|
|
||||||
class ProjectManager
|
class ProjectManager
|
||||||
{
|
{
|
||||||
|
@ -20,14 +22,14 @@
|
||||||
/**
|
/**
|
||||||
* The path that points to the project's main project.json file
|
* The path that points to the project's main project.json file
|
||||||
*
|
*
|
||||||
* @var string|null
|
* @var string
|
||||||
*/
|
*/
|
||||||
private string $ProjectFilePath;
|
private string $ProjectFilePath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The path that points the project's main directory
|
* The path that points the project's main directory
|
||||||
*
|
*
|
||||||
* @var string|null
|
* @var string
|
||||||
*/
|
*/
|
||||||
private string $ProjectPath;
|
private string $ProjectPath;
|
||||||
|
|
||||||
|
@ -69,7 +71,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect if project.json exists in the directory
|
// Detect if project.json exists in the directory
|
||||||
if(file_exists($selected_directory . 'project.json') == true)
|
if(file_exists($selected_directory . 'project.json'))
|
||||||
{
|
{
|
||||||
$this->ProjectPath = $selected_directory;
|
$this->ProjectPath = $selected_directory;
|
||||||
$this->ProjectFilePath = $selected_directory . 'project.json';
|
$this->ProjectFilePath = $selected_directory . 'project.json';
|
||||||
|
@ -80,17 +82,24 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the project sturcture
|
* Initializes the project structure
|
||||||
*
|
*
|
||||||
* @param Compiler $compiler
|
* @param Compiler $compiler
|
||||||
* @param string $source
|
* @param string $source
|
||||||
* @param string $name
|
* @param string $name
|
||||||
* @param string $package
|
* @param string $package
|
||||||
* @param array $options
|
* @param array $options
|
||||||
|
* @throws InvalidPackageNameException
|
||||||
* @throws MalformedJsonException
|
* @throws MalformedJsonException
|
||||||
*/
|
*/
|
||||||
public function initializeProject(Compiler $compiler, string $source, string $name, string $package, array $options=[])
|
public function initializeProject(Compiler $compiler, string $source, string $name, string $package, array $options=[])
|
||||||
{
|
{
|
||||||
|
// Validate the project information first
|
||||||
|
if(!Validate::packageName($package))
|
||||||
|
{
|
||||||
|
throw new InvalidPackageNameException('The given package name \'' . $package . '\' is not a valid package name');
|
||||||
|
}
|
||||||
|
|
||||||
$Project = new ProjectConfiguration();
|
$Project = new ProjectConfiguration();
|
||||||
|
|
||||||
// Set the compiler information
|
// Set the compiler information
|
||||||
|
@ -99,6 +108,7 @@
|
||||||
// Set the assembly information
|
// Set the assembly information
|
||||||
$Project->Assembly->Name = $name;
|
$Project->Assembly->Name = $name;
|
||||||
$Project->Assembly->Package = $package;
|
$Project->Assembly->Package = $package;
|
||||||
|
$Project->Assembly->Version = '1.0.0';
|
||||||
$Project->Assembly->UUID = Uuid::v1()->toRfc4122();
|
$Project->Assembly->UUID = Uuid::v1()->toRfc4122();
|
||||||
|
|
||||||
// Set the build information
|
// Set the build information
|
||||||
|
@ -135,7 +145,7 @@
|
||||||
|
|
||||||
foreach($Folders as $folder)
|
foreach($Folders as $folder)
|
||||||
{
|
{
|
||||||
if(file_exists($folder) == false)
|
if(!file_exists($folder))
|
||||||
{
|
{
|
||||||
mkdir($folder);
|
mkdir($folder);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace ncc\Utilities;
|
namespace ncc\Utilities;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
use ncc\Abstracts\ConsoleColors;
|
use ncc\Abstracts\ConsoleColors;
|
||||||
|
|
||||||
class Console
|
class Console
|
||||||
|
@ -109,4 +110,40 @@
|
||||||
{
|
{
|
||||||
self::out(self::formatColor(ConsoleColors::Yellow, 'Warning: ') . $message, $newline);
|
self::out(self::formatColor(ConsoleColors::Yellow, 'Warning: ') . $message, $newline);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints out an exception message and exits the program if needed
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param Exception $e
|
||||||
|
* @param int|null $exit_code
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function outException(string $message, Exception $e, ?int $exit_code=null)
|
||||||
|
{
|
||||||
|
if(strlen($message) > 0)
|
||||||
|
{
|
||||||
|
self::out(self::formatColor('Error: ' . $message, ConsoleColors::Red));
|
||||||
|
}
|
||||||
|
|
||||||
|
self::outExceptionDetails($e);
|
||||||
|
|
||||||
|
if($exit_code !== null)
|
||||||
|
{
|
||||||
|
exit($exit_code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints out a detailed exception display (unfinished)
|
||||||
|
*
|
||||||
|
* @param Exception $e
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private static function outExceptionDetails(Exception $e)
|
||||||
|
{
|
||||||
|
$trace_header = self::formatColor($e->getFile() . ':' . $e->getLine(), ConsoleColors::Magenta);
|
||||||
|
$trace_error = self::formatColor('error: ', ConsoleColors::Red);
|
||||||
|
self::out($trace_header . ' ' . $trace_error . $e->getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue