From c9db235c3bccdfe1abbec9c60e40249dace3449b Mon Sep 17 00:00:00 2001 From: viastolfi Date: Wed, 7 Dec 2022 14:55:10 +0100 Subject: [PATCH 01/12] changement du functionnement de l'API afin de la rendre plus utilisable --- Sources/API/.htaccess | 0 Sources/API/api/inscrit/read.php | 35 ++++ Sources/API/config/Autoload.php | 32 ---- Sources/API/config/Config.php | 9 - Sources/API/config/Database.php | 22 +++ Sources/API/controller/.gitkeep | 0 Sources/API/controller/Controller.php | 177 ------------------ Sources/API/index.php | 13 -- Sources/API/modele/Connection.php | 36 ---- Sources/API/modele/MdlInscrit.php | 14 -- .../API/modele/gateways/InscritGateway.php | 17 -- Sources/API/models/Inscrit.php | 35 ++++ 12 files changed, 92 insertions(+), 298 deletions(-) delete mode 100644 Sources/API/.htaccess create mode 100644 Sources/API/api/inscrit/read.php delete mode 100644 Sources/API/config/Autoload.php delete mode 100644 Sources/API/config/Config.php create mode 100644 Sources/API/config/Database.php delete mode 100644 Sources/API/controller/.gitkeep delete mode 100644 Sources/API/controller/Controller.php delete mode 100644 Sources/API/index.php delete mode 100644 Sources/API/modele/Connection.php delete mode 100644 Sources/API/modele/MdlInscrit.php delete mode 100644 Sources/API/modele/gateways/InscritGateway.php create mode 100644 Sources/API/models/Inscrit.php diff --git a/Sources/API/.htaccess b/Sources/API/.htaccess deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/API/api/inscrit/read.php b/Sources/API/api/inscrit/read.php new file mode 100644 index 0000000..7e0d36b --- /dev/null +++ b/Sources/API/api/inscrit/read.php @@ -0,0 +1,35 @@ +connect(); + $inscrit = new Inscrit($db); + + $results = $inscrit->read(); + $num = $results->rowCount(); + + if($num > 0){ + $inscrit_array = array(); + + while($row = $results->fetch(PDO::FETCH_ASSOC)){ + extract($row); + + $inscrit_item = array( + 'id' => $id, + 'nom' => $nom, + 'prenom' => $prenom, + 'mail' => $mail, + 'mdp' => $mdp + ); + array_push($inscrit_array, $inscrit_item); + } + + echo json_encode($inscrit_array); + } else { + echo json_encode(array('message' => 'No Inscrit Found')); + } +?> \ No newline at end of file diff --git a/Sources/API/config/Autoload.php b/Sources/API/config/Autoload.php deleted file mode 100644 index 10eb20c..0000000 --- a/Sources/API/config/Autoload.php +++ /dev/null @@ -1,32 +0,0 @@ -$file

"; - if(file_exists($file)){ - include $file; - } - } - } -} - -?> \ No newline at end of file diff --git a/Sources/API/config/Config.php b/Sources/API/config/Config.php deleted file mode 100644 index 5b648a6..0000000 --- a/Sources/API/config/Config.php +++ /dev/null @@ -1,9 +0,0 @@ - \ No newline at end of file diff --git a/Sources/API/config/Database.php b/Sources/API/config/Database.php new file mode 100644 index 0000000..cd59896 --- /dev/null +++ b/Sources/API/config/Database.php @@ -0,0 +1,22 @@ +conn = null; + + try{ + $this->conn = new PDO('mysql:host='.$this->host.';dbname='.$this->db_name, $this->username, $this->password); + $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } catch(PDOException $e){ + echo 'Connection Error :'.$e->getMessage(); + } + + return $this->conn; + } +} +?> \ No newline at end of file diff --git a/Sources/API/controller/.gitkeep b/Sources/API/controller/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/API/controller/Controller.php b/Sources/API/controller/Controller.php deleted file mode 100644 index 81ef754..0000000 --- a/Sources/API/controller/Controller.php +++ /dev/null @@ -1,177 +0,0 @@ -executeQueryWithoutParameters($query); - - $query='INSERT INTO Devise VALUES("EUR","EURO"); - INSERT INTO Devise VALUES("USD","DOLLAR"); - INSERT INTO Devise VALUES("GBP","Livre Sterling"); - INSERT INTO Devise VALUES("JPY","YEN"); - INSERT INTO Devise VALUES("AUD","DOLLAR AUSTRALIEN"); - INSERT INTO Devise VALUES("NZD","DOLLAR NEO-ZELANDAIS"); - INSERT INTO Devise VALUES("ZAR","RANd"); - - - INSERT INTO Inscrit (nom,prenom,mail,mdp)VALUES("EVARD","LUCAS","lucasevard@gmail.com","test"); - INSERT INTO Inscrit (nom,prenom,mail,mdp)VALUES("MONCUL","STEPHANE","stef@gmail.com","teststef"); - INSERT INTO Inscrit (nom,prenom,mail,mdp)VALUES("MENFOUMETTOITOUTNU","RENAUD","renaudtoutnu@gmail.com","test000"); - INSERT INTO Inscrit (nom,prenom,mail,mdp)VALUES("YOUVOI","BENJAMIN","BENJAMIN@gmail.com","BENJAMIN"); - INSERT INTO Inscrit (nom,prenom,mail,mdp)VALUES("TUBEAU","RAOUL","raoullacouille@gmail.com","zizi"); - - INSERT INTO DeviseInscrit VALUES("EUR","1"); - INSERT INTO DeviseInscrit VALUES("JPY","2"); - INSERT INTO DeviseInscrit VALUES("USD","3"); - INSERT INTO DeviseInscrit VALUES("NZD","4"); - - - INSERT INtO Banque(nom,urlsite,urllogo) VALUES("BNP PARIBAS","mabanque","imagesitebnb.fr"); - INSERT INtO Banque(nom,urlsite,urllogo) VALUES("CREDIT AGRICOLE","credit-agricole.fr","imageca"); - INSERT INtO Banque(nom,urlsite,urllogo) VALUES("BANQUE POSTALE","labanquepostale.fr","imgbp"); - INSERT INtO Banque(nom,urlsite,urllogo) VALUES("CAISSE D EPARGNE","caisse-epargne.fr","imgcaissedepargne"); - - - INSERT INTO InscrBanque (nomBanque,idInscrit)VALUES("BNP PARIBAS","1"); - INSERT INTO InscrBanque (nomBanque,idInscrit)VALUES("CREDIT AGRICOLE","2"); - INSERT INTO InscrBanque (nomBanque,idInscrit)VALUES("BANQUE POSTALE","3"); - INSERT INTO InscrBanque (nomBanque,idInscrit)VALUES("CAISSE D EPARGNE","4"); - - - INSERT INTO Compte (nom,idInscritBanque)VALUES("LIVRET A","1"); - INSERT INTO Compte (nom,idInscritBanque)VALUES("LIVRET A","2"); - INSERT INTO Compte (nom,idInscritBanque)VALUES("LIVRET A","3"); - INSERT INTO Compte (nom,idInscritBanque)VALUES("LIVRET A","4"); - - - INSERT INTO Planification (nom,credit,compte,datep,datecrea,methodePayement) VALUES ("EDF","190","1",now(),now(),"CB"); - INSERT INTO Planification (nom,credit,compte,datep,datecrea,methodePayement) VALUES ("SPOTIFY","190","2",now(),now(),"Prélevement"); - INSERT INTO Planification (nom,credit,compte,datep,datecrea,methodePayement) VALUES ("NETFLIX","190","3",now(),now(),"Cheque"); - INSERT INTO Planification (nom,credit,compte,datep,datecrea,methodePayement) VALUES ("PLAYSTATION PLUS","190","4",now(),now(),"Espece");'; - - $con->ExecuteQueryWithoutParameters($query); - switch($url[0]){ - case "SELECT": - switch($url[1]){ - case "Inscrit": - $query = 'SELECT * FROM Inscrit'; - $con->executeQueryWithoutParameters($query); - $res = $con->getResults(); - print(json_encode($res)); - break; - } - break; - default: - echo "ERREUR"; - } - } -} - -?> \ No newline at end of file diff --git a/Sources/API/index.php b/Sources/API/index.php deleted file mode 100644 index 8ba788e..0000000 --- a/Sources/API/index.php +++ /dev/null @@ -1,13 +0,0 @@ - \ No newline at end of file diff --git a/Sources/API/modele/Connection.php b/Sources/API/modele/Connection.php deleted file mode 100644 index 9f3b119..0000000 --- a/Sources/API/modele/Connection.php +++ /dev/null @@ -1,36 +0,0 @@ -setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -} - -/** * @param string $query - * @param array $parameters * - * @return bool Returns `true` on success, `false` otherwise -*/ - -public function executeQuery(string $query, array $parameters = []) : bool{ - $this->stmt = parent::prepare($query); - foreach ($parameters as $name => $value) { - $this->stmt->bindValue($name, $value[0], $value[1]); - } - - return $this->stmt->execute(); -} - -public function getResults() : array { - return $this->stmt->fetchall(); -} - -public function executeQueryWithoutParameters($query) : bool{ - $this->stmt = parent::prepare($query); - return $this->stmt->execute(); -} -} - -?> \ No newline at end of file diff --git a/Sources/API/modele/MdlInscrit.php b/Sources/API/modele/MdlInscrit.php deleted file mode 100644 index ed71324..0000000 --- a/Sources/API/modele/MdlInscrit.php +++ /dev/null @@ -1,14 +0,0 @@ -selectAll(); - } -} - -?> \ No newline at end of file diff --git a/Sources/API/modele/gateways/InscritGateway.php b/Sources/API/modele/gateways/InscritGateway.php deleted file mode 100644 index de3bfa4..0000000 --- a/Sources/API/modele/gateways/InscritGateway.php +++ /dev/null @@ -1,17 +0,0 @@ -con=$con; - } - - public function selectAll(){ - $query="SELECT * FROM Inscrit;"; - $this->con->executeQueryWithoutParameters($query); - return $this->con->getResults(); - } -} - -?> \ No newline at end of file diff --git a/Sources/API/models/Inscrit.php b/Sources/API/models/Inscrit.php new file mode 100644 index 0000000..b55d9ed --- /dev/null +++ b/Sources/API/models/Inscrit.php @@ -0,0 +1,35 @@ +conn = $db; + } + + public function read(){ + $query = 'SELECT + i.id as id, + i.nom as nom, + i.prenom as prenom, + i.mail as mail, + i.mdp as mdp + FROM + '.$this->table.' i + ORDER BY + i.id'; + + $stmt = $this->conn->prepare($query); + $stmt->execute(); + return $stmt; + } + } + +?> \ No newline at end of file From 451f8aec79f58d67eb8a9d6097c39c99d26f8b09 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Wed, 7 Dec 2022 15:25:41 +0100 Subject: [PATCH 02/12] ajout API : recuperer le mot de passe d'un user depuis son mail --- Sources/API/api/inscrit/readMdpFromMail.php | 30 +++++++++++++++++++++ Sources/API/models/Inscrit.php | 14 ++++++++++ 2 files changed, 44 insertions(+) create mode 100644 Sources/API/api/inscrit/readMdpFromMail.php diff --git a/Sources/API/api/inscrit/readMdpFromMail.php b/Sources/API/api/inscrit/readMdpFromMail.php new file mode 100644 index 0000000..e42738c --- /dev/null +++ b/Sources/API/api/inscrit/readMdpFromMail.php @@ -0,0 +1,30 @@ +connect(); + $inscrit = new Inscrit($db); + + $results = $inscrit->readMdpFromMail($_GET['mail']); + $num = $results->rowCount(); + + if($num > 0){ + $inscrit_array = array(); + + while($row = $results->fetch(PDO::FETCH_ASSOC)){ + extract($row); + + $inscrit_item = array( + 'mdp' => $mdp + ); + array_push($inscrit_array, $inscrit_item); + } + echo json_encode($inscrit_array); + } else { + echo json_encode(array('message' => 'No Inscrit with mail='.$_GET['mail'])); + } +?> \ No newline at end of file diff --git a/Sources/API/models/Inscrit.php b/Sources/API/models/Inscrit.php index b55d9ed..02698ef 100644 --- a/Sources/API/models/Inscrit.php +++ b/Sources/API/models/Inscrit.php @@ -30,6 +30,20 @@ $stmt->execute(); return $stmt; } + + public function readMdpFromMail($mail){ + $query = 'SELECT + i.mdp as mdp + FROM + '.$this->table.' i + WHERE + i.mail=:mail + '; + $stmt = $this->conn->prepare($query); + $stmt->bindValue(':mail',$mail, PDO::PARAM_STR); + $stmt->execute(); + return $stmt; + } } ?> \ No newline at end of file From bcb3a7ee780308945a815baeb87765dd19788364 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Wed, 7 Dec 2022 19:22:35 +0100 Subject: [PATCH 03/12] changement du fonctionnement des routes de l'API afin de les rendres plus faciles d'utilisation --- Sources/API/.htaccess | 3 + Sources/API/api/inscrit/read.php | 4 +- Sources/API/api/inscrit/readMdpFromMail.php | 8 +- Sources/API/index.php | 30 + .../vendor/altorouter/altorouter/.travis.yml | 7 + .../altorouter/altorouter/AltoRouter.php | 270 +++++++++ .../altorouter/altorouter/AltoRouterTest.php | 423 +++++++++++++ .../vendor/altorouter/altorouter/README.md | 92 +++ .../altorouter/altorouter/composer.json | 28 + .../altorouter/examples/basic/.htaccess | 3 + .../altorouter/examples/basic/index.php | 27 + Sources/API/vendor/autoload.php | 25 + Sources/API/vendor/composer.json | 5 + Sources/API/vendor/composer.lock | 74 +++ Sources/API/vendor/composer.phar | Bin 0 -> 2810737 bytes Sources/API/vendor/composer/ClassLoader.php | 572 ++++++++++++++++++ .../API/vendor/composer/InstalledVersions.php | 352 +++++++++++ Sources/API/vendor/composer/LICENSE | 21 + .../API/vendor/composer/autoload_classmap.php | 11 + .../vendor/composer/autoload_namespaces.php | 9 + Sources/API/vendor/composer/autoload_psr4.php | 9 + Sources/API/vendor/composer/autoload_real.php | 38 ++ .../API/vendor/composer/autoload_static.php | 21 + Sources/API/vendor/composer/installed.json | 64 ++ Sources/API/vendor/composer/installed.php | 32 + .../API/vendor/composer/platform_check.php | 26 + 26 files changed, 2148 insertions(+), 6 deletions(-) create mode 100644 Sources/API/.htaccess create mode 100644 Sources/API/index.php create mode 100644 Sources/API/vendor/altorouter/altorouter/.travis.yml create mode 100644 Sources/API/vendor/altorouter/altorouter/AltoRouter.php create mode 100644 Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php create mode 100644 Sources/API/vendor/altorouter/altorouter/README.md create mode 100644 Sources/API/vendor/altorouter/altorouter/composer.json create mode 100644 Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess create mode 100644 Sources/API/vendor/altorouter/altorouter/examples/basic/index.php create mode 100644 Sources/API/vendor/autoload.php create mode 100644 Sources/API/vendor/composer.json create mode 100644 Sources/API/vendor/composer.lock create mode 100755 Sources/API/vendor/composer.phar create mode 100644 Sources/API/vendor/composer/ClassLoader.php create mode 100644 Sources/API/vendor/composer/InstalledVersions.php create mode 100644 Sources/API/vendor/composer/LICENSE create mode 100644 Sources/API/vendor/composer/autoload_classmap.php create mode 100644 Sources/API/vendor/composer/autoload_namespaces.php create mode 100644 Sources/API/vendor/composer/autoload_psr4.php create mode 100644 Sources/API/vendor/composer/autoload_real.php create mode 100644 Sources/API/vendor/composer/autoload_static.php create mode 100644 Sources/API/vendor/composer/installed.json create mode 100644 Sources/API/vendor/composer/installed.php create mode 100644 Sources/API/vendor/composer/platform_check.php diff --git a/Sources/API/.htaccess b/Sources/API/.htaccess new file mode 100644 index 0000000..7ded04e --- /dev/null +++ b/Sources/API/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine on +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule . index.php [L] \ No newline at end of file diff --git a/Sources/API/api/inscrit/read.php b/Sources/API/api/inscrit/read.php index 7e0d36b..b086c1e 100644 --- a/Sources/API/api/inscrit/read.php +++ b/Sources/API/api/inscrit/read.php @@ -2,8 +2,8 @@ header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); - include_once '../../config/Database.php'; - include_once '../../models/Inscrit.php'; + include_once (__DIR__.'/../../config/Database.php'); + include_once (__DIR__.'/../../models/Inscrit.php'); $database = new Database(); $db = $database->connect(); diff --git a/Sources/API/api/inscrit/readMdpFromMail.php b/Sources/API/api/inscrit/readMdpFromMail.php index e42738c..949f139 100644 --- a/Sources/API/api/inscrit/readMdpFromMail.php +++ b/Sources/API/api/inscrit/readMdpFromMail.php @@ -2,14 +2,14 @@ header('Acces-Control-Allow-Origin: *'); header('Content-Type: application/json'); - include_once '../../config/Database.php'; - include_once '../../models/Inscrit.php'; + include_once (__DIR__.'/../../config/Database.php'); + include_once (__DIR__.'/../../models/Inscrit.php'); $database = new Database(); $db = $database->connect(); $inscrit = new Inscrit($db); - $results = $inscrit->readMdpFromMail($_GET['mail']); + $results = $inscrit->readMdpFromMail($mail); $num = $results->rowCount(); if($num > 0){ @@ -25,6 +25,6 @@ } echo json_encode($inscrit_array); } else { - echo json_encode(array('message' => 'No Inscrit with mail='.$_GET['mail'])); + echo json_encode(array('message' => 'No Inscrit with mail='.$mail)); } ?> \ No newline at end of file diff --git a/Sources/API/index.php b/Sources/API/index.php new file mode 100644 index 0000000..a42837d --- /dev/null +++ b/Sources/API/index.php @@ -0,0 +1,30 @@ +setBasePath('/~vincent/ConsEco/Sources/API'); + +$router->map( 'GET', '/', function(){ + echo 'Hello World'; +}); + +$router->map('GET','/Inscrit/read', function(){ + require(__DIR__.'/api/inscrit/read.php'); +}); + +$router->map('GET','/Inscrit/read/mailToMdp/[*:mail]', function($mail){ + require(__DIR__.'/api/inscrit/readMdpFromMail.php'); +}); + +$match = $router->match(); + +if($match!=null) { + if( is_array($match) && is_callable( $match['target'] ) && isset($match['params']) ) { + call_user_func_array( $match['target'], $match['params']); + }else{ + $match['target'](); + } +} +else { + echo 'ERROR 404'; +} +?> diff --git a/Sources/API/vendor/altorouter/altorouter/.travis.yml b/Sources/API/vendor/altorouter/altorouter/.travis.yml new file mode 100644 index 0000000..3bf3161 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/.travis.yml @@ -0,0 +1,7 @@ +language: php +php: + - 5.3 + - 5.4 + - 5.5 + +script: phpunit --coverage-text ./ diff --git a/Sources/API/vendor/altorouter/altorouter/AltoRouter.php b/Sources/API/vendor/altorouter/altorouter/AltoRouter.php new file mode 100644 index 0000000..67e76ab --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/AltoRouter.php @@ -0,0 +1,270 @@ + '[0-9]++', + 'a' => '[0-9A-Za-z]++', + 'h' => '[0-9A-Fa-f]++', + '*' => '.+?', + '**' => '.++', + '' => '[^/\.]++' + ); + + /** + * Create router in one call from config. + * + * @param array $routes + * @param string $basePath + * @param array $matchTypes + */ + public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) { + $this->addRoutes($routes); + $this->setBasePath($basePath); + $this->addMatchTypes($matchTypes); + } + + /** + * Add multiple routes at once from array in the following format: + * + * $routes = array( + * array($method, $route, $target, $name) + * ); + * + * @param array $routes + * @return void + * @author Koen Punt + */ + public function addRoutes($routes){ + if(!is_array($routes) && !$routes instanceof Traversable) { + throw new \Exception('Routes should be an array or an instance of Traversable'); + } + foreach($routes as $route) { + call_user_func_array(array($this, 'map'), $route); + } + } + + /** + * Set the base path. + * Useful if you are running your application from a subdirectory. + */ + public function setBasePath($basePath) { + $this->basePath = $basePath; + } + + /** + * Add named match types. It uses array_merge so keys can be overwritten. + * + * @param array $matchTypes The key is the name and the value is the regex. + */ + public function addMatchTypes($matchTypes) { + $this->matchTypes = array_merge($this->matchTypes, $matchTypes); + } + + /** + * Map a route to a target + * + * @param string $method One of 4 HTTP Methods, or a pipe-separated list of multiple HTTP Methods (GET|POST|PUT|DELETE) + * @param string $route The route regex, custom regex must start with an @. You can use multiple pre-set regex filters, like [i:id] + * @param mixed $target The target where this route should point to. Can be anything. + * @param string $name Optional name of this route. Supply if you want to reverse route this url in your application. + */ + public function map($method, $route, $target, $name = null) { + + $this->routes[] = array($method, $route, $target, $name); + + if($name) { + if(isset($this->namedRoutes[$name])) { + throw new \Exception("Can not redeclare route '{$name}'"); + } else { + $this->namedRoutes[$name] = $route; + } + + } + + return; + } + + /** + * Reversed routing + * + * Generate the URL for a named route. Replace regexes with supplied parameters + * + * @param string $routeName The name of the route. + * @param array @params Associative array of parameters to replace placeholders with. + * @return string The URL of the route with named parameters in place. + */ + public function generate($routeName, array $params = array()) { + + // Check if named route exists + if(!isset($this->namedRoutes[$routeName])) { + throw new \Exception("Route '{$routeName}' does not exist."); + } + + // Replace named parameters + $route = $this->namedRoutes[$routeName]; + + // prepend base path to route url again + $url = $this->basePath . $route; + + if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) { + + foreach($matches as $match) { + list($block, $pre, $type, $param, $optional) = $match; + + if ($pre) { + $block = substr($block, 1); + } + + if(isset($params[$param])) { + $url = str_replace($block, $params[$param], $url); + } elseif ($optional) { + $url = str_replace($pre . $block, '', $url); + } + } + + + } + + return $url; + } + + /** + * Match a given Request Url against stored routes + * @param string $requestUrl + * @param string $requestMethod + * @return array|boolean Array with route information on success, false on failure (no match). + */ + public function match($requestUrl = null, $requestMethod = null) { + + $params = array(); + $match = false; + + // set Request Url if it isn't passed as parameter + if($requestUrl === null) { + $requestUrl = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/'; + } + + // strip base path from request url + $requestUrl = substr($requestUrl, strlen($this->basePath)); + + // Strip query string (?a=b) from Request Url + if (($strpos = strpos($requestUrl, '?')) !== false) { + $requestUrl = substr($requestUrl, 0, $strpos); + } + + // set Request Method if it isn't passed as a parameter + if($requestMethod === null) { + $requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; + } + + // Force request_order to be GP + // http://www.mail-archive.com/internals@lists.php.net/msg33119.html + $_REQUEST = array_merge($_GET, $_POST); + + foreach($this->routes as $handler) { + list($method, $_route, $target, $name) = $handler; + + $methods = explode('|', $method); + $method_match = false; + + // Check if request method matches. If not, abandon early. (CHEAP) + foreach($methods as $method) { + if (strcasecmp($requestMethod, $method) === 0) { + $method_match = true; + break; + } + } + + // Method did not match, continue to next route. + if(!$method_match) continue; + + // Check for a wildcard (matches all) + if ($_route === '*') { + $match = true; + } elseif (isset($_route[0]) && $_route[0] === '@') { + $match = preg_match('`' . substr($_route, 1) . '`u', $requestUrl, $params); + } else { + $route = null; + $regex = false; + $j = 0; + $n = isset($_route[0]) ? $_route[0] : null; + $i = 0; + + // Find the longest non-regex substring and match it against the URI + while (true) { + if (!isset($_route[$i])) { + break; + } elseif (false === $regex) { + $c = $n; + $regex = $c === '[' || $c === '(' || $c === '.'; + if (false === $regex && false !== isset($_route[$i+1])) { + $n = $_route[$i + 1]; + $regex = $n === '?' || $n === '+' || $n === '*' || $n === '{'; + } + if (false === $regex && $c !== '/' && (!isset($requestUrl[$j]) || $c !== $requestUrl[$j])) { + continue 2; + } + $j++; + } + $route .= $_route[$i++]; + } + + $regex = $this->compileRoute($route); + $match = preg_match($regex, $requestUrl, $params); + } + + if(($match == true || $match > 0)) { + + if($params) { + foreach($params as $key => $value) { + if(is_numeric($key)) unset($params[$key]); + } + } + + return array( + 'target' => $target, + 'params' => $params, + 'name' => $name + ); + } + } + return false; + } + + /** + * Compile the regex for a given route (EXPENSIVE) + */ + private function compileRoute($route) { + if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) { + + $matchTypes = $this->matchTypes; + foreach($matches as $match) { + list($block, $pre, $type, $param, $optional) = $match; + + if (isset($matchTypes[$type])) { + $type = $matchTypes[$type]; + } + if ($pre === '.') { + $pre = '\.'; + } + + //Older versions of PCRE require the 'P' in (?P) + $pattern = '(?:' + . ($pre !== '' ? $pre : null) + . '(' + . ($param !== '' ? "?P<$param>" : null) + . $type + . '))' + . ($optional !== '' ? '?' : null); + + $route = str_replace($block, $pattern, $route); + } + + } + return "`^$route$`u"; + } +} diff --git a/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php b/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php new file mode 100644 index 0000000..2462cd8 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php @@ -0,0 +1,423 @@ +namedRoutes; + } + + public function getRoutes(){ + return $this->routes; + } + + public function getBasePath(){ + return $this->basePath; + } + +} + +class SimpleTraversable implements Iterator{ + + protected $_position = 0; + + protected $_data = array( + array('GET', '/foo', 'foo_action', null), + array('POST', '/bar', 'bar_action', 'second_route') + ); + + public function current(){ + return $this->_data[$this->_position]; + } + public function key(){ + return $this->_position; + } + public function next(){ + ++$this->_position; + } + public function rewind(){ + $this->_position = 0; + } + public function valid(){ + return isset($this->_data[$this->_position]); + } + +} + +/** + * Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-07-14 at 17:47:46. + */ +class AltoRouterTest extends PHPUnit_Framework_TestCase +{ + /** + * @var AltoRouter + */ + protected $router; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + $this->router = new AltoRouterDebug; + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + /** + * @covers AltoRouter::addRoutes + */ + public function testAddRoutes() + { + $method = 'POST'; + $route = '/[:controller]/[:action]'; + $target = function(){}; + + $this->router->addRoutes(array( + array($method, $route, $target), + array($method, $route, $target, 'second_route') + )); + + $routes = $this->router->getRoutes(); + + $this->assertEquals(array($method, $route, $target, null), $routes[0]); + $this->assertEquals(array($method, $route, $target, 'second_route'), $routes[1]); + } + + /** + * @covers AltoRouter::addRoutes + */ + public function testAddRoutesAcceptsTraverable() + { + $traversable = new SimpleTraversable(); + $this->router->addRoutes($traversable); + + $traversable->rewind(); + + $first = $traversable->current(); + $traversable->next(); + $second = $traversable->current(); + + $routes = $this->router->getRoutes(); + + $this->assertEquals($first, $routes[0]); + $this->assertEquals($second, $routes[1]); + } + + /** + * @covers AltoRouter::addRoutes + * @expectedException Exception + */ + public function testAddRoutesThrowsExceptionOnInvalidArgument() + { + $this->router->addRoutes(new stdClass); + } + + /** + * @covers AltoRouter::setBasePath + */ + public function testSetBasePath() + { + $basePath = $this->router->setBasePath('/some/path'); + $this->assertEquals('/some/path', $this->router->getBasePath()); + + $basePath = $this->router->setBasePath('/some/path'); + $this->assertEquals('/some/path', $this->router->getBasePath()); + } + + /** + * @covers AltoRouter::map + */ + public function testMap() + { + $method = 'POST'; + $route = '/[:controller]/[:action]'; + $target = function(){}; + + $this->router->map($method, $route, $target); + + $routes = $this->router->getRoutes(); + + $this->assertEquals(array($method, $route, $target, null), $routes[0]); + } + + /** + * @covers AltoRouter::map + */ + public function testMapWithName() + { + $method = 'POST'; + $route = '/[:controller]/[:action]'; + $target = function(){}; + $name = 'myroute'; + + $this->router->map($method, $route, $target, $name); + + $routes = $this->router->getRoutes(); + $this->assertEquals(array($method, $route, $target, $name), $routes[0]); + + $named_routes = $this->router->getNamedRoutes(); + $this->assertEquals($route, $named_routes[$name]); + + try{ + $this->router->map($method, $route, $target, $name); + $this->fail('Should not be able to add existing named route'); + }catch(Exception $e){ + $this->assertEquals("Can not redeclare route '{$name}'", $e->getMessage()); + } + } + + + /** + * @covers AltoRouter::generate + */ + public function testGenerate() + { + $params = array( + 'controller' => 'test', + 'action' => 'someaction' + ); + + $this->router->map('GET', '/[:controller]/[:action]', function(){}, 'foo_route'); + + $this->assertEquals('/test/someaction', + $this->router->generate('foo_route', $params)); + + $params = array( + 'controller' => 'test', + 'action' => 'someaction', + 'type' => 'json' + ); + + $this->assertEquals('/test/someaction', + $this->router->generate('foo_route', $params)); + + } + + public function testGenerateWithOptionalUrlParts() + { + $this->router->map('GET', '/[:controller]/[:action].[:type]?', function(){}, 'bar_route'); + + $params = array( + 'controller' => 'test', + 'action' => 'someaction' + ); + + $this->assertEquals('/test/someaction', + $this->router->generate('bar_route', $params)); + + $params = array( + 'controller' => 'test', + 'action' => 'someaction', + 'type' => 'json' + ); + + $this->assertEquals('/test/someaction.json', + $this->router->generate('bar_route', $params)); + } + + public function testGenerateWithNonexistingRoute() + { + try{ + $this->router->generate('nonexisting_route'); + $this->fail('Should trigger an exception on nonexisting named route'); + }catch(Exception $e){ + $this->assertEquals("Route 'nonexisting_route' does not exist.", $e->getMessage()); + } + } + + /** + * @covers AltoRouter::match + * @covers AltoRouter::compileRoute + */ + public function testMatch() + { + $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); + + $this->assertEquals(array( + 'target' => 'foo_action', + 'params' => array( + 'controller' => 'test', + 'action' => 'do' + ), + 'name' => 'foo_route' + ), $this->router->match('/foo/test/do', 'GET')); + + $this->assertFalse($this->router->match('/foo/test/do', 'POST')); + + $this->assertEquals(array( + 'target' => 'foo_action', + 'params' => array( + 'controller' => 'test', + 'action' => 'do' + ), + 'name' => 'foo_route' + ), $this->router->match('/foo/test/do?param=value', 'GET')); + + } + + public function testMatchWithFixedParamValues() + { + $this->router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); + + $this->assertEquals(array( + 'target' => 'usersController#doAction', + 'params' => array( + 'id' => 1, + 'action' => 'delete' + ), + 'name' => 'users_do' + ), $this->router->match('/users/1/delete', 'POST')); + + $this->assertFalse($this->router->match('/users/1/delete', 'GET')); + $this->assertFalse($this->router->match('/users/abc/delete', 'POST')); + $this->assertFalse($this->router->match('/users/1/create', 'GET')); + } + + public function testMatchWithServerVars() + { + $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); + + $_SERVER['REQUEST_URI'] = '/foo/test/do'; + $_SERVER['REQUEST_METHOD'] = 'GET'; + + $this->assertEquals(array( + 'target' => 'foo_action', + 'params' => array( + 'controller' => 'test', + 'action' => 'do' + ), + 'name' => 'foo_route' + ), $this->router->match()); + } + + public function testMatchWithOptionalUrlParts() + { + $this->router->map('GET', '/bar/[:controller]/[:action].[:type]?', 'bar_action', 'bar_route'); + + $this->assertEquals(array( + 'target' => 'bar_action', + 'params' => array( + 'controller' => 'test', + 'action' => 'do', + 'type' => 'json' + ), + 'name' => 'bar_route' + ), $this->router->match('/bar/test/do.json', 'GET')); + + } + + public function testMatchWithWildcard() + { + $this->router->map('GET', '/a', 'foo_action', 'foo_route'); + $this->router->map('GET', '*', 'bar_action', 'bar_route'); + + $this->assertEquals(array( + 'target' => 'bar_action', + 'params' => array(), + 'name' => 'bar_route' + ), $this->router->match('/everything', 'GET')); + + } + + public function testMatchWithCustomRegexp() + { + $this->router->map('GET', '@^/[a-z]*$', 'bar_action', 'bar_route'); + + $this->assertEquals(array( + 'target' => 'bar_action', + 'params' => array(), + 'name' => 'bar_route' + ), $this->router->match('/everything', 'GET')); + + $this->assertFalse($this->router->match('/some-other-thing', 'GET')); + + } + + public function testMatchWithUnicodeRegex() + { + $pattern = '/(?[^'; + // Arabic characters + $pattern .= '\x{0600}-\x{06FF}'; + $pattern .= '\x{FB50}-\x{FDFD}'; + $pattern .= '\x{FE70}-\x{FEFF}'; + $pattern .= '\x{0750}-\x{077F}'; + // Alphanumeric, /, _, - and space characters + $pattern .= 'a-zA-Z0-9\/_-\s'; + // 'ZERO WIDTH NON-JOINER' + $pattern .= '\x{200C}'; + $pattern .= ']+)'; + + $this->router->map('GET', '@' . $pattern, 'unicode_action', 'unicode_route'); + + $this->assertEquals(array( + 'target' => 'unicode_action', + 'name' => 'unicode_route', + 'params' => array( + 'path' => '大家好' + ) + ), $this->router->match('/大家好', 'GET')); + + $this->assertFalse($this->router->match('/﷽‎', 'GET')); + } + + /** + * @covers AltoRouter::addMatchTypes + */ + public function testMatchWithCustomNamedRegex() + { + $this->router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); + $this->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route'); + + $this->assertEquals(array( + 'target' => 'bar_action', + 'params' => array( + 'customId' => 'AB1', + ), + 'name' => 'bar_route' + ), $this->router->match('/bar/AB1', 'GET')); + + $this->assertEquals(array( + 'target' => 'bar_action', + 'params' => array( + 'customId' => 'AB1_0123456789', + ), + 'name' => 'bar_route' + ), $this->router->match('/bar/AB1_0123456789', 'GET')); + + $this->assertFalse($this->router->match('/some-other-thing', 'GET')); + + } + + public function testMatchWithCustomNamedUnicodeRegex() + { + $pattern = '[^'; + // Arabic characters + $pattern .= '\x{0600}-\x{06FF}'; + $pattern .= '\x{FB50}-\x{FDFD}'; + $pattern .= '\x{FE70}-\x{FEFF}'; + $pattern .= '\x{0750}-\x{077F}'; + $pattern .= ']+'; + + $this->router->addMatchTypes(array('nonArabic' => $pattern)); + $this->router->map('GET', '/bar/[nonArabic:string]', 'non_arabic_action', 'non_arabic_route'); + + $this->assertEquals(array( + 'target' => 'non_arabic_action', + 'name' => 'non_arabic_route', + 'params' => array( + 'string' => 'some-path' + ) + ), $this->router->match('/bar/some-path', 'GET')); + + $this->assertFalse($this->router->match('/﷽‎', 'GET')); + } +} diff --git a/Sources/API/vendor/altorouter/altorouter/README.md b/Sources/API/vendor/altorouter/altorouter/README.md new file mode 100644 index 0000000..cb2acb3 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/README.md @@ -0,0 +1,92 @@ +# AltoRouter [![Build Status](https://api.travis-ci.org/dannyvankooten/AltoRouter.png)](http://travis-ci.org/dannyvankooten/AltoRouter) +AltoRouter is a small but powerful routing class for PHP 5.3+, heavily inspired by [klein.php](https://github.com/chriso/klein.php/). + +* Dynamic routing with named parameters +* Reversed routing +* Flexible regular expression routing (inspired by [Sinatra](http://www.sinatrarb.com/)) +* Custom regexes + +## Getting started + +1. PHP 5.3.x is required +2. Install AltoRouter using Composer or manually +2. Setup URL rewriting so that all requests are handled by **index.php** +3. Create an instance of AltoRouter, map your routes and match a request. +4. Have a look at the basic example in the `examples` directory for a better understanding on how to use AltoRouter. + +## Routing +```php +$router = new AltoRouter(); +$router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in + +// mapping routes +$router->map('GET|POST','/', 'home#index', 'home'); +$router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction')); +$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); +$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); + +// reversed routing +$router->generate('users_show', array('id' => 5)); + +``` + +**You can use the following limits on your named parameters. AltoRouter will create the correct regexes for you.** + +```php +* // Match all request URIs +[i] // Match an integer +[i:id] // Match an integer as 'id' +[a:action] // Match alphanumeric characters as 'action' +[h:key] // Match hexadecimal characters as 'key' +[:action] // Match anything up to the next / or end of the URI as 'action' +[create|edit:action] // Match either 'create' or 'edit' as 'action' +[*] // Catch all (lazy, stops at the next trailing slash) +[*:trailing] // Catch all as 'trailing' (lazy) +[**:trailing] // Catch all (possessive - will match the rest of the URI) +.[:format]? // Match an optional parameter 'format' - a / or . before the block is also optional +``` + +**Some more complicated examples** + +```php +@/(?[A-Za-z]{2}_[A-Za-z]{2})$ // custom regex, matches language codes like "en_us" etc. +/posts/[*:title][i:id] // Matches "/posts/this-is-a-title-123" +/output.[xml|json:format]? // Matches "/output", "output.xml", "output.json" +/[:controller]?/[:action]? // Matches the typical /controller/action format +``` + +**The character before the colon (the 'match type') is a shortcut for one of the following regular expressions** + +```php +'i' => '[0-9]++' +'a' => '[0-9A-Za-z]++' +'h' => '[0-9A-Fa-f]++' +'*' => '.+?' +'**' => '.++' +'' => '[^/\.]++' +``` + +**New match types can be added using the `addMatchTypes()` method** + +```php +$router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); +``` + + +## Contributors +- [Danny van Kooten](https://github.com/dannyvankooten) +- [Koen Punt](https://github.com/koenpunt) +- [John Long](https://github.com/adduc) +- [Niahoo Osef](https://github.com/niahoo) + +## License + +(MIT License) + +Copyright (c) 2012-2013 Danny van Kooten + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/altorouter/altorouter/composer.json b/Sources/API/vendor/altorouter/altorouter/composer.json new file mode 100644 index 0000000..58e86c4 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/composer.json @@ -0,0 +1,28 @@ +{ + "name": "altorouter/altorouter", + "description": "A lightning fast router for PHP", + "keywords": ["router", "routing", "lightweight"], + "homepage": "https://github.com/dannyvankooten/AltoRouter", + "license": "MIT", + "authors": [ + { + "name": "Danny van Kooten", + "email": "dannyvankooten@gmail.com", + "homepage": "http://dannyvankooten.com/" + }, + { + "name": "Koen Punt", + "homepage": "https://github.com/koenpunt" + }, + { + "name": "niahoo", + "homepage": "https://github.com/niahoo" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "classmap": ["AltoRouter.php"] + } +} diff --git a/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess b/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess new file mode 100644 index 0000000..d7e1320 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess @@ -0,0 +1,3 @@ +RewriteEngine On +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule . index.php [L] diff --git a/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php b/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php new file mode 100644 index 0000000..8326695 --- /dev/null +++ b/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php @@ -0,0 +1,27 @@ +setBasePath('/AltoRouter/examples/basic'); +$router->map('GET|POST','/', 'home#index', 'home'); +$router->map('GET','/users/', array('c' => 'UserController', 'a' => 'ListAction')); +$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); +$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); + +// match current request +$match = $router->match(); +?> +

AltoRouter

+ +

Current request:

+
+	Target: 
+	Params: 
+	Name: 	
+
+ +

Try these requests:

+

GET generate('home'); ?>

+

GET generate('users_show', array('id' => 5)); ?>

+

diff --git a/Sources/API/vendor/autoload.php b/Sources/API/vendor/autoload.php new file mode 100644 index 0000000..fbdc425 --- /dev/null +++ b/Sources/API/vendor/autoload.php @@ -0,0 +1,25 @@ +=5.3.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "AltoRouter.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Danny van Kooten", + "email": "dannyvankooten@gmail.com", + "homepage": "http://dannyvankooten.com/" + }, + { + "name": "Koen Punt", + "homepage": "https://github.com/koenpunt" + }, + { + "name": "niahoo", + "homepage": "https://github.com/niahoo" + } + ], + "description": "A lightning fast router for PHP", + "homepage": "https://github.com/dannyvankooten/AltoRouter", + "keywords": [ + "lightweight", + "router", + "routing" + ], + "support": { + "issues": "https://github.com/dannyvankooten/AltoRouter/issues", + "source": "https://github.com/dannyvankooten/AltoRouter/tree/master" + }, + "time": "2014-04-16T09:44:40+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/Sources/API/vendor/composer.phar b/Sources/API/vendor/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..6d799ebd6f101824bfc6c5b1f4970f3783d90a5c GIT binary patch literal 2810737 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

PtHH_DBr8a|oTwR%l7W5cV-{1{DYq-k+ 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 z

ADPN@nrP6ko~NVQ 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%0DC)ub-`wo$2 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
r(v+k4pS#_}7On&|PZ-1b~eU>{LAf$XL z>0=hkdRh~MiK7DX%gP6AssXPYIF4c@Hn>xqtwVFH1(ztx3G@Oz^`Xua=UMR27y@D# z`{tzECkgRK)70lRF~HD7q1jlax>bC{k~}WC9~Pn)6Y&eAWU?yx2d_nSV^`EpAH)ZL z&OLTd-8N@Cx?FqkPnu^Sq8yDgawWZ0Fq^$G0d((IqN@S(>EH8z;*Um6G!7hpHylff zoKC;6bxYs%0q73N$?k$>=LjEfT?Xz8O;ZAMo*npK_~1Zo`TZ6QHqshI$WjyV+a|e> zTd1U6{G`?kcrXg>5+}iQ3rJsfT2r?JS&3!Z6#@YpEe(9w+82C%?Jorzsq%jLC6@C>QagbqQeD|oCtMvJ}v7e9G8{77t-+%I* zA+_P-G5Zjf{`H#1{_>dVKgCG65J2mE`cYW!rqQ2(Xb=YhO9M6rUmg{BQbg@b7x8t( z{&y4hH%R6i7hz6%sfqS48kWy0!I(j~qDObe65n$@{Vy|>B%+As(1Yh%u z6e|dZD?w#%nmQ*R)p&0vG*5vD-5+me!TK(cpg`tB@^j)IPhw&>5&(SfhbslH@%@<{ z)Ec;mIY8!@wQ|KL3`zi2NNCl$7aM>fiZIKUW~iQ5vkM*WdM(vOc9imdrVJJ0DFJnX zt`ssPr~oK(x4FNB;(69jBf}-M2!GesCOf`PS$(+30t}69vwlICj~axp#6Idzd-5#| znW{vez+D(ITlX;$IQtUz^BAj%ydM=<77C#I3DbyZHmdC%N;kL?H#x9Qk##0A0zjzh zT^G(sAr(V~V3zDiJpgC3U^-GTJXT3$>+XmXu;H>j!BuD1xSzCWyD^dV<#nW*fTCTW zW5XBJfZYuW#=Ia)XI>vY*3WykF~Xbw^zi}JA8~Pbf_Xc)#>dlArrFyDENmI*WTSYn zkf4@Vf$MS?19SpEWJ~i1PiF*d3SGy)poDp>-VN~gJj6)yXkS5Q%~3rOrU-|O>T7Iq zWJ};HTsMcuycc~D05F-IaIAL6FFw0ddkoS(x z+`*2V4me&Cxk6j_I17FPV}hf8a>Iq+Q89E9e>*j&?9fv8MLrI2e5%`1*=+D$r!02I zCEKP@v2HjIPxwq@DBhk*f1h8LHCmb|D~IRdaIu}+r33HD-8NpAQYOO}mPHOa^do`5 zPkXaZ%#=Ps^sF53mcAS8)AJaL*YtkNITPeag@@$uJZZZ~chHB;;G_B!^gI_ANE8^- za{q)#_Jl+$X-93?es@FeI#x7vz~<4`fdxp@w@C*GQev|yGC4m=g*N!4P!i0I6M}5nMJK^ z8#whvn(_6<1dQw!vUE--z3I1SvViYLT%;6=<=seeySShzpxz(aH!zMy6a+$LCeS4A z{s7^7U&7oxBz2s`|8cKn9)D_y&88WCa~*#zo&P)+=fUR>h&|=o#cY!juy5SQ!s>~= znn9SKp(gs>#SFLE7gXGvmGH-lS$_9EUzETi|8X(%i3r|*IGG@<-Gh-<`?V4UD4YD= z$bSn#1Q+T%V(H_e{v4Fu-&WQ6+iS&--_7?`!aKq3monkM`EI^`GcfzgKTr_gM@@b4 zUN9_#M#2|B4*46+!nBMLH5?!StAvInI?nQSyY``QkL@F532FyQ?D|daHFx#^Hbc3G zivI~w_PMZ+fS$113N=Tcm+mxP-+5mFH&yjw(MiuM05smI8G31Nk_6d<{YAK-%FKgN z6nTayvx_nODX!BMiUsasL_}tw97t|Z<`qAAppYL{lW=#qN7+DfzBa9nu15suNOlBC zK*v*uG4{Ag9Iwu90CPUWhTU=rkQdiXTy4F~;j@<}i{l)?Uw}zq@uL@m6sM^@Kfe|h zhHfqMETZisi}PUtjIp`F$!b+W8w|%_fz>!bt?P!kCkphVXBgb&kjHJ0Q(*$(oM3Qk zl@pR^ht%xw?Y3;Y{lgyv21}iEgaC_OrR+;c5G1zzz)pCXNp0b39yN?iVqtqxenvFI z!=6k&0nS$DkVaORDs$2`vnc{LcI^4#xDT~CK*nfNo_fAlS7i)yH1BSnCmFKSJnzOJ z(mRM5lTr(5HB<3h$xcRR27Y{prmk}nD2d`g0M$rsOKq4b5t{QCm6~wRul`ZJ}-_PpTjtBLPBMy}~ zn?}|K6Y(n@63JQaumeC){-$U8wZHm}-*fXNHx!bYuji7O8K4ZdXS}b}^X=4SZmSCY zRd~he@Op?gUq9jAk;dyu8*}^!@|%6nV3dAD(ui`*&9x;;d*a$izm%*lKD~O4EWqGH zz!FWGp&EfBx+w(wIdnvAZdc!-7;Zc3B6U;x*)m)@3ON{2i)5s2u5Jfv%wkuH5Wjgi z^$*_CUjmZZ%8Q5v8&FZ*!GLt&H54Bgxw}`Zghxj}Zg{nn$XuoQSU#^Tj0erbCY~jo z+uAV?Ob-i((dNUFXqN-dR(=5n4}wwO7M;WPiRq9BOqsk=dK>l-D{0E8$wcqp%Az zSyyVD21Y#Y&fO9&XulvJdSg8bWoDBU9ANlv1Z_E22S^Q0hP`u!tTet>V%EMERG&TP z(^EivacepVL=8WY>Ap+K|=Z#*+o14vda3PR(RjR z|30FM!D%>i1!a6$R{_h%Y_8rOzrES3D+f~4=5xF?P4>s7no~OnI^4mA^CR#OURz9Y|vuMBKcA50 zQOR9lQkr-q*i*C_{72W%chGCFV1sf%x}Vv%2sckf!3Gmf=}kXW>p}*;Qv)dMfa`VhM44@sWO93sheNKotJRYdJckti^sVAi z1`+IeG$yBqdO05l?RHgl1EfsLx>3%QO+03udQ{+QWD3UM&Wla*^Nt@*vLMtYWYd+&U?nrU-kVdJ@ROT3_lhK zWo>1v1F)t`+pEk|Di_CQmnSUljqP0Qt|KVl!9z}n_Ce|Q$BiEgh{*(tl8Q4-+O+g8 zWegx=S{6ZSSfs5W(pSYf5ZW}m*uei2f@b$%c_(;k(}L*^gg=1@Z{mCJxjCEzrG2nz z0=x-YoLlZ-5xZEZ>7IaErl6jDa?&dS8iK_JHWNXd2kz$9k>yrnCqKh8P}LF)BAJ?` z*i0Y?xV_2=8Z~fuIJa4Rl3IFkcB2<=Pq=gv{e40Qaa*%=x=yzyR8K2$C-#u`47}I9 zYqw|_;bA2;@}`8`jH-DL>y2Z1!W{K<@^A8(FZF(q`_kP<04#E0eiJ@K8J735H&&8Y z-LAuaXL}$GcnIWkPVomFOPgZ7;Q)~4QRMi{9G6D=-O;@94PJyAD6IVx17QBCU}mbG zfsyxAI4qB0dN@n#4MYAnb#K<>sI_(N-t#N=J@JJQAS5p7dl0RFJJARPh(;hJ`1NNh zv$9-OF57#*?>;BK;|NDNo>^8V<$XY%kx7%gkRe^ zsj$+!#&`a*yZPsx8akmsJO4b0f1JbFs~kMoM~0HM>AkFU*Il*``I?91-T2j;^P8_l zzJIasL1G4!yG=tx>eI5n$1i@E>VAq}yqeuReKB3TSts84izz5}-~28K#_>1d5x2@5 z0sIS`c|8EtAcm2hKB^W6k`yZdzjJ7zpP74kZ9Xpaj&Y0#bp+M?rw1Dz2;kg{7ajlO zh4kHym&_8rXh|T{wR>MAitcCG!BQUX1h6d$x2u16EPd#R-`9W^paa8y7;yf4kzYoA ze}qFe`Zf19fJnBBE2OG)_9aaL*$HDUWkRg3$<92)sCoF7xs`z1p3o$_vW?YCbm$wSc{vl?>Do2Lv)p>E{;Ou-n6$ zdy6#4rdR_zXKK||Tr8Bu!zNc16UudlBA-wxp<@X{;fBG}-J{-B4tn#WCFc2tK*+>R z(DKy=I6a&@s@Jern1_9+!1+1EO{ofAvDHC9d!1bYvuH}H49Ruzo%TTyzL+sc`P*6W z23oj5BxB%2pue0UyrR~ZQY7S|xI#YmVV&E}Qg4gntG0LEjeNc48RDF@n-yz^1}%a9 zNx`NAa>%^Giu4399facM$8MFAN8!K;u7aI+Ghe`$M?d8VLTpuxq0XQXtlRz_Ryb=A z!&*O^Q$<_1`3b>o0Q)}hwB@zONrEq&r1naii-f)1b(qsS+3Hypiai?sn?>hRhfic z#|?m0`F_T3>tvx&w~E^?Jc*itbJi2+;5y`_XE_29JS^~LLs&r`m`AQ0ukJS64zaE@2%N zukmCNC;a!_i1x>B1f2g>m=buP)c+=i0l^CZw!VpGSRE#kjlmh8HBV`zvA^BMQn>)n zA7KAxm)vNO^JI`GZWJC=AVBbH5SZ(IFO*=c=lyZPk8Z^qsP)Fh%U{TS3nYGT-w@P5 zP^x?zFRY)hAzv@TA@i3pUIX(5<0*Wa6?BLRX_DYWR0LMiNi|#_TvVU+k??voUKrHK zSyrL8aheD(KXM9Uyn%FD)_@Z4{b;NW=lPVrkMkhc;Ol~)!$+8syweBL4X7ZN`N#-kV&So_%&~X7MdO?w?Sxr! zNj@Ra;^WalW$JR9iYQ21s<7?u7cP2eKuIr+2}s%r+VSU0M+MSVOfm>&$KX&5B3pi{ zg7e^>FvmCmkHSVMesHleJAtv}Y_m_aa$)slGzYFIHiPNInt~uvC_56b^?>2@ogDXy zz1?}0t%Rk=t-3_qA@V&1TrE<5ahiT}6i3m6S@zVEq(OLn5#SMbKsQI0&|W|;|4pC$ zuUW%CE8yP8hEKq~*lrHshbW2d>v*;<(sqW#FyLiNBaY1RqmS}A2c#EvjQ6)JyN3@D zq1)x9J;w5V7ZTaAUtjA^8v!KeaqNeU0_=a@5zDdU^L zAGPB#f|f}6=V$-)zwrEo$7k`jPJPKD!tc+|x7>I6(h{zv!s-?)3^pC143+y8g(9(mtB zH2dMaox+r$vW~U_MnwN!*fs-a)+@t6M7q6@x}$HkqxBjm;>wg7(^k#J_3_IBFmTw%AS_C5qUg5J#710z`}HH zqJzE-N%G-QLL}MB9Wjc5i)9S*Hl)uiub=rfhtSppf%c4R|6tcLP4#P?w?YYD`)A1n zp#1;xRPl3`*VF7F%j@c|?~AlaA8fQnqby?DwGnH>=oppwxC$ga@a8>I$@4w7TOL&t z)1j{1p^SrUaZsV;0+w5FmfFtO?%n4=&<#sf10mwO5g85d0UzuWc^P$&P z$3=?Sbd5Al)DDD!`H^!Hj;F#~o-VoRJjfBV*G;pNTIV8%^=>21WUB0oy3vUp2g61M zHni-hoH~Dlgkz4gD2YA|>U^hOC;Qs%)Q~^T`(SSl_(-?M6qX^JP^<=B9=7OZ(D;mH zf*<>!H;3^c4pxuRbSj15X)0j-j!;z4&#MdWIMl&~*TfX-Jy7OYYGAfjb^UYe&( zu|0>nyYH~(-xMaBK`v631onLc16vJ6LRAv;@;ZQ|>$jE3Unu~7vnu${40J<(e$C;G{!!D(Er)?_I@lT()Yt%PDpssoJpZw(&5jA$@!PUVlbe}9yU2oN8BeJp-ueEwUH#Xq&&|5uO2KTIDyJQlO>2R3k3 z@;@}O-^Wef_y?#1d&HaQ4CdjI$q*_@uZBiS&~9EwUxoAI?SO6d>P~HThd$lbAj;so zJgAZy`n=q% zNO#R^Q*Jg8EkAq{0{zre1QCjBa*QJI%V5_owtN|KAr^jtY>85aT-j>EHI&vu5DaSCE#cX z5+WMer;o&zb7(rlX?5N?-9)`FXcd?dhwichPL|%>0eB7_SmLs$Sa$0_L9OA_K}vE% z@$&625ytQ3m2%e>HT?UpV>eFU3;+M|;u6>Q;)3v!Z(?YlV`B(uT$(+@t2G7)KjRFY zedurvFuDEn5%8IO^FDqou6F_A3gZuxBlw{Fa!zjPJ9zLBuYwDJ!jFO;q5)MPGCX1k z)=ThRYe2(U{5Hn{amZGAzj%KCrG>Qj7wvQ{izkVmjjTJV&omMqs{LGcTlTbon!(EQ+qOqH4dtEUo$*X}*mOZE&wzn| z>EY+|e(RB5^{6i;cAI=|3pMu@Wdbnv6Wr-R-jtwYQ&h*sqa_*vdEJBgH`pI$nVz~= z#sNuS*SIR}3$Nt?uILfxNSQxd%Wc24kJ}p*=Jd&PB8CE9@r}G*4tbB7ecl-9d69i zMeLGSJ{-2%LkRDSROGykfu}^TKpf&+ueBD z&bG*v?XG{OwX{3}%7L`x=M>vEl!g=PO^KOr5Va7Tu8ey3Hezhgj{>dXDBj~(wN3{! znuuHo_L`OG%c>r)a}AA-O?o}O%q~t|1bx45A(LbDi^#(t$g<^2jvvrbp({Huo}5@8 zZtRwL+`ykWcD65Zn}eAjnkYXuhY)S>j%_saa3cLot7_2sxg}r^UhM@d5j24xh@}^x zetR@myU{f!*EI*$zhtW3%% zA+I3YOHrid>BuaBHrw-os8Fer+l~hMX2m|z0O}>&@p9h;S>B z9bp1Y?qs>s6WgwSrx%xz;SaCV&y#VuGvQm03-ID%66E;)rWCSk_hYoR_aO+~z~e_1 zubu8vu?whI9iVOMAu|I7Yij?N^7lt3-)R8=!zT)F1Hy`j?AT1S@Hn|nL`cAtzUk5V z;XJto5SJWR8$F=CR9HeAf-u0wb01@h6mm2H7E(tjlzwV5WI0sescC(*)>#20Mj=ce z&odo4R(LOBYVOqAG!Hc!k0U92>&1R;V30^*4=|p9FoZ5iad$4TmEUwTg0k+e(9O&{ z4ulYNZd?>bh@w^~$Z6+{3N5XAZM3YSy$(=zhS~>d+YSVY!?Y&>HiQ zsy&D~&Dp-vh4l4^`k!yv9ejrsh>CZFiRe$=C#R)`E0{dCuQ; zEQEG?1IEAA4}XE1g>K@X^UME`ivIFn|I}ZUT&Ofy{(FDXft>lRO`!AO)c}ftf5f1< z2N1jZn<}G7$nRS;82VvRH}LcQp<;l7K}_1uq$r(Z-=#YQWPSG}ffJgB@rz%)$HMw8 zfQ6|73(9`LejZ>t{%T?zbbTZNDyt<)5>bpYqtv zcQ~{6?ti=?QU(Du^X2^-P|n}4J%9YX-X9mlUjBDJulL7={I@=@_s50&w?410i~aF= zeZx}ym1pKh%M1*nM*Fe9VjdiJV^t=v1dlv!ZkVKZf=_}N5_Lh1TEw`93W>))!*IXq zlj_}a8I`yD*aZg_z@U;11mAd>!GQft0A0Prsm|`CfDMMY-d0Gt6Fl@fK+|KNgS`BV z84Hm$n4q@=bXWZcDE7AJUcX-ZSu5P_I3#i>-)~@4cd?)~wk=uhdSC+_1ic|dQ5SuA zav?p6D7kRkCM=BCwr1&uW>%64JRkOu5|1yJBnr-)X|DQJ0(;r^-sp@h1==PYM!`mM zS`kloFmHC}_POIErUBs^%*a5x!}(a>K=kew;`+Knzs%P?;qjB_hc`-YZyoJ8gcCY5 zM%lv{sqG%QCf?@8t;Y*XKpbQz+)9ch6o~ds%rTzRLwz*EXJX9siCECXP@>!|bGpZR zh9WtB=BO^EnpV>1vD$^m3o?e4liB#akc{9b&cpqUA~6OJh5?ezx*mSQ&Mra0Zt6$p z;~i?y=ctSo#BU!IZ&m17#J22f-#vo>*@KJ2S~c_rX%6l1>T6Dsf#5+k_kDA#HwNoH zyHj>#dC~1oC$KfjszI5{r6f?g6$(hXJXOF$B~>vzAlWIoGY>;Cxkh_E4Cs+r1wL3( z56a(7#N6=`G@v_;KF(?u-ZIc%FN(9&ScodipgtRuT&Nqvg;(r$LgX21uEUz*Q<-Jb z?gk+{0s-y!*L|nxYwqXAYv5M&M%eB^@Vmvz+N@IS=P1!HQ7x1$@`h!6P?rnrX8m&u z{@sE9=~%5E$d?#ZVAkn6SsW?RfuU$YjS1cUNxaTIKY|0^4n=q8Yqy*nkG$nbeG(V8 zk{fDBO%Et*PKTJuswa;cO-vuHdo+?ZQY8R6Q()`}0e3b4{-o!O>*CQ}dR8xQ$zkY> zE3J&@WQk#@8510kY;WRvn8Hy7(TA=Mym zBGIyfcx%Hc?l=LMB>{7tV_mjMzA)y7jil2~JIe{A?CCXiKe-q#Is$Osd%C&20GJ?C zW?E??3h0zP$F}htH>BKL`H3SusMjf=FNHne1<_>B`@Vd*Znt#96!?u+{2YgFjf)K} zR*ARgTv$j+h19M$~wJ?MvcKW zm*2<7`NE<0$g4(E2AwPF{tZSuh-wvJ_^}$rrralFO05eExo9H^y5I>0={E;#bjInS zR4spR*~}dT36ORTrrh%a9iMytP!SiPBA1W)9X0WY+Rag^%8?AN;s8nH9#W^hgm*XM7+Ac{6qhSW zd&C8W*yX?PtQgny-i_U5g3Oh#k?Qx#DE|S&k7L{Y-kB=4Oo!Nng!#+<|xeP;mStE)U3xuYn|Qf-eRXKju3AtQ^-`FUzN1a zF9wn1=V)H<5Zvg3E#*9RdkKQ8dvMjwaN1_VvT#d|Jj5MsMM){K+V#Ada{I7fXYddl zeHO_Lt_pb8{at$#5aqu=G5<85g}QLpfR9iy5Y#%OW8s9Fdq3JGKbhWp++5$;0^IhI zLWnl}`9>oA`g`^?JD9~bV8@CMH8JqV=7NNeT>(*A)M1)W2AEop#0uF*+G|yV^&JL~`bMh--pI;xD9goUuT5r^Y z?XE1gKb*JrNjVZeQp4QRA{e)Rk#|DZ6F%J^SMu8%_nun(S5`9eNum9wIQuu&#Lp{P*}l&fUn?1T zFXi|0h9U2p5BJk;|EG5ia*V%z0R5+T{Z7I7OL_j!y;5E~?J3_NK`0jsCk}854z9D; zixry_4T+Vv1_3MTkYHeKJ{E1f1?A*fx}lKEV^fyEG$|X#FU3|MjX(!5)jD;xe&+N% z#Nv!M5(k1)FU|fg4F28T=ZFiv{_>f-!j6MI+TL2Wci834IPRm1uR_K*_=te0v75Tn zR@VKHGGnoYv?2A*YcF7M-fvt@K*rww_}n8~P$kU#Mp+U)ck!82a4=LcC%Q>5X1Y$d zLh>re%zdDKDjte64*TFX=gs6r$$NDf%1Ip@2zK|ZPC=2ZhQxqCE&Y(`j)zb@&AM6% zH^4Ja=5nN4&wskjKx{YdwQI;rxCzLjFqhJWfcLF(n;zp%Zm=xKNm@h}DeX$tPa!6J z-eYZHhEu)UU7^_R&C(muAho;u_OiAma8R!~B#*1PqgZvH-UDH8>c@juJs)Q&Iy)|6 z=nbU^^vr_`Z&?jPSRTi1KhWA(Or!In-L0%Sw5X_rnw97rIC-qZF+Te}N1Z4oii6Z` z@hddBgFB3=ogQ3&n1S*W8c3EM@Tw`$c&)7m3jib}Jk3ZH`~-g7FHchQrO|r~&!f2= z2;mNAc{sy?lU(CIRwAa-GbnZjYC=(VQW|h2a?;3Y?kZMeXFTOmA7V33p{^> zu;t;YuDe4gLpb`Kak8czVaTjdnu>6Z=Zkth4CZA-&$Fop#ga#;ecBbf7gI>j^9$tO z7}I|#{QinX0$w@rpnNFs;j#YH5#XoxCznp~g*-2*ayUcDUp-+QJ?|%Tyn=$10d~kY z776krjO3S&%o~0O(m&WKv;_?B1SiC2wHl6X4YF4;DZFlo0oALUViCmZp(_wdA4m%D zf!_HV2E(qg_tKG3CwC1(s7ISAsu!IPrh{I)o8rYC4_k{X4D)D>*+YN>CHXo#<#C!y z`G6srhO7O7+HL9lQUX{Oc9QaLH=aQg5AM-xezb!Gh6gppj&$!{8whN$)l&dTXh~u` zfw85ZqD-_KLOs^7DVl-k;bf8;8k|Gea}+!X+cN)o5s zzp8|CFK07+to)=3M0yF%`)+?EP5GuibACaXn@sfc^Z0l@L%_mIjjGAaUJ+ z+VO?eSBeHx?`;AX2lO3%>NT8C#%AZ$V=0Y}C7_|FQ7$MH6f|ttn%3r=t2nu)OOuhstK(+6Rcip#rke>*G5?CE;_U&errdX! zYNTljW(JB!c3Lt|PvIFh;P3}5=lLA74ueV~w>Yng814ls{9Ri#|3B^uCcN(ZT=lO@ z{eNnAa`w9z$iL@nfv&<)_6uOzwzWxvSMArh07DkOw>UpKoOKCaXyMzkwr%jTl^lq* z$`q_CFiHGl(pW%m`&*eGpFn;tJGEZ@5e*pGPb;WJ-xdAoU4?Hg7=KwFh(#(U{nnK< z#FIbyME`c9%-;)Wkf(pNJ^vV{!rrgEyP066jlWZ-etPk*-p0qn>2KZz0$`qh`)&Nw zy8zAF@7@L*8>}I*%P07hDWE;~4T1{Y5}Cn(5vu}%J%WCPJk75wM5wFW3mLZ&>~K3? zm9aBG8^FGEU0w|(V<4`CWP1A!YW8lr=T^_%B9ZQlJGjy^R6Z@QJ@~c``7~6Y7{SAb zI5rdBy_u&i8h{9fw7%b~oqj6gT^UFrz)-w{25EWS4|@sRFf%f*3{0(loreAXi@$yC z&oaxxRH68kn5)1bQ*g<)WFK&AQkIbWvxP=-l~k!h4jP}?^Cj4ct>6@!*ZahF z(MP_e3>vLB>uN^y>@__w{9YC^&M%0JhA_$e0?DFZC*a>p8d5lAyNYCfUv<)NGba9N z#fi>a%CLMtM5}_$U{k%9%qxcfj{af@zpS`MJsMz8M}$x30}#}_+8-ADyw1=tQLqFB!4*Hmqu%qkDKZW>| zfE#3IKQX)vv>oIJA7x)}ssqgX(S6FZ_xPbqq;k7}Jtbkgm$%l5*h{+uA)}9tuooT> z-R459Fl6ZEs5^1D`v4?$&+-J$h;Hk#>|4}L4_xbo$5s-rr(8K01p?yc<8g%;;3LI3 z{1qhagLcNv$kOcq+e7jKh&6$wXh>IWO#5`BfF@ya;fHT$$5q~3gG1-0`r{T~%pMxQ z7WC-Gq&X1vplxu>r#d|9U#fxO$7DIZj^a3+_s#kQ+7tt|`90M9a3V#+D0E^2m33GO zaZ7LQp+wq3ucBsiH=#;=$a;6Iw#PfSz^FI5cEtI(i;ZEWPWMGzO!o-}{rWuS#^|$a zSPU7eQ|CkAz0T@sPvA(E#xbA^MShf2>P5FN|75}a5#|+!qn+jWU>V+QMIyUtq^$ew0ao_y9_>*_aoeDA&ibYRHpBDk%2k7@bl+DO`7{yb)Qc|4Vw+-fD2Q>|J;Nnv( zNngZCh6IoPdi99mO#cXIL?fYS%i_0*ATR|>5$2-wo?zcS-& zh*$TvnSr?}f2&~gfr4ex9HRI`Iqw2kv%{&ZOX!;2Y#Vd-IAmPmmH z@oKTi@;qw?S5>LJ0{HGmGPb);vMtGi$=&+Qo;#+<!k5ae+U_AKHat-Y~^)ybi^26oUu zL2&Dn!MlXOy0e?%3Q%vZ322mMkqr~wHv1Z8gMYQ!*r2UwgIUaHMCxLxR0np{a9a#WyyhEbQ+4s}=jY zs^K#hhjlY$7!YY+UZKEjAY2vA&8xuvu5SluH4qK~6p(Gxmfyo`U^MLEGHsdj0+)O^= zzAhC;)O2#1)Wrp)TI<;JbB&#t0 zuoj-#k^XJx%zG;Wp65CL!Z&^(DS)=~OAPJ5-TMB=4I6(ujt<{hQU-fTt#azs z0~T%d`>_0W(^e$q$6ndH>GbY;{{eV}9;SPGjpx&Dels9`&TTb;VgZP1{P0q|&${WI z+bW5l$^pQ2<46p8kOY6#aDf(dCm+TLsHcAlas3vxO+;Y~k=)-%?y&p+I>?9oZgKlf z6@cY`&|2R;v=_wEVuq)FRRur2X8iy8ZT@}T@l)BMH<|C2`jO9FEYdBo4$=smoJj!p zXvc>L#NlP&k|ty-5WM5^KUJ|QH4TZE!zYu&!*X9|28lHRjUn^vh2A>^|YWffGV2tsOq{t z?oH-M-nN2AvIBrQytZR{k4Xlr*@<{^Uk}^Uh(l(AvTesXe1@G4VEY4_FLSR7o(UkR zk!N>nFL?Xy6|iL&hwhLQgpxAcaynqvdg+TeGjC~1*AbA5WK(WqTGBat4{?-x z=DKWZ+8@)Wvp=fGdpVF06Bf|eUXX>Y@p*s|>j zF9&52$V4T=Xe_GNy)&KFTV8x zmL1Tt|M^V!^NhVMq*DqK&x*1^WNTT zM-LoqgQH2}i#lOe>1+H{>n^ma)$K{Zd*$eFWaM~llO(wE0T1iPg;-e2P6?|Z<0uic zb9Tm8U!22B{#a_lW_$qTcBW+N!a^-?fjyq@ECYi#M31bc#H$cOeGY1fc7T25IIN{VcKqf7wU2SHe z&>qBzsdKsU3Hq(zZpdird)vDkD)vIqu;S8)3`=#_SLQ@V1f-K-8+Vj-oS#RlLnQ<;-C*t8&U zXoag)0W!*>#b5>9ctc)w_0ZDt4T7?`y{EXSWxV3?W?_Kqg!l#Zctmho>}AW-mYl;| ztF<6=FHiWxsh9sge)dmw$9w#K1fjsc{SU96Ec8!%jTGy0xmaIjM zA-sxlOTrn9#RJN^WEq_)o^+`ygaM{d1F^b}-pTBaw_GFjXwDmM$dSS;$kS#2@}&AX zzBzsy-vF5`m0%YC)A**t1nI7_6N32=J9!Q?0rIMWc&NK``V%uAieTOW5tsw+aTdbE z@q#K&cQ8Q2sQgNj%{e2R8G_)aXSE`ZK@P;TD0zTpgP!%qP>eXAW`}N8GENsMNvzZa zOE+i)#VSnCIG7 zs`(#(#ee(_|G#Nf8>IQeIpg15)ws!l+_iR7tRUdU$bLG|vA8{I zQOTE02i*&3_5Kz8^h3%647J01ARw?d;D4SGj0b+q5^{nea#d`EbRwtH6Aem)v1;3d z;_5$3c3NofvNZ#v8Yb34$5GMlXrM4Uq|%ANd=U`v}mZv_ZJLV1y5^z3p|6!p6q_A2zc^F^M^?3odbxMv zJxP}4VR9e_^5Oo2@Xllc!TD-Byb0C+`$xn-ZTMpMZat9S;~jkl94GRi=)@%yjb(V* znDau-*!FBNZvJdY_{e@cgY?5->QC6ohwX8zywr-RKL=`^A^STvr~_9KpfbQ3%LyQ6 zQDhA}a3pW5nxA4k&=7mje)=ZDLwK$MaY8Km*FWXG{He9@mz@Q#0Eng!Yli=5Ev)7W z8@X33#_I1(uYnwx`js3DXlq->GTW0}nAU z^q$ZZfl0=vn-jt-dao8wPM{QDA#&g6h(C#r8t_nF*&lPV{}Y=dzCB7_2p!j}J=}SK znj*erJ!%-ih*+?|Ij%Wf8@=D23wK}4b{qD1IM%01Y=&1FVxB?aj-1;3834K2K)G># zih6=XOQnU8DuP0FJ*IcHL$%9#6~QN@;D#}|40Q60hJcvcWVbJ6`FdysxpO^97_b)g z-B@aEwF5^_lBi6Hqs3O*BcXXG@33fZm)s4GDRx3{8|r#vg~{>i_`KG^J=^r`svXCt z19Jk7xyWg#tMO!D&E{;-Y^jkML!assj-1bFk1j_GW-D&XK$@`@9bq=(R-s^J#tAZ` z*Bz}stOx(<_ou_&=jaGBEuI+rOwRB`ngw^jfoc)PfESLEgOyC(Fmne3((rEME84VH zvRhT!GjoOSG$xw&GcfPGQ>CP)4UxzX=+y6R*B_vc!Jdg^OY)_Si4_Ut#PZjU?R%Bo zL%?eVsUcgt)wbi~e8_1Y@{{kqFCRnEe5S@t>92%;#>Lg=K|- zGiyl0C_Z12G&7$dS~e%_weHI%eFYaiCMO z`>^`3a183jPJx-shrC*l2#^?sG*8DIpy4am-0K-&;kX9nn)-k|+ou%477^>9uzoQ& zz0VZe0QrEVe@SrsWEWK-7(Xn>3?6C2R)(ShGS{(dU_n-mP>V}$(Y zXVj-ehu5`2w}5$NOGKu-`pnggE9fy+X-Tv%7OgXf4l4t4BOTkjhTvP-_wPr)>D=Zd zu^UJow&V@`49gR{^B(vF`5;{U^u)V3zDW>(DXr26k{R-WG?Ph1YB!CwP16gT0UraMn+MhGZ zUP*~aUPu{vd6#wWp7O4Ono+q)8h)I2iqGlg9WxK&&T`lD-U34T6)38tJ)UP`ww2l# z9cA6`+yP72XZq;90uczZ-1RVQI|N*;+j%38ikgt2!B}j{pP^W14Lw-old0X)NIl7+e@emv@<)9)LWV(9AB5;0?i+lwo zl2e;2gg4YlJYu!^^h1vW5AzuAl$=O2uG|u7uod+1FdMI1fCKS4o{nfIAN z3Z(8=(^Sq*ee7#LCeY2}(a>R-UoYA6cjpQQr1^{z|4Rh5`Tub^<6o`-dk&aT1Q-5O zf~X$%-x*N+Q-Q!G?*ifS-K}UxbF?H@D3CY^aBw|qIVx+sKT*-hU%CR~&$9^#p91lg z8E{+I#;_OvEhL&{MuYVMDtil7!zrHPhXBC=>Kc85feu{stvdR>p6Y~WJDl!ePcI){8oAI-#cSXS7ZA&5(2#G z=hr}q_F3n=sc7#q$9c1xyieu%dvXHWKg$d33Gr(aII<8}|5-)A4F>O$r2$xYWPs!4 zeF0D+9p6eMxX9#t3bYp@5E46@;Xa?*r{;p^Ig>@+a5vj;&dRr|zb~$crsy}Z>Ik$8 z7kIxt86tI#{y)%65cYVcg6$EESM$ZJdsoTb5bMmgo!Q3E*t|Ss@))#BfaM9pXdaBr zz_YK*W1>(JLt$aGtZ{>v=CQ^RU1*a7mK;XR=^fU*ZL*8FIUjH@CE?@CUMocpY^DK0 zwbT3?RPz{RU8!%eM!)DYA=mBS^k^~C4#HYlzfEq2?fUuRfgt9)cR z1J0y|Ea&L0w12o@O#}KnCS0`O?nD()lZNz&v)+Y_W6aruw)E;99;xG`jt5LMwefeE z-|@)GT6Vir;37Qb-d@F3KCb)wHHwDT(hhoj9pa|}n8#6tT@u1aNLpT_Aw6t%#)I9y zpp}^QLZL1*`u8)(U!$BI^0zV0|Fl|vO{H;#Oxr)Qw35^v6F!Gb&-jaay1J4*Q#hZ^;3NRyg;cZyuPaOZz0MOM3aPO`3o)WTSDU>LCXjv(iDDW z!^xC{#U<#06 zd^%>>K^PG($W`ks2Gl9VvgZquo&3zdhOU55IqBg2MBrc^JAl&oFy=S2uvzpr>M?j( z8^0;a=>D*!SyDu%Ja3RYRaDIW?DPBABQbP+3jh+{YVoJ7@0Dx^z|Q=h2|7^Z?HP>v z!+9GdwfV@1EhWP_cz<`AJG!}Oky7Od4p|l3VIN#*8wQ8_P=uHw$20FL%}G!gPv?zw zzg#47xcD755c7d_bXkD|IAu`jpq>SHKB zO$zyR!9hjf6NI?OmlxMU5|y&>`Vq2Ei+tON1$&ghP8=82v6ANs(GHLhRX6L$7yEC>RT-i*+JA2=r?YMYittl55^|(^*o?gs}}zB3ryU zifbgG>AN4DiNqr^a2dX;U#>~$WcD5SO<7YXg<{{88w8h+vIlWes&Ud_z_P0bw=J%m zscgCyNz?Z7s)4~G5P0n*snfjxA!EEwp98I%Nc`CB5hAf^-JNI0-ccePMn~m6ETeL-au+2@1OHvyh4gd1mzsd{x&er`a$fieW(r-@V5=Z z1tT@2U@Qo5ltB!3OuU#>^7;5!*WDGR)-HmW*cT3z*jwm|iRb|21 zixF0+99eT#?8&B-B&i^x2UUqaz9E*M)w;AZ?>BWnBLHwJU|K zUQUDW^!cPDx_$_eMVk5EUrzGP30!DN>`hDtg%P60WVWRw{gH0LdEnM@XPQ^je2rOO6cJdG|mgNUb|jWrT%t zp`&5I2*F{4>d88X26G=LJ0^!9$iJ($f8C#j|JnY`ac^lZq?vuAjD7CUFq_@#>rIs^Pz&1G z%_{k?YUZn$`EhUl)ip#U( zv&T4VE`*$JpB%$(sov1@W#_h>*(uMM->b^(lU{;iDQpturIE612?zGbaTW5ZwftZ* zXZ)w;;lnlh@7Yo97bM*sr}3O&HHbM2{dC=x=u4;%aPt4G%0G69HxROrsh~|yo?b}L!rqBmJppNWU!k&4a zWDX8Q!|=j%BRK43OJN$!h6coLZLXVh1E*aCtQ)JTKmi|b2)P5|5b^h!<&ti(j1Ffk z*ZUWa;n<(fp#NCH7ViTm{=Fj&`soLKf_BrjnW;DjBq{{ZoFzk-Pmn!EeW zIjAU>ke1ntNL29r(-q-&G|(xgINu5wXt(rhTZzQ!G0&-YsWCsFcLK>#q$NHwHr-Uo zgO*4?=k;QpR!iCu*Mg3rKVbID-9m!ngCs}x;2d_v1!$Nl#4k(9S*yEr%f}3`XdyWc zqEQ~h2AZmSqwgkrtSZ7j9kq3)`wB0t#!H%2zZnRZ_B!E7b~9FhzuJP&$AevT9dw-% z_1h7Qhd|`n0H(z`J{R@s;VuReW5y{cg;E9}&rte(14A4QLJg5io(^{P;0noVqSpcT zf@O(^3b2$dO2Z^m zgJWiVbg`~yP@=nMw*nEJ#*7Y0gP{JIJD{5pXK5ED8Fn+bMhz~}&Cy4XsYv>TJ1vn) zTMnXLCt1GLfJ=kA!-7zR=VJ}q)mMS!t)1#O^K0Dr{2jNpuhg9vN-Q!8lOXlQzifGE zzLTg-LdX=UH4?&K0u21E4@@G*`V6HKKS@+O3W6Bt1xsxEQwZVG>y;%zD|YbC zARTHNq_rAg)3}vjo(m8dXNc);EI6I8(qUH)&so~on+BSk7tO@P9rPa{DRu<8RM5eP zl--Z;IYA+Tpk%vJ^~Lu4odUF> zh|Y0HtwZfwySHu-1^=0fTp6IY_;67DP__R1?E~}qkZG|r2`I7YFc@Fz>&$P5v--S# zr74+ z0+_lK+=nooR3CC~Cn@u@vjnaPL60iPbDtopiF~SDIIW%26tW3{_Xw%KFn4@w@ivJx zanCyrpAVlS|!peu-?{#BPKfRlP45@_IvJ* z!j^K`0AKug!}FqGavYJ4x92MnOs zm<=%0E(J*5yUbVd-DxLt!b5s4LQ8RmZ=qXydqBD~{@4ypsv4viu4A78 zW8#3luEI@#83QwVHE4Ih=x2D#aJk#ee!G}Bdy?1qFnc$L2KpY11;V=cdsiA`ivM!+ z^l{JOkNce8zwBv$+S>nZnHdngVUMT3%ghu$J65x_Lh#nl@X2rN$!8JSKfq>vfX$}B z7gJ!iyZW%@{<$@)u1xc__sg|tIiHi(_kLeTU}TRa;Gq04j*am5IJOf0Kw!TN-S&49 zjHg*>DwpRF9&8m;d}}s)lK*j0VCk9L^yU}-`(n3X`I_|t7F+mY!GP_J0fGCw-(`@W zDa`dd-w}8*-(IUYw&Z_60y~E4tkDXsZo>4y`ub}#9d!OJL{WaxZSv1Mee2oiFDCB<%3PpvD$3cGz%%%hOA zNnb)iK`UnQdfp!@nO$msiI{^-fzRa9)59W()^tr^brT!UI$&c-H@M!A^cnBdq@59O zTV#E&j>w&RXP$H0e{X3;XqiB6-Os0h5Z z(yFzWdRfK>AV-6z^LEqv_hcrw<^>+R-L?Rq4!x;BIs-ROr*M}eSr-qTx>oo(8~gwo z5um~?lBJ|qv>A(f(A9-K^gcR;^6~+hA)i~E{sD}&mRO!S+KA9>c<8B}^e?c$pI%sl+Hxn-2c1Rp-ARJ*gHe^(Vm>1v z6sUqiRhP2@7mr|mf^u#tn`t!1?o294h*+AiP;W;((+s7#vfbW@ zNz-`jC_7+*SvsZOtv(d0X5T8AgII!^6di^N`W2dGIJ;$r{7iy(Htn z;~M29MTI5bHQ3$;0=j=zaP4_?dQamIzv`8&*rVCrKVH*q=HyAZJmq(LQME zj&oFM(^>2Zfey3;E~y77B2Fj$dFj<9lF(YafGZ;7HSk zwB{vHW$B~v$h(J{UrirlbExIMv> zj^M<3^IRk4eHq%zORx^Ws;-}mf5=z%IA;EQSb>`{7%sfSid{oqm=_|l0GCT2aFzFeEr#UCtM;Eh=eP)YYR*KgClRc?g*ra{GqPV+N9Q6+|g`f?_VmPd!sk|XCr(@B$@Yht@ z>roIQGeisc(tNp|J90C$!---iW`PW3hjR0lszBvn3eXNcoi0KLPt&rF8zRF_jqTtFl#)G>2VB?pqy#P=?{; zYHoJV%BdZf5@TvD1Y&F`1vlf|9POu)(6?3di>Au*aQ;gZ-beC2RzRTpKVMSW|2_u# z9DGEtkDnnz2AH71+r(SW>s&%M_i%{b8~wXpaD(vrU*+t^&gS^%_u~N%$r!%jT{qbF zCy6%!Bn^A#q1+%VaDd!ETP=9N?Z&hGO%D&aUGi%aPVVSez46Iltv=2>_&EJ0|N3M2 zGEBF=qE)d7P`k#8ZosPeY}DUN3W)aFqz}*^f;>40yaMJNs4Bl+{P|k`uW#kA-U(dU zfA?1Y>YeQVkR$zX-^!0B-=FvRY+jL$od6Gp-Bf`)2G@)20bPYD)tV@~Wku~hUsc)! z_DbL^(DyF{TO8Jt+}vFJ%+)8mx~x>#W9a!#6uGWRCTq3z?!{_8g`Iiqgre&CA-gF8 zi#tu$?YrW7Y0>83oMen+g|B|!a58r zMtcezR-lgj*CrwOnttU^K#%XEQw6ph!?_mV{GU0W-VoXOpw#Dm{5;YlWS)W{qhACBU$X;MTlJR;c9#a-ssL~tN=MqFx(%_a!mmC%to3h-n={u!=Wh2 zJ!D7*@_m2n!fUUHLEw+^%b6gRgX5{cHmZDIn_tTINAfqvfxqqd%^%Cj@%5u6Zb0h; z%+I-;af!xGY3Dk7>}3D$14BQsxZ@w!>IW8Q{M8-)-`wE4KOPSLY^{phH$wt!*!HFP zxmKOH1}F^#hyFMReAevl8%gf7Xn7ojC7%<^_Rlr@hu897-_oDGquu}J@$>td1;zgu=V++BDHoHo0 zEGIgo|Hb9DfJ)}rV>3%aPvJ%}4oQKq(kj)nRQ3mXMI?M9Z9;++(iVC>lCHHgt>xz? zJW_K+yaUX8Aqp0F`jK|mbuOd>IKH4kk;;`cBo0^QsLR>tv4u2oN_KCuTO?cXe2=uQ zX?=A)5#qk{aCtnvGoE^v<^7RSON}#F3ilsZ}cK-{a|^X7v%qY%6NYF{Texk{rfR5_&=wo&X-7owGA z=YTHVe75=?g|{>?5D<&UZv}`bv{~>2NPLrtTs_UYtOH0u6Ub{*boU8U&oiQDI@yE3 z@*(eZL_RssRij7opfe9IhZTSKc{mm^Gzx7ab42wvOdpvrgl+b~g?OY~1cs(wqxIH+ z>f;o?@p!O7puMYeUrwr^Lf8g57Eec1iFxu_V>+zZmT@>Ihyl4892CB6W*li;a?qEG zuUAm&fq}X-LC+H**@Ri5vJ=hC*i#nvq#=2%Pw>HZrQuhp>VJS2wY2@RV7m!MA2mvh z*0m=6i`6dbRp0+f{^M8tra>*{{q=Cqwds!K_+%{2iKIv^4-xl*y>;gL})V{ z^=f&a-?7Ae*kR_rpTP$C@+EO!Dwe{v{Y;TjjyRK-U2quk_B%$cuVpEb5WUOWz4zt_ z;C4Vxjz>rqWp}qA^NZ^lvSzie4wF@^V+q9$wTT`cL|c|V@5*o9 zB&O;*KD6zj2?nm_$v|99QnNLQb_AeEnka>$TFl{Q*Q;GR(>&v}H?%e7$5F#1Fvy-; zYIpV_#_D-ZkDN(58syxkwXLuxkhSr%5`m^&NblnO&inZOUJ7aPmxpu0YxUF6yod+h zSY9%oGOKY5nH^CCDf!SLsHAH4&`_MDqUVYjJ@4P%TxvL?q)xYqS0n?&ecF=pT$2>y zoYopoTT4}6TGgUXOke8<7}M`&CsW8IQzG=H0fl}f_gaC^k9%(39xvmr-MERNdhDHc zTedwVEe(h5#OVCWGL>v`cYvq6rbdc*84HpT(k{&b8AiIMLE_mf$**l0u<*05tWmPXq*NY{R?}7m! zS1=5*?KV0pfe4bD9b=A^br=c5j^L4E*3aX9A|UbyI3ZHs5%*gV7dv>MT+n-xoWoqc zB;65hgOta42noFRgM!1U&yXP91p~MEawDM?jREn)UI7S&;f&^SBbP^iH9NP*`m0p< zw}ryrmI(c)T}b{c!V zZ)b_>(!EmE?cv0N0stGPo);{zc_6@ns}i)RU|2CgKstW&(1K3yN3!{s zXAs5?zs*~JVzYkf?rHiJMOK=<=m`ha9OgsrkTbBfe>JCc9vhWy8Dz;eBrx?D(ptt8!0;?R>}}%lYEYZ^_Z$M}vOvPnQv-*I=X{ z+eGx;^~4IN-Sv^B@(H$-_yIvUQQ{7%X1CmP47UjLwLoYf6h%%UlMj+A5slaz%6LeF zdIKRU?Kd!OXoF~Wu1Er5fmtq6N(?w!AiLTU!-(AN0wZAXvUqZIJSh+6 z^0G>SjTf@ubp3QF!vx}^1ZHk4u5(}aook8Fv#gzt3aNvC8CiPBz?IVT;0g#C5d~HJ zTW{q^qLX47khrN2zIAHP0Ba+HjuK3OD=9A@fB00ov)@J1HjN3=dlR+i5!#Qv-%P#EempE`^5>+L?i8b9oJoCmPc zD$s&*Z%i*CWD0*ECH{SM! zwXfOQxgJyK@pQfb?ZE>l%+#OhwqEZfi2wZ%hTHSm`?b6GM}wgOxj}sjB>sgCZE1%R z{=V_9p#D$bm-p{zwUeeI_SSOynIE4qR-ro@HJ<ao1XXCzUl zN=G+;H26Z~-1_la&a-7ejZ5-~bxM;R)0_w(vB%qW89Iz|Y7z4v%mL4siaZ)ePcbWE zfc@jr4=%K!gfyD?lm5a)p4bN`Z-CcJb$7?R2#kL0pj*sV@3 zrGEmMz((|G5@;dIS{6+C-$yKdGi;PY(6+Q!ky)c%mZNNVx*guYC}Inf>BK=Gy%=2u zf7HR)17q|R$RESXU*3HgJzl8mU65W}H}n9WlbE*NjDZ|DJR6VHR%gxZOQ)!Iai>+W zj0E3Q0suOoh-*85;>$#~S-{ild{2bBT7I=@5(mNx(S1vOeI*y#C{GjO8|O)wbJqmp zgmr8-WFm4;+1_w#=WHK<$E6AynLjc?gu=`-2&n2l0hCr85gb}#0~@bL zphhF{jg;4@v29eiKnrQX-MutCEy=xRhi=CN2T&YL{1c*WW(F|SW1c5;%bC*nfJhb? z^yYTKkvC!HmP?3p3fcT+cTZ%X250_ZtJXjMNvCH%f}uYR4F54${M$m|{plqT>(5@o zEpBb`MspMu-U=#31K=X1f5w#I*#3_@?x&aV5lQ{BcI4v_i@GR*0eg5p< z$1ZZ!cc4W{!TJf`SkC*AnMhM#2I` zLz#nRHU|J-2~uwOi*OlXUT6i7)8%_|9)428>MIKJD3~Wgm$HVpi}H)iF|Qvbj(|Q{ zrzk&=PngVu2c-nF${%W-4=#7rzE=?cQ2_yFI`T-D)$G<~UtD*xS{qztQ`;yN!g=M> zLt?HoZ1COlak|4JjXV{yQF#G%5$AqyUh?3j+Zj)|kOz6(tU;&~b)3xx^~PO@_a|H3 zYk6oqYEvK~n2!X=p;q0bTud%EpSJ6fzkrJoj+u0mqSW1dUB==SsAl#EwVV6OunM4_ zA?`zrz;nds?i5mVvmbATm%lGDnL#U^0;o8ly`x*&wM8;4_=ZUDfP_bM5FRj12FW0D zgZ#=KtK`KVS47#7mo8WcG(qH7uwS8BUQM&|+~3X^y?7T0M6dhz%NJGVcnj7B*g+@* zO)fnm%jXdZk3kGl6^{1pXU$JL$aA8K>j4HgCzEHS1?Hr6;W{|C-Jl6@yS2a{(3}wrvbqun%3|O^&Yu_o?JHFiOWUAxuH36uaBo@S^|F$U5-(Y^O$QKOM ztH->#IdpI8BpvK5o$4#&co=C+_ZLLU8_tdo-%Vr`*v(;Nd@^K}v&sin@s?G2iI#~X z+^KtR74LPJ_fb*Iwyb}g8*f{iR_db1b+nr$!B3otD2t6@>C{x!_+U|0@ zbg~N}WdMF;z$OvqA^bMqldI{Aj>PMDg#gr5dKQTwOd3P`XR{d=ZfCr$NYXhI=8YYs zV4a=AQ?X~uF@jc?Ha=fwgJPukD@-hRxfb_(_hj_n;C!kdQJ+yO)v z+5=jRyrPK>4*IsG7gU_W+lje9nfX}I;r>GRx(?K@2UCl!A+J&~9l-y5Ok(T8VDB7@ zE*Kjtq)2N5x@+~#)ud;0>c?@t>pYyZ`x~1-JxI^#^5zB7N)t$8o3g>MR!WZp z;Nl-Am|+SMTc;vp?@!O$V8LjfJ3@$ITAd*KZXj8qW{Y=zU8aVAzr(;fz*S|)aYnXG zJW1Ax4)qsAig~(bKjTZ-Rprb<$pc-n zL;3e*M!>F2#EM{|f|1+C2tC&ehV;p7_c#8sLa=Mw1ZWKij$M%+kUJe6I!OFs=3yW( z@W&hiTaZw*Qvc(k;Ge-$|NElg?0$-Z+H9I%=T+R z@TmuO|8ErppL$^THwD2rcGX`O1fMy=qCq{d1Iy))g5dKaaPI$S1;M8t*!{mz5PV{@ zKJ~zt^$)6t?*#$-*KisxlaNlx%0WJM3N7CT4u~DvNl`kGqG08Y;UCgdUqcx(53JK0 zFafRPJ=4|oQ%X}Al*morU0NOzfoD7f>w0Z-4m>U_ThuC^%y>V+(1YR>{65<8XQyq& zY?$6GdzTqEZXeI#-#Api8&rQmP^~6BYE5;|UY+|64Pmxk?GKIY1X17o39~>De)n`R zcnk(rnAfo)=<4zqB5mh3WnQ~3mQCYEXR&nv45!L_#&rfkv32YL^edh#bjD{;7xsp{ zosPadR+%&_D6omC$ef!CwL zi0!or``!Ol2M-eYn(hUR#D64@e==#}S5yDv^6IMa-8Jc>hrfp9KhDzSAIuRy9tiYE z{dKEA(D}_G@G)?IHtz3Yd`-JKf3Ked zANCvW#AghxzW_YypYqHQeD?gZ+zZ5TmmOuzSdGI}Ug^W8mj6mfMJwebf${+C~ zIOd`2xEYW~m;D!<8BQsy@phbY2q2R%0`@X|*PR3@9bu&h+~q1>S;Bw0}Mlp!=83LLf^48owM%to=6iEL)Cd! zAq6qwSX~{5kNR$%F6uQSiWY3zPcfz23y1cPQ~=%5aQ88wJ{|9&E1las^mnj@9wFpS zyDo@ajbfDdZrPBKmk1DD%XoJ@dOF?rRK}b|FK?14COhn`+!3~vA zszdh$1*3dr&@Q!CfcR(dc3Nb`t9)Jq#PBa~?TGLx81!Cu&DaB>x(!QYC6s$By1zLB0*xjJJ~Cs!G?>f?4oyiGAKuqtGz<26J4*bmP_0V zwP;5XBp(lnW`k{hl!7%r=IL_07VL{F!jcFIBXLeoFi!6?M3_KR3%MTU6_ZJJX!dvU ze!CZR<+61K1`FcA<|Cw@yU&}Yivnup7f@2~WoaINI9~~I(j*ap65m>T-y!#Axq{?RX5Ta*ghn8QSm_oVLGB8O~%5 zd`ool5A3F0W=LY`;a_zw>+lgYyA%^; z?2{1)W*5yY{_PVmtmWeGUjRQK1Jwz9W5j?W48G7em<+Ir%nh!d;dthEE#gOt2qS&4 z3I95%{1~pjA$3HUpE6RHEOhm{+XEPPM)SFzT0JMu3l1W-wm$NAnB}FJ{^HafVdN1% z=Y*p0Sl@sZ5`(N6@U`bQjIcslrfv)kamg1R>yTB38+ysW&=wJgP%e$b8QS{yV{t_q zA>yK)D!nuAluRWPKg2MSpJ_;6^(XTXBqQe9ed_dN78V932keMEp@i-epxZA!G_$Gc zbNaXR*WrcTuvfX02vT=b0>AAUZJ?SK0Cm|Qao28I@SwgmU3Ge<*M>XFMn=Ar9A)>0 z2a@Q^Iq>ij*tH92h@m=xwza;CfhBRU&WEdd@~8)y=S4y)Ohi#&f0ysfOIyYqj(taE zXhJ>480g=Pta*2_(CMY~zOK&sXr|jTN*M!hlRo36=+-yK4#msGAjSu@LttP%Uk+@W zR?;b)EaegR_;Btgt-&9W0@k&PjzgU>{dc1zT@1;)$e!7iBLrvPTUwBr1VIZB8Ayj> zr6{Jv&q+3z7DMb z65ty;kAA_a;TeD;c{Ko1iQEtObWfaE7fyt}eKc7Y#-k{tnPHQD3Le}oiH+rMY-84E zn$KMoA!_+uu*UiXWTeS59qutFF%zV3bvsJp;{H{cGkwOCe+a$(SJC13rsiJ+*m7S6 z-=Aq$PE@tjJ$%~}z*B>xYK2GRL{?~w4b5+yQf)T3e;OHfAIOY>5`Vy1fUOoUzXV1G z{(MIjB$?sV2oggyI1`JIGyeDXoXvZ|*Vn<^kNY5G-~mH_Qg7KG$Q$VJ0^tVIt8yQ` zerqUhzrFU$)%@{de!3U`r&sgyVnoR5gRDJKX##1>QApGFFA4z*=`2BN3d2JlqyoWp zWC^)|B9n6s5I7K!(HLGz%Wv~ME{E&+I&6J8U=+2FcXp$q6Y_ilfv(3IH;QY{LXzP% zTxt7t!oiUbV)LvP_ca~yw{&ml2L`Zqoi--(yL*6!&`BNygftU$y|Z=RX#T(|`++K} zxcWK`uQk^nYr7W)S)os*zvYFr2p zVi>j0E_q1YNrV<#MOZG|Rd~(8;D<{suW(7n-WiY>h;GwnuoWfu@xa2|;<1G(ZF!E5 z_Y9Ns3>b}sx(q|5U!Qo6NWlvbb~3PS)3z)8_Z+i4;R}Yk^RvplGaPBBJsMscxdV8V zAltXUUnt)QmA@^LzpL9X?#JG{9e=dw9b1;7O%qyBM-8z(Iy%jl-1&2>ukn46 zfbH@diRr&tB$u3Vek>C1$0GT|G4-ds_6j)uZ%SI`dwMe@IsfssoaO#FFo6C52P1lD z#{wVhb7deDwnO(z1i*ztIr<+~S|gxzGR{wUd#oy44Y797rQ))p~!OS}0sXu%I9BHhYAccpT`;wZAM+qgIK4rp_>e-UoXP&Fk|*`luCm z&P;mH%k-f9Wp=*4XcOn!%pEM2jWSUtHXr2;J7K4Dq$Ofnw$9TEuD4Uy*|*nxj^%QG zIi{8INfoy} zWg~~z`DN9I$|>HLLp#GG4m~8soisOZcbm&ua zy~*T?mCCu^Q*QvDFnH45t-kc%df+T&rJs|R;s@8aFpWEeHgDr_M~Q}%V8;p0DSyFZ z0C%QoceG2Lt|;Ch-!5$vmkaEsFn2(4iP)aX&4Av=#=PBZZ!8*|1;!m_#@D@g@dkLx zC=asq0PcUvA#xLYb4z#^jxXy0>2BhIGtc}RigC{xZ3qqoNmT_v@U23$tp&LM{4v~a9PloHcFNAF*q^IzG%j$gAm<=uG$d)-je&vreW6oqcX zp>^@+O1wW8SpR9`dp_vaf^LQSALNzh?}hA}G)E zY^OT%iLl|f^^ENM+oIBi>S1~GOo-D3qh4Cx?ea3gaTi)s-C~L8y{E*MIo-e#+8zNU zd%m&P)jAwGoCMVxN?m&XIcW+s+s}&kx-PcTN6+fCv}aNW5)u{0_b^JM_Rdo^;wr zd&T_aHuDE`qh+E_JBfNpLEh6h5B$cH*n8`ZI3DFH@c_i8r+z56Hu1vWYKO+n0_ZC( zg#WuHYqycu^?XD}G?oIQ0rRJ`*NB^U)6w!k;b3Ow^w%jPyz+E`xC{U;@egm=bmAQ* z@c%|v3TYAPm35}^t=7tYSFb6YSgw#1*5pCmpIZDrYuN?vTY_#1N>jG`YZ=O#&z*Vm z{1LhaL0w?F{X$PyUVl~@0qZjK#zBgARx$TVGpd;b$sui>c;avZCo#j>2}2x~6C8-A zr%U7X^r(9X6?6N`dQ|XNN1&S(HR%ho-xG1kp4DF5m52T>$LW$~3g6Uq-mi&~f43W- zK_7Ky!k;`E!$_0__0;y%KA72B`lGdnIrzWy#`WL!zOUq|w|4#}DTBT56BY&8W%3w! zASuJ$Jn>{0h!?QOxnQ2T0E8pU%mc80JZ8DrjQw+0=1YJq7x9nH(Epwx`3=y>8BiyE zYNhYd44>{A1h{@^ke}Byp883!`-+bJkUKQ^RRCJ(8^Lb<%(hM7OOho_+P}MZOY~v= zGXECggpS1=?|x!ZzeIA2rdjUQ+JPm}`l??cM+E}2KT*;DwtU@!$*qYqcOGZinzXx> zlks+V^at41I1@5th5>x=SgT&H(<{Dn{8-#w-mh-QEK2FMxr@LdUt(v4Rz)T@l7EvX zfS6@USe+_HOixUCffiV%MDKUBOK4=?7h-=)7Hq9Dkz*0y*@7I2`_*Fji@h{ z{c3Ul#PX)Ra_{O0FdwU48$EvG@rv|7wfcNB_|XK zZOaY)O!e&h75uCX#-@yw+y|AY6C<2>NGY$R1NA9iUx<5%plKR}U3Ol#@gk%3^=Okj z=jfW`x#BS7WoYhjuEBANv;-609-3wB@dz8DORCm?RlbTZU6FpMQUCFO{vrIC=;ZH~ z&L#X5ve?hiHbYJDeybF(R4&|6<*rHfe)!y<%x|Hy`N!q+(V95!#^=Bg{kqv8062sb z9u`$eli+;jg6`zwHv=o!R|zToIPq;v@O{~6eDQoc{2>1#!cadEtlzWN;E}yTW-(aN z0rkY0-x|>yaLYFy8qwc@=)Wx=m@}H7?AK=Lo10DH*f#*f-7&zQATeZ};J%a}s?LYu zuD<3UiOUfPrG5xqEK4X23oWwU&+67<;2YxQzhTzUEQvU^wsN9gOy(8cHMB9eR{(p` zFZ^(D#b5%+%vSIs1R_dTIfO?`?WVw6kl~Xr;YkUP<95C@Q(@W@aUh9doA!3f}ACHPYoJhIGn>Br)*3RtEV1Atk-qGiL3NWssRci+k53 zz@Sy1b%@39z`T1EOPYF;!NUlV?z!&>FXhJ<AcfdvIkT;OfojPeGlnTQ5Gm z0FVVVgsq9BBlc{XYS*6G338w{{zW~&$lZZ_VT5_~nC2X^aVkon7$}lz8F>rPLA`(Y zWo8MS6u)KTz})m~+pk6mu~vBZ<^$08J*^j|@oPs=%3?yzDelk8C41b_7q2@MH?-c# z0aZ$LhRimjooDF6nLO`hAjn(av1i+do1-20b90BxFf6}$_Ik<1a?~M&{9$^R1H`B% z-YSHh4+#t9>7H9x5a42Lx3XAJz7-nKZ7sx)$MG2#ZFp3z9I!nUVn>HZtDn;6lb_aR zQtaxbJb<4!T}z7=F*3LS0|>+&2y4wl zs>>d%?s@t$FSi~%9;xB<@`<1TXjudVn`iy;vV}o!qi>zP3%2&YS9f@}B!bnB{BB-| zx-luUco#J&HT8+}PbK!y<+9gCa@H|{m|5D6y)9^hyyD7NT)p}nx;w{Ex+8Afz(4}H z5G8stcJdVf(^nQdOGi4q5fX-zAV*~d;jm>ua(%>L`eq(C016kuaK7)|>ONj@y%Yze zLC{Az?fHuJ?V{Jt(~g{9LCY);xnUvP&h_5NOXZ@XOWF4qS|h6N9IoX|9#BCuG0T%oeoafi?Ncs0ed zYv-3btj!1_T(M(!PSKl>K~72fqUNqB+$eehIP>X5Am3|eIAGfe8SXO(AsJrgP0l9m zM>-F{ygA*8Z7wy(^5TA{v>L>r2)X(i< z$&cP=((MF(d&~!&_vk*4d|KZP$LET^pIKKOZLEg_IT%Y=MxK$Q;-$waLUyZu9wJw1 zF2^x~yhO{fy+TfLFt)YA?Qhc2|A1ipqdesQ`~z|v{@oNAUjMs&oIQL7$^K8k`IX7^ zGMym(1;NX+C9Ln?%ikPQX)I%wzJa=-|2ljTk9Q!IvBP^Z{^+{?=yO7n)Q5h&@Ec=( z+pin@3@ZExm!Hu$c<~=T2dYW<9CU1de)4-$3Ur`04_(?%sS5xluzYJ9SW3U)louE} zAMXFxuk8L+xyS84E!^4nKWi*IU%{bi5lda$IX;)%n;LIs5i>_?tVT$MnTz{wt!}{d zkBC>9vMw+{_Vw*aK zj-E~gyQqY3UCL*c1M%V<0{H*R9P$Ke9}V25H$2H&;!vq;o}-J_+C~@MkW&fqfqzx4 z3O0zOKVd-TFJWRH2pf- z{p13{(Jp{!+9|-75~R!DJx(9{bMW?YcZ1qggAVOaj1sgrRTBdb3^ZB4P@|xs`hGt{ zos@rZ_y2G||Mpt`uU7-)qn{VE``=#8=VE?1nRkE0q5rv)`Hb_1qKf0~nUMYIpn~qO zdjNHfp_&vw?>%&78+oCpP}`-*)ZoyKQQr@*Ar^ISO?aQe&CTM=KE8X0aZggM{+?I` z&|i<%X(vKjQ}wM1u}@E4<(=kpdFnzXLU&8~7J>3$X#4A}H*dg30chTSqs{^MdF;Mr zO9M2gZRr*XV@^Za*DD%(dXrOnHhKdoN zQO1qkb8dHa^9|Bh?&OM2kk2#53x`;)c^yH+d*8)r2N^`2b}}anX)ZANKl{4fNnPFg z*Co4@zdD(Jfen3i0{*}nf?>aiu#5v~iC=LHzdSEV1?uCP4;2&uJr->RuWh2F!Upl! z?*f5OE*Q6ibp?C>zBOJ^bOwwx0@1w1i`X}ntAv2GmimF7?at4#Mp&j0T3qbyi3enp zR@GgG$y(%9{w>XpD*xCS1;3rQnBJOlzQipiE4dz?Jj*x>{+_gW6wY|$GK$`6BgRp+ftG*8%PH9TieHbmb& z%6BmgLVra>8uH?Zlc>(TcTd*MwDL!Qhf69Ph_Ks1T`VgHx5`Wgod3<9R)`Wg%clsq1jjuJr4r2^dEnxEk#qcefN5KYs15V|ae=QDuBc(C@)c zkD{UCM13((UujvI2z&Dkdp={{1qM*5+1)CMDJ|U+7boJ`(+$aIGcmXW-=x7r(Q zJ6)JMKzYcinjZVzX*~G|J%?&?B(Amig5C5`o;}kN0bpQzbx)Rc5<}z(uu$#cdd??w zS=pe%2ML^5^9bJ-bH944FT1&y$GnjO6f;tkJ7 z0AjQh815A7b_b&NJ=%rzab7#H@?Sf&P@iR>C$X&@;1L)+Do`TK`AI_AThc*7mg$Ya zDtag)E?ZAl+2-Qx5k!-Mrm{*doweJ;DO+LBL_b%ATPIBO3jIeM?GLLr>f=32X~z?fFk_k`Cl!+Z?ILQf1h>@HFs%irZpa79h$5Qz(CH60YsZrFlU_ zkfrHyY4q{yw)IvA?4hLxHtDg+hRv1TePvmXCw{4=C0NIM+O+vXns*5-Iy>t?uu>%D z+JF>QVGef}w5Y~814XXz0F!BP&ggju^h`a?#s{x zR=o_okTs9gmmr?RE;ZIYao+&pM9d+~@MO8&Z~ zHd!n9UT)s4Q zDrSwoe8HpeFwPnw!Gwk?&9U`?;~XK4M(xl_e$IwHY$H&H0zv|{1Gk=8jIItMY9QJ2-1YO_J&nSc8T)3hJ#>JXfSWYv zME`2J@exyJPRV!vu7e@$p(&CTw1faD(i}xIDCS%CGUG+#wfN1xp(;-W^*0 zWK0Var0pG^1zQBAyH_TN(9s?@qyS!dE*sCV{5Y$K(+&DuNi&rgU7l-sN{= zeeA(mMJPw*b$E-Nok3di3lScZxJu_3>9cdYPrwTO+)_F-PYmKcsL1Vb54>%|dAK}k zJ3E{BO73Xg&*kWqfeWik=KQ#*d{dkQ|I7g{tnEDgzCUVyrm&B`9>R-!YT1h`PQWO* z2hthZL8t8`$l(c+w6q;GVodv11_anK7f>z~jiONtlX6Y#P4(j(*?V1daSGNDz40KR zh)MjJ8TkT6YrdRloUk%kzeosf!f#V0;kyZ$tpySpF*eI~Mi6-kt?k= z%$-J=q#f@H5E7$u|!HBuF zR7dh+-A$tcAP8_;6`Y5>l`v;;hT~M6I6uC~d=TFCuVlUdEPlggDNtfIXMBA6qK+bb zyW>0f!Bt96zat^%>l@l4)n_V6k9-Eu(~}DVn#)r_o?6~Uc<v&IiUa(_?0^~f{ zKX0DwE1|o?FbJO9$EGU5HuNC8|7=nG(iHt4Es9ylA&RGs<2Otb{_ige@GgBL=KQt* z{=Zoi#@{UpdrQPy9l|`mDrjVurQ;?mdaDS72Pea~s^e{FK7a0ru6G`Bca;*$8Jv>)t3_cy%2)Vv-aq|vbo-hd{N3`n z0MrO({XflSI>b7rG9B$7qh53>A>ZfwYF6<|y?bB7R+8209G|_2K?>Udi*OUjp4H4MN38$Oi7qiG;#khOwzc#wg392MkA?_5t0wD*~?U;F37t zL3`ULLEkFxpoOL)%+GXYf+O-&H`D3+sHh^y717HkLU??x?>n+7?+TUY>GhN&L|tC* z1f&Dbs)Pw35AZrm&lAXZKSs>cJe^`c;%x=eySJq&1ds$MoyxtGI3(fCbvu(4(KmSP zZC)>9F4Ttn>OJ1hn6(`0vFFYAb)3oWf?Cf*be%ci1Yrg39!m>(NY^JM0D@^mXh8vt z@;er~XxF23Q}aVNho+SwCnKcIDjzoCXv#OydPBV7nMyCma|#S4AX^V(>Ui?;U~*8K zE2IZe*=SO+F!$3?ML4(RHlzc}MKK6ZYW|)Pv3yEH;mRSeK7)h2(29z581{km=Ka3B zwM|mV;%i}T7JYirO|bxvH}2SYif0F65RNk~IH&XJ&SDBZv1_5aKTr?;23CmQN${f5 zliZbTi@Qien_mo0_Z=uM1!$|0Kip>=AY zbW1#@+-fL1`10Og?3^BT9jxiGGnS6I>SkH{;nhHkKYhh4u0g@jW*q0M`oKbUN zb(e71)hbH>(nJ|#f=@b`vTg13(_PdCdp+u6-||9nf6W6hsiIQHk!az9l7f485X z@y~3uI{%oB8mU(43SoPPeWS1Udx)aLwfxtTSNd%>%0qJEKSiQ&^wP{T_T{_+ap|{A zIZK+Q?>26JDR~tP5UzW5Bwn_D%tXKN2-c4zw?F2~*$fGI_xXc(;B4(1;o<8w1N#sj ztlyDO5M=p7OAEvB23U#4@Pq4U;@Atm;pgxaCbPlkYCq|A?im`=Rh8(LI-`4$-H123zqe?x2n`Cux&Bii()*1Pz#ZZb+gQ} zU}M--@&NtB(#yP}hO3a#2xupxy@8nuh1M|-5#ZEEc9`(r;utR)^JV1yLbd-SwTm~C zhXgG*x`ruJlvt!3&kEbM3qAblfszHp+wx6(m9mns2Pg1Jm}&4FVL$IF$Xl6>QYztL{-sg=`a8&>D5~ z>7t}|>qErUD#cx~$08_e;OX69CU=OeAz
buperM*IN4WY2m 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� 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

w?* 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

VctV8+1a!Mui4td*e(O8_su3UkD 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�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

-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
Yr=2sZ+M)BnYEj=G_b6V(h^hG$ka6< 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
L>4S)Q|TDIYjA5_aW{PE*y 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 @rly^#N?s>MC_#(CvGo3QGPfveb#@X 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 + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var ?string */ + private $vendorDir; + + // PSR-4 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array[] + * @psalm-var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * @var array[] + * @psalm-var array> + */ + private $prefixesPsr0 = array(); + /** + * @var array[] + * @psalm-var array + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var string[] + * @psalm-var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var bool[] + * @psalm-var array + */ + private $missingClasses = array(); + + /** @var ?string */ + private $apcuPrefix; + + /** + * @var self[] + */ + private static $registeredLoaders = array(); + + /** + * @param ?string $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + } + + /** + * @return string[] + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array[] + * @psalm-return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return array[] + * @psalm-return array + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return string[] Array of classname => path + * @psalm-return array + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param string[] $classMap Class to filename map + * @psalm-param array $classMap + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param string[]|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param string[]|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + * + * @return void + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders indexed by their corresponding vendor directories. + * + * @return self[] + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + * @private + */ +function includeFile($file) +{ + include $file; +} diff --git a/Sources/API/vendor/composer/InstalledVersions.php b/Sources/API/vendor/composer/InstalledVersions.php new file mode 100644 index 0000000..c6b54af --- /dev/null +++ b/Sources/API/vendor/composer/InstalledVersions.php @@ -0,0 +1,352 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints($constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = require __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + $installed[] = self::$installed; + + return $installed; + } +} diff --git a/Sources/API/vendor/composer/LICENSE b/Sources/API/vendor/composer/LICENSE new file mode 100644 index 0000000..f27399a --- /dev/null +++ b/Sources/API/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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 NONINFRINGEMENT. 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. + diff --git a/Sources/API/vendor/composer/autoload_classmap.php b/Sources/API/vendor/composer/autoload_classmap.php new file mode 100644 index 0000000..6d812c2 --- /dev/null +++ b/Sources/API/vendor/composer/autoload_classmap.php @@ -0,0 +1,11 @@ + $vendorDir . '/altorouter/altorouter/AltoRouter.php', + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/Sources/API/vendor/composer/autoload_namespaces.php b/Sources/API/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..15a2ff3 --- /dev/null +++ b/Sources/API/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ +register(true); + + return $loader; + } +} diff --git a/Sources/API/vendor/composer/autoload_static.php b/Sources/API/vendor/composer/autoload_static.php new file mode 100644 index 0000000..e084f89 --- /dev/null +++ b/Sources/API/vendor/composer/autoload_static.php @@ -0,0 +1,21 @@ + __DIR__ . '/..' . '/altorouter/altorouter/AltoRouter.php', + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->classMap = ComposerStaticInit2724f76bdbf961b3280ed7526287b513::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/Sources/API/vendor/composer/installed.json b/Sources/API/vendor/composer/installed.json new file mode 100644 index 0000000..d4c5dd8 --- /dev/null +++ b/Sources/API/vendor/composer/installed.json @@ -0,0 +1,64 @@ +{ + "packages": [ + { + "name": "altorouter/altorouter", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dannyvankooten/AltoRouter.git", + "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dannyvankooten/AltoRouter/zipball/09d9d946c546bae6d22a7654cdb3b825ffda54b4", + "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "time": "2014-04-16T09:44:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "classmap": [ + "AltoRouter.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Danny van Kooten", + "email": "dannyvankooten@gmail.com", + "homepage": "http://dannyvankooten.com/" + }, + { + "name": "Koen Punt", + "homepage": "https://github.com/koenpunt" + }, + { + "name": "niahoo", + "homepage": "https://github.com/niahoo" + } + ], + "description": "A lightning fast router for PHP", + "homepage": "https://github.com/dannyvankooten/AltoRouter", + "keywords": [ + "lightweight", + "router", + "routing" + ], + "support": { + "issues": "https://github.com/dannyvankooten/AltoRouter/issues", + "source": "https://github.com/dannyvankooten/AltoRouter/tree/master" + }, + "install-path": "../altorouter/altorouter" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/Sources/API/vendor/composer/installed.php b/Sources/API/vendor/composer/installed.php new file mode 100644 index 0000000..c0e230c --- /dev/null +++ b/Sources/API/vendor/composer/installed.php @@ -0,0 +1,32 @@ + array( + 'name' => '__root__', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '451f8aec79f58d67eb8a9d6097c39c99d26f8b09', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + '__root__' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '451f8aec79f58d67eb8a9d6097c39c99d26f8b09', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'altorouter/altorouter' => array( + 'pretty_version' => 'v1.1.0', + 'version' => '1.1.0.0', + 'reference' => '09d9d946c546bae6d22a7654cdb3b825ffda54b4', + 'type' => 'library', + 'install_path' => __DIR__ . '/../altorouter/altorouter', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/Sources/API/vendor/composer/platform_check.php b/Sources/API/vendor/composer/platform_check.php new file mode 100644 index 0000000..7621d4f --- /dev/null +++ b/Sources/API/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 50300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 5.3.0". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} From ba9106a7de2521191b80bb7e2a28c4e735e2b0ac Mon Sep 17 00:00:00 2001 From: viastolfi Date: Wed, 7 Dec 2022 19:34:50 +0100 Subject: [PATCH 04/12] changement des routes --- .../api/inscrit/{readMdpFromMail.php => readFromMail.php} | 4 ++++ Sources/API/index.php | 6 +++--- Sources/API/models/Inscrit.php | 4 ++++ 3 files changed, 11 insertions(+), 3 deletions(-) rename Sources/API/api/inscrit/{readMdpFromMail.php => readFromMail.php} (86%) diff --git a/Sources/API/api/inscrit/readMdpFromMail.php b/Sources/API/api/inscrit/readFromMail.php similarity index 86% rename from Sources/API/api/inscrit/readMdpFromMail.php rename to Sources/API/api/inscrit/readFromMail.php index 949f139..505ef65 100644 --- a/Sources/API/api/inscrit/readMdpFromMail.php +++ b/Sources/API/api/inscrit/readFromMail.php @@ -19,6 +19,10 @@ extract($row); $inscrit_item = array( + 'id' => $id, + 'nom' => $nom, + 'prenom' => $prenom, + 'mail' => $mail, 'mdp' => $mdp ); array_push($inscrit_array, $inscrit_item); diff --git a/Sources/API/index.php b/Sources/API/index.php index a42837d..72a2e1e 100644 --- a/Sources/API/index.php +++ b/Sources/API/index.php @@ -7,12 +7,12 @@ $router->map( 'GET', '/', function(){ echo 'Hello World'; }); -$router->map('GET','/Inscrit/read', function(){ +$router->map('GET','/Inscrit', function(){ require(__DIR__.'/api/inscrit/read.php'); }); -$router->map('GET','/Inscrit/read/mailToMdp/[*:mail]', function($mail){ - require(__DIR__.'/api/inscrit/readMdpFromMail.php'); +$router->map('GET','/Inscrit/[*:mail]', function($mail){ + require(__DIR__.'/api/inscrit/readFromMail.php'); }); $match = $router->match(); diff --git a/Sources/API/models/Inscrit.php b/Sources/API/models/Inscrit.php index 02698ef..d3571be 100644 --- a/Sources/API/models/Inscrit.php +++ b/Sources/API/models/Inscrit.php @@ -33,6 +33,10 @@ public function readMdpFromMail($mail){ $query = 'SELECT + i.id as id, + i.nom as nom, + i.prenom as prenom, + i.mail as mail, i.mdp as mdp FROM '.$this->table.' i From 7167670b929c4f3fec015404893ade05128b1ea4 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Fri, 9 Dec 2022 14:02:19 +0100 Subject: [PATCH 05/12] ajout de routes --- Sources/API/api/inscrit/add.php | 3 +++ Sources/API/api/inscrit/read.php | 2 +- Sources/API/{models => gateways}/Inscrit.php | 0 Sources/API/index.php | 6 +++++- 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 Sources/API/api/inscrit/add.php rename Sources/API/{models => gateways}/Inscrit.php (100%) diff --git a/Sources/API/api/inscrit/add.php b/Sources/API/api/inscrit/add.php new file mode 100644 index 0000000..b637268 --- /dev/null +++ b/Sources/API/api/inscrit/add.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/Sources/API/api/inscrit/read.php b/Sources/API/api/inscrit/read.php index b086c1e..936cf78 100644 --- a/Sources/API/api/inscrit/read.php +++ b/Sources/API/api/inscrit/read.php @@ -3,7 +3,7 @@ header('Content-Type: application/json'); include_once (__DIR__.'/../../config/Database.php'); - include_once (__DIR__.'/../../models/Inscrit.php'); + include_once (__DIR__.'/../../gateways/Inscrit.php'); $database = new Database(); $db = $database->connect(); diff --git a/Sources/API/models/Inscrit.php b/Sources/API/gateways/Inscrit.php similarity index 100% rename from Sources/API/models/Inscrit.php rename to Sources/API/gateways/Inscrit.php diff --git a/Sources/API/index.php b/Sources/API/index.php index 72a2e1e..c35daea 100644 --- a/Sources/API/index.php +++ b/Sources/API/index.php @@ -7,7 +7,7 @@ $router->map( 'GET', '/', function(){ echo 'Hello World'; }); -$router->map('GET','/Inscrit', function(){ +$router->map('GET|POST','/Inscrit', function(){ require(__DIR__.'/api/inscrit/read.php'); }); @@ -15,6 +15,10 @@ $router->map('GET','/Inscrit/[*:mail]', function($mail){ require(__DIR__.'/api/inscrit/readFromMail.php'); }); +$router->match('POST|GET','/Inscrit/add', function(){ + require(__DIR__.'/api/Inscrit/add.php'); +}); + $match = $router->match(); if($match!=null) { From f1124e311d8a58cce80a9df3658168d1ce11c722 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Fri, 9 Dec 2022 15:24:31 +0100 Subject: [PATCH 06/12] =?UTF-8?q?modification=20de=20l'architecture=20de?= =?UTF-8?q?=20l'API=20afin=20qu'elle=20soit=20de=20type=20aplication.=20ut?= =?UTF-8?q?ilisation=20du=20framework=20slim=20php=20et=20ajout=20d'une=20?= =?UTF-8?q?premi=C3=A8re=20route?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/API/.htaccess | 3 - Sources/API/api/inscrit/add.php | 3 - Sources/API/api/inscrit/read.php | 35 - Sources/API/api/inscrit/readFromMail.php | 34 - Sources/API/composer.json | 6 + Sources/API/composer.lock | 774 +++++++++++++++++ Sources/API/gateways/Inscrit.php | 53 -- Sources/API/index.php | 34 - Sources/API/public/index.php | 20 + Sources/API/routes/Inscrit.php | 60 ++ .../vendor/altorouter/altorouter/.travis.yml | 7 - .../altorouter/altorouter/AltoRouter.php | 270 ------ .../altorouter/altorouter/AltoRouterTest.php | 423 ---------- .../vendor/altorouter/altorouter/README.md | 92 --- .../altorouter/altorouter/composer.json | 28 - .../altorouter/examples/basic/.htaccess | 3 - .../altorouter/examples/basic/index.php | 27 - Sources/API/vendor/autoload.php | 20 +- Sources/API/vendor/composer.json | 5 - Sources/API/vendor/composer.lock | 74 -- Sources/API/vendor/composer.phar | Bin 2810737 -> 0 bytes .../API/vendor/composer/InstalledVersions.php | 16 +- Sources/API/vendor/composer/LICENSE | 2 - .../API/vendor/composer/autoload_classmap.php | 8 +- .../API/vendor/composer/autoload_files.php | 12 + .../vendor/composer/autoload_namespaces.php | 2 +- Sources/API/vendor/composer/autoload_psr4.php | 11 +- Sources/API/vendor/composer/autoload_real.php | 54 +- .../API/vendor/composer/autoload_static.php | 80 +- Sources/API/vendor/composer/installed.json | 781 +++++++++++++++++- Sources/API/vendor/composer/installed.php | 127 ++- .../API/vendor/composer/platform_check.php | 4 +- .../vendor/fig/http-message-util/.gitignore | 1 + .../vendor/fig/http-message-util/CHANGELOG.md | 147 ++++ .../API/vendor/fig/http-message-util/LICENSE | 19 + .../vendor/fig/http-message-util/README.md | 17 + .../fig/http-message-util/composer.json | 28 + .../src/RequestMethodInterface.php | 34 + .../src/StatusCodeInterface.php | 107 +++ .../API/vendor/nikic/fast-route/.gitignore | 5 + Sources/API/vendor/nikic/fast-route/.hhconfig | 1 + .../API/vendor/nikic/fast-route/.travis.yml | 20 + .../API/vendor/nikic/fast-route/FastRoute.hhi | 126 +++ Sources/API/vendor/nikic/fast-route/LICENSE | 31 + Sources/API/vendor/nikic/fast-route/README.md | 313 +++++++ .../API/vendor/nikic/fast-route/composer.json | 24 + .../API/vendor/nikic/fast-route/phpunit.xml | 24 + Sources/API/vendor/nikic/fast-route/psalm.xml | 28 + .../fast-route/src/BadRouteException.php | 7 + .../nikic/fast-route/src/DataGenerator.php | 26 + .../src/DataGenerator/CharCountBased.php | 31 + .../src/DataGenerator/GroupCountBased.php | 30 + .../src/DataGenerator/GroupPosBased.php | 27 + .../src/DataGenerator/MarkBased.php | 27 + .../src/DataGenerator/RegexBasedAbstract.php | 186 +++++ .../nikic/fast-route/src/Dispatcher.php | 26 + .../src/Dispatcher/CharCountBased.php | 31 + .../src/Dispatcher/GroupCountBased.php | 31 + .../src/Dispatcher/GroupPosBased.php | 33 + .../fast-route/src/Dispatcher/MarkBased.php | 31 + .../src/Dispatcher/RegexBasedAbstract.php | 88 ++ .../API/vendor/nikic/fast-route/src/Route.php | 47 ++ .../nikic/fast-route/src/RouteCollector.php | 152 ++++ .../nikic/fast-route/src/RouteParser.php | 37 + .../nikic/fast-route/src/RouteParser/Std.php | 87 ++ .../vendor/nikic/fast-route/src/bootstrap.php | 12 + .../vendor/nikic/fast-route/src/functions.php | 74 ++ .../test/Dispatcher/CharCountBasedTest.php | 16 + .../test/Dispatcher/DispatcherTest.php | 581 +++++++++++++ .../test/Dispatcher/GroupCountBasedTest.php | 16 + .../test/Dispatcher/GroupPosBasedTest.php | 16 + .../test/Dispatcher/MarkBasedTest.php | 24 + .../HackTypechecker/HackTypecheckerTest.php | 44 + .../HackTypechecker/fixtures/all_options.php | 29 + .../fixtures/empty_options.php | 11 + .../HackTypechecker/fixtures/no_options.php | 11 + .../fast-route/test/RouteCollectorTest.php | 108 +++ .../fast-route/test/RouteParser/StdTest.php | 154 ++++ .../nikic/fast-route/test/bootstrap.php | 11 + Sources/API/vendor/psr/container/.gitignore | 3 + Sources/API/vendor/psr/container/LICENSE | 21 + Sources/API/vendor/psr/container/README.md | 13 + .../API/vendor/psr/container/composer.json | 27 + .../src/ContainerExceptionInterface.php | 12 + .../psr/container/src/ContainerInterface.php | 36 + .../src/NotFoundExceptionInterface.php | 10 + .../API/vendor/psr/http-factory/.gitignore | 2 + .../vendor/psr/http-factory/.pullapprove.yml | 7 + Sources/API/vendor/psr/http-factory/LICENSE | 21 + Sources/API/vendor/psr/http-factory/README.md | 10 + .../API/vendor/psr/http-factory/composer.json | 35 + .../src/RequestFactoryInterface.php | 18 + .../src/ResponseFactoryInterface.php | 18 + .../src/ServerRequestFactoryInterface.php | 24 + .../src/StreamFactoryInterface.php | 45 + .../src/UploadedFileFactoryInterface.php | 34 + .../http-factory/src/UriFactoryInterface.php | 17 + .../API/vendor/psr/http-message/CHANGELOG.md | 36 + Sources/API/vendor/psr/http-message/LICENSE | 19 + Sources/API/vendor/psr/http-message/README.md | 13 + .../API/vendor/psr/http-message/composer.json | 26 + .../psr/http-message/src/MessageInterface.php | 187 +++++ .../psr/http-message/src/RequestInterface.php | 129 +++ .../http-message/src/ResponseInterface.php | 68 ++ .../src/ServerRequestInterface.php | 261 ++++++ .../psr/http-message/src/StreamInterface.php | 158 ++++ .../src/UploadedFileInterface.php | 123 +++ .../psr/http-message/src/UriInterface.php | 323 ++++++++ .../vendor/psr/http-server-handler/LICENSE | 21 + .../vendor/psr/http-server-handler/README.md | 6 + .../psr/http-server-handler/composer.json | 36 + .../src/RequestHandlerInterface.php | 22 + .../vendor/psr/http-server-middleware/LICENSE | 21 + .../psr/http-server-middleware/README.md | 6 + .../psr/http-server-middleware/composer.json | 36 + .../src/MiddlewareInterface.php | 25 + .../vendor/ralouphie/getallheaders/LICENSE | 21 + .../vendor/ralouphie/getallheaders/README.md | 27 + .../ralouphie/getallheaders/composer.json | 26 + .../getallheaders/src/getallheaders.php | 46 ++ Sources/API/vendor/slim/psr7/LICENSE.md | 22 + Sources/API/vendor/slim/psr7/MAINTAINERS.md | 17 + Sources/API/vendor/slim/psr7/composer.json | 76 ++ Sources/API/vendor/slim/psr7/src/Cookies.php | 218 +++++ .../API/vendor/slim/psr7/src/Environment.php | 55 ++ .../slim/psr7/src/Factory/RequestFactory.php | 59 ++ .../slim/psr7/src/Factory/ResponseFactory.php | 35 + .../psr7/src/Factory/ServerRequestFactory.php | 110 +++ .../slim/psr7/src/Factory/StreamFactory.php | 95 +++ .../psr7/src/Factory/UploadedFileFactory.php | 47 ++ .../slim/psr7/src/Factory/UriFactory.php | 113 +++ Sources/API/vendor/slim/psr7/src/Header.php | 96 +++ Sources/API/vendor/slim/psr7/src/Headers.php | 318 +++++++ .../psr7/src/Interfaces/HeadersInterface.php | 90 ++ Sources/API/vendor/slim/psr7/src/Message.php | 185 +++++ .../vendor/slim/psr7/src/NonBufferedBody.php | 153 ++++ Sources/API/vendor/slim/psr7/src/Request.php | 384 +++++++++ Sources/API/vendor/slim/psr7/src/Response.php | 216 +++++ Sources/API/vendor/slim/psr7/src/Stream.php | 396 +++++++++ .../API/vendor/slim/psr7/src/UploadedFile.php | 279 +++++++ Sources/API/vendor/slim/psr7/src/Uri.php | 494 +++++++++++ Sources/API/vendor/slim/slim/CHANGELOG.md | 208 +++++ Sources/API/vendor/slim/slim/LICENSE.md | 19 + Sources/API/vendor/slim/slim/MAINTAINERS.md | 17 + Sources/API/vendor/slim/slim/SECURITY.md | 14 + Sources/API/vendor/slim/slim/Slim/App.php | 216 +++++ .../slim/slim/Slim/CallableResolver.php | 193 +++++ .../slim/Slim/Error/AbstractErrorRenderer.php | 46 ++ .../Error/Renderers/HtmlErrorRenderer.php | 84 ++ .../Error/Renderers/JsonErrorRenderer.php | 56 ++ .../Renderers/PlainTextErrorRenderer.php | 59 ++ .../Slim/Error/Renderers/XmlErrorRenderer.php | 54 ++ .../Exception/HttpBadRequestException.php | 28 + .../slim/Slim/Exception/HttpException.php | 64 ++ .../Slim/Exception/HttpForbiddenException.php | 27 + .../slim/Slim/Exception/HttpGoneException.php | 27 + .../HttpInternalServerErrorException.php | 27 + .../HttpMethodNotAllowedException.php | 52 ++ .../Slim/Exception/HttpNotFoundException.php | 27 + .../Exception/HttpNotImplementedException.php | 27 + .../Exception/HttpSpecializedException.php | 31 + .../Exception/HttpUnauthorizedException.php | 27 + .../slim/slim/Slim/Factory/AppFactory.php | 206 +++++ .../Slim/Factory/Psr17/GuzzlePsr17Factory.php | 19 + .../Factory/Psr17/HttpSoftPsr17Factory.php | 19 + .../Psr17/LaminasDiactorosPsr17Factory.php | 19 + .../Slim/Factory/Psr17/NyholmPsr17Factory.php | 36 + .../slim/Slim/Factory/Psr17/Psr17Factory.php | 101 +++ .../Factory/Psr17/Psr17FactoryProvider.php | 53 ++ .../Factory/Psr17/ServerRequestCreator.php | 44 + .../Factory/Psr17/SlimHttpPsr17Factory.php | 39 + .../Psr17/SlimHttpServerRequestCreator.php | 56 ++ .../Slim/Factory/Psr17/SlimPsr17Factory.php | 19 + .../Factory/ServerRequestCreatorFactory.php | 87 ++ .../slim/slim/Slim/Handlers/ErrorHandler.php | 308 +++++++ .../Handlers/Strategies/RequestHandler.php | 48 ++ .../Handlers/Strategies/RequestResponse.php | 40 + .../Strategies/RequestResponseArgs.php | 38 + .../Strategies/RequestResponseNamedArgs.php | 44 + .../AdvancedCallableResolverInterface.php | 28 + .../Interfaces/CallableResolverInterface.php | 21 + .../Slim/Interfaces/DispatcherInterface.php | 28 + .../Slim/Interfaces/ErrorHandlerInterface.php | 26 + .../Interfaces/ErrorRendererInterface.php | 18 + .../InvocationStrategyInterface.php | 37 + .../MiddlewareDispatcherInterface.php | 42 + .../Slim/Interfaces/Psr17FactoryInterface.php | 48 ++ .../Psr17FactoryProviderInterface.php | 26 + ...uestHandlerInvocationStrategyInterface.php | 15 + .../Interfaces/RouteCollectorInterface.php | 102 +++ .../RouteCollectorProxyInterface.php | 118 +++ .../Slim/Interfaces/RouteGroupInterface.php | 41 + .../slim/Slim/Interfaces/RouteInterface.php | 123 +++ .../Slim/Interfaces/RouteParserInterface.php | 52 ++ .../Interfaces/RouteResolverInterface.php | 17 + .../ServerRequestCreatorInterface.php | 18 + Sources/API/vendor/slim/slim/Slim/Logger.php | 32 + .../Slim/Middleware/BodyParsingMiddleware.php | 196 +++++ .../Middleware/ContentLengthMiddleware.php | 32 + .../slim/Slim/Middleware/ErrorMiddleware.php | 212 +++++ .../Middleware/MethodOverrideMiddleware.php | 43 + .../Middleware/OutputBufferingMiddleware.php | 74 ++ .../Slim/Middleware/RoutingMiddleware.php | 98 +++ .../slim/slim/Slim/MiddlewareDispatcher.php | 275 ++++++ .../vendor/slim/slim/Slim/ResponseEmitter.php | 136 +++ .../slim/slim/Slim/Routing/Dispatcher.php | 78 ++ .../slim/Slim/Routing/FastRouteDispatcher.php | 109 +++ .../vendor/slim/slim/Slim/Routing/Route.php | 360 ++++++++ .../slim/slim/Slim/Routing/RouteCollector.php | 280 +++++++ .../slim/Slim/Routing/RouteCollectorProxy.php | 187 +++++ .../slim/slim/Slim/Routing/RouteContext.php | 88 ++ .../slim/slim/Slim/Routing/RouteGroup.php | 104 +++ .../slim/slim/Slim/Routing/RouteParser.php | 127 +++ .../slim/slim/Slim/Routing/RouteResolver.php | 56 ++ .../slim/slim/Slim/Routing/RouteRunner.php | 70 ++ .../slim/slim/Slim/Routing/RoutingResults.php | 112 +++ Sources/API/vendor/slim/slim/composer.json | 102 +++ .../API/vendor/symfony/polyfill-php80/LICENSE | 19 + .../vendor/symfony/polyfill-php80/Php80.php | 115 +++ .../symfony/polyfill-php80/PhpToken.php | 103 +++ .../vendor/symfony/polyfill-php80/README.md | 25 + .../Resources/stubs/Attribute.php | 31 + .../Resources/stubs/PhpToken.php | 16 + .../Resources/stubs/Stringable.php | 20 + .../Resources/stubs/UnhandledMatchError.php | 16 + .../Resources/stubs/ValueError.php | 16 + .../symfony/polyfill-php80/bootstrap.php | 42 + .../symfony/polyfill-php80/composer.json | 40 + 228 files changed, 16729 insertions(+), 1168 deletions(-) delete mode 100644 Sources/API/.htaccess delete mode 100644 Sources/API/api/inscrit/add.php delete mode 100644 Sources/API/api/inscrit/read.php delete mode 100644 Sources/API/api/inscrit/readFromMail.php create mode 100644 Sources/API/composer.json create mode 100644 Sources/API/composer.lock delete mode 100644 Sources/API/gateways/Inscrit.php delete mode 100644 Sources/API/index.php create mode 100644 Sources/API/public/index.php create mode 100644 Sources/API/routes/Inscrit.php delete mode 100644 Sources/API/vendor/altorouter/altorouter/.travis.yml delete mode 100644 Sources/API/vendor/altorouter/altorouter/AltoRouter.php delete mode 100644 Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php delete mode 100644 Sources/API/vendor/altorouter/altorouter/README.md delete mode 100644 Sources/API/vendor/altorouter/altorouter/composer.json delete mode 100644 Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess delete mode 100644 Sources/API/vendor/altorouter/altorouter/examples/basic/index.php delete mode 100644 Sources/API/vendor/composer.json delete mode 100644 Sources/API/vendor/composer.lock delete mode 100755 Sources/API/vendor/composer.phar create mode 100644 Sources/API/vendor/composer/autoload_files.php create mode 100644 Sources/API/vendor/fig/http-message-util/.gitignore create mode 100644 Sources/API/vendor/fig/http-message-util/CHANGELOG.md create mode 100644 Sources/API/vendor/fig/http-message-util/LICENSE create mode 100644 Sources/API/vendor/fig/http-message-util/README.md create mode 100644 Sources/API/vendor/fig/http-message-util/composer.json create mode 100644 Sources/API/vendor/fig/http-message-util/src/RequestMethodInterface.php create mode 100644 Sources/API/vendor/fig/http-message-util/src/StatusCodeInterface.php create mode 100644 Sources/API/vendor/nikic/fast-route/.gitignore create mode 100644 Sources/API/vendor/nikic/fast-route/.hhconfig create mode 100644 Sources/API/vendor/nikic/fast-route/.travis.yml create mode 100644 Sources/API/vendor/nikic/fast-route/FastRoute.hhi create mode 100644 Sources/API/vendor/nikic/fast-route/LICENSE create mode 100644 Sources/API/vendor/nikic/fast-route/README.md create mode 100644 Sources/API/vendor/nikic/fast-route/composer.json create mode 100644 Sources/API/vendor/nikic/fast-route/phpunit.xml create mode 100644 Sources/API/vendor/nikic/fast-route/psalm.xml create mode 100644 Sources/API/vendor/nikic/fast-route/src/BadRouteException.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator/CharCountBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/Route.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/RouteCollector.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/RouteParser.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/RouteParser/Std.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/bootstrap.php create mode 100644 Sources/API/vendor/nikic/fast-route/src/functions.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/Dispatcher/CharCountBasedTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/Dispatcher/DispatcherTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/Dispatcher/GroupPosBasedTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/Dispatcher/MarkBasedTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/RouteCollectorTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/RouteParser/StdTest.php create mode 100644 Sources/API/vendor/nikic/fast-route/test/bootstrap.php create mode 100644 Sources/API/vendor/psr/container/.gitignore create mode 100644 Sources/API/vendor/psr/container/LICENSE create mode 100644 Sources/API/vendor/psr/container/README.md create mode 100644 Sources/API/vendor/psr/container/composer.json create mode 100644 Sources/API/vendor/psr/container/src/ContainerExceptionInterface.php create mode 100644 Sources/API/vendor/psr/container/src/ContainerInterface.php create mode 100644 Sources/API/vendor/psr/container/src/NotFoundExceptionInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/.gitignore create mode 100644 Sources/API/vendor/psr/http-factory/.pullapprove.yml create mode 100644 Sources/API/vendor/psr/http-factory/LICENSE create mode 100644 Sources/API/vendor/psr/http-factory/README.md create mode 100644 Sources/API/vendor/psr/http-factory/composer.json create mode 100644 Sources/API/vendor/psr/http-factory/src/RequestFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/src/ResponseFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/src/ServerRequestFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/src/StreamFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/src/UploadedFileFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-factory/src/UriFactoryInterface.php create mode 100644 Sources/API/vendor/psr/http-message/CHANGELOG.md create mode 100644 Sources/API/vendor/psr/http-message/LICENSE create mode 100644 Sources/API/vendor/psr/http-message/README.md create mode 100644 Sources/API/vendor/psr/http-message/composer.json create mode 100644 Sources/API/vendor/psr/http-message/src/MessageInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/RequestInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/ResponseInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/ServerRequestInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/StreamInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 Sources/API/vendor/psr/http-message/src/UriInterface.php create mode 100644 Sources/API/vendor/psr/http-server-handler/LICENSE create mode 100644 Sources/API/vendor/psr/http-server-handler/README.md create mode 100644 Sources/API/vendor/psr/http-server-handler/composer.json create mode 100644 Sources/API/vendor/psr/http-server-handler/src/RequestHandlerInterface.php create mode 100644 Sources/API/vendor/psr/http-server-middleware/LICENSE create mode 100644 Sources/API/vendor/psr/http-server-middleware/README.md create mode 100644 Sources/API/vendor/psr/http-server-middleware/composer.json create mode 100644 Sources/API/vendor/psr/http-server-middleware/src/MiddlewareInterface.php create mode 100644 Sources/API/vendor/ralouphie/getallheaders/LICENSE create mode 100644 Sources/API/vendor/ralouphie/getallheaders/README.md create mode 100644 Sources/API/vendor/ralouphie/getallheaders/composer.json create mode 100644 Sources/API/vendor/ralouphie/getallheaders/src/getallheaders.php create mode 100644 Sources/API/vendor/slim/psr7/LICENSE.md create mode 100644 Sources/API/vendor/slim/psr7/MAINTAINERS.md create mode 100644 Sources/API/vendor/slim/psr7/composer.json create mode 100644 Sources/API/vendor/slim/psr7/src/Cookies.php create mode 100644 Sources/API/vendor/slim/psr7/src/Environment.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/RequestFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/ResponseFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/ServerRequestFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/StreamFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/UploadedFileFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Factory/UriFactory.php create mode 100644 Sources/API/vendor/slim/psr7/src/Header.php create mode 100644 Sources/API/vendor/slim/psr7/src/Headers.php create mode 100644 Sources/API/vendor/slim/psr7/src/Interfaces/HeadersInterface.php create mode 100644 Sources/API/vendor/slim/psr7/src/Message.php create mode 100644 Sources/API/vendor/slim/psr7/src/NonBufferedBody.php create mode 100644 Sources/API/vendor/slim/psr7/src/Request.php create mode 100644 Sources/API/vendor/slim/psr7/src/Response.php create mode 100644 Sources/API/vendor/slim/psr7/src/Stream.php create mode 100644 Sources/API/vendor/slim/psr7/src/UploadedFile.php create mode 100644 Sources/API/vendor/slim/psr7/src/Uri.php create mode 100644 Sources/API/vendor/slim/slim/CHANGELOG.md create mode 100644 Sources/API/vendor/slim/slim/LICENSE.md create mode 100644 Sources/API/vendor/slim/slim/MAINTAINERS.md create mode 100644 Sources/API/vendor/slim/slim/SECURITY.md create mode 100644 Sources/API/vendor/slim/slim/Slim/App.php create mode 100644 Sources/API/vendor/slim/slim/Slim/CallableResolver.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php create mode 100755 Sources/API/vendor/slim/slim/Slim/Exception/HttpGoneException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpInternalServerErrorException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpNotImplementedException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpSpecializedException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/AppFactory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/Psr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Handlers/ErrorHandler.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/CallableResolverInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/DispatcherInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/ErrorRendererInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteCollectorInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteGroupInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Logger.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php create mode 100644 Sources/API/vendor/slim/slim/Slim/MiddlewareDispatcher.php create mode 100644 Sources/API/vendor/slim/slim/Slim/ResponseEmitter.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/Dispatcher.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/Route.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteCollector.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteContext.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteGroup.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteParser.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteResolver.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RouteRunner.php create mode 100644 Sources/API/vendor/slim/slim/Slim/Routing/RoutingResults.php create mode 100644 Sources/API/vendor/slim/slim/composer.json create mode 100644 Sources/API/vendor/symfony/polyfill-php80/LICENSE create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Php80.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/PhpToken.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/README.md create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/bootstrap.php create mode 100644 Sources/API/vendor/symfony/polyfill-php80/composer.json diff --git a/Sources/API/.htaccess b/Sources/API/.htaccess deleted file mode 100644 index 7ded04e..0000000 --- a/Sources/API/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -RewriteEngine on -RewriteCond %{REQUEST_FILENAME} !-f -RewriteRule . index.php [L] \ No newline at end of file diff --git a/Sources/API/api/inscrit/add.php b/Sources/API/api/inscrit/add.php deleted file mode 100644 index b637268..0000000 --- a/Sources/API/api/inscrit/add.php +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file diff --git a/Sources/API/api/inscrit/read.php b/Sources/API/api/inscrit/read.php deleted file mode 100644 index 936cf78..0000000 --- a/Sources/API/api/inscrit/read.php +++ /dev/null @@ -1,35 +0,0 @@ -connect(); - $inscrit = new Inscrit($db); - - $results = $inscrit->read(); - $num = $results->rowCount(); - - if($num > 0){ - $inscrit_array = array(); - - while($row = $results->fetch(PDO::FETCH_ASSOC)){ - extract($row); - - $inscrit_item = array( - 'id' => $id, - 'nom' => $nom, - 'prenom' => $prenom, - 'mail' => $mail, - 'mdp' => $mdp - ); - array_push($inscrit_array, $inscrit_item); - } - - echo json_encode($inscrit_array); - } else { - echo json_encode(array('message' => 'No Inscrit Found')); - } -?> \ No newline at end of file diff --git a/Sources/API/api/inscrit/readFromMail.php b/Sources/API/api/inscrit/readFromMail.php deleted file mode 100644 index 505ef65..0000000 --- a/Sources/API/api/inscrit/readFromMail.php +++ /dev/null @@ -1,34 +0,0 @@ -connect(); - $inscrit = new Inscrit($db); - - $results = $inscrit->readMdpFromMail($mail); - $num = $results->rowCount(); - - if($num > 0){ - $inscrit_array = array(); - - while($row = $results->fetch(PDO::FETCH_ASSOC)){ - extract($row); - - $inscrit_item = array( - 'id' => $id, - 'nom' => $nom, - 'prenom' => $prenom, - 'mail' => $mail, - 'mdp' => $mdp - ); - array_push($inscrit_array, $inscrit_item); - } - echo json_encode($inscrit_array); - } else { - echo json_encode(array('message' => 'No Inscrit with mail='.$mail)); - } -?> \ No newline at end of file diff --git a/Sources/API/composer.json b/Sources/API/composer.json new file mode 100644 index 0000000..0158a81 --- /dev/null +++ b/Sources/API/composer.json @@ -0,0 +1,6 @@ +{ + "require": { + "slim/slim": "4.*", + "slim/psr7": "^1.6" + } +} diff --git a/Sources/API/composer.lock b/Sources/API/composer.lock new file mode 100644 index 0000000..8ff62b8 --- /dev/null +++ b/Sources/API/composer.lock @@ -0,0 +1,774 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "3330638b65a325a8387769d50108b43a", + "packages": [ + { + "name": "fig/http-message-util", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-message-util/issues", + "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" + }, + "time": "2020-11-24T22:02:12+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "FastRoute\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/http-server-handler", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-handler/issues", + "source": "https://github.com/php-fig/http-server-handler/tree/master" + }, + "time": "2018-10-30T16:46:14+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/master" + }, + "time": "2018-10-30T17:12:04+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "slim/psr7", + "version": "1.6", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim-Psr7.git", + "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/3471c22c1a0d26c51c78f6aeb06489d38cf46a4d", + "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d", + "shasum": "" + }, + "require": { + "fig/http-message-util": "^1.1.5", + "php": "^7.4 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0", + "symfony/polyfill-php80": "^1.26" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.3", + "ext-json": "*", + "http-interop/http-factory-tests": "^0.9.0", + "php-http/psr7-integration-tests": "dev-master", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Slim\\Psr7\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "description": "Strict PSR-7 implementation", + "homepage": "https://www.slimframework.com", + "keywords": [ + "http", + "psr-7", + "psr7" + ], + "support": { + "issues": "https://github.com/slimphp/Slim-Psr7/issues", + "source": "https://github.com/slimphp/Slim-Psr7/tree/1.6" + }, + "time": "2022-11-05T18:50:24+00:00" + }, + { + "name": "slim/slim", + "version": "4.11.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim.git", + "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7", + "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "nikic/fast-route": "^1.3", + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.3", + "ext-simplexml": "*", + "guzzlehttp/psr7": "^2.4", + "httpsoft/http-message": "^1.0", + "httpsoft/http-server-request": "^1.0", + "laminas/laminas-diactoros": "^2.17", + "nyholm/psr7": "^1.5", + "nyholm/psr7-server": "^1.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "slim/http": "^1.2", + "slim/psr7": "^1.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." + }, + "type": "library", + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "homepage": "https://www.slimframework.com", + "keywords": [ + "api", + "framework", + "micro", + "router" + ], + "support": { + "docs": "https://www.slimframework.com/docs/v4/", + "forum": "https://discourse.slimframework.com/", + "irc": "irc://irc.freenode.net:6667/slimphp", + "issues": "https://github.com/slimphp/Slim/issues", + "rss": "https://www.slimframework.com/blog/feed.rss", + "slack": "https://slimphp.slack.com/", + "source": "https://github.com/slimphp/Slim", + "wiki": "https://github.com/slimphp/Slim/wiki" + }, + "funding": [ + { + "url": "https://opencollective.com/slimphp", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slim/slim", + "type": "tidelift" + } + ], + "time": "2022-11-06T16:33:39+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.2.0" +} diff --git a/Sources/API/gateways/Inscrit.php b/Sources/API/gateways/Inscrit.php deleted file mode 100644 index d3571be..0000000 --- a/Sources/API/gateways/Inscrit.php +++ /dev/null @@ -1,53 +0,0 @@ -conn = $db; - } - - public function read(){ - $query = 'SELECT - i.id as id, - i.nom as nom, - i.prenom as prenom, - i.mail as mail, - i.mdp as mdp - FROM - '.$this->table.' i - ORDER BY - i.id'; - - $stmt = $this->conn->prepare($query); - $stmt->execute(); - return $stmt; - } - - public function readMdpFromMail($mail){ - $query = 'SELECT - i.id as id, - i.nom as nom, - i.prenom as prenom, - i.mail as mail, - i.mdp as mdp - FROM - '.$this->table.' i - WHERE - i.mail=:mail - '; - $stmt = $this->conn->prepare($query); - $stmt->bindValue(':mail',$mail, PDO::PARAM_STR); - $stmt->execute(); - return $stmt; - } - } - -?> \ No newline at end of file diff --git a/Sources/API/index.php b/Sources/API/index.php deleted file mode 100644 index c35daea..0000000 --- a/Sources/API/index.php +++ /dev/null @@ -1,34 +0,0 @@ -setBasePath('/~vincent/ConsEco/Sources/API'); - -$router->map( 'GET', '/', function(){ - echo 'Hello World'; -}); - -$router->map('GET|POST','/Inscrit', function(){ - require(__DIR__.'/api/inscrit/read.php'); -}); - -$router->map('GET','/Inscrit/[*:mail]', function($mail){ - require(__DIR__.'/api/inscrit/readFromMail.php'); -}); - -$router->match('POST|GET','/Inscrit/add', function(){ - require(__DIR__.'/api/Inscrit/add.php'); -}); - -$match = $router->match(); - -if($match!=null) { - if( is_array($match) && is_callable( $match['target'] ) && isset($match['params']) ) { - call_user_func_array( $match['target'], $match['params']); - }else{ - $match['target'](); - } -} -else { - echo 'ERROR 404'; -} -?> diff --git a/Sources/API/public/index.php b/Sources/API/public/index.php new file mode 100644 index 0000000..8e9fd6e --- /dev/null +++ b/Sources/API/public/index.php @@ -0,0 +1,20 @@ +get('/', function (Request $request, Response $response, $args) { + $response->getBody()->write("Hello world!"); + return $response; +}); + +require __DIR__.'/../routes/Inscrit.php'; + +$app->run(); +?> \ No newline at end of file diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php new file mode 100644 index 0000000..244949f --- /dev/null +++ b/Sources/API/routes/Inscrit.php @@ -0,0 +1,60 @@ +get('/Inscrit', function(Request $request, Response $response){ + $query = "SELECT * FROM Inscrit"; + + try{ + $db = new Database(); + $conn = $db->connect(); + + $stmt = $conn->query($query); + $inscrits = $stmt->fetchAll(PDO::FETCH_OBJ); + + $db = null; + $response->getBody()->write(json_encode($inscrits)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(200); + } catch(PDOException $e){ + $error = array("message" => $e->getMessage()); + + $response->getBody()->write(json_encode($error)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(500); + } +}); + +$app->post('/Inscrit/one', function(Request $request, Response $response,array $args){ + $mail = $request->getParsedBody(); + $query = 'SELECT * FROM Inscrit WHERE mail=:mail'; + + try{ + $db = new Database(); + $conn = $db->connect(); + + $stmt = $conn->prepare($query); + $stmt->bindValue(':mail',$mail, PDO::PARAM_STR); + + $inscrit = $stmt->fetchAll(PDO::FETCH_OBJ); + + $db = null; + $response->getBody()->write(json_encode($inscrit)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(200); + } catch(PDOException $e){ + $error = array("message" => $e->getMessage()); + + $response->getBody()->write(json_encode($error)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(500); + } +}); +?> \ No newline at end of file diff --git a/Sources/API/vendor/altorouter/altorouter/.travis.yml b/Sources/API/vendor/altorouter/altorouter/.travis.yml deleted file mode 100644 index 3bf3161..0000000 --- a/Sources/API/vendor/altorouter/altorouter/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: php -php: - - 5.3 - - 5.4 - - 5.5 - -script: phpunit --coverage-text ./ diff --git a/Sources/API/vendor/altorouter/altorouter/AltoRouter.php b/Sources/API/vendor/altorouter/altorouter/AltoRouter.php deleted file mode 100644 index 67e76ab..0000000 --- a/Sources/API/vendor/altorouter/altorouter/AltoRouter.php +++ /dev/null @@ -1,270 +0,0 @@ - '[0-9]++', - 'a' => '[0-9A-Za-z]++', - 'h' => '[0-9A-Fa-f]++', - '*' => '.+?', - '**' => '.++', - '' => '[^/\.]++' - ); - - /** - * Create router in one call from config. - * - * @param array $routes - * @param string $basePath - * @param array $matchTypes - */ - public function __construct( $routes = array(), $basePath = '', $matchTypes = array() ) { - $this->addRoutes($routes); - $this->setBasePath($basePath); - $this->addMatchTypes($matchTypes); - } - - /** - * Add multiple routes at once from array in the following format: - * - * $routes = array( - * array($method, $route, $target, $name) - * ); - * - * @param array $routes - * @return void - * @author Koen Punt - */ - public function addRoutes($routes){ - if(!is_array($routes) && !$routes instanceof Traversable) { - throw new \Exception('Routes should be an array or an instance of Traversable'); - } - foreach($routes as $route) { - call_user_func_array(array($this, 'map'), $route); - } - } - - /** - * Set the base path. - * Useful if you are running your application from a subdirectory. - */ - public function setBasePath($basePath) { - $this->basePath = $basePath; - } - - /** - * Add named match types. It uses array_merge so keys can be overwritten. - * - * @param array $matchTypes The key is the name and the value is the regex. - */ - public function addMatchTypes($matchTypes) { - $this->matchTypes = array_merge($this->matchTypes, $matchTypes); - } - - /** - * Map a route to a target - * - * @param string $method One of 4 HTTP Methods, or a pipe-separated list of multiple HTTP Methods (GET|POST|PUT|DELETE) - * @param string $route The route regex, custom regex must start with an @. You can use multiple pre-set regex filters, like [i:id] - * @param mixed $target The target where this route should point to. Can be anything. - * @param string $name Optional name of this route. Supply if you want to reverse route this url in your application. - */ - public function map($method, $route, $target, $name = null) { - - $this->routes[] = array($method, $route, $target, $name); - - if($name) { - if(isset($this->namedRoutes[$name])) { - throw new \Exception("Can not redeclare route '{$name}'"); - } else { - $this->namedRoutes[$name] = $route; - } - - } - - return; - } - - /** - * Reversed routing - * - * Generate the URL for a named route. Replace regexes with supplied parameters - * - * @param string $routeName The name of the route. - * @param array @params Associative array of parameters to replace placeholders with. - * @return string The URL of the route with named parameters in place. - */ - public function generate($routeName, array $params = array()) { - - // Check if named route exists - if(!isset($this->namedRoutes[$routeName])) { - throw new \Exception("Route '{$routeName}' does not exist."); - } - - // Replace named parameters - $route = $this->namedRoutes[$routeName]; - - // prepend base path to route url again - $url = $this->basePath . $route; - - if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) { - - foreach($matches as $match) { - list($block, $pre, $type, $param, $optional) = $match; - - if ($pre) { - $block = substr($block, 1); - } - - if(isset($params[$param])) { - $url = str_replace($block, $params[$param], $url); - } elseif ($optional) { - $url = str_replace($pre . $block, '', $url); - } - } - - - } - - return $url; - } - - /** - * Match a given Request Url against stored routes - * @param string $requestUrl - * @param string $requestMethod - * @return array|boolean Array with route information on success, false on failure (no match). - */ - public function match($requestUrl = null, $requestMethod = null) { - - $params = array(); - $match = false; - - // set Request Url if it isn't passed as parameter - if($requestUrl === null) { - $requestUrl = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/'; - } - - // strip base path from request url - $requestUrl = substr($requestUrl, strlen($this->basePath)); - - // Strip query string (?a=b) from Request Url - if (($strpos = strpos($requestUrl, '?')) !== false) { - $requestUrl = substr($requestUrl, 0, $strpos); - } - - // set Request Method if it isn't passed as a parameter - if($requestMethod === null) { - $requestMethod = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; - } - - // Force request_order to be GP - // http://www.mail-archive.com/internals@lists.php.net/msg33119.html - $_REQUEST = array_merge($_GET, $_POST); - - foreach($this->routes as $handler) { - list($method, $_route, $target, $name) = $handler; - - $methods = explode('|', $method); - $method_match = false; - - // Check if request method matches. If not, abandon early. (CHEAP) - foreach($methods as $method) { - if (strcasecmp($requestMethod, $method) === 0) { - $method_match = true; - break; - } - } - - // Method did not match, continue to next route. - if(!$method_match) continue; - - // Check for a wildcard (matches all) - if ($_route === '*') { - $match = true; - } elseif (isset($_route[0]) && $_route[0] === '@') { - $match = preg_match('`' . substr($_route, 1) . '`u', $requestUrl, $params); - } else { - $route = null; - $regex = false; - $j = 0; - $n = isset($_route[0]) ? $_route[0] : null; - $i = 0; - - // Find the longest non-regex substring and match it against the URI - while (true) { - if (!isset($_route[$i])) { - break; - } elseif (false === $regex) { - $c = $n; - $regex = $c === '[' || $c === '(' || $c === '.'; - if (false === $regex && false !== isset($_route[$i+1])) { - $n = $_route[$i + 1]; - $regex = $n === '?' || $n === '+' || $n === '*' || $n === '{'; - } - if (false === $regex && $c !== '/' && (!isset($requestUrl[$j]) || $c !== $requestUrl[$j])) { - continue 2; - } - $j++; - } - $route .= $_route[$i++]; - } - - $regex = $this->compileRoute($route); - $match = preg_match($regex, $requestUrl, $params); - } - - if(($match == true || $match > 0)) { - - if($params) { - foreach($params as $key => $value) { - if(is_numeric($key)) unset($params[$key]); - } - } - - return array( - 'target' => $target, - 'params' => $params, - 'name' => $name - ); - } - } - return false; - } - - /** - * Compile the regex for a given route (EXPENSIVE) - */ - private function compileRoute($route) { - if (preg_match_all('`(/|\.|)\[([^:\]]*+)(?::([^:\]]*+))?\](\?|)`', $route, $matches, PREG_SET_ORDER)) { - - $matchTypes = $this->matchTypes; - foreach($matches as $match) { - list($block, $pre, $type, $param, $optional) = $match; - - if (isset($matchTypes[$type])) { - $type = $matchTypes[$type]; - } - if ($pre === '.') { - $pre = '\.'; - } - - //Older versions of PCRE require the 'P' in (?P) - $pattern = '(?:' - . ($pre !== '' ? $pre : null) - . '(' - . ($param !== '' ? "?P<$param>" : null) - . $type - . '))' - . ($optional !== '' ? '?' : null); - - $route = str_replace($block, $pattern, $route); - } - - } - return "`^$route$`u"; - } -} diff --git a/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php b/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php deleted file mode 100644 index 2462cd8..0000000 --- a/Sources/API/vendor/altorouter/altorouter/AltoRouterTest.php +++ /dev/null @@ -1,423 +0,0 @@ -namedRoutes; - } - - public function getRoutes(){ - return $this->routes; - } - - public function getBasePath(){ - return $this->basePath; - } - -} - -class SimpleTraversable implements Iterator{ - - protected $_position = 0; - - protected $_data = array( - array('GET', '/foo', 'foo_action', null), - array('POST', '/bar', 'bar_action', 'second_route') - ); - - public function current(){ - return $this->_data[$this->_position]; - } - public function key(){ - return $this->_position; - } - public function next(){ - ++$this->_position; - } - public function rewind(){ - $this->_position = 0; - } - public function valid(){ - return isset($this->_data[$this->_position]); - } - -} - -/** - * Generated by PHPUnit_SkeletonGenerator 1.2.1 on 2013-07-14 at 17:47:46. - */ -class AltoRouterTest extends PHPUnit_Framework_TestCase -{ - /** - * @var AltoRouter - */ - protected $router; - - /** - * Sets up the fixture, for example, opens a network connection. - * This method is called before a test is executed. - */ - protected function setUp() - { - $this->router = new AltoRouterDebug; - } - - /** - * Tears down the fixture, for example, closes a network connection. - * This method is called after a test is executed. - */ - protected function tearDown() - { - } - - /** - * @covers AltoRouter::addRoutes - */ - public function testAddRoutes() - { - $method = 'POST'; - $route = '/[:controller]/[:action]'; - $target = function(){}; - - $this->router->addRoutes(array( - array($method, $route, $target), - array($method, $route, $target, 'second_route') - )); - - $routes = $this->router->getRoutes(); - - $this->assertEquals(array($method, $route, $target, null), $routes[0]); - $this->assertEquals(array($method, $route, $target, 'second_route'), $routes[1]); - } - - /** - * @covers AltoRouter::addRoutes - */ - public function testAddRoutesAcceptsTraverable() - { - $traversable = new SimpleTraversable(); - $this->router->addRoutes($traversable); - - $traversable->rewind(); - - $first = $traversable->current(); - $traversable->next(); - $second = $traversable->current(); - - $routes = $this->router->getRoutes(); - - $this->assertEquals($first, $routes[0]); - $this->assertEquals($second, $routes[1]); - } - - /** - * @covers AltoRouter::addRoutes - * @expectedException Exception - */ - public function testAddRoutesThrowsExceptionOnInvalidArgument() - { - $this->router->addRoutes(new stdClass); - } - - /** - * @covers AltoRouter::setBasePath - */ - public function testSetBasePath() - { - $basePath = $this->router->setBasePath('/some/path'); - $this->assertEquals('/some/path', $this->router->getBasePath()); - - $basePath = $this->router->setBasePath('/some/path'); - $this->assertEquals('/some/path', $this->router->getBasePath()); - } - - /** - * @covers AltoRouter::map - */ - public function testMap() - { - $method = 'POST'; - $route = '/[:controller]/[:action]'; - $target = function(){}; - - $this->router->map($method, $route, $target); - - $routes = $this->router->getRoutes(); - - $this->assertEquals(array($method, $route, $target, null), $routes[0]); - } - - /** - * @covers AltoRouter::map - */ - public function testMapWithName() - { - $method = 'POST'; - $route = '/[:controller]/[:action]'; - $target = function(){}; - $name = 'myroute'; - - $this->router->map($method, $route, $target, $name); - - $routes = $this->router->getRoutes(); - $this->assertEquals(array($method, $route, $target, $name), $routes[0]); - - $named_routes = $this->router->getNamedRoutes(); - $this->assertEquals($route, $named_routes[$name]); - - try{ - $this->router->map($method, $route, $target, $name); - $this->fail('Should not be able to add existing named route'); - }catch(Exception $e){ - $this->assertEquals("Can not redeclare route '{$name}'", $e->getMessage()); - } - } - - - /** - * @covers AltoRouter::generate - */ - public function testGenerate() - { - $params = array( - 'controller' => 'test', - 'action' => 'someaction' - ); - - $this->router->map('GET', '/[:controller]/[:action]', function(){}, 'foo_route'); - - $this->assertEquals('/test/someaction', - $this->router->generate('foo_route', $params)); - - $params = array( - 'controller' => 'test', - 'action' => 'someaction', - 'type' => 'json' - ); - - $this->assertEquals('/test/someaction', - $this->router->generate('foo_route', $params)); - - } - - public function testGenerateWithOptionalUrlParts() - { - $this->router->map('GET', '/[:controller]/[:action].[:type]?', function(){}, 'bar_route'); - - $params = array( - 'controller' => 'test', - 'action' => 'someaction' - ); - - $this->assertEquals('/test/someaction', - $this->router->generate('bar_route', $params)); - - $params = array( - 'controller' => 'test', - 'action' => 'someaction', - 'type' => 'json' - ); - - $this->assertEquals('/test/someaction.json', - $this->router->generate('bar_route', $params)); - } - - public function testGenerateWithNonexistingRoute() - { - try{ - $this->router->generate('nonexisting_route'); - $this->fail('Should trigger an exception on nonexisting named route'); - }catch(Exception $e){ - $this->assertEquals("Route 'nonexisting_route' does not exist.", $e->getMessage()); - } - } - - /** - * @covers AltoRouter::match - * @covers AltoRouter::compileRoute - */ - public function testMatch() - { - $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); - - $this->assertEquals(array( - 'target' => 'foo_action', - 'params' => array( - 'controller' => 'test', - 'action' => 'do' - ), - 'name' => 'foo_route' - ), $this->router->match('/foo/test/do', 'GET')); - - $this->assertFalse($this->router->match('/foo/test/do', 'POST')); - - $this->assertEquals(array( - 'target' => 'foo_action', - 'params' => array( - 'controller' => 'test', - 'action' => 'do' - ), - 'name' => 'foo_route' - ), $this->router->match('/foo/test/do?param=value', 'GET')); - - } - - public function testMatchWithFixedParamValues() - { - $this->router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); - - $this->assertEquals(array( - 'target' => 'usersController#doAction', - 'params' => array( - 'id' => 1, - 'action' => 'delete' - ), - 'name' => 'users_do' - ), $this->router->match('/users/1/delete', 'POST')); - - $this->assertFalse($this->router->match('/users/1/delete', 'GET')); - $this->assertFalse($this->router->match('/users/abc/delete', 'POST')); - $this->assertFalse($this->router->match('/users/1/create', 'GET')); - } - - public function testMatchWithServerVars() - { - $this->router->map('GET', '/foo/[:controller]/[:action]', 'foo_action', 'foo_route'); - - $_SERVER['REQUEST_URI'] = '/foo/test/do'; - $_SERVER['REQUEST_METHOD'] = 'GET'; - - $this->assertEquals(array( - 'target' => 'foo_action', - 'params' => array( - 'controller' => 'test', - 'action' => 'do' - ), - 'name' => 'foo_route' - ), $this->router->match()); - } - - public function testMatchWithOptionalUrlParts() - { - $this->router->map('GET', '/bar/[:controller]/[:action].[:type]?', 'bar_action', 'bar_route'); - - $this->assertEquals(array( - 'target' => 'bar_action', - 'params' => array( - 'controller' => 'test', - 'action' => 'do', - 'type' => 'json' - ), - 'name' => 'bar_route' - ), $this->router->match('/bar/test/do.json', 'GET')); - - } - - public function testMatchWithWildcard() - { - $this->router->map('GET', '/a', 'foo_action', 'foo_route'); - $this->router->map('GET', '*', 'bar_action', 'bar_route'); - - $this->assertEquals(array( - 'target' => 'bar_action', - 'params' => array(), - 'name' => 'bar_route' - ), $this->router->match('/everything', 'GET')); - - } - - public function testMatchWithCustomRegexp() - { - $this->router->map('GET', '@^/[a-z]*$', 'bar_action', 'bar_route'); - - $this->assertEquals(array( - 'target' => 'bar_action', - 'params' => array(), - 'name' => 'bar_route' - ), $this->router->match('/everything', 'GET')); - - $this->assertFalse($this->router->match('/some-other-thing', 'GET')); - - } - - public function testMatchWithUnicodeRegex() - { - $pattern = '/(?[^'; - // Arabic characters - $pattern .= '\x{0600}-\x{06FF}'; - $pattern .= '\x{FB50}-\x{FDFD}'; - $pattern .= '\x{FE70}-\x{FEFF}'; - $pattern .= '\x{0750}-\x{077F}'; - // Alphanumeric, /, _, - and space characters - $pattern .= 'a-zA-Z0-9\/_-\s'; - // 'ZERO WIDTH NON-JOINER' - $pattern .= '\x{200C}'; - $pattern .= ']+)'; - - $this->router->map('GET', '@' . $pattern, 'unicode_action', 'unicode_route'); - - $this->assertEquals(array( - 'target' => 'unicode_action', - 'name' => 'unicode_route', - 'params' => array( - 'path' => '大家好' - ) - ), $this->router->match('/大家好', 'GET')); - - $this->assertFalse($this->router->match('/﷽‎', 'GET')); - } - - /** - * @covers AltoRouter::addMatchTypes - */ - public function testMatchWithCustomNamedRegex() - { - $this->router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); - $this->router->map('GET', '/bar/[cId:customId]', 'bar_action', 'bar_route'); - - $this->assertEquals(array( - 'target' => 'bar_action', - 'params' => array( - 'customId' => 'AB1', - ), - 'name' => 'bar_route' - ), $this->router->match('/bar/AB1', 'GET')); - - $this->assertEquals(array( - 'target' => 'bar_action', - 'params' => array( - 'customId' => 'AB1_0123456789', - ), - 'name' => 'bar_route' - ), $this->router->match('/bar/AB1_0123456789', 'GET')); - - $this->assertFalse($this->router->match('/some-other-thing', 'GET')); - - } - - public function testMatchWithCustomNamedUnicodeRegex() - { - $pattern = '[^'; - // Arabic characters - $pattern .= '\x{0600}-\x{06FF}'; - $pattern .= '\x{FB50}-\x{FDFD}'; - $pattern .= '\x{FE70}-\x{FEFF}'; - $pattern .= '\x{0750}-\x{077F}'; - $pattern .= ']+'; - - $this->router->addMatchTypes(array('nonArabic' => $pattern)); - $this->router->map('GET', '/bar/[nonArabic:string]', 'non_arabic_action', 'non_arabic_route'); - - $this->assertEquals(array( - 'target' => 'non_arabic_action', - 'name' => 'non_arabic_route', - 'params' => array( - 'string' => 'some-path' - ) - ), $this->router->match('/bar/some-path', 'GET')); - - $this->assertFalse($this->router->match('/﷽‎', 'GET')); - } -} diff --git a/Sources/API/vendor/altorouter/altorouter/README.md b/Sources/API/vendor/altorouter/altorouter/README.md deleted file mode 100644 index cb2acb3..0000000 --- a/Sources/API/vendor/altorouter/altorouter/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# AltoRouter [![Build Status](https://api.travis-ci.org/dannyvankooten/AltoRouter.png)](http://travis-ci.org/dannyvankooten/AltoRouter) -AltoRouter is a small but powerful routing class for PHP 5.3+, heavily inspired by [klein.php](https://github.com/chriso/klein.php/). - -* Dynamic routing with named parameters -* Reversed routing -* Flexible regular expression routing (inspired by [Sinatra](http://www.sinatrarb.com/)) -* Custom regexes - -## Getting started - -1. PHP 5.3.x is required -2. Install AltoRouter using Composer or manually -2. Setup URL rewriting so that all requests are handled by **index.php** -3. Create an instance of AltoRouter, map your routes and match a request. -4. Have a look at the basic example in the `examples` directory for a better understanding on how to use AltoRouter. - -## Routing -```php -$router = new AltoRouter(); -$router->setBasePath('/AltoRouter'); // (optional) the subdir AltoRouter lives in - -// mapping routes -$router->map('GET|POST','/', 'home#index', 'home'); -$router->map('GET','/users', array('c' => 'UserController', 'a' => 'ListAction')); -$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); -$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); - -// reversed routing -$router->generate('users_show', array('id' => 5)); - -``` - -**You can use the following limits on your named parameters. AltoRouter will create the correct regexes for you.** - -```php -* // Match all request URIs -[i] // Match an integer -[i:id] // Match an integer as 'id' -[a:action] // Match alphanumeric characters as 'action' -[h:key] // Match hexadecimal characters as 'key' -[:action] // Match anything up to the next / or end of the URI as 'action' -[create|edit:action] // Match either 'create' or 'edit' as 'action' -[*] // Catch all (lazy, stops at the next trailing slash) -[*:trailing] // Catch all as 'trailing' (lazy) -[**:trailing] // Catch all (possessive - will match the rest of the URI) -.[:format]? // Match an optional parameter 'format' - a / or . before the block is also optional -``` - -**Some more complicated examples** - -```php -@/(?[A-Za-z]{2}_[A-Za-z]{2})$ // custom regex, matches language codes like "en_us" etc. -/posts/[*:title][i:id] // Matches "/posts/this-is-a-title-123" -/output.[xml|json:format]? // Matches "/output", "output.xml", "output.json" -/[:controller]?/[:action]? // Matches the typical /controller/action format -``` - -**The character before the colon (the 'match type') is a shortcut for one of the following regular expressions** - -```php -'i' => '[0-9]++' -'a' => '[0-9A-Za-z]++' -'h' => '[0-9A-Fa-f]++' -'*' => '.+?' -'**' => '.++' -'' => '[^/\.]++' -``` - -**New match types can be added using the `addMatchTypes()` method** - -```php -$router->addMatchTypes(array('cId' => '[a-zA-Z]{2}[0-9](?:_[0-9]++)?')); -``` - - -## Contributors -- [Danny van Kooten](https://github.com/dannyvankooten) -- [Koen Punt](https://github.com/koenpunt) -- [John Long](https://github.com/adduc) -- [Niahoo Osef](https://github.com/niahoo) - -## License - -(MIT License) - -Copyright (c) 2012-2013 Danny van Kooten - -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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/altorouter/altorouter/composer.json b/Sources/API/vendor/altorouter/altorouter/composer.json deleted file mode 100644 index 58e86c4..0000000 --- a/Sources/API/vendor/altorouter/altorouter/composer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "altorouter/altorouter", - "description": "A lightning fast router for PHP", - "keywords": ["router", "routing", "lightweight"], - "homepage": "https://github.com/dannyvankooten/AltoRouter", - "license": "MIT", - "authors": [ - { - "name": "Danny van Kooten", - "email": "dannyvankooten@gmail.com", - "homepage": "http://dannyvankooten.com/" - }, - { - "name": "Koen Punt", - "homepage": "https://github.com/koenpunt" - }, - { - "name": "niahoo", - "homepage": "https://github.com/niahoo" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "classmap": ["AltoRouter.php"] - } -} diff --git a/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess b/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess deleted file mode 100644 index d7e1320..0000000 --- a/Sources/API/vendor/altorouter/altorouter/examples/basic/.htaccess +++ /dev/null @@ -1,3 +0,0 @@ -RewriteEngine On -RewriteCond %{REQUEST_FILENAME} !-f -RewriteRule . index.php [L] diff --git a/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php b/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php deleted file mode 100644 index 8326695..0000000 --- a/Sources/API/vendor/altorouter/altorouter/examples/basic/index.php +++ /dev/null @@ -1,27 +0,0 @@ -setBasePath('/AltoRouter/examples/basic'); -$router->map('GET|POST','/', 'home#index', 'home'); -$router->map('GET','/users/', array('c' => 'UserController', 'a' => 'ListAction')); -$router->map('GET','/users/[i:id]', 'users#show', 'users_show'); -$router->map('POST','/users/[i:id]/[delete|update:action]', 'usersController#doAction', 'users_do'); - -// match current request -$match = $router->match(); -?> -

AltoRouter

- -

Current request:

-
-	Target: 
-	Params: 
-	Name: 	
-
- -

Try these requests:

-

GET generate('home'); ?>

-

GET generate('users_show', array('id' => 5)); ?>

-

diff --git a/Sources/API/vendor/autoload.php b/Sources/API/vendor/autoload.php index fbdc425..86e67b0 100644 --- a/Sources/API/vendor/autoload.php +++ b/Sources/API/vendor/autoload.php @@ -2,24 +2,6 @@ // autoload.php @generated by Composer -if (PHP_VERSION_ID < 50600) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, $err); - } elseif (!headers_sent()) { - echo $err; - } - } - trigger_error( - $err, - E_USER_ERROR - ); -} - require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit2724f76bdbf961b3280ed7526287b513::getLoader(); +return ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81::getLoader(); diff --git a/Sources/API/vendor/composer.json b/Sources/API/vendor/composer.json deleted file mode 100644 index cd42de9..0000000 --- a/Sources/API/vendor/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "require": { - "altorouter/altorouter": "1.1.0" - } -} \ No newline at end of file diff --git a/Sources/API/vendor/composer.lock b/Sources/API/vendor/composer.lock deleted file mode 100644 index b987ae6..0000000 --- a/Sources/API/vendor/composer.lock +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "fdb55ab3a826cc81720434dd90eab926", - "packages": [ - { - "name": "altorouter/altorouter", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/dannyvankooten/AltoRouter.git", - "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dannyvankooten/AltoRouter/zipball/09d9d946c546bae6d22a7654cdb3b825ffda54b4", - "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "AltoRouter.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Danny van Kooten", - "email": "dannyvankooten@gmail.com", - "homepage": "http://dannyvankooten.com/" - }, - { - "name": "Koen Punt", - "homepage": "https://github.com/koenpunt" - }, - { - "name": "niahoo", - "homepage": "https://github.com/niahoo" - } - ], - "description": "A lightning fast router for PHP", - "homepage": "https://github.com/dannyvankooten/AltoRouter", - "keywords": [ - "lightweight", - "router", - "routing" - ], - "support": { - "issues": "https://github.com/dannyvankooten/AltoRouter/issues", - "source": "https://github.com/dannyvankooten/AltoRouter/tree/master" - }, - "time": "2014-04-16T09:44:40+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.3.0" -} diff --git a/Sources/API/vendor/composer.phar b/Sources/API/vendor/composer.phar deleted file mode 100755 index 6d799ebd6f101824bfc6c5b1f4970f3783d90a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2810737 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

PtHH_DBr8a|oTwR%l7W5cV-{1{DYq-k+ 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 z

ADPN@nrP6ko~NVQ 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%0DC)ub-`wo$2 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
r(v+k4pS#_}7On&|PZ-1b~eU>{LAf$XL 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
buperM*IN4WY2m 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� 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

w?* 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

VctV8+1a!Mui4td*e(O8_su3UkD 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�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

-u}Yhr#)Wg@|aF-Q@KMyL~U~6a)oS)9L^;#E!;mr!|fP3&N;sdTZbnrK%okkr;LQ z^4j7&J`=AH+$@Zwt3D|!YWaqEld#B2mZfBGJ#S!LH{{T=N;L%IV`<>RJ&+fdrt>b% zn8a`C_LmJ#Gl)<=8N`wn74^tExMpO=DS0u~nf<6+l^rawgVEU~#46dpClO#K4b)F- zGrZSZH8f6V;qnZr&%jo64U?CY46(RJgfZqis!)jhaUXB_kv{NJFCi~;5+q?{kF8S{ z`K0_7z7iS+J4RS45tjPJ2y+93S^T~D;bf4xRu{)o%%Mss&@$?>Km?#halkBZDa_r;`R7sO-^uND!3A`?n<<$6=gUROhuwb611wFRprmpl-076 zh+HjcY0lA-u38udd|v? zt=6-M=V=5Q+7jXlAdxl-hIc-Eh15B)RrQq}@)lC4Td230wJw)tni$D9my>)=J(on5 zMEDiDB>yxigFH==U7>BOI*42?F|6APa9}y&C1e0Y<8)EfRYN_-VMM=&n?4 zig8nC*Prwm*P;G3@V2W;YPm69S;^2Pn1Q`&@JQ_wUx5WTCKXI7>6L?e zFSa~7nP7T@q%urh$NBA~HlCf+AfzYi+Cu~D++4Z+#s8gEJn!^vwi-vtLGL4Lcr{cv?tZt&WDwz?(`(?h*Tl73H9Js=q0zCDGxO$|)x?HN{tBx?&> zZyL6hRVzHr!hWvVBkN4Js9&43AQV+(P28o2VHQy4O?U#5Ybm6T$$;X6!Z2QZ zEr;(LP#-)Cq)s5hE#xiXf!}jyq8`;Ff=W#8BDgFER%sU~6z20Cm>qdEs$XoTZ>9n1fC5)!L z00GZQcdY5gx(b^-<&(N~x>||`QJ#^|^lZ#65KwaWWE-f7 z1ms7X0XJwkFzMU5K;Yo&IJVoM>J)EY6s1{X%Sp9S>9(C`0<#VJv7Eb`AU(8U7#k1t zs0YOoL5hLGXHY0gJ~{NEJuf6WHw(q8S^u+Q;YcL+U@6m3UXgOjB$akC4hsa^qKrzr z8c|tONn5ngWMoT8NCa-30Eg129GJIPm}Iv~v=RX)DHp}W2_kgAz@I`S^>i6&2?yaW zVZT2*!CseP?><}DhdWT=i+LXst4~x{OqlGi6IhIVb+1-#AEsWVa+|Y7l_T|AwmYoL zW@>Q|J7;$hSKtsuisphik+1X|$uqWm#F~i(PA1SJ=k8#11`{Yxr?C<2BzOv0<8x|3 z2v3&mfMrI@flQy#gzhxNeRlRkYb|b-g{aCN*y)eN)1bm3#<5u9Z@&Y4VyJ9X$VNJA zf*3k%e#Ct$yW2Z^hr4?_8(ZHNOS@TErcGuDq~~*q{K=t*__jG7K^CD8#Rxhu<)W;_ zfPVaMpx1R78E0vR8%)x0?W++VrCrt)`q4PzSrycW-+rag!om>`lVi2^R9|%^6^CaS z18k|K^4sL3gXE*yk`BtHFfMsrsfs6lmzlzn8u8#STp{>^j#E6#zbTiLMmMWa4SJ!* zeULo$7v$>X{pf-RqlH~iV(`K`Yc3wrkZJO5<%&yh2e9~xqX7nuMPJjOZpWafHm~#2 z-nf3dcGHg=rd|n3V%H+gO5(N>6wK%s z%rW8KG8+GFvKcB*^Ewm=_}_5v?;%S%AaaMB@VkP{lUz=hF-!O~^%KMq`(eN+M6=tmDWr>)__J9Yslqjur$q~e~TH?${W?mehCqAF;9SzFs zjvSsxB#_4cX>|@E(7%tyAZr%?QKA3uxWzZmTFUg5U)93CF^dJq&+6TMQ(C%z>KuBr zb=whDgI88Ri^FGbsB@H`XLH9nP?4KcbetrmwnWKHV6Vnsr$c6KDMZJr;AG_OTiSRr z2C1mdACm~3g4e*N2jTY|ESq4v{LRK3QEEjVPWD5Bdx1}#w9(;#(sXl#j(yQGk|-KX zF{)-~Iqt;}x9&`f9DBY|yM`zV(N#?eDiV?Nl6Euq_D~thnDl%C_=80#>+3hVKjM-$ih3C(-uaVw*FeTSr$DdGne+3s!XJg#%$@&rt&670_noVl9ZM_PgR;np?DAfo(wWcgov#F5G=GSg$ngpE zZNLq$C2nuM!DH@%=lCFVUBN(pHLUP&>U zAOc5{sGAiq7aL7>?2DHaJg7-97F*RkPG~L6jTA%3;Hw5fy*emltVrCxvzgX2P9(*RnQQP$TTn9Q0i zhjQ-1*EiUWj$j-SwE6pbcKUK28#l)w@aty#5$@&w&7M*?;eoW|Ha9lP#AMY7+m3?Q z!?R^0w7BbuY-Ij$2D}IpU{F{8=Oq$~0#enXC!rl#seF-55s-l9Td|lQ)zKpAA{1)eK=NDQuJQRhyoOf2Wl(M(xOcC#}jk zBD`eh7eKWtsF@!o9Vu`@*T_mqRCA}IRIxOKm=(9uZBjORpF$a1=*umfIzZD@l>9Wp zjKYj#O*%&^Gvyv+9TvqorFNqq5sZgYKZgM+qxx_*emfb#MJ|bmRnL?!em^G|TY><@ zz3Na>_`Sweo6Uhd)3|fLMO7KIh3IMNl6LYsR`QJ9Txl?Y7f!-+;587fph?hiF+ zgHZ#?(L$uC!uU^X>d?zN5A>f|4hvzAe;>QZ$5_DJn)3AM{Kpd<^Y&E*SBl@@m|tP@ zhrc@NLs#jG;l~-pbYqz<&?&piX!6Jn(~`K>P0@(q${*5VL|#Fdv{zOVP}UB0g{EI5 z=a4B{!-m2DQQ^TsH*GYkze6*bWlR_E4#wxOX+O{omlP z_vij{PQ@BHF!MY2zheIR2mRa2H~)NahQvAxby+75*kR8}*LT~k>0CjoKXFshrgG2J zKBPJl{Xx6#+Le%}7di|CR94qT?uJ%MoFN(D49$I6vi4S6bAK4Q^mgv6-YOOuY~ zCdIA>S_pAflCWdOarj7S$txEdif(EGB}?Usp1qaEK4WT2zWpd6NlBEa)|JgDor!g2 z*#K%nuI>h|wkUjbvX}p;B@t8;VT1WOZbv$ohtMtb!}rcUxj*q_peM=hE3}k~&~Emi zcTXrg*u4kjoxN0wXOKGg6RDK#D2_}aZ?vhL4^0tL8cro!z1g>33=7szOOwJ=a1HM( zb9A-)MbO(D6viYw2ln29mTlcZ1*9~Q+C41T(4!?zacE6W#bD}I%(qHV-Q7&Vo;K8h zJN@V^WftDFbi&#%?;jA%>R4e`mwk;I5mnnkyhwq}1@gsW%_lW&ZJ^>%A>Mr+J@LK4i#6f!-WmZ&M?niG2 zafPZ4isIsSkJg03r55;WN@nv(Z~xD?CV&26@S9tc+d#1|O*SFNXR?cDg*rcrD6xzF zAShnbUK78U?i2E{dN@SX3&S@C03V=5x=oouYo4pLcKJp=o{+{lZK_<>N~TO-vNiMo z)I@c2*(ZI=D#_f5rsXG`(qyy|exS6%5e&1tS|70UBlL4So98H;oW5 zjfRN>D(VlpIgz_AuIpkXf%5DTvxo4=TW=3Zsc@`}So^0nC_Wyazd5=<$eG2XrRQ13 zMde`s_?AeT2l=NFT6?e{I%}L}Pi&gje32C!o-5nB$`$RKE+JINT3U6$8*t8RaHHk^ zrm~nwdfyVYw*-zvaSv62ErVesX8F}II328#4|@Cdbp`9^hp+DXdvZtRN!UVyLJT_b zIp%#_1reD@a#-YElL2LXadi4UReSQTw2Qdl>qAlbbuUo~$6{={9MRDtMHkGRsXb{% zpO$(D;6kTJiI-e%fft~1A*4tXIo`R~`)YLda{S=d2hdm{yEWHqLuUyCL3 zVto1bEza^MWJ25~B3D)4+cHz!w&*KIr>4xO_V%Hd$-{F02NO%6^Eua?E%xK1)8ori zM2+mFdXNa(BXb8RC_KErI5D4LWGlW-9Abf+MdOChTJh>eNhd4>D#fBhb%s;HGC_m3-O08&J zrPp+VCf7_^V?eCi$&`3)(`i~aSQl@OenJR#dehkU6&&3bJ;(}MYhkYyaI4+BcoAX! zG*7AIN|=|l3>f7dH+oW;LJ036?CoC6?#^ZJ;-CvlQ&hKWNJ(s&3EbijjMBgb_WOb% zQvf8=CZi0Ss%~JDVYr^gG=5d4>d$$WD`QB+M8_nQb;&86J7T`|V0zffRr6w%J7=X6 z`>EH;)=V-2tYv@~!R+?T0}5Nmj`R{OFz8s0@7_P&^Dh0W#H^=J97f%qbn z)sX)_pb4pA7t!K#cVzhP+x|`Vhfddz8z|G>lP2ty#{Fq2?ki&ovjiq*|neD3~Er(wVVM1irafhu6&E<8Vae|Uk-HcX|Gq@?x3Ulta{ z6hQu_YXo|k-a8?i`@#+^oX;38tg7rdF^R~Ms&cZ-jd=zICi67kblkkP^cMx^ue2|6 znj_Cmdx`k+QRakzXwEf~%qC>>awEJg0brrFNRpg8So}?)LWxx>I&R~-HB!A28kO0Z`DL-EfbFmE=pRfp! zT$q_eL-|rmZ>yGaaPnjlJq@fagl^N8GB<&|I)C>F-l20UV(2yY0`mQ>$g())_xMG4ylf0%! z8FG4x2nG@AOyF(}W}VDvjHL?yI@_5tu_hRN%I&lQA@w=A(cTGxWQ=N&!pak-#tEc+ z2{QCi=E>LehPG%(nZ5LTiI=wdM!PoQ;L2HAwWGdRyd5fI!+NFibE$SR%cOvXIqS|F z2xkZRqiM<%!mL(gnHHwFg}2yUr>trsq-8f^RRv+*mmYsY^Ysv1&_aW*%#vFy&uO+fDw+2)u7P6k!b^ucbsLoDyZ-LXYQj&86_}l*>to{4$_SWI^t@Yit)o1IE4tH^x#uMBx`E%pT^R11w?MLepSwAjR`m|43ep$h~;4Z{pCo<~3m#{_Q4)WRWis7hUb450`)siVZK3f@u%?E{ z(DgURu8Q>L@a&a1gYP4(lg9E2$68)+m@S%6m0-$*PZa;_F0b+lD3MwAh6>-2%mJmF zfq`Rr|1wvby|7@D$E3s2R}67BxV;7SOJ$H!2MzBZIQnNYmAw+37)NY`GaZ}|n4gAQ zLS(#lDMXY=C{L?0gn!yF7uj3>eU8G(GQ)o~0OgNwPF)@8ia)6jvw{CrTjNLLW4S?W znwt!3^Wf3;Q!h#ec`|;3+2>X}ei`)dFW)0Of4=v4>30m`V?kumgkeDEHbJ zj<%EsqeX2fE-WzRA`)7N&*Wihz@C%d*LAo$64^(RpGngxIJFXj)3n7wdA%Oy0;=lx>ntC=cLfXbZPRGQW9J6uFI319@#Ybrz`6OTsKfPEU9~ zpUXC{^*B{&#~^D${VFJ|9v0%L;xWR}se>(f{w zae&o7pB%j!(w6-Tk8ui#y@qBxg(&!0slf_%WBH0?P#>6Rks74>k~=?2LM3q|U%9fL z^LHQ-!mM2Y*hFL4z<-t}LPMAZlWCKOA8A;G}K@Xg@f{7iH;hb1Sl!@I)D zKi6dsMIMV^kky`##}`miy10$qsi^FRYj*AkZ`=(lE!P~`c`I0p-^o$(xZF`Aj5bvbqDjC>A6n!~`nJm4VpCXXDyV!kJ$k)*O{kWV ziUpYLtPWI$Jh=99P8+ogD3#8g7nrtsQ$}MYbS$~}9AZHTQJH46E^#*@+NT&K#usq* z@XpE0Gr0oV^Gug#jjtSfZ-PKfu$eAP*)mh}p94Tux33gTJr8J8wfH%}3SzO^O-A|G z9aEr)nu@*LMaFLyttKm{gSw{t$1e#@n)-F&vi34OMy}vPx(#YO#jLz(I-sjrT3sVR zV>&WJ+Zk}IQ5TO9__Uh!=mZ1r<7Z*E`bke{hp|;geq{owL#h zm4~iAJi(=9I7dPsM`lRnH|!B;L|_Bzb4-uIU~}^o1BoAy255NhutEEh&Sk@~m|F9c zCMLpV{;DyScmkC$mHnV5S&spO&C-g)>OCM zG#E=^Xn;auCWnu(+O(N%G{4XkR_^^OFHgm5c|GSyZobUAjAkpmOK5WV0_PdCX-wugm7)J|f9|wG z%(vOq5*z9OMACFh$am%?K4Q_*>_Pa3f9S;H)Jc}17g%g*r)_c_1ZAWR^I3h_nKOV& ze9Q9JcP@$k)=OXI-+T+dBY6{Wu=sXNmmADJ_~Aj|LOR)FqcP~PF#k;JGIf5DMS2Py z)nq!uq9`{qBEpz(77Z}%>LoAQ>FDWB?;h9;n(y`j0b1W;|fwwyII>1Tx^ z2L3S_c9@?gyC%J+Nh)w#u%VI%7cCl_m1vo^4<-L?E79P-ZG}w#QQq5DKsayPhs<{) zjg*4!in2+T`HkV5w->mb&RMmb*!(A9?Xo{D=Dz7X7FDr8Q(^}ohgKh%qJM6#+mVNR zF78I=ChoihRIOB19E6^TNC1r$-CzeuWq(f9c+E}2;I zW=42;czC#bczAeVnFQ-k{$X2m@7QjNvuqN!Qk7zn=hVK*ORTW)&-UjKZ#FsaZLDp* z+<3mr_?g{DPc~N{JY9PP+TFhWg*N2N5%<;X~`yozX9AE|P>=(R}-(4-; zhz{Ted8SCeQD3bFYv|%!KJ08AjYsb!e0pA*x>f%qMZJ0O_l-dZi@s{&Afk3sDp*ni9*I9EcS( zBfD?u(jn_fRsvRzBgR3^zpTjBxzz0cF6VwJluqS3(#ej@`A0+ScHmx5--{NrLTw;uw1I<1-lE-xxv z9PKykmR3`v1>_a<{U@5?PlprS6+G|@S6@uVJ5NV%_`f%UbY<#ghIBselgkPV%fPIc z{C{Hd$(yTH(}iHEtg)YU3T|}Js-*p?%i zwezWQER?=vVpPM?o7Y;9Yi`+_+>7^CqLpDsr#bPlO*>Hgsh`K`V8|U=+IW46pjJ)PmU5do==@`}Xzyf;BB(!Mr)fNDj}3I9RdJ zUp?)K<=q?Y?_Z3OUAp%Ud!qwnIOUBUJUF_qU0UuvgCUMkz?I(IUl0n!pFhsQrL)~1 zyx$*4AgA7k1& z`5xv*3iiRI3bAt_qlRF#WPER5^EuCu#?;UU<2V`%$23vcYgosMqOiT zZR6RK=c`+5RjuHaRI|KotOZpu@NNF*h&iXN^zKhYYM=+cK6#GK^itXw!Sy_C5<>A> zIF8k1ua-g$YaE$5B^<#fq}Ivc{AhH5dtjg^u{9^AmErRVR)Pyk zOwml|8Cjo?&L591P7l_+RG5Nr#lh1(JXp1$j8uY0Q3uSMI_bsBShVJ9 z4q#N+zuNDVyRwu{y?K-35$}`(!eDQM!eXe&Y{yYMgydvyG-MimI~-kbN7l7#tKTeI z!T2$(XWlDPN0_dxTE@ZKyi1tC_*eG`lXo>MmQUOks6XMzf+mCUA+qwcj7u8VpcIDc zBbPnSEIO#_KIvo^9Ew2f@TB+g4E2*>>1WRj&vh{#f`1cvI{R@M+y5k3DlK6y4)OWAD#@-hhG#oidhL{?iOcV^6sad1Pw9-^EbZyJOp~| znb&k`<}Re?(3t8_i$eKYr~1??&?n~~j=2HSBJ{AKjab12Q}iLi;p|Sj-}IWQ?oQdc z$wo{qTGF1CI)8wa$x*D_l7c8b=_YXXS@#24=%7uiUT*2z(cVN$xPCgNg;4JZrhUH_ z5XEJQSE>o`M7mCqdytG&_FE9cK|#MpOS7ol#N2nIf(@idP!op}I09*(1+YI(wnYOo zF{5BHg(FKWF>hP?i|zE|55YUkg@JD9sG)+}ReUdoRtp4B?7`mt_ix6uiUQL9=okl; z&7PQn=;-<26G5ng3Jf%4q8OAm0swujXc?zG>}qmp&5P5hJFU@A=Y&gqK5kodnhVNI z=)CI6N^a#0^xYWzz^&D)Ot3n5BKB}%Qf2!%G7&tPMwFDdo9EyXpi&!uFlUe9#S)`0 z7d}!R93)>0v1E`SKrQL8x+JXa))Xf>V5BWV3KU*LZJ;GSMXgG5NT66R+$=Mv%QTrR zAc!Zesq*zNZ2y@VPhS1-=f#EXyZ2r#-ehFW{B6FRzk}aWFL_sblfm(!r~lj;oB|^PUKSN^=WJfm?BM!EcE7&2Mqj(e8Gl? z_j-(#+DTD~8)*Q6Is`l(oLSn-TUh(a^*IFu+|g;pn5AiMhoz*+>^26eP%Hwag$6NN z;|nSc0JKE!#8N3^Svm}iQ-ZlsKB*6|uXB>?iM}|}Fr3^uucpnWDCRzVb?1zO@56DY z0Z7KM0fRS2Oa<{~Jiuku5}sPu<(d~u%c<2r4481ez5YL53?|&_p9IFQ6sEVHI-0hw-Bd3lOh(BUb3mO=(Nw~;4t z8T^=?46KHwlU`k9f;wrn#}lE9PqpCc=>fInLUO$@Qn8(Z${MxBZ>|~1wA9>zFrQ22 zUh{i#Mu&%BEet;rCs|Aa9wc=df_6@E0)1ofX7HZxw)d9)>D9vh6;(-4M!));IkoU_ zdGS}wwFXT%88m8a|5=Jk0d6~-oLUNCSpg#WheiX?rWVeM^&+ z4n^L`OOZEvvS40bY~O|}*0qtnx`kK5n+yk%sDH)=QQg569~f=R35BKJZMonMyDKSq zWDpyw%UD9J=!Z%on+$f|AaziO3w?n?Uw9ckj3ErJ^IF;g z;Xa#36@m}V7-D?s-q{E#haEiYaV4ue9x^}KlnMw`Q6vY$$+ zxnyRpaG^)Fz|$?pN!zreI4?BW9{zh*Hd*?2sl#`6?&;G#BzWwSSuWO1;WngTB2z%9 z4>7fmscS*~i&fVBHmfOLagcG^loaUAT>_l^!kCmwS+IklZzU4nRsySk6K48XuRdS= z3V*-E--R!Km={aks)BuNzPMzfSX$qBw6>8qOTLyyln21qT?P#2LqnFyDYXz`nipnr zG(1E+qrS!bmmd^*Vlamh;I9Ezq+0**4F=bzIm!!b3q2%M^Kr4zuE0Q01fP@Y{nyih zl?(sNfE|qohs3Q$?qbZmA?5PvFH}ytZu*ftJAa$nUONjcL66j>ZvYqfC5(?t+|>bq zdz~6B)=Yr0zrn#r6JVHTH_);HW5f0nC>H~jN~GcSqFj^e?`kyG#i{NGg@}KW#g+39 zBE@-Jy52eMT9lE@6J2noEHS2Ka`Quf|A!U@R4o~iYhL3cpkA`sXQqj22sLOLQ?sz9 zQ`D{W$;2*Xk111TY*!bRNOwtGOO=);bQ4!m=hS}SGwY*Jo%Jwi$7#VT^tPSM+P;x0 zV3fllEhrb%grTPeVRo2?p)zl3Y`MS}++wYk0Op6ms#GV@jL|Rg=R*I#EbQ!@F3$fK zvcIBmo}0KRaeD zx26YktTS1v1v%CDOUAE>9I{-7Cqs(q$x@|H?`~q5r(x-KKoa{m9rsc*reJPXOtK)M zrxt4FRN(eVMjwGH4F2g3NO6h{W3RN**SV^`>XIC6B>(C) zb3sQfR2TV_Wp!7xu}oFF!Iqa^I-G9dZg3+h{J*l#;pJ|mq8={{mygua*~{0lLy)~R?U=ox zg^)ioHhD0ie*b!mUHU^wmfSghNzpBS~?uBiXOILH)UrE>p1Zrgz-Aq8}DO{s~}ripe@(T zyC5w%|9ejf*cOz(Oh3W@>oN+By*qYOXWdUjYO=#+R98FI`GM9<)0?L_$!UsOu8Em3 zel*3fAJb@uZ7RN zz#rD1Z>~RG+x>QJWAn-S^S)e{%;SQKz3w9SdUtN!zJ1I5n`8)absAc* zW%A7+lvRbbh^EU#W@km61|esaRcWNRAUH)jv{&e!W?H_fm|CX7&u`>JDAkmW@X}23 zvyPjC@!R440OwxO)i83jbKTaG*yp*)R91%wBJusiqpWWk)ERFi%Y|?h-&Ti<^B~Wu zrWitonJq)$Ktyn6W=g2|mX}1N&omE}%}c#StkeFm&q>&7CxHg9v~AxD5tr&EJrXck zFBGh5Qu*z`+t`~v=UL!q#G**EoFgh;w87lLX9P*~6cj=hiZevfP7V)s4-p@$ZD6G; z&BVR^quzp+LIf`I%*Ih^EorG)#5*{|78pDc_qf>y!)kD_NsFCAl}NZZOeY@lcc^4S^Or=FCF2zy=n~jwJ0#5@^qr$i!PS5xFQ-Uh+Hv&a0^HCps=S^|iGjS%H$zKc0 z;^oq9?@Fyoq+*x`!-KR0j%_D5T9YGk<0Xv4T(C>y@KPPnO@)q*#s`BjyukN*pMP%R zO;NetvuUL9OiG+ZpzNIKm$zXL|L*HIUy&YP9=`cXI)4w>rS|ULyw|&nH~exBg>K$6 zN2M&I!SN5Iahy##;6|AujUU#XP*+XqfusZ&k;$Z$8m})74+mqvmO{dM&{Yc-YEo$Z zL}naJLiRe{-14q*|C9bt9Oh*3 zVbUwjYMd67j-O3w0Eo0S;N#QR@c}0{hX*~kL2nF4MhT2WXucdnX%{4kEIoPuK+!B{ zj2>!72tA*IlDM+lIV493i0eR;O?=y%gt{`FE*%IZ?<@n+KGNQA8wimlR~ibP8C|0w zjef!?bl@{(91Ndg2tq7450GB^uPMl2O8JCqm17#~H@T2>H1HOt`Ke8F8g8s@nq;#W z%e8f0k}_rZb#!_^{4lMM4mS3)$QDS=m!^9{hjZT4vyUx=pz?GFH7N(>Qy~Zw=H2s9 zdyMaeSoA0KxPe0JOeX^P@KZE@snCkfn649bgOkf5rji2jJ_x6{e$0LHrXLckz{RHz z$v*Pl_o;)fPoQyb-lII1AY4^i+pWUOG~cVKp%c#$;+G#|!!;nVD|XeafyW-Y;A77S zgxylEW$RP`o{@4i-bp{h>gvh{V24q&Dm#Ba8J#8wSE%@GZ~XlM4ugMGzxSeyVdIjI?V@_ptH8#x){ZBRom`bU#F$K zQp#Q9iDZKT_1R)bDXwSd7^Q75x$S@;8z|~$SPq92dU-mzIMdYlybK)6j}+r-h$Qfq zU@~JB^xTBiC5XWyOC=b*ta(0C=va`}dqq1*^>Jgsg5O-yD&{wOkL=>?QOX~}D0-g; z!LyEl(NU|*K6ome$^Ac zCUUl_JrJz37l;&=i6QF1Gb;pQD=YFo_sUtH(PWr43%Hzh9Ci$(OX`l# zeC=L3!x`vNAV+huc>^IWo8j?xW#!S!XD@c2KKc5at=-j)jnzLPaJ&BcaQ)e{)!ogt z7poiGT;jq)+mOh@hYT`6#t5A(N-EsBF-Zq9D7V}IwlE{F&%X#A*Sbc&)RUkmdlD=P zje;aOBrskneU|R=4AaKo@EhHN(ydE)3Aof0u?cDBt3GRO7Gh5Tmd;uM1LE)RO$I_j z^|NAVR=i_~7v3!Q=TO%CM)6gN zjHz^bzN-|32~}XCm)A1F z;PUxR>wk>F$B2(J!5z{Zq@C&yo}8wFgf!JA%*JT;Hh5~&vE9Z@fC3= zQWdDEXSS+#uN(=(LS~BZve-MBAwKiPh2UYXfjT$Q6p6*+S)KI1 zi0dHcXDw*MR_ZbiHzm+~=jG{;34-*=rSl#yVA)Jj?@LcigudRBv+2X>=?*NWWSB0u!7{ZRu2Yc9_z0up}R%*f=<5K#X=e3YyF!yFH|N84JjE7sRde$1wV4HTuaedJiv)})s2EGrE6x8 z4X{~#Kn%X>oxH|)@QO(smDiUJ$Zct{4YQ^r&fMCQ1`I7g!`p&Z5DyMHiN+4H*_iyz z=;l1}H=r5kjE!I`#X6^(9>}anW*X%XM-B_+f&r(L5jkO;$JL1a%$V?}Vis2y+5&o} zD7nU{dB;wdwwG?urGtx9rEDP!6(~B`pRl(krRJHNO7(zvA+K#ief96+=6MwCBRS&s zZ9J!^J9r`pOv2mz`db#i-9yG?EqsU1cw&Ly-eQR_etS#H9AOU<&%e7P&qrex;YYsw z{cnG5r4IH!D5T%r`Mtct3zn1;D9Zh1^v4r|WZ2UhO~EtTXUz$^^sgWEvJQo`?w~0qDTLN{@JqlaV$Kk%^lC8_hK~;*Y`q(v3(Q5&-`G4*6C&%w z)vN+t*EE0_gGzrxIg7;WplAca$C7eB^G-qJCqyd06&9B|7lEVrx{^=JjRzh`6=S6Y zqt#qvrNeWnw3sn|W^eAM#5`|r|M}$AuTE}aFI^6h7-*;A&7aY+WtkRdz4vLBO-t*yW&Dc1=F!SKPeAiMY+$Xv zL4d&(jBi24Yi1k5qC!bllQnn9%l3({yc7(D7v_WM=p$=@`Wb0+@rS{! z`j!&fmQ)z)1$&DV__!Yuyn;JoS%KFZ(n^CX$6hEux^j!*CJd!PFqXHJyaAIvF`WB(RE2ep~_{W*=8XWLuM~)YH*9R;rTK zXL=@|vIC+QT5!i0+dOLA0-qW4voEcG4JkQoY291~8GN#SG1^#TpXR zc0meemg)=g->C2D&;iGYD=^4v2JDm7@$@YiwX^(!5q%2mE+ey5p0O5gp5vWzJ4xHw zo5#qEI7sQ&yIS@7_Sbd1?-JST)=>m`?O!b*;g{|XPMP07$zrP|=F}w5jUI0CIMyo* z`HN>*(OL*{sFHm0g&unIj0!E$d4OFUGO zi$CV1ApDEt!9QLM$Ag}GG0${#k;6?joUHstn&U}eo$e1thd5>}&d!P=VjWmvu)hA% z>os_FpO&^9fyuDtEKxO9T7Ob;p%I`*V^^@ksEX@zPf;=w2oC(jjWYbzJu(@FY;z4C zWVaxrJmu?}TpJl{WGY8eiiXu3!cg8^Fri}){WqWP$puasU?lc15EQX=&+eHbCEm!l$-TREDmnRUk5^)m^8hSfC zfHVAjWJF%EYjpG`QQRJnD{l*$zdJ&Tyx!q(jIkK#bq?hI0oL_{u~f!YiAMy;nerNU zg<&G#iPJ~N%SbiX)9AHwn6d%LqyZC>Wc>ZDiwT52&_wo6?{HHP1~Olx^0WvNC?4-> zW4o~3aLn5X%#BZ-3y8_uI~#1u(ltKIlrXd8De|D8wH!Tfm5XO^k>QdFHiP{R`4JzQ zxXS{}3Op@{v+StY$r@ghvMg3;PhRd}ned}d!jJcHp zwU0k=k2xkNwwk@%!SFyVSB`2?9%x20m|$yh(GM`6I!=sfpE69bf0)3Ry~sx9v#v5d zI4jfYL{w9ge~wR6!p*xoI# zGJ^I%*h`sMnG64we(=fo)%mTHq@-UGK`&IFRkle?C}r>t^3*gbrp>zO#IUhk8iY^} zuA5?GfE?@=?GG~*j3IL|{5Mv$Mw?jOV)+Z*gaNU`I=Jd=fCz>dHDj@C#PBoZUz52D z;fTs`dGHw6l!@2I?S@QHU+$68_%5Q$X;66rf}bd^{h{t0C(4g9TinkQbSUJrIqm3t zi%39>sL>8@H;%Nc4@yh%5V5GrF5-6?L z%j)SA`m{xh&5lit*HVZxwp-2M%W7@uJ);)j0Fjvo)I!V%<389MW87^l_vH}k9e0NVr2;m}hOPx^H3bc!=f&BFP(uY)0&ETmmYKKx4?N+oBXd!bpyaFxswe<6w!(>(gwR=ZTbHtQhv|;NWn_bm#a3e%! zEF=OfMs#G2fYQ7I7*jJkj_nt@Iqey=3C?q8UyyoGWLlK<{ z?|LOvl35_$1Pli$aifQgVH_lxpE8QKu^oHoH*`Jzd`ocEq&oP(%al0GV*LPT*E8@B zMit&=piYBXzc|5BiAzlvja=Fby0?1Rd++L;*Z>NrmIgs8U(!8=Bg) zYRiz#dp~lXlKn#9@84Q*3Qud0ab-{b{#0xNlHfm$W5eg1j9K4~%s_)6LyvgJF9H;Up3Z znY{$U`i`x%A%Gw@LBCORTXr5~@5HUy)K8l$bthrnw6)RENp$GGgZ`O%<)&Iq7Vn%n zT2jZ-nyKy^22e+>qc>@1OC`><;cAW*6TDZKHVL+(z!^B9#J4<$KJDSe56K1SE*-lqpedrn;ud2xYH?Qni=|&(^Jxz%_8| zS9=>>fHz&9@VpyT1&}P^fXQ6nLWH!T=90Pt0OWU9<8Himw>>!1x^*IXkc8?%l>W5Z zW)-w!?#;hYQ-N?qJvL}ywnSGqV7INy)eS8WED%eDH??rwr{@OBuiOa{*5XQjD?&qG z-A7^yX6IXgHd^=%7IRu6Y9os3H;V|vviHfj(^T2AZA*h`v3K3ecwLpVEn~cf`+yKv zJ2=RDm@7O57`y|63nVv2(re%rR9hjm%@7O5T7ZiB&*fjR3w`~yOGS{b|I-sHW>n2H%QQH|bH;KFQ&)5JvlIlS&kU&q zo>8P)%)Bd+#{_^AYgU{AR34F>-mUa*i6axk zZlPNKO%f5}M7%_5$*qaB@jna)*ec_lis?NTI7aoogSXtD^zB$xUtD8gJ4$6hYyTC0 z;i9akRsY&oM$}Fq4YZP>;JVkG1C@ss;IpM7c=?%|IJOuC3mTww`T zYZ88#fgXVwQ<_xFN6JAa(>nd1J{KCfcdG_kO_aZJ59L$I9LP%6%|7+B|D|;Ir^X?oqK^^+^;qNz1kC~irt+qMlu$K$XU&C` zr1EL+SRmPQUQkRO#${CIF>1mIFG(vL%C8^YEOi;If-4a;=X8)TC4fN6im(Kfb4gI$ zAxlXsbUN!k!_qyT9p4%u$Ir#d>B4P*HgfrQX`Ena9arC2_odzh8n(38yAoV>I!Ov^ zMO5ZJGc=8m0e0ePr zBq#5j;L?!Rtx7HPxp)>L>x4Jh)V-Q~NN1y%W{246$@RE}2}GhGgGdc<-vn+v1k&XnK3GZ9iM1Q5=?6-Ew@JwRzd~pP^liaHty0LI#={mbwXNfe;n2Jeoi! zaVTvpd5Z)QQ+CK2$?A~V5H2`PYKYt^l*K*Cf`b66JscyghQ{|`MIIsY`0N+0O0(G~Yt(3{Ngj;PN|pjaX^~zEh@8{BQw`SU)Gw z-Q7TN!}}Dy#0o+8Gk&RFMuR_JFS9)wG7!d6PuEZDVk_~U=~;iRy$e;cd%;K+&2(p= z=|Dkr%?z+98_xC)7GgAfLWu>H7%?{UaLA5nwRSeQHg;dEKH7b{_IS%Xgeb7fIX_xT zjH&c6f6WXa%m#Dp9A&sT7*m8eab`J?+pi?gM7GXq6WJ+ZPHrHSEu3IlwzL;FU-oMcXz$4QNFb)7!$~qArSQMYuYVW#oMb2mfEq5Ha-DWwGMtF9DCPw%C%87vp6b}__!9` zuR!Thq=s>sxj$f&$bk>K(s1;f_X_pq{&Ia`dvEEVc9wQ|4f_3+ofTXkd>y|R?_d9M zI0q%@;matUw2@y8Ol2fXB2__Hwa}K}8e(MyQst5`9EXAnhHX`^7sc6voJ%l)1;we$ z64m6C6yZ21PCeT?0FfS&Axf?;u0SiG)`AW;DcAtRGf9vD?5Z{B4Itl&*i%d|O*082 zaC&~Y(7%opEU658fC9ukX??!I3(%O0LsZ84gNVbg*b$*(rq}hY}q?vA!aR zNi2Rfjq%Ce*+MpEaA9z%)?z@slZ;qyPBbm3ochf*vL$sj@N|ca=k(~%joJf1EM=QX z@fG6^9f$Nodc)KMb_oR2z)LS=Jm9bM6}GL*1%ejmF(EH0Z?axXOEMA$5~juj-^sUE z5X1@yc4r0_8#X0WAZiNsqX&=6+n+JdL<*qqIxu%xaC(AJntPYk)8$8dmVC{T?@IT{ z>A?^w??w{e-Vy-52_C^>$70J(IwCETR=Q46D3Q3-R8|T;%H6%w$xti-sF$q7wFr`* z0;#u62s|5LX2@$l6N0JUhUCI9E2=SHTsh zI4!>|#b4^08D~j_SX^~un`x%NYWLVGDbOPQ)V3Gj(G3)W-58e?L@A|^fynl=RHxy6 z3`%m*%Fc;Nd1xi;6w9haZgm}nrb?SH6%wMbs&@dojUx%L%y)M9-yis&o4kt*8Y_)v z^g=ZZh7H4x*a9DI{Z9E!U3mxF$L`&&ix7!)l&(uQE%cx981&KJTO5Qw?_rY$Pj?W- zXx!Bk40?sgfD?kq`RRcJj8_0&?{7JHRd}>w=I;AT5DvHL816*#V zruc%ED1c`ci5iIvO`K(XWN(P2{lp+RpVT1?jV3t#BW5TAF2G&YU9);~C;g_!x;FysJKBNWeaQ+jZ?*L_3NR4{S3EMU zPZn#u1Uu=wDPDHr$VN@?8u`&qRZGE3$asbBg*<4q{b^k(1}Y>{hu8P4buOVM&_u==js$#XmJ zZ#~+1fBV7qoj)+bq_vQndt|LD#KrsQN+B=Go;12K-9~DhozY_-)!w)|&c$<{TBudb z6an0}%^AwP)v+I6lUL9kS7SsfnjLzyh$iA7GfD<1mhug9v+Q``vZTxj6_~;$A4T_VJor&$bf|vVs~vY zyRYWV+X3CdmOJi_vLwCUj!x(*u_TNx{Bt1hNK~<*!Y$!hEprh z^vOg98-5bxivtAvSNj6?Cf~PbpzI7NxzY1(^ydH32=C^sd9{Apq(i!<6?#yWX5Gq{ zv%a8*Qo}-K@8bA;^>p%%n@WKsq@qPi3a}i@u6e>>SrD6(h^tdW0&QpoMZgqwHexKR zwWQ5+q=~boOJE~A8c;Ap_&kx>U-p&U?o`*r!DtnOVH&w@TL8P3!#FJ2!H_Y;jV{?D;8 z&XeQzoyth%QdFvKAuO^ejyExZrM@iyZ9-Q|_B8Qhe3dJ-*Fq-7{Uz%E(Pm`EE)Xn6 z8?g-Gw8QYV^OcQ(GIyeB&e@31MUZJWh+Hod&|&tJ%l#LmMsnJu8oQ z0R)FlJj;YogwHN@S61NtBHdQsB0sDgbJN{e3?FB}-th#2P8NX)k>TW<;lTkel#!x3 z5$BKO)y7}~X^os?Iqzs`|CCWFqd~^w6i8d+Au>wx)SbkUDK;4`iV|35K{cEp-+6(9 z9OW)wfscIl)Mg4M4tZGxW3#W1gV;I8D?6J66k=((Iq;R)XL#!@q7(NCH4wf1p@_1M zV;tFh6HfB-x6b*6{wi))PoCk%aOKpbP*Aj#W<=Gx5o@1%tnUAnh-aDX!B3{E04(rrg8Zk^%>Y`WY6 zQwhdEzEDlE>E{gc|+;I`{#N z{tayR`Fn5{)|Gbl!g{8MfVp2j|5mVmTT-!IqM;}l@GWMKf!Ut_UUT_qpSS1VDtag) znze24gp>SAz~H4^aa~pQWsdcN;?9m~cKGK@hR~;|`&lgfW`J8*as7NSf-p{M1aXBR zx=L4F$d`*1XMm`W9a+6_RzqmIx?$?v1Vn*ben7!&5}Zf{4`Dk!NIMOe62l~1Qr@BS zJ-N=%T}|X`=7q*ht9$P~l!x&?DMV>|clY7b)y>V_U3BmrLy>Ulm*%|Q)tlIjr%RTD zG;s=Prs9liy#fyl6-U&CcM+?4p!fU1BKN3vz34TNtgZ|Nkb>wFxzyF8z2thFiF-d5Wi=CKa`s{A9`F6=D=)yP@2g>z@mzZ?fG=t--BS>Daj|6Fm3i>Y zwzP3>pf7J_UpSO_YN&5%i4joOQhT|7_olpN#zaui79F_dk%fdK>&h@3y;9Enb*3a{Ka5od~EO0V&+o^9Wvqmx#1o$H01K}pht)^AK?VW@lD1MU}Y>J+~ zal3yp9`;jud3Fl0=#>q#5&~oX9bZy%Tx%i%@9ilLyDSYb(TP(w?qI;j=>(r#uOl9{ zh5peolpM*flPF5r=hsM#_dTOt-W`E+!0!Z$-#E{(@Yx|QCMdf>Nn&4vB5)1d5;FWJ zBZDdEc^t->f2aRLXb|JdS-rjEIN`UCt|KD~L+Uf4prYVZS=swNEQzq+8@4;=v_J00 z*^z@p0-hOfv${Ri0#;RuqWEQX3pw{;ztl^XLTaA#;VILqiiC!^ z!XelaHnY+IHj;i|+*P3A)~O_|5cwfZBB5D&OL)oP-WiQCVZdc~dtcmPv&3g^=iG_K zUh=4R;zlWv!IPDfc2aoJJBgtH52XwdzR^pR#I}hOPH`TN64}{JM$(sPx^7kFc``yG z`~lCK9Di7&^KNi}wa5i8bx2$;q12^Xqd2!ST&Y2fbykfm(N+qDs5bItx?ezy*KPM5 zCse9CkC8?QVh+de3Uo1qde3q70n^MIlIdwQM5Ag69uAK|fQ8b9q#(Z8gSE&yq*!7mVA52G#){OfU|nUXf`jUT z*$2?q5Z&J^uNUBTmSmH`tsRB?{`a@$dJJ5rpqw(Rx3Mk!5Jj;VLsB_BJjx%|^Z|GC z;>%-w_~I3=tLgm*dt=wZwP7xTh@7+EWG1{qaMh5amG0gRnG>vlH|#(xQ@R&RVr?cJ zG@LY6u{r1~%#n6t+u(uh+0vk}^@J5sZf4KDx1mNScsSpMNgv zTPaSYWK|n_ERM^s9+KC=Dzi!;*Mt)U!oJ|0QSgvUeaS7Sp|2)E$j3G>KSI`E+{+bX z|L)Q8z5a4#Gp(%X9R*usI9{=qdH~yLf!>j{g?(5(gfNd8|_AK{D>(L``H&vFV{dJBG zi~;%AAPN_Sh4;C86;xWJnv{&FioYAYC#kKn&?Sln#*~ZJ-Fft6W9{MAIxaNZTzj#) zv5KD}?6Ar}-Q8V$-`!pA-&|h436J~e0*5gtH*u}fP4$F}HN1?%T>r?ZU>3DH^;`2OhZ1IGA0FC)>qWKzY_ zUg!W%0G8%@Za&X(srr7f+@BNH7GZ!Q^NCFNdwyt&)x}FDfa=-jft=D+Kk6o3k#1d_ zV(wu>FffFU@^KFlBz4ua6oZ~Zc+0k}J2z0=@~?W9Ed%oo>uX<(C5z0QTg49Tlg1u` zbS14X>aC6ZR5=C;r_1F?x$e|NG`SP`5Uea4k+GJ%(fjqS|M**%wO1rWqnD-BF`FRU z^AJ49(y2qU?|KA-$ei#lsUT3mWV%v72a7ZZ-e!BtmLY&~mpSd+CeKB-iG1Y^e|6A+ zXXtbSFYnpLFquE8eT>kvz4x(c%#pE$baLoNP1tb(W@(9Zp+HGaE%E&bxzt?9d}T%_ z%wR1f6IS>8oK^)=-=?j1uDhWHbT3^t@h;nW)8U@y636%Gnl3qDFUrgd)1@a^H3afy zQ)Z<{$!k%$r5lEt9(BG@)<0t_q$hZIIlHJyPq|?4DGN#b5Av- z2cm|x%oTU%Uhn3?;O$LL1a94^&4wQgF1VO*PT62iqv35eJG73_$wfwkA?b~3itcHV zKc8h&-Yk8dq}AQ3`F&<f7r-`N}>reL1hFFiE9*o{0J@MHtD(g&8mZ(3Y`{aoFHEJ!??^v`y8l1?SclHO= zyqmfNH!g2s^0F)F2No`5B{4jGOXZeMn|(>gT4O=XPzN{*+oT~?7_`3J+*hC&9{U6< zvLX(a8*iud6NqKlv7ea%DA1=*>gjyXC?S>2&)~^_1V=vj(S$Wx&vTyW&T9B92%whUQ71Juetw$y@NKW#g>ARK3Nm^n$1tX7rM+#|8>f9 zs)-6=3!p0-<{0WIQUt5p(9!2Oezr3_-4*W@CMe3^z!BOpcMyOo|9jrI~GL;cnW&4tMB`3R0ID#@Y{N1uXAI{;)4iCkSo+fHAzDgY2)GsekEC`W^q97nmM4{l`xX3w}5{#a+N~ZNUBFur3P`_Hr}F6w7|pjzth#G`LDE z&6;3e9BvglT)xH}#=o=XCcoIp7Ac^#d_s$Nw$MS%buzO{C^G~gHylARt35D;bNU}` zaLUaoo6OnQrZFMOSD@8=Kfd4NIkL$Fd+*Fe<{nq1QgD+4c&v>MH;)i_wvUiDvl9K7 zmH03qm*v1x5+fGGvO))FneC-_mw_2_bFTbYk(M;$iz{D+7X2u^q%CYUt(D%w2e?H} zM~ioFN^^)lK+q-c4;K{t_p3ky{q{f}oasVkIWTpqd#7d`OvA5;TAJ>~1>VW&6}^=) zRo9k8GzB`fW6aQ`=tbZ_TM$xy;{c_)gFA=lE$qu$(7$Tt} zl)wT-f1|33BB<_Y>y+8&2i_O*{8*);Ny$|&fq|f>>yo)d5{+5 z8eXM|Xl4kMKDP7dC!~QKj95&&g66_YO|V(sa^+u_U(U?|8sly=Pc6`dNfeQ3Ff~3) zvDZ#ck=$z^84YA~%c+nnnt}!hmEe*|7GzEr@ua{p%I2jr5ynH>>smqv=xmS41Cd;x zVK|CyTBJ&K?PJ3RuO)NsO8!ol4(3m0y5IH9-N&oXo;>|iX5;lkAU?zv<>&v^-J32H z={`K|#pg9@z4R6Qk}RPL$fK&*&wA`F4xr(Xmw4+|$8Rnu;p4+)c1INaTbyb8ZoGGP z#w9={EyKvT412BT$IXhU=ozajgsefeq4;05qqc}23?yekmUPt?k$V$bLKKq}zBgWfJY$;d3 z8yp@oNBmo)8D|P{iT`vcESNQoJyfKDT|d;4c1$i>Qu%|f#pk>MJG_I1Do$w<%cu)^2d7ezm#RKmH$%=T`WVbDrhNuwO>m+ys^p;a`+@!*1{OiusAvGR#T@x!aNs4g2 z4=mhM^3k{!UGh{F;!OZ_N4FDU=#Xg$e=>F)2HlNo!&AI+=2mO_F6gK2p)UEp5UUxb z>>L7#JvlN)4w@OclwfE|MwS@DY#80q4t}r^*RqMjWURmG)C|hGrfT4 zatC39^3jHqJU;>F?p>Xx%3>Y(>8#h5)$1nn_z9-ed+%eyJD=o;Y)M7M{J(l zOhbtrl+y(+?>Z$Ks;ZGwrY8PbwXnw&^z4GcCWo5j%)#hPn29iy@(daiW1wVco>r*a}% zl2tKc0n4TLbkf1B#LWg6MiHrok4jvzYr`>x7ADtc}XWGTtnVgO5y`$B7!ORAzBccGbh9e4!{6_E1=v>}W z9$bpy%8Hmjs0APH!Ql19o89vdXPEFhChauPe6CzTiw;p_ozlp+n{lYjLFq;Z$JJU9 zBlnHiDZy%Hh6t}ElSJbLWgi?n{9ZQ>oadH7u{WWqzo@)4L4`(X&dL>4IYXpfXJp#Rwp@>8qveZ~^8HKdL>IUZC#^{|= zXo@rmEFeALKAwzl(!0JlDG7{5@JmRHb-jgYax}WY#hco77fif7L1cnR3C40zPVfyS zLR+gL1a^0yt!;g?{%ChM+bOqM?iOt}v@RX&)*+Jyd&m11#|S3@J>)(i_oo`1k^u|g zG);@i(8c@^5<+biG?8AFgO=<9JcTS0F@zVh!~Z5NmKGw><~i3+j0IF}VaTg^kQJ1e zPrAUGwIh$y`s=cWvZdNbH1tiZ&+PV4_`B1B%_H^7p5-OxQ~3@u%H(LBA<8^r4&ow} zw+P(wQ%~hAB?nL*IAx=K;X00J!?sYaGZ77u&fIE{Hrp8^1m7LglV(ie70 z5(!eD`~(dy2;p}=c}uie3hVqh*1#GTpoe;FQ6w5AAXswvD&!#_z~phBBb7i$d_rSB zOLGsgT`2DM0CVe=y3$9-le0a90QYeBrW|%KkTkBMFnjI0o!lGNR=o&5ssucdgQ`9N zs*16f>BE*zsS>cN5GxE(qci_`xq26=C{ZXx=4<2$!^JMK&X7w9q<@!Ha0P}ink@?8bfZsSnHzEMXEwFbP@!C{AEsgD zNqEeW*>qjF(R2kg0X6t7W(h9>1=$MN=!Wl=7k$&x+j{%LG-&_U$&h-I@nn-W-f^^g^y$EZP@eWU!&BYWG)$Dcd3d#Oc6A zAx2m|SZUJ1nVlW>r{RM_GPxKVBqu1uW>P%u8*MaB13O(Qx6A>2SX&L0|xsTCtKMzex3{u>=&+fJ(9O-xuiazRG_r|d+O%&c&mK; z^{c|tsPU5h4eFYo0I#a$+a)4*%EvD*#VfW|ejfDxV~Nl08vEM`!A~2m3h?jBc7Izw z{zh7badWaa{{BMZW1Tg`vj!VkS3j6Jx4v|*An#O^`Sc|(an%B%VhjqyVp5iilJj&X zv~JS4ONWOA9U+Mu6{Ae~S*P(*@3v$ca)zb2G(ML3%SkCQG;+jAWP_?e%8t0PNTZni zGIoDzUPW~1UaurRd`${}mI@vC#N_5VFMHsYo-d|xdp+9L!k9pc6W71i(+;fcE6RyV zmuglNi;m;r$&g_OC5)xsuUmSnh0&g(*wNk$RDdXkKolWT<(-DJ91kN^n5nB{?6GP3m!ATo;Gz^X;*s1dS^tZqAf ztRSkB$5`XU98r}0+AMDqqgr;|hgnec2gM9{B#R;7@({D!`JF&ARe*FsfGjRoO)R%m z$;!(O6N%^9D!1KC2RajbJWCo@@kiDw@3GmZz(_GR?+sm5^#$ar;B_^X?2)F9FZY`B z^N+4l)10gE2^H)%QBsC|dmK3p>VqsacbGW0T>s56e<%nBF0> z6UQ&(13F8wCGI6Gec(l7?zKdMcCxm02SaUwIWr<4tzbaf8dnTc7ULmKG!dsgbqOq| zJ@efa74x>eA})_4_(e9=eSzU)wwFXgb9w0xI-=ebePs18RswhH*BCo><7D^jbaXKRmJJ#18k3_{ONa^K zX(T|)HjP27oBARU^t18OJ5DT0?enpG2PLF(o~eQ&TBKc?`KfcdQ?BC=-ch@NFdCk` zpaaQeo0=gbYiXLKdv3bbrA+1`e+x!U@HZu3%!JW!y?(5BWJjN?_x{*4x5^pQu&~%w zu`}otQt8;zsfQ>fvQEmR&M7){=OJg>mM%Ay*21?h^kq1RTj@&JT-FIJskSMDQtaA> zFIBz?!wx6UM;aAz@ZiJN-W!bWXL9$5^O<6E=!?-*M7pLN3MfT6t6< zsEZkS=K$*H{QPWJJgd71q#xt-dMj*nbzSl+W4VfeRiNDeQWG#lqX5>wi*wF^yWE$6 za?7p8c?cx%{}dTAn5cgDCNel^*Af%xiUS$75D(1)+LYJAR52c1`l^SRw;yHVw17T* z^OXfDefc_mUe;Vkr70-5Oz7Y3s4IGbk|1N$R`P;pAADFn9=?(69H>!G^)&oqc<8;^ zK}@9z*eK0)Ks>;(bF#~##xR&-?{zxmlj72CX_Z^FN#HBV%?oHKwJq?2BP%8aeovQb z>_y7*WWaUbL&XThN83JuD&2Np5O6!;<*)`#i#C*VwV{yrb452&Abuv$!M@KEabe9Yv^B0CXLm>WSfA4H?z>|m8Q3S?=#?65SVX=C$ z@?dVB#U@9V*nl#zlve!aI%FcGx)8(g&&7v=<~A9B$xIRdh~7Od!o-jTJBURp1%XV} zJ63OYO$St$e*|U=8*3|OTg;kdY=gEem96)MBX)Ef6vu}=CxJ~kFjy`F7MWG-vzF4< zbX7bMQ0wU%*A3-n@Z{^RjeU(Sc&0HHbL9qG2b?9f=DqcI8=GULbQnN3V0;qi$R z)O-OrMk8@nJPa)S>Jbxd$`5C=nS0vA<56ts$KVI$7Z$mCP{sq|6G$SUtQue6T5XaH zDlJFu%N`wAoI>ue$lx%SVrLz*ib`k%CjT1xy-=5#cDMC6ryqD!K5(I(4?TIWVcY1e z>r|)gQSw-eRF;h+`PH@FRudiL3Oh|@B9|qfEzoiwz5dV4)1F@A=={;>Afyce!#v%^ z*lvoEPwy@0o#Mhet}o0Y-UK`8kmux&a5ik;Ou#_iYtSEqQ?(O@Ncb zREgA>C8`6*gEKDLU;{8AABJDOUAvrt3Ic9ydWoz{K=2jTk;Rll1MOm1q;EDkU0-Cc zL@-N;FD9;`oC9YSY$OQ%!grR{hpn7Fq4YE=OFKUaiOG>p5_MjeSUAq?UgTnth^*Y! z&+4d7&0ciSD%Xk>-;M4|w%;<;wxf`1i;h)VTdlZ`xvfryd|O>6I#qSyDg`W!Gh)y{ zg@KWQ5&q%4bYjRHMd@qGypuCY2W@jKt4KbuDUF}9uVunSCPUi&0SU=>iWgIFKo*4^ zRszJ3G97m-rz@h;ov_B)E3%14s;hj#OQM^Lf}DZly&4$JZkAIobq+AqKu(6AkcDvg zuT{l91ZgJ=VrVdV3oFR(2doCr!8B>sV|?%G>Acoa(~4a+ml%J}peRDR`2r!x{P7-Z zrtR{J#URzCPl6xQGud1WyF`18o2^I$AzFiC&K@!-QVw>r?5a^Z<@N~a1g^p#Oau{K zIo|{oE5`m-?utkZqMxZOh_FZ;Qd5exl2l|Vpew6$4xnyWfE;XOjc*ly0#jX)u4dY} zsgs#n#6hAGC<7|VhKNphVC9+>*cNjtXd@-1L#i_+gShF>*3M%^0W~bu%8tmqg;Lf` zP(I)Wby|-$(r#VR8F?tXqf9E>#o|nm*++cYq;f{C5)5n=RNZitn6c_kmogC?svWgFZTODC4f{Y4oxA5aZP=QItFof42G zBtOZ+aHDs7)|3*ylZpBE*j;VnB$gIoyD}+;gKEJdkKeZyEhoiqr*sGZA4G zGP&FF3K}K}XgbfRnPj^cl}TK9Z)7BmqGIf+cvB6TSv>Mu`VJUnZ~dw1a-L;kXa|h} zyn!(KQlf&ug)0r{ivl6tmhfH%KM6QA;2S?PI@Ry@PKLNgL9tibG+pCt#2XZEZaj4h zUJnhXf>P+MEDj1&T3V4>Uuh&v-3SiFp67R<<_QNfZ;S@)ATt3)a+n{sK1Gx1`!%_( z=bMO)Rn}F`?0?l?)bHO8#%Ol$xcJ)hugForn||}a+yz|iwRnw-Z{&bEL$3UGJnZ9C zB)pYY9QZxlDF52>E+atksz)`C_L~qG+&Q! zq8nZ^cU#zS+7NXN;lKRze?1kgfBEPC#=qy|hZMp8^3VStw~+tkpZ{C^^Z)3d|4#q> zpZe#2)Ia~P{`qJ9^FJqqAB}KnFUfjUwEt@DT!Q^y|9frnvQGR}QTwZ+{n!6NYW?+p z*FXP@{`tT3&;O)<{#X6;zv-XzmGQF_KlV}5fY z=`_LX$%m7}(dmaJ;ku;EhR5@$Im?1Q3r6lO_&Mj9@H zc>^AU?xqJ<2KKh_jqI+*v+#vH$&nBac;oDJo&^Wiq#PL$R~(w)g4Aq_tld}QhEVn8 zB^^)OtKhl@^|M8e{``LM0eeUW3!cjSt=S6NzpH!Pw{Q;aT z4oAnwBV>1d(=!aPlLjHW)2CD2HjlY%O@N z;&o$gaA;))aemCOnb2pKqz%J2KWFb7A9C0{`Yqsb%-n3Mf}}AX#cq^!2EFxBal@jG zReVRJC9jNdLU&!YqjkRl{B7caSwZ5gXV4WEm$0?UCr*$C*8&_2`PsnvEHQD{yenR) zwg8L%eo4rLr&(fwp^Qpj0RC$fAkra95$!8hWr$;bwDx%Q<)jF>W#MrvWf2Kv6 z+fIe}o+?`NIMO7w6fbNRV!GifKLwXJSzP4@-JBV2Su%Be@bSrngJ`{CJ?(=knSZH) zZd}`0-PlH93z$bx z8|lZwMcyXYm@b&L!=0aGYm0D0(oJcKSxTc~(cjiCw)L^i*Zh$^bZINY3#h9hbsJO66}f37O|lX*%DSm9n+Yba-AQyfKlnne_{dLR8A0c z53@8zEsj>_b`DBX26bO6I8y~?4l#tAzcfZ*Yi-{!qFtY4a9Tg2Qujw4_shO_wX3zA z!y6c*TIaV0%QtGH1OOz)Y%3s$=S4DIP!AHhsxmdhP^)dwYz<$3qGeUTyNY?$z@cel zHNmR~r^&$9r?7{M4#nH5H}T%P5-+aWkEqx-b8X>sKgH*)TgCg2 z=v`62yOTw+seM(eN|znc$9yf4^(}wRKIP9>=}XaOliNzLQ#cI^17<4F(y{E$(nFo6CX+0Ie5^Pf5vaSPU4X(ha}@&v93ul4!p`@t!0=7|?@yiNwN zw;M~=+!Jd~+daSsVRShmpkco;uniY}${mXSTg!-`vO4qfmnQ1&=Gw-$Ya7@f05rY5 zmcey#Oyy{Ji0D~<#ANgJp`y(};Rj-CH>l-U@~%U}K<6p0i#yl39{D`M=UYO81?!VS z&SYw8N`D2LHGv83MCL;PfQ+_x1T;0TXvhhYn8@p5*Wuc|)+DFinJgbrPB)4sN(rr_ z!=wSBRa<#0TkIS50Qd)Ha9&bKA|bU6qDV2V>hr`PydI5?D=;fPzBHj;w7|Fv+}(W zr`V^|ahnk>V#T3k4=sx-9Prry*4>tSRNI@loIuGdmlG)QQFp>>(rCOR~OZSl2IBtoR3LuDVMB1?DWg+gB2rzA$ zm6q=9?e7oH&SjHW^UON$z(bn%$lHPc!!i)EM>lZZEEuXHYgT)cXFcuiCTxmTsgT=R z(qvgac|-ua?ChjETXDimW0)-rya(A!@=CZrPIU0rZXV_sGG8eQ%BhVZ8A%<&vrs;g z>R*xpOsSDC3 zG!INiz3GHZtZcMX`>1_>hW2SvZXbR0Lv}jVU}eaCqH;@v@>A;^450J-s##F6lWFt9 z;bx1LwrSdA{3i!^j$cnk6BjGZdxd z(!FS0)Ee-arF&9$hAvwEE2`4e4@z%b(sOA$l2Ux$g0LUrhVQ-815RC3uPrW+$eh+?XO0QtS`}e-pB){Q_DxT0)&xT%7ZrqnL|G zAx1-yg}_nM^Q6Le&X>f@=Vwc&rTr5eBiVZ++8uL%d5`;BqY+MJoqj-9jiY(zyX3Dh zG$iGcTFI%5-;UJMQWly!*PDab4zdDp$IAmE8D8E6jl_EMRFY9+}bLIVX3DC7^T6x~6I$i8l=8Vg|3AWPC_b;%4WOCMQ zdA}+qH`)pV&npTarhw^BvKi(RP%&zKwv@`bRaUiFlL0K7nbA!*nz4ASm1}7WIHAl$ zQDropNQ#S@mOf282>P6%WLPn0rDrGRbPG&PTj2^^0xx!&NyHX$e`aE2z1BY;! z?EsJz_mx|$WeG!GBCT8Iy5;K@Tt&o6M>r@flqrGfMj{KlAPeRb!#kLduY(f9$+wIo z-WdGj#Sk}2>tgZa#%ruFkWZ$SFNH{nNx~E=dB^Zsm+7{5toVfO>^IE7tgm`uMx9Vj z2Qel9C68T-CN#)sS1zgM3psMqCO)nj-NNu0cmAO>)IxwITTei-=`yOAoT&)+^#zGt#D#v(><> zT0`=CPcjuv;NG{iQWMBGdP{V3a2P%-+AZmB=ZBhtrBH@MM5kNwMEQJb8%^nMcdH!1 zW{a-R3K31hP%`A><217&kaPBRuV7YZ!|i-oCTS2B^-{u_{*XAN7?RkQR~sH&Zf_{a zT;tZBe-QEo?nOnOH{5A2(`G^07dc|o8ggwgum^%axxogKW(+6NCI@Y5aqOV2^=)z>CaYxE`e(R@Zbr(itMp%UEnP^O-!D zyF!rE;gi>#9ax8p5_b5&x6y!cw&NfyX+7{EmP`tDuZVa(E?59|jtiaZJUi~=@zEot zB7=iia4?3@{NcCY1PkRxw$h|mCTe`q=2}e)7!hY3Tkni8XyP0pyvjQH=_1UVrZXr$ z7(rFH)!2v=$H(MT_~H{;z&$L+CE~vkjQ3CB0gSWyPL}8Qumvh=;H29N1^l*6 z`HHocEkEA+a$c2!Q6y{hOTAK!W6LXw_v%(8iuAE+g_@^izU zmeaL$q(J2#wCyk{dZ)QxH4SbNfKWSVbGWygaA8H61%isPj_2`SpOQvtm3ky*6&_GG zX!%8anHgZFJ3BYcfxM78Z-HBK!L*wbSK3R?K#M3#9nbba?Pcz;hGCf*THkyxQ+5WToYCqlucy(G`)e-nD zJ&-!K(>#7PvB(9ouM3HJp#h$5VYkiIG{>*Nab+b@QjMAEWx~|2<|e~D_H4tjCD0>t z-G@Z-?Zs{RSa$N?$}*_l$;uZ%h);Zt`OgG-x)#!95LKmI6EM-m%M<2OIYg598@Zaih5VEG|Q!TvdN)uW!8 z$x|0)v#r1=#AH83=4g_?G{qW184WYxS_N6s5`=-H`uz3q^k5;Q2-KND!+aSYAkxi~ z8F1Fr-YcnHwUS4riU&~}swq~^Q=@QOM>6EV999A*%)~GwUco169KsUAlwrX5l(Z29O93pSOGdkEqV7L0rjVOg zl1!{;eUgQ^1hF?b9bLRR3TZg$Ef~lZ2@=4WfGi*awlTWWXw%(nZG%3Xh+xn;+H!s* zo55lT0Y=UEh-uDYs0Tf(moa|!mRyxRb^(V$l`#Ss(-xYxEXZ%tNqkW7&m(ml%aw}8 z$3E`rC2J!~)@&n`a*7G%sJ8B{n_1vxegfs^i|$IQxDI5vyMF2*jiD*zGBT-zYaS?pfsCm>Bd(oPeufOF%gW@hXSITl4P$;2hObDHM0w0~3hS?xCP zV*+_OH*2L9UN*IyR0BI9dmimUax6%@FW@cDA}+X+ul)eWeauWD0L`grl!}V_a99?Kib+c3nll)glXm zOqJ^k$^iZ4eW(cu<~A5j;-#AZR+eaG1{`0YWh*jQ9vB{@gzPx=HrD?5^2x^9BM=PN zrWKzwz2@pue8Rm0#iu8myOJ^wpMH(Te332^kBc+)ug#x~m{2AjAzQdrUc8y?kB8zj zahzL*J3q{Zp~-wrFw|gIq7@**g;z@caR81o$oM8H)2w+b%26+s2jR#{%>ZgPKc_-2 zJhaJsz2C`9lHzyuZn|VXUv5?Tkn{wAgw_r<8?dZ+Bp6U|QXOhDmSO^3FjCt~!`KKO zb2}#iRt@n8T3Z! z;XFczX$`FEQGgnHV$=jZ-gQB5cA$k!6&o2H@}6?bMZ5vB(Qe#F21`s*PTPh4!@X0< z20b`O=$-Sc8a0FWJO|c;uU}mT&OIwD&Y{9beil13q9Q(zZI>*cA;ndt1+s9bDbtkM zMu?Z6-iy@=b>h5ts(}!(VvLNZ{>3ndlRo&@5pvwR833I5NbzrBPQ&_=+A%v?A;ecg z`82J-MGRKs?h&)$e22aHC;kp>jDNMtk_9bJZ7h_IGp<+hR_5);WU~}#5DBv$!0wW4 zpPmPjowh9VmBR`I2{i%(K@TBiio_h%2XZZL_WpQ}p`D1%@aa;0Q@d#IxaIRmUHMrB zH#GBe;=YB#s1E$Ahb&iJvY5)fHxMDX2oqf^gs~mf&izgyl56lPm%K)!0f8OllIGwb zvyRzg+C0QG@q_9N;6NtB6PFnBkY|dQ;ZfqTjKkEeSk`n2!jFML@fouy>$nd956k%Y zqT7iw+890?`azQ>(Lt32&WI8~YoeDQqQ!!tP=`19=+c8MrN|_>|E$;uRLR~N{3 zDytsHCS|o=E^6HG>{ZBjQ998%4pJKFcr82g{v-pbeasq5;~^B6V1^b(&ua*CtolAl zjHg>%MYOLsjx96)Da%Z?Gc?$_Q(yZ1RsB_J7nKS^GHeK=_GKGx-+a z4Z$f2D;v1N{aTYG^|3YtG6=$vxec4vAc;52NpQcn^WvKqyHB2P;bM$`fIBAQ%q6fl zdNNxVHtYma1CfrYBm6w2LuS}3Wz+-fTe?Z5Rm{^=Y|3TrS|*=jB3EK9AryC(QxM&Q z0J}ry{KSKJRn#fAnW2}z4!a^ONnn#-t7pd%z01xM2M6BP3>Fczke8M@=jZ1VW{HxH z9Bn}TO(9V?>votK1#RLe8rAiRA`mc5G!@2xHSH%IGZA0jUbJ)%EVhShrwyxV^-2j> zEx2<7LV<|oaG(dBTTBNnlp&^u1BGnSlUORW_T?ABNhH6GpdcLaX=Q{a4tO8K^R>|b zft$2h2lMh|24_%W-{`P^gc9?gGme?gT(6YZzk>B=gD1A1gX$baFW~#nX(6IufI~(G zvqUK)^zD~FD`kzP9mkv=35ARSDUQ$qv0EJLq3)D1#>UJa;m3jJf#{!(mio)hPHN8z zMh=Q(5UxHhRQTPKDg&)UVl>DmQC37^sJy4pdpbTw2D6P?w8^?G=UX=$GxNwweZtn= z((JK@u2*yhBuax=SvFR5sqPN!nU3xl$c`Z-;ORPC!L}J8hF-V!15%qF0h@d2srTB@ z$~c_tkq~R??Q_o!PymjUYi;0j<|)88$q6RXem~BFW4$FuGwX)2XH;`F}f>de@*&mZ4JC90d=0$P(dCuO&Xf{W)r1dt4ze%^ za*#hPEx{IG_uab5B!`}m0mx$P0-f#a6LKd1?-lF&>}msrcOszh*YWd}14qo)o8C}< zk{`5Pb&qg6FD)$z8_}J-H)Mh=(xHWcGBC~cp*79gcVQd(nl~fIa-X;O2!o}s#paq5 zs<#X%%gf6sZl>918Nk}76tz%k8%-M~To|%DgysEn`lus43ZfBLfrz^nV_qUIz4#)| zQ~?yR`LwO8Uv7)2jy~1xmBzMNwPV&4;ozR?=&D09Q?bpsdf{hv*VSk=r^A%9{WZ`A zRN&DG)wegndm?3LXs4Fjmj-z|f^|jA%7`FWiqs{_`R8z2DeV)iw6eRaWE(X_6_*we z5$!nT4m~$SXhe2aKqqu8p^hAAYZq+9TY)w!gvaN~=uc~>9)T(rTJf(70Tr1H7BSt7 zcINE=x4b=^1v4q}u&%&Aqk~2>eY^Vf<=XD^_2+AtONeLcD3D@K7}?ZOD8ec<#tEfb znu=JGuX?}lg!Fvv>(#B*2Tuj5-=bJ-Ws_&K4QAJ%*((OVWRC~4g;3SZk#9ritc{80 zZGvDLL50ACPmQTU6J@#=_S3Sxh%v}#H0WtK^fObkn!1!b+O8I?&ON}9h-=;a+t*N< z`ocG=Z-eeVSNqhTj1GZH@}7GM_CSml93dBPYIWc&#Gqa>t@o@EPO)6lOpgF&N+*0q4U2oSSUF|Y1Q_#MMq1=vRf10$gHPFdpHG$ zC@h;jf};{Rq#Lj}N1|&haWEQaoMN55P$qDJ@pCRs)elLmjSN34(n;EuSYy8cc}*po zdY0HuWsczm9qQf@x5@N-t|Q{a7i@~nSf?c?m&1y&2j_Rye-1gAZ`D~{%0m%At@R4( zHQH^Y0nDPk8w=a+MjBvJL-|Banl!~%D(}RX7iYtput>#5bOSS4Pmfp3;GH)*NZKJ*Psii^iNZn=&ADde97@VSEF_-E-iV;;d z_tOTnzB@wx_zRxG)CfqGz$+^z+ldr8=3jk4tBcKxiCix`OE{~_^I{$svox2QII&|! zAN)^6`kv;vLn68SYPze#betlO9;F!Zd{&rPDk8|cpxDkV8O&WuIW9`A%&U^8W(58w z5veP(qDjtH#nXptRh1w_RU_UP6^dD!*C;+zRZM!6#a*Q2=rn|BS>@X@Z)??xeAUUp zoC+;f)5mKR=%2RCQ(c8cfS%XyJg#46I&1i0n#>8Iv?+&m;?RyRn3^T2Shb|6i@)un zRq4V1>H-v)L1amYV~_xT54~UtDyvu|ZmfO1_7A(bEbYnjuOWf^3)_F*nY{Y^{^G*@ zm7U2C3-|ASwu66*bLrh4a)5F*&hGZ+NW)?Ig|)>lBXpF9fF_%$?c}NiOOEcQLy1Z zArrR($xVnlkx!Jx3RI2>X_a&dvmPvqSQ=bm@&?hO+5IzG0S5d2#dv~q3l{myEQzK< zzx0HhUPSMv0UTc#f=HI5OrULBLBvB~wWBBA;MCRbY$Kvjo04k}=(&zJUpAA_=4a|| z?o2+vxk}HwG=smA@$p8FH-;!oS=!PdPpeoxSr?dCE-rb?WlGUe$dXus6)l5(zM2Cw zC@+5ne(o=;NueBH@Z56$^Tk>4%t({+T6z-8Wsd0C{sht2M}rC7ZM);a*)cMTENu6I z3dqpk>CfpOeVm(P7A}5qKZ64M0&j7-4w4?rhFNiIkz<95^A1X6{_*$F9%IQ!eMYZj_`QI23@hC&*;7hua~r<$>+A9{x!9 zvXkA}Q+X1^zZLfx*)01!n}JRko#$6zURWft-Agvckqilqc{n=zFdn`+I`1v)FZS-- zy7lX&JGbuK={??iJ;bbjf#fo$`@_Nb+O-#hu_UQLIuD%0I~t4!uRrwOjQ5}nac}wI zcpx`p?jK?M2ktD8fH#O>BXEKWqt{I3O`)^b+eeGnaEB)CyxwGVc+SH;D2!0>$z-%Y zM8=i_9PHkgV=Qv%K@aX5EUFi{%AVV_8gs}mf<_Jod&f8~Br9x*-|#84g&_d!$qMn7&sGGe|TLqMGkfw%N^&~xmhjIam^dTu0|@XfoU(Mj18 zkm&GYd^*IuJ|JcXBalp5{Li>}gmsAd;pq5y^p0JFr}sdvR-CL{yS9Z-d#^`uV36iI z$~Zv>RE69!02m-2Rr@qK!i6k7xCWJA7z~gXucABX9j7SPFMPqw~Uf4S8|iH+6gTYu`UKkltQ z|5NV|Po6*e|Ji#N=tz(2Jg|oki-JUnC(+naB**`N7IK#v9zUIH*f zj(}kkKsSIU0W{Rzn1@Ju<YwsR8n_W9=I*Dyc)Jn1=C$gPr z<+Xjx&1&t@k@iG6*0GeB5%&A;t*XENR|A+C$&M|M7Eg^xFge{eIzBZvTEw%_iQ%#HBeWRKpx(sfY%n%DK8krin4JvRpaC^nM7^`YcyW68 z93T&!866v)z1Z1yc64@vFwag-2SdTs(Ddx+@cFT!>0s*o^wi``5zUVP?8NBAS=uGV z@#4g6H(JHBpm+gaf|+weV`FTpZRk9(pC*36@Z{7*x&1XbH#s&^#KSX1U?zTTX$qYh z9vd1R?+iwU#)sZR?4|?U4_lmWV==`pc=TM6kJ#Q2{vVzlot$7dh9@Uxr}4EDy_}wP zRUaLlDRu@!)1xya$l2-1@y<4q6Ey%GKu~X@s8C31A&?sp6d}RRqth0bV5B%S23Q!L ziOBF_G;hYzL`3OI1vi|_@wur+eI5_yhfGc^`;z;n_Fa~W)#G!v6l#uDE?2N;+j`G+ za;pjbJ3kEetgTh_n={6DSvgTl%sTv|7O#P=eF<&eNEhRVFL-N`25)s^xfVA|i__B> z47{w=>$N(KNVgvXm4)7T`yH1n^~GAF+Po&j7+=^#y}33^oPhx_@AP|$6T=so;WE|_ zxDtxfXC`ML6xb4)9v>R(^lA=`6~ShEtu;J73Tfh*_&qjfI=#nQkaUPCmJWNY2cSSM5uoqmQy1$Bg&> zh-DOUW0UdT8wD*vGWj@!qP&BY;D|U%4o0*jtv&sTFG$yF z$SAT#ZOS#0UIyp-3v;50n|7#Iq@y%Aqt~D$P@Pj?Hy6zZWCFoO!_(bfin}gUfty%9 zLuL|OorXF9(3!FYsT^bY7am+wC`uTIE=+y)E&>Ub5AB?#3QV~4Nkmqy@o^UiUXl8H zQn*Xga~a4XzuE-k23^w|seHk*AzWIg9Ol`y=89FZ=sI8F<-y?eBb(w&U<{l&~I6NAHM2Vbi7$;?&AmK(Y9@4wb(|?Vn1?2b9?ALrI>Dz0IH1y3w zxJ_~Y&1$V&(gVBl7_0d3dJW(!Ea@XR*Z%a=MB>?J+ii+f^uVp`iI>ml^CKAF+3I@5 zSxUQs*mX*osNkv(3{0OL?(gq^glkpT8awLuX(!kSh7}4RWN;p?&yrYON{()g{1ea= zfEImb=pd^%uWf>LIS{5Y)uI_)@IVvPcY_~+C+qE-^Bt=Wpi;6n*q=A(DqvhJ8 zR4Fcs%TY+fsF0_1t-4X6$QoHS4bhF~Bu161Ez99jof4LnQ5p)VnSo-F|ta4?kRu^}R4R6XKhqZioB45jLxYOL#W>{;R z6@$GJN3OZ5)8Ot+DH6nr(!9MZb?2XoCD%q)VHmHIi z{NI82KpdSM@#tduQ*F41oXySC+lPpoI-#T-HzJ@rK@dkbQJgA6vZHN=5*aCCec)c3 zDJR^<^tWDT(1bVw!Ci6P(oile;3$V-kIHZ-ZM(i%eAfM434qDx9MXiE6nH~GeYs{*Pfg?($f>B;cW#P*xeFn zYaKX@abzNbgo~r;SX!+tJtfme+q^AqO~?G^>Sk$+!Bld|p!-(HH}F7D^I)7R8a@5m%QIU{ZgEB#6prqpS08>-eQxNyqjTw^E}SRDWksHFGQa578uBspt9 zEM?7Um^?W+RD(tfEwg%o{TeuY7y}4r8F##{*al6pdBl3aUMUyyGqWS`mP+^M^)vci z7>vLH?*Np66P!krNoFgeNi+K;9Bb#J)Nc8Vaf{u;qSti`pHsVq=62t$TQ_|{7-$z0 zH(@4=xa7jsP}wLq;=W2yOMc?>Q(TQ;vWyqmovKK!C>B`O+(#X9GY)a>G1|Lz1GP1T zbCor0?ab?+om}0s+yvTKfInS+BA)HYl%Hzya_Y1z7R>4xLUkBkxs?}RA@HuC7^<-)hlI_nb?&!piA_@Avy3#k{TEs*a*oHg0NJnuGs+w`Xg10 z`2u#H7$c;#bd?WVtS#q?PxH}g871MK!X%2*N70VynN1Ic)B+Z9Qo)#pNdwNZf~7;Y zyTZ3D5*%+Aw-%foP!P>}F`zDW#AH-pTrM;!b{HV6riZ)XMR18Fh&Ph9NxscShi+t) zNEC>mli+fzhOJqMef*t8Mik1%*7_o@;9ef1WY5-yscO#FYwJ<*qO$i{yCba{iIny{ z2@dQK=?`i$4OGb6hS*lc3P+nSTiYollc3L;>wK9pZv++dj^H+Np=MI*K5Gs+1ou|DLK(untdr{ZZa49NARd^j+ zK)jMD+BdV)lHitv2C&k`?IMgjI3?6)YJ?07ToDamztt=2(5xfsYk{-NQ!Z|5rrQXR zT{K(!d=uTt2j)lgBO6pSze^_B1ZGmT;~btl8Cb61ZXAwkeub^b=`?d+Sj=JujqT8c zh6ls~Kk*qN;unaapJf4AB^z_3VDMdsWO*zct`pU=v!EbbhS`j4x>uquGu}b4=}iiI z@3oXQ`Jroujj*aqaqMJtBck#{ZWUo^(NyT=Q2UBor!)vMS^=@b8Z2iz9(T>Y|NLli zHmlicp>cBw}$+r4LR zt>%fYz)x_TzeYMOa^b+ZQQgfpgc-0HfztF76@^*S82#e67%tBOT&NY7H4S)jCZ_8h zV1{ax6{(71xOnb=SMR&y3XZGM2)0=wm(bN2dN-^7PP#RY)ZR&vp@x%yBL!RFt6B_U zab^K*6?7V#h_5>fR+j3H1IntOqP63kC|W->NV`rsCe8+`{fp@KI9L;c7MyUakln#e zn*mZ_yBN2nM%k?&q<62uNhG-OPi!86h6bb9E~_@gO=Bu`Ke0t(fMLUYFp8(gdF zAVsERSeQ=1GQ!=?+o6V6zP1R2&sFm}G{P5_W0O_zCgiu|YvCDm!7(`dVZRW$wBCg6 z+NnTSh_>D}EX@pyM3n$njH*FJJ~0EBfFCzTjQBBMSh#`121~1qD+7u7U{efK-6rPBnz_s0GskyM?atgP=1~TI< zsdZ5h_n~lVm0PDmPl|QuILjqvYtDkPYfVF>nAs;n`{(SNS0f2_klF808^W0}T(;?& zY6*{Y)VMw12J@2&5pj}M){=`6TRC16 zHqixZB>OgoZ7NFw&97cZPKwfRD&YdE~TQ;5Y`Z*skgaD)KN|iWgx}uyscay(|r`{sOQ+jSxD%e?G zpgR!+qkp)HxZUMy9s1X1thDJg%+zm+!k*Ai;A-}S6i}1h(S^8$yMXAqfq;00;o2G! zC)-#Ou^OzaJ~A}U^nm&4;Nr8JY9SE1=aG~x5KVjRdtxG;uyt>KRyD)uHb2;7Yo#F4 z)8CqD8(cQ(TBm=d9{OVKA`o(Ud2OqKjU&H=*F($BDflL63e03&Oity}OmP}h+gyHP zvNSw7HaVTg*>Z$ai)+F1n1r>s0%B&Hg>mR6<5=g#JJYO}@Z@ehjCo*A`rqk!y$YWuHgZA@{4J&kc`Y}ENoUwIL=wFU1^jqH+y?} zN)2V8{2}JQ7|bpZBj};F)Q%5L%#7k_AfVxO9v=iT+du4H6xX*{#uPwQMtwb6hBPp7 zHKrdr$fasy0a4a5G{}8_Y1Fi;lUd}RL)!i`5}~crnG254ufCREU%09}rLeH9=8lGA z$EQnQH;A@&AUcEZx`U1UjI;5k4_x&3>{1)sovb{rvML;E2Z=Tj>tOUSPG+y+h&Ych zR&hw#HP9Wrr`8M(mU+upsWgrwv6CaE67`2g!EQ^X|QGuYnlJUfQ8sR>j!>tiI&2)gXF=13(P`{pG3{aZMkk8MB91+62Qc4LC+bfJx zY>B93^2Bv@$zc?A8N@IeF;aeaoEO0`d>_L*###!)dx)+f5h~NDgdofV zUq~#~9qL$QiO#E(4>9=(W_yDeWZFjoU%l4w%>bv)Q6nK_c0SXUUnF7A<8zO9UV0FT zwL0a)p$9q+W12VPd5Ez#RK83pquF>W>IC1#%Fo&waf~fQV>GxHhE*ScQZ_Iy-dPVnt2yH^wskBVIVq~=L`gXZ)4ZSSc#4NN zF*~dmLSkJOjmH2I)BZ&bxWZhNV!i?VDFkg%tnu|yUh%PIODWH(W+h;+kYOTF*_#SLjN z2FmAgX$V)G2C_$J%BQJ6XWo)~+&NjZm~};ju6n566pujA*Fs_kLYtR#(xxL=JMIpy zfFm^NSOU-<$0{z60^QI!jdPV{tRg$@DF@S!0XtL)BY*atphI{K=?hcrKkuDo6<7tv z;C2&NIOqE1qmyoEFDEQ53FfGiwv;B-*$I3tGr2}_#!?2w&XuMCQ6KKq!64Z{z|)^vOX2(MpI4ub zc`r$JV?}R^1l;=aZnqGkYaJ^tx-7H;=db@PD|;(Bc&~Um!e0}vR?B5ca2a0?>Wj0m z?-m!9p2EnHb$nRAVLOd}tbXaL_~KRcoJWX<)&E~?^c3$kkmC1tr0f^JcNM3=%T)nl#4+cv8ul8GlU zC~;s6J8O7$HA{%hq|(r?3I&cTT1S3Hza!5x&HflXQqC0vm-@|Sw^ePN6GlwwtTJL) zHFf!9YAcpngF4=`Ru|Ivl{zJ~%c2ri$PWbyDfB0p3oa)vvDPf#k?y`IHn8%RS^415gJm~HEiguBs2}v!HD04&3 zYz9c0q>EUKKq%Sz1Vq9A&QLaJM3Ugl)^YJiy+IXA3D6?L3pmS+29>aTK%o=o`lM-r z;7`-xQwGI&h0u(Q1Ez;kvlgYhccR1ggE-pZcNju*S~gJ?1a6OvxZ@~SR~D4ib#Xz- zX2yZwG+QRA5;`;@{z6y?!ab$x3cqs&8TT;4m7>-NrxaEA$<*mAyXqpe(d zjFSDFIZCNw;deMmxDaMYw>a%VHE;P6a(Za`5w1Zvd`QL$zwHfaue~JBK2Tr{H%n7| za-oW~I$qQ>2v@H!T=U?VC5-X&s17%GaOoFS|5^bW>Vw15WM-fL_hP~!& zV$0-lARu$-j#E3x)d{tTA+vi!D!VT!M1Hny`~x4&-I>ef?!xc(b}sia{_e4D<+8#_5bGfm7cjrDaUYoSfUd!FF?@jyOn9H@{$@lBiV}Big z@567v?}PgJj$H0;e#MXdn|lIZK(y08odf*_e?$th9xKaV_lFO2A8pU&rubnHpudkF zVn2Afxew0{8>~GOL!)I#e>{E`28FB z^?n8kuU=WJq2TBD;ROjqc7Gv3$leY}knc(UW=KYIIM?#5M&&y#<;z5kwI zF!x;L3%ToGf1&t=sSDftb9ivQ_=V?Q`!jyK3*TNC|JU35ACq#g=UyoO>#6Od=kRTN z{}}$gcyasaJPXP5C*=8vJiq?A?fp~u^xXLC+X7-1U;1CUaSkoNdi>s8&tPurjz4+z zE1$R{ms|bte&F;H`1HlK{=wX5@9H>$*V{)|@#Q6cT@b?_0eA2;2LQ;MG_EFFbtl8I(qWwkLn+#yo+4^|(Cx z$SYf&&mZN>)vu%M>X-4)jh}_4xOnj+uQY$)v&GlHy}iBtGPG;%D}R80oEPY67Y>b z17fefJpO@PZut>(2N>Vg|H@a#Up#@2FMOB}e&iUn@zz(~`b+2D{v-e4O_2QNJMs4p zJo`7#z5Ju-_ggN1zW>)B`SEYz<5%DE+|}k=F8_0W=Y;dtzx&DSpL}xPOGJNr|7I|l zdvbew{~G>Yy!g_Of(kGFIR4q*|9L#Qes2?>pTB2&|BuVJP5JiX&+$v{rK|XMK8F<>yYm4G?o%Z(jW;KfwB*K%t8_R^-inY-{U{Z0H~JasMl?-gp{szVZ+L)AsiD z?eo{a_9I^_fM_qB>qT?-j_}|8gZ%dgPw?NP$N2BbBlvguC-y%ff9{=?KR?(bf9~#- zKL-o)r>g^he)=cxehh!E7jrL-$=|zPn!?`~iub%U&+i|3?e*>L&))s_f!jX(_aa}u zG=^`Vy?YS&1JnV|14q>#uD+ z@Z8n=?%e9QKKQni!QFrR9nJkG5Ae@hPPX&U8&2j1|J!|Aci;E|$kzYLrBB_JTRrzS zw#ddo-|d6{5Feg=+iIa5qqKNO4ou8}y?*p3@O=A=7oRVF`MGaxZ@qbY3&ZdFBHE#g?iVIt|_dk8|P8&`Qqu|Hz+Se&_XP-+cYtn~(p8`Wvr5cF&!^d;HJpZD*c) zrEvU<^&9=KlpddpfKz;){PyZOpubvybIhZz29=k+qSpvQ;uEzFYg1n zD3dq-7>zym>9-5NpxbwnD*JN%e|q7@@5-Auqx<(>;LnXu$%D5&{wm}{#__qY-6s@& zuJSER+OOwk9{sh6KN|dJ{|v&ief+b{dq47O^Nrv9!b=qRuRd|%h2pm$t|!pd>szn) zZ+&Zf|C{l-|LfcP?=yejCV$ZvlzThN6~ED6{CfY_kAHLP4Zk`G$X|WaNB(5%4c9;O z$=B|C)7PIr$_{+Z#V{UgdYET|8L&- zU%t7${gpppVOS~$XVJp-*^YZ&IP>P~@BMuL=Wcuyudl!Nb$t3Ue0q7UeK7Zx21E?39zB7V=|_XvK!AHV;xkjwoMet#Rkzlh&Y;P+$r{W#w7 z=RczEYaKA}4+0i`|Hiv>xiWtL5q|$6p7W=W&*eUi-!J0#27bSd-@geM1^hmQ-~SQc z&*AR}@Y}@ikKy-k;@Mm9o5SzN@cXy$yN2J#@jH#*v-my5UzF{^-~S!IFB_cL=Ev?E z5kJ6jhsJ?V4ejy>gx+Q zRWvvO%0HWtgcbq=m zYvJt`BMX1^n|@LH5yh zy;&+V=Mk zURztT1BXrE0pWHYu0uNGb4^2 z0N(#3+EOFt?88%co!?N**aGlGWSbe*-2S_uOEX{p)*YkBLa&6JLRcTd@N%6x8S{dBcZO?QG8W6!!n4(-r{qB{_wybuv%(0Y)(Bw3upc16MoL+VD8Ef z!Rr(A0DpcA?d$`*X0D#A<~DLGfL6r{paRGnx#e69W$1a@hmDRS_NIjo0%sHOs;CRKhM#G?S;&>~HUPvrp0DFm17*t6W{|srzfG+AYq>4_4W#{r z+*9&)1>cDoaS8BN|6K)4eyaf9y1ZXNtpM$80BT?$Z3;ZLyNEYSfM_9T>)IZ1d?@!O zuP+w_ZUb;_A9{10sM{0ym-UY2-i&&rmEy92cGfT^3&09f4*FCDK4pB~5G)lV^3V69 z-WZ;*NR45%w3)jm)LTI&7XWMaL2J zVIR1A0WDjsLk@&47U`SCTlT*J8ZQ8|aD3i)*FV1N1TG-1tS{nB>ecnNjmF7#+`K!` zK*-PfLZfTFx>T<-KZ|(AR{t!G%)v_Z13&vX+L#uTM(Q; zFleJWiYq>M39Vo2p(awvZsEqIYXXOW$i&s&Vlkgam zp6OM3C)*bqNL~R`q23;BRfm>1ou6z+>{_GJe(J^1frT!=?G|~NlR@cdP9E9)hYY%u+#mV+@I||(whGAa~ zPtUdojMEa@KhoXP-PeoTtGkc2a|fLrt<{HcW&>6wZpEnsz|~_9;hjVmysvU?mRDh8 z(3Y2uE%q-yvd~-UJyz*oBw6Cv7(7oLPVYhZT>2W;KQ%QpH8jE-iywQ;eE8n?zg+a- zgg>|se&?S1dJgm)?m5>4k{JowRdw#CxANBk~&&xf(((|dF z&-Hwv=gU3YJ@@q9-`mwY*!$kz$==!C%e_zc{%G&>y&voS+1{V;{l(tT_5Nn>@AUp& z@BiKV$GzX^{g1tO_O~``x}j?EB-s z|F7>GeSg;XrvAU)|Bn8H{XP8?{j>ca=zpSrxqq#{(f^_TAL;+`{-5msSpR?D|3CEq zeE&b`|78Df^#7~=f7Abm{Wtpmq<_2rt|M&KR`Qd;6@PB&v?ql~Jd&jYp$BM_Mj$Jr5e{AvC>amSu&0`-r_Tghc zeeB;JyW|m8(AH|R zx!J&dI3C!;@Pr;VN1qO3F^%9R++&YZ=lD{t95z6^SDWi=ZEdB-a_Q-(agq4=IBrHS zO$?0}gJ+*bgzeLqzX+Aw~90>2&9!7h!35c3pxs%SAs5NK++Zt;pAe_E>PNo zOP7ul%7#>64-FO_1u0(w+HQAT^qG7@t@!tI*c(NHQ?!7 z<%gvX!Gs@Yz*9)lGsFAsaWARqJ;w72d8FfML2qvG(zC~da?KI%%E^ubj(}}6fpS-n zKe(6&eXf|=%8r^<9>)W0tnk36reC7~t(;jU_gwx+oLH-A&jGjxEAh{h4{-fVmniszkHh*@{=J%r} zY;Zeb1NN)y6p@<`I)W#HP%_!X?z-SGVio>0PIf%qIDB}19{CG# z=;`9r*u|5Dj)I%cWx8L1q0{v!A%vpXP7Ur_z~}aZA0%f%!rO73heN+qT4V4v<{0?R z?Mwp+Xqd86FfzkZzT&ca;AHSX`!GEJw3_C_8Ed|s2HOU*O+jH`kE-0={y@4&pL%y+ zP{C<@hZqOIKJ-P%74T&~K35~c-HKe$bv8&hvVx@DbyKM>XD}5ktloeXqIsu{ny%?ptT%=gcp^8f&-pOVpTb7`ZwR$6FW+gK_oTwF3q z8#3iZfv0F~UW<4LKMq2p7dS5t6=hNEbSYNs6N5Bj`Y+e2WrNiLlls7%go^YIDLmx6 zNw7fMsfrvD!?0b=kvv6IONkYw+a5T$uFq@|2%eF%2RI5ya}xz5eKrRSw4SA}!$6ZC z#4GYh1DIwvRU>dQ+CJtM+sd5UT!K|1@Px_$?O!iMsYH^Efwfa*OiQJ;O152%f-K=HUsuf zbu?w7Ns;T-;?P+|MHA1UFto`F2PKrqCD1Uhd=+LqgCJ@C{KWevCLf*fleY1&UJ*O7 zc&(h`R3FaT@KRsAFg%sULD+9LUSF4t%Cwg_OBCY4?1Xeyg64)vMGozWrR2dUw89gc z#M7KiwrD3>u`kF$_H$Z037xvNQHYL~xfc+CcvR13`*p*D`w`@JUGpA@KpPt^Yc!Oh zpm);M<`Ti1f?hj_d=?5vRZm+7cG}&jqG{Z{;*GPHA#MV$V0a*KH-Q^gz*5PxLvTC- zPHrV}bTmaRji|cKBT!p_ceo_72w}LKzXZ1fO8E$Ooq{c{I3?Zyib+ghcrt-|r*NFt zaL94WikPT*q8B_OqZtyW>r@5-vBtox4(E$IC>X*_Xhs2y^TtTlezPfVW}4U5kQreI z)p6FQ{BDu`y0!8#7ujMze+6LzjWY|#meIO~(Iv>X!@w^6=6H9Pl@qn70ovN!?F6cm zw3JYy#pOz!NJkA?ITU;iRTDu18RJ6f+f^}SoY(-6;ademR2*bkSGP* zFBa(w+CdFSNP0*1bRB@W+H8*V$bAKwJ-4ZqOaIBbnl%6$TRZ#@d6b*nlH zEi#90#(hV2NFyaX{uzQEqP;BGkZhAc8fa@D0*ENiSp9onk_^w_OSaGo*%k>X(n z-%MO1*Fr%g{CTzOli_FqHDH>OL zC+n9892hcK`XKNOi3HN;56_~B)Rbn^Sufr)i{6x>K5yq-nTw#q&FwOY=>_lOe1;A6 zwTd%Ty+r&eWzAK#yDYti1v!jm&Fg}6p=)|oDdbgu5}06-<1SsvEY;YOIE9@HN_x_r zi(Of$)1=?IAe=$Cb0SKhBsrI0Ji?5R7fke(3sy^+Rm7{p`ga+f>qzgP+5d&cQ;z;N z6_(tE%XLXCIhXGMad|qdah^2{Xh0Jmr8Hw57?O`Bnr|cv96amHZI}YgYJ5NcpzC%D zWhG5x3LHrm0qaB4IAS)oK7L)L7?AN1$gp^{8}Y(W8)9V6G_i#nHCtL&7%E?;)-djb zW@Qu9$0mmeKvpAX;n=_p7$|jX%AmC|?80(y`U0B}!Zf@hh@f>3cCw}2j1@QjcdBS? ze*Lq{!k#6$%NoYvftX|2ZQ4_7vlQ%Iwj*VSE6l~!daO*hrTmQDLf@&^Ultz8-*dj;Si0YF-*hwQju!AB-`x zt7%o6te@Rep3BL&n50tHA!GBg6`sE~O?4b)dW<}CU%G-GsxJu674_ffZ4%%OeB#N(9Oa?W~oIH*ZDdn_Qfot5h4!N}+h!g}9Jr=QscLMTJ zxzb*IQB3wYFc2F;*RPP$0ENRM1p~J$;G}VAr~861^{0U+g4VI-k4nTeC6Sd1GS{SA zWsBH?f6AFNFjDlilCF6<4B`m14;yr7B%Wf^V!6syem+1pZJqZwxn&)?Qte~e=(Wj9 zg)5B3#f>H}&!Bx8CK1$)?GRHY37oU`S_3(>Eho{vH%0HoM){0%4!t*Y5$^$4*~)Y3 zvCu*el3DKKk8~D)wR`-aeZnX02KmH*vgU@PbX<1Q?Qkdp17H_e&$Zc1_xTe`aLFTD z_SC_~iNmKrbd_1h!UF?}A+i}(!GSAhY}kXN-=RaDEx>sWp!`XI*BNSHKxCp|ziG_P z2#zix=u50(rE7F;3vyYj8rwFVZQ@bYf;&Q`jh0PL&Nlr1E!r z_-rVy17l0}7OfPgr*VIuHgtti{A>tOZM$kFvE*;j(4#}s69~~aO}Rc@gVkQUva8mj zeuEZGO-#-fO*4$Q3@T#n_?bM!W$rv+6)YhcGIX0=wY zeu&|LYucW1H>5gkT4U${X(Y>S##{I!DN_=^B(Z^G@W&OpySqE6{Kd2~eSkWjgC--D z%*Rlvv8*UGF|VlE=^WK`#J*EBx;AAwI}jSTBGt8x$OEiz;3Q;r{AV>p$YuOAjc8xlLx_(%FxVL7x~A=#bWseAn@&4tVCI_Ks+WDb2Gk_AQuO z+`EQ4~ohYZAse(?Vkq z54vt5cT)81ZSx_L-|fm0tizG93*&-&foa}ML7d5LaS_@Jh>%ClOJ4Ja?&(Jqifz>Z z-6T|*F3I!pN#rK|m%Hi;af|lAxJu2m7Jc`f=pC4NFYZ+ID!TXJ(~`qAoZD6_ZU#I9EAd==$w6YN%EyzqleDTUETBSw=IgTh^u0*VVH-J{09eKU~}aE?ZAb1H?m&3x))%$CGhfQTFsMsb;U z818FTq|DOeGnxDgc9I(0FSAu4P0H1F=zVU`RZof{cT#CTgg493fDuzfIZ3>RXcs4% zi7d_-UB*te*dbaV&3}S+{jJ^)Mtr1R-RKL_1)4K;mq2%I5D=#K&N(5ELV&no7thd7 zFb8>vCjQux;D9~#&(bp#uBgY@kcd>peTAx>6c{LF9q79KAd7~90rXe8I>NIkvX(34&AHt! zsnE5uh3hV5*3j>0qsisbIaw8}+qaNEL3e?;gyjRvTjNMKF=PpD_XMEE0Yw@{Tsa;4 zhF~do?b$gDa}>`3cwdd0K43a(Cmf>xvW(I$^J!mN0;I2BOR}M#bx?I&i~|3Yxeb)$wvhKWq<3 z32srAu2h@2=G0WT&C^_0a#(x?BaBUg`o2O2PzhNvirrJNV^FZ(ECYTrr*&*Qade}) zT6LcSu@gcXGAii0yJP1mH_w2$7C|%9sYlg56nOvvqfc*Uqf6!y^idW%R5Uo4j-4Cb zeMJk{=Y=WA4K(-2?yubBZi_;b%_+`hWO@33gj?AkJ!B$Nsf;a8#X~AEnmAxx$j=>Y zT%tG6(l(CpJZQ95;U=1yjM>PjbV?6q@M10(KP+D12nglpEIR;R5;-U1*#lw*njJSH zY+eE9j9o7`O=?qEIochn3=&(AhaiZzNPLSonzm5Ms;*(#0#Id{di|XTG+T&H`T|@4HmaCvR`X}7+tMEO}Ld5{*aiT{|m=5?$8cjA$ z9+X(~<7!#kEodC#Hl&IK0}H@JWt@yqm&DdaW3{>rT`Zl!R)kEyVb2r+k1FyiJn8jr zsmMmy;YGDVQ`AobpbvwGc2?4P;{chCFNlzASDSDgDodG#5mdYG|mL3hvEz)lr(1;yUH#> zhpd$J_Gw%QUYIXGc<8G9TL6vc3*LkILx)ax9F}cA@Tq0;p^2H%VeAu96Tl_ZL>4{u z3A7mwbz-4RZp+N|!bCAdHiL?bFp(>cG2;qm?#Lx>+sEo1xdiPPd)7x+gS+PQfP%&N zUugFB^q3RPSe{{GaIa#lL2_7(qvSl#>>MmD!sQxq?9)+p;s<$A_#h4(@iyJK`mJnd zt(Gud2y0_4k)%kn6zK--D2QaJfhfvG=Chb5K_(|9hA)!`zZ*zMg0;g&8QZX>%cOCs zv9-Bbt2c2SEs31@9?3`$r&Y*ru5L0{RkI9%07vDofPYlX!c|6Go->EVusf!e=Cv7J zg?IzOp&PEPZLL#1rgA-Zle>k{k0TqGlr&!tS1Gh1+&GIH{*4W(WnXfoDd9Lg#<((= zj;A8BcwBMlCU*9-!S1_*7P-vM7RE&oACfqq&5DZbrOvj# zlxLupY<6&9Uyu%>^@5ua4QSK7EJwL>d2Kfls;g8zO9yDzqoXbFe{lc(P zn8wbO_7BMOaf`Td4=}P7gy-A62yyQz_{A?|<<4OnZ;5B*MdMKB5i;-2T-78+y}ClA zDKOIInN_$@-9c8gWsR7bbH%Z-67tlYnVcD&y(mh_oXpoXw*W^4I;2B7n*0Wa8;$W| zTAs_pyJB~)kadMKk6o1#Q*p+QhD8b;85M;FJBrHqIH2V zG`o9NZK_|zp@8>RZJ9z;{792SrHv6%ns~!zk`;Kgf=KH(wRqX0m$*PxzAlKw%uSAt zovD-72Z)E|mFlfQ{Zh!MjNr3vSklv+EEOj%%q2=t+HHZE;xq<7y^OQ8I0iR|&B=T> z-90h>lTpY*j$}?&Io=i~tcdscQdSjCmW+zuPVpVZCN#{twXD}n%jt}VB!!e0IPb0Qp`3^Y#C<04@!7)9 z#=Tnd!bzn;Rrb&{%L-+lJ@7{Zof?il85m%uP06N>dDFu55eJ+&n66WcSSwilq?wdiB+{}t z{ItI4V5_w$e)+C0NV-1pNGl9s3=$nG#@WL$P)Af0OeyoMQeOe`1|CK#jts)jwki=^ zbj|b^NwS6DX_iJrAe|VturLgpd?y6c(}4-og+3e1FS|1;bQ-hy=0qA8wkk$Aru;T6 zg*`{GH(yd)==5kx3%3k~))7{!tnJ%EQp6XSu2WdL57k$;crd8o+C9`Jd@0zV9iO>E z2ltkcY)y>v@cHl{}$G=j1!;?h%tD}Xu|W8#9B+cU`?gpSV@) zN>Z7%m0p5g|*-lBJB;&SZ$@c_=JN9UrVYFGskold~3;?$@h^@hWr-wB@ z(?Y~V75br;zA+LqL`qE+pOmUPU}4?l3@>hS>qrs^X<{5Ii5RaWMR`W&7;dEA4tX|H z7Quxw4TXo)`6`wnYSPU(b$FFj9Xo#s73@yam2Bw9pJ_c3xL2hzjBbvJLp=^O@o-R)v8tu|&>z&#nTCh8(v` zHD$&?`5M@908|T@UPd-E*DLF_`Ze7du?Mg*9&9hZut}^tqDmj*G@`*@$ii)DI2T#1 za3s4RQf2}r_RZ42!-FBKQVpJlYu?J3j<3wM;X83h#jAR>i_#T}Eqs?+ z)f>=g)o6$s4Ftr7t|6j4mKq1w)XQV6Jth}5u|Sbcp3`hrFsSIutLJ+M(SDI#)KLbu;$LBl|H%KdQbJ^{9PCA2Zsj zKM2*L<}a8ejLkGEn^Bqak#pv<37}S()|=C9Lp(7gVg#z`qlGw3R@LhhQ3P#RFm7I} zOE4I3GwbW=>*>NjeTjR`+S+iP^Exyg7?d^{7T*=z&$Cirz#bQ@>t$q(;JIl=y00J{ zoEL^|TnoUexYRnRE%Le^+SLnKJ8xcVLrKa>z>7GM-=TuSWw>4&wWTVIxiYRNSrWgO zMj-P>wnk8(P2N6ZYP4fsL?dO~64r*xZ}`r>a>gR|j^SvK(;Ey>Us~HL69;Qcu2t8o z3>pN2tS)3|v;ioVnaC&wJUasfGE|rOm+o6!%Er}9W0k83g2sJoc!*ekbJ-f4y&L7j zypRVwk+>RUvkJVWuOW6)hNy!!Xy1^i!6#Q%dCisI6Od>b1`3+Q6;SMM4J4BmsUuj2 z#g}VLZ^5oD)i(5Ip~gU4+bmu!EY>d5UtvcX=`C>CoRC`vK#v#YQ`3_dMn{SxLHp1Q zzT@oBqocFukjObeiRqz<*^9yC*(3#OO?EH4NogJM;q~lC* zc5*rx3Z{mpXGe$6j}1)+Q|G6rCTEIhegt5VMC9x=S}BefCuY0RDxL+!3-}VuoEsV& zV^eKNp>b|#9CFI#cWnhNeenNRYGB zljEIjBqwSBI)I?wL{XuT)IuOPA}B(FokyoFF2P6?HA zhH@KBppfQ^C6IHvG*SfT4iAAXMH%nSC&qj28*R!jj}_+d4WeK-7_>EU!wTA?WjMYu`Kmy07`Ta zy2!m&2}S4uNnK}j$DH^1xUv?;=0bDTJmhRk)(pKzc6cyzMqjX&I9a@98+!+JxrI~H z(1%om%j{@3ebP22(?i*^MPBN)AH=O{X_dh((wLca?a51@92O{wvh%EAE**+ij*DTd zZT?oAWFzUl0ds?x@T&Q@B6t-X>v5>Zw`;$+L)WQjNt?!H?a_tb6{Y1 zlvc|Lf)+;}3xFwfE5$3Kz1^$ZyVbyiBA!NRH%3m({6P>Mk%>IH@Aj~dZue$o+;KQ& z<|_92DYYZF7ty$9DMT>wrpgEj?zlEmG%VQsW)TA~rf*)PvBEqbCUk7pwnQp~tg+b} zkWiW12}nmiY|@i_de3+O2kSdc(QoUdawSbtH`^oC)=G7QP{a8hsZ$_!`b_=Ouw?79 z^qHt!sni7rE~pl8FR!ez6v}90tcJwrc!Svi%fAwWNabEqctl(?hiD4u84S)Ln>B>H zgm0Os4!9tMor_IQ8s?>ijlFy9HkVk)z9Kpj1sHn2`6w}pg>cG{T|3(Fqy;Wc#N@FE zn~8iv$T0S?df+T1&NAI+3wwZ*SvHi`LtRyvQHJYJm8*3GQdjGoC9sTlBsF^#wPChw z@68g6t|N`g=&zekp;8-_(pDY0ynKqu>ht{cSn1s4%&Z&}a0K$3#U$KOw#~Aa>r6%N zgW~By?}b;H`b$ScA#m=N?*}?GMwnwR>2()tR||PrX^R`t5e)+ihe*`#>}lE7V}pT; zjFD+mhAJ}YGwvG8CM@EyqqM*!C#*@#;y$_jvFJ9Z2%O-w8d}p~B}+z!Lz>Ci3*%T2 z(V{?Lk=TT-SW=foVJ^Si+?3$!xx5?vFc=%Lt+$C_2IrOpqkP|9f^{rj!&VX)y^1k$ zN`WF*YSyrgL>+;I2@+(EK~f|kMmAJj-*^vP2@_tLtg2&_#s8s#*emPBRDi?wEOk#S zrb((WksVK1mR8~EAd~vM!;zwc0Ln3Z4AqIlj^Ue-t0DD4Pj7FpC>LqcC;b7QcasN` zB99mgLTO;_6-c-Y%- zih3(r(-c%sA*a2#Ev6b7o5V~9AuAm@DTDKX4?p}cC$Z4;r+(ySZIof=bkj<$LlU5f z`Xm!+3@)RR=Sz`O3b)PBsC?*+vNX?8Mrr)ZwoRH(Zn1Dmi@@4Fr$UHu*DPtSs*c#S zRBJ4ttD$USnLQ$$s0N$J43DGEw8P!$dzo~Qs(or`_8fBUv9Rztk3!ER8{%wXG%Q3;|%vp`4&0 ztlsJzcAk5*6VnPL zua?{@C3a$0O`mRPN3w_tWL1V;(P1k0QO)DD4V_t(Y4VlQ8U&W4CP=QyX-PH^+%VXE z0rfx-te*^3T9AQvpyu?G9&A&pm21=3!9LFek2{S0ZzW`3zQ zrV&U3r`+XA=y`J(=uR&@80e{OlXIv`zpZrPz6L*8IfMp6h5#g6lZSk&I?Nn;5xZ_{ zgGDTxh$X*cUOg&)wuC`dJY%D28yVia>@Bvah5wRT^OZA>R6>62P>#>Y)hfiK| zNppRZ;k)1yXU{|Fu2G>_YIWxicjvod(SYn+S~cs1#f3)Yp(Dr!MCVEYn>FRydP(NB zLLZNG=MVEbfP5DMW`LH^IzkN7s#<_@muZZfaR0O-hNxn*kN7O^@y0pvpx~J|*fZo{ z%G4#b_PU_ z5incog`AG6iMc$=$0Qwbjj}PH9!Ri~TW5e)icMtA&he4eo>**-a662REf*>xj)Z+m zdV6tU9%rPjxr{(TPO-^_sEdS1h4{vV$>at|)f4Cdr9zfJ*o|x$of5)=AWVguoXF|~ z8xbeo;VDQ`RwaUdc8MF=U55xJ(U7a%&y=Dnb1o{8()b zN~*5LbLTM$wQkv zx5OZ5NV8bJ?+$*rL-5@jK?Rl?SfSBLxUH>DDM4N&k0VCG(gc`B)UcqQoQsTGMXBFX zWk9tW>sou~#5lS_>gxUq(Y>`HyoG)fw;lVfINQlUNF605 zshd1$xh7p#?~F_l9_yHQAc)}|wy{@^0rI!NF>We}tUv zWa>pI3+(3dHC>qNdfPPNFSN}gv0LI2uMLoIY_F}?&|Aj9c(HCR;V654ZoSIei|s4G z(3Y$#UtO?uriYb7e2#K3PRh7qsTqIHbMA&}b^)qb;kgOT>5Z^uA?hdcRCuT>>VyIBr2Bg~J`o3wK*2UbwEk{5D8q@vLkNZ;9berJ zSB@YmJZ5}0m?&*Ss<6WnqTb_DXx5xDF&v?H&yrO~LmsIeLD%=>#-ljPg49F4Kl!k z=>dn;?sr9GOS){t3!kI%0LHYHQa8z1!S>ZzFAgb@XtEs#OC1*BJ9Fkx6e7U@KOJ2T zbWBvkTB(}GQr)SVc%Qt^6AibQ9-(ze1CSgb7i$PtB;kEeb;4DRKu+zNWh7NAXVrLD z#Q8-$v#nT1yfv1VHa6e-c0-`Cd6%G*o2Tl8%-;AERgLkYF0nKqq+J1bJF}CzK|vro zXF&crvnCJ273N2H1|=WLZupg~XH)W#A~+#noB(owa6}x!5>dl@r57 zy(MBxg+hzyDea#Bna4_T3EgDps6T*QKf6Ze~Iwnv(60XlqT zX2r18)Dc@>c&ai50#8@gu*rkX2|IGgfWzmZm}6_AE-`pk&MlRzjiE(k;zS@mEAZw6 zTaYC3%w9eCK4cPVgfpen`V5zs+PI7e+jC+BTg7jh5Y_Ls;OLo!jp;{h`pF8;3Vor( z1$B48#6cH4c4?QHN@|t46UAf*W0iGSuvl2QzP2dt%IHMcf%DHuS`5X7RMbsuUem-h z)+C&6q^&1Tq2aDCa2FtzaehEEAxUxM>62%N{bzmhY>7$hOW^U<1qCfPHng1%=FF`S z0-!VKgF_Cyg`K}m1T=(2FSYU3X*R73Fz%Sa!qq-ZkquIjhYPK-wZ;U>l8N8V{Wd+j zn5(IBO|QHcx_KrEpR^%T)@>N&QA1qwriRca`be~c zR@JoarYQLYv#$|T(+lnLoE>&(WiWs@ev)}CKB%}oSVa`5&4p}&%EAsiSNFNb`_uj96+4YV#t+@PMD*nVSACc;W&8p zbUBh%;>K-y|rDyr9T|L`eF%De}U^-EQB_K1_#b z?nSt&?RUUTk^N$`WTbL}(NutpNZMC{1%7jEfE{gY z3e9C{$D^1!?HEB1+wU%*qatI5ZedHf9w`3IA6LsLmQaxF+i6YK?M5`RMPd+0#k*$#psvn0v%IBwh^RIwoq>E(me(?ceZeC=fB+96fw-bZ4ZEhfZZRJUSgd7BQh0&+agTFm8M_ z)L6D&CGCk;vn55wme&?m=(B0P%M3*st&1AsVV|};UKXhRs}6Yg8noA)SNGm$gbu+1 zGb#=(n;kS;&i=*j__@)skMTqa2Ag3O&bofCDRg~QA@rP_u~ot~F8N+t?R+6;%b zYD6+Js4>u|cNpcYV1u)hV`Gz#mS!%F<0#+zW-#OI$SoF~+rTGoNFZgq;ggx-*jbNF ztb@!1O1go=0O$tRu&g%Ak8-{o7k?l3AL53Xlc~f8wm^w-h)$8NEjcFW7-4JR^jTH|vwZmfvrgoH8rfxwV1nG!}m6jZL(45|l^0L?$ z@%Sqv4A#*cl5dQT7Xj;u80Ewns#rrqC95CX7p%zG#%qw2$tpxtpMtHlGt}ZXHwAY| zWX~iNIR|&=DI|2#tl&z~hRzwpBjD;n)_nX1g%>&=%^T*ZPJFQDOx|?Q4dy!!bfVh5)XOI44=c%Xq4B9(i$&u5;QC8n^3}TSr2vym-IN_ zh+ERc@Mz%D&noYFlCXf%#@0F_AXktj0{!cQNzL`6B+|lD1g?n@E$a@%+DeG%Y856< zeQEWYELJp{h3Sao{m@4FoPDo>(hvYq$lfW@h7_gf%h?~hC<~viFhM7=Dg&HZ`$GL=GnF``2-)9wQD%Vh6@p_L~O${ zDz=0{MxLb`Q}8$vxf)1#P4}`R=ULRjSH{XE5hQEI9}8eC?W^c-&vDo@2ny=O2d*xJ zCKfHcXXH8UWyzS0G4I~msD7|oF0408j83E~kv;xyaFL z0(132^~^@ptBJbPb3u~XUxq;-q7ROm-vwH!ti&ayyrnGTM1=xJ`vn}rp3r4rJlqVk z5(}QGko66z91iU~{ozH~W_Hf4A>;RgIBjx=Pdv9Ujths{gY~V3oOCuCN{%hrLoK>g zSb;NVgNm?J8b^kL$&pgYYbMlt`Hb_|)hSpG!5ogwvU9gi1#ftKoIq)(hj( z0CfXdKCT%x!~!ms)Sx88=b;=1V%q{7$#6mhr^neG8BMWzo~@k)_`kBO-htz&jL%G+ z?4a&rvz-y7-E((1xR$*c!8|%vEDcRf6_MWrW`yE^CC1p~@cT-|$1tVhqQ9sf`7TKT z=TV-{a+yfqB@5GvH)SRiLQ6waWN4)L4zRr zqQ~4=Wcvdz9S>f+Zly+WxL(1O3eRhZhEBv{b`aEVm?5;Bp^sn$tcz~aKzXF&q}z$v zmF%fzhGLmH$03U(=Xehf5i%-quT=91D*~!c%!FwMFWy;B>3-k5d@z_VRa>PJL^}!L z(lX(WF-Dd&XQX~puO=#~=}|9~N=V`}GgB(T-Wt${GSAYZtMiaGy4Zn&%S?lgc>0xT zsc;S^23w{wEdW)*yo4%lGxYd|xhITS~q!PK8Eh(#@Pno}B=GyvlZQ~mAmFs-zxgf)= zR+;%>_LQY0p2Gzwct2v+2AZ~nZaip6{Me}z3n;98hR2FS6X&N&v*(a+jtSf_1@!ju z2HNbhGov3UvKY?3*aj_7qqjTs-g^|1O=7RrXn`4xNO54KQS*clkjh9a$d;_9a~Q(D@4PAUo`|HH;R!j|lgAU~t~ zS`)_Bx!QVV#BMDV5cR`6f@U|K?k52!JLayI%Z6?u2SDq&j(V+ztKg*Iqna0d8c*o@ z(WYegIIIvx_e>!+gqE8Y18bBKGp=Dl@(O2yQbBW_X(!eQfdI>gF5MLv-I4uBzYH({ zxCbAM(33pCHaHxK7jS~4D+-4^Yy;2D$%;q?!%r-6=4n z-Owi)pQH=z(7duI4<#%ytH^!JD>ux>vqZiP1Q(H(2Z3;xtM%Fj!=?f_C(XJNyMAV& zS#50OaUqRfQH=#;dzALsnt-#$txTVxSp4TM;P7448_i)vX-gUsPHRSZ?5xDtCE5On zmE?vA0zT5-rHB}y2xD}>xy>9Xn69Aw@FkqBh2ib{Q$eq6fW(BC&mxi@MM_*30>@|z zZ7l^K=_U6gLNRe26#^j4Fw#TwFbz}`2W)Uq`}AJ2&_hLHHK8bnZ0@8{O{3eGIK`{b z0Zf4#;n;BbFWFxuJ-7NV_GSu_mBXzk2aEl*`cET*LN7e~hlwaGi>WKTct!Hfun6z_ zwqcO-R4_=bJc%8DN`|2 zRaaniRbnLKtJX^eA*RYKRKwQ7nrj*GwR_P1?x7v&j<7k>N{Gc!RBoWU?lve}!gaCd zo_N{)@mS-65t){|VQR;D`{zjNVZ@Ra79S=7PL^-u}V2=dvzhz9EQP)5#=`2%3kdJM!~gjLw}))pTmCkHUn#hsQA z2+obpgMe^*O$iNPvVI3gZeq)D5wRCq*#>F$1i45kW;SagHi^e#(Y7s9YX5e&6m0F# z5(t%RCNm_C#z;pUGZ;QJc~(5$5u|jQaVnwJhYSRGLdPDkiST2nD`*i+k^0`Mh04;d zpxt{AIb0Cz?hFj;%6#mC6c!N4yU``WZCqX5!Fy^=3cN(yGFqffa(!+GvcvWvqnLe- z4uvjH|2RRGzjIC?b8U-}uocc2Ax%{Bn*m{b!KE)$w516?V^M;2+R{pRyb%^~EmJk1 zi^kTmMfsHGjyWt4s>Db=GnNJ^S!8=iiP7jIwO8#DkyZ`+gv`+^f$gyM1zbU4(X}`2 zxbM`$s&eR~2pYJY5(jfP>$S^B-GS?MLQOyfRfRDLB=QA_T3~$)kE6a}TlUlqA89Yn zWR3m1m7Y3uk()2GgVbd>E^AVdW3&ERASa4(1JW|CdxH0c#K%QUqVy0uCj`(ey0QL{ z^OOM{)}c0T#Wq$0SVB*MPRa$48+G2hunP&g@C%{|L(x_x&lpi)>2j?(Qfp30Br2Gc zD|7rHZwM0@x?t&Wp`hbM=sb}iXNhE`V4suoWegPp2GB%^3-Zy!TDFcZied$xZZp}X zqtAg}B(Bk6YAlIphq}=to}Kb7R--`uj>q;Yq(#JG!n`qDnd!N#YOei=VGtUsW-Kw> zBDunYpomUg6keEF3BUKQ)pv%%#$t4=h7}IHS-7aPwqZxx;>ef`V#0``)4KS<0vI}T zld8=V$+)IWQRN8asNj^Gf|E04;1u{#u%NR~kL&uD1i+%tK8;hBC|XlSLHkMYW_UE#h4!>LgD6W$!^d`Q6e=pbutFw!T}8$+CG#&6 zl(g#ZS8#*OY1$((zpAe;R^K%T84N>9Rbb2%@68z6rEXWrvQP$xJXxzcADYh%jv26m zK`1201kEdXI&g$+Mq|N^e+iNpss-TyQ3?EHm4MZA_L=RZ;72VHx;|Wstji@-h=8yc zRF#i`Xa1$h5X3gpmW&2c23uc(UDCN`ux{;z#Lvm_(4DJ0zaAb`CDuzCee5BI*gN(W zOJ+0M^P5#9UO7iX3}Op9IQ=06Gv89gFvQ2{E3#nZCxaKNjktbrTof93wdE;}s#|lp zB4Cd+bUZ%o(7G7~4Pda6{Foj_#YW4h;G`J8@JvvM9Lr}!$zi19Tiwd;cAmE1IAY$O zIyx;8;82km+O%0UUICqn?RKN{8UW$Ti=9FV)X9rI3eSh)c6TuaS}4lY!aCvkd8vfy z#YI|1cJ}ES=n=Kc1NWi{-STRR9h=Ll*A?{2`DUR*Ne<;lYl8SG;wFfhc`w=<>SA^| zMkYO|&t7maJ@poC&5m@0yInj>JWxa@KOM@1S4t!OcaJ@(rb4X53j79iH7=w zqr>V^)G;o83_*x?f1;QDu9qIiM(q}1*jQ+ki~hAcBbGz;FL+cxK<%*O9`8veb3O67 zzKB~Un>eSe>CN$w2@9BxG7{55Q8QeP8Ys}L;j&aF0kMT~pdV?SP*2sUooEsz^|kGa z>w|x{90PDEynDN5jVTNyR1Vv(hz!>GKtt9TK&MXu**0xXKpqbt=$<%?PfXJ%PjVGw zCcIQEwd3|6CF;-+@#Z@T+;+h1xueip(F2$yEXWDKEgl4 zjJB(9A+aDf?-z8zZ7<`6B`uHJP3PK~@ygyJs!`!C`dSCVoJ>_@&LO`oEp&Qaal=vh~%Hz)xp>|=hpx*%UMQR_g1i9D}|cY2Iw zf;r?RXNdjrlLZ6@DBcwej~h;+A0>kwUrPv%a2x`N;UHLY*m}2@AQozHGbD*}uAQPC zNNh_%#$jcr@pQ7&xcv%iLjIc~$$x>kx&gV6-B{%d+g+-eCHm0vr}6{gn4>!|=^{LY zRgacCnJ7r@;C0oOJP|K=BBNXa;)x812NETjQYhNCXWMa9FfXT+u)5wU@F-IxxOX79 zT&tFi+Va+Vjz_q>J4G#gg8!V7dp}OdzhEXj0p_~u3%#hB@!4Ve6|;?Fg0dj))Dq(1 zbmJG%*7hmo-F~LT-j*rT-f266OpD>fiE~|#R}Iu&mfOdb?wk;7VUoU z^dbE1xW5W|i$LO!0K@q( zy3Nj*P*rYG6Dy-L;!~LCY+oL*hgKF5{q&Tb37@LQi}W2i-WDmc9xuUrUvO$AS||lh z@BogjzhE0$T0#z)5xG3b6>zdP ze;!VLBqwWD$`=;awh)K4gsgc8>cot6Q_}AM_&B%|4imNJSzcf7N`;7I#b4YcB4|GA z+*fRMD-%wrhO&=(#p}ft*bX&apXam5u>*)vlcj5Z7#T8Z>j=oj1N(5dbveIIGv@9l zt23+OEz}1Y*0##wv8$WIg0aZ-zG5c3c>oM%zPZ|C3m>|+SGx1?(k;+!rdDtAJbKt{ zIHBq%dlfqQ)W6Vv-c}h}S%JBT;Ya!fTo1Y-@E~8t>Xb!tF#4W}$?0P0!tjj5M9;to z>4jrwYZ19Ck!_sE6HSqk$yrwf+iYn?2t`XX_1;*K(4fXcKass{)^i=nxlWX$kKQgi zI$)4Z@VsaIc}2M?{&-m=BT-rsb|#)SFffUS%e6Il<(N~9ugq??L&w}B$uXg?Bw3(= zHz|)b2pKOhO*vpVW0Gi|CT`+k)rf!M1tozu$N_MiYQq_?=#)(>Kb7`e(LTR{30f|} zfdXS)LlxH(dyMq*QUhRstYU;LO_w*gqAQud!xv`cYZ)1`nEoc;%~V-k^ee9GckGkb zn#gM*FBd-~KD+LfYE!gq!4x7|9^Y7%sat|r1FWE&5>H-r29C~usC@8C2Q<3rBr{m)lxJi_f z{7bE#iVa^-Wv9?ZUfnhf(5tB|B+R=EJnY+>L?zBCoYk?V#<@LRly%ytDD#si%JL#j zl#}X4YKppTt!?7S8M8%_KMHzAT0?UtWuVMUk3O^@Q>s(Ul==(<<}xQvx9J_J^X`+u54Wha_pZRg{Quc|*C#8hYhC<1 ze?@EfZNLBmUcZT=T@0_Z1DcxhdW8TLz=6vUzW4slu zFuJM%;EbW}SgLA*%lE;rRrg||k?UT25G?IHy1=chZh+Xs+Yt}O*qn-$w`u8^hXl>4 zPJGSgRj-YjR<5*s%ot$4Nk*wQ7R?4h%5SV;wEP;=_`*t3*HH+z;ZKukL-@{(7RrzJ z+>7Z8tFhWs3zqB?8)vUx+q!XmvqjPHKTuz(z1H;cxZj^)Of;yN0H#c6Q? zt1cQtflD5IpkdSkhubdiL*LJ8UdbbZ;r%s+qU&eRZdkmyVb1a;^X89ShicGPzVa0t zUHQZ`(fz7MvC6e9v$xJX-fd^*uV~!td+Qh6bFH?G41l{g&9|E;_)@|3_wW3LbLP#R zH>NsNce1~?kBUMU@ul`Pp*Sr6{8nEa!OEBYYYbm?o<18^z8qIrbZJCES8F9PDb2W} z!eUtIW?H!nfSt1Y-)mR@Yx7FIpYxVujdvKlz4H~uKL+U=`W_nHvf`;hMOHMu7PFlP z)+ths6~dw?;Zk0@*ERmp)oUNNw%`{Z+j6CGr3Kbr)4X!xgnRB^c=z(V7uC;3tPczJ znQ1dq_AxK}W;L@!tf)5e+sClgtUS@hx6)Vir@-9)dj?Jg8+JOME+Q8!En zF(2jwW^0pwXJSG1Ms+@6#;34&PH27Q!gVXx+GdTdUu`$rzHP_DLUtr3D?40Q&lzik zr7xa%oXFw`j=r+{!7}^W1%evD2LH5W^=daA4-H%L*)5eYiqv@ww_h!c8>T+6s00JB z)Oy%r(=)Du4LcXUf9<0!D;na|VB!QgA2EKjec5hxoo(UNt$oC<+*ssvJB#;dyY~0v z%^Oy&wG(hZxb#S>+(|>=d^<0m%bQveya6??{0`7}u5teUg2BvFw>D$fY2KPSF^uub zjE=z7N5di4!4k(bZ3l@;U1{{Wz>GdJ?dRu9qSqT2S54Hmv{rZG*qx|?Rwtq=?@9bx zL*%AyrFh?noVYGZ`C1itmR`^B#>J$`92AwZU<^_gQ|{7eF{8*LezSqaUGRx%v&V)P zCogUrY$+Et9kJJ~zkx=J_RB_8*DzWr7bm}}9L!WptG6fre{9HnDz<;C4ZC`u4aFxr z)4*UJVI!jtc%!Y!u6P*IhVS(k-+cnazLt*k!__NW^N^`o#H{p8IPjguHQxUsi{!SvFD zBO_n6Cz0Okc}Lw`^(wYG@>BDN_3V5_=h~d>QL%|5wq0u;;oTIVt|}>=MAWQDep<60 z(L|zs!Vf0?;| zOVzsMyYf_`73mHSv?(ruFqF7o6{m$+7&o8UOZf(6u?p2`bW?az-4AgHS#hz$E)3co zl0x-IN?VlT#IR{@krthmQiZ7d` zf6?va^}qDRR{Yk&Xb zR$AHAdhs#nd#wc!)-_ByeIwYQFqGKQ^waF{r1NthmopDtFE7`UXjj z4v1ok6-tFv*NMjmqZYl`&Ks^Z!rt?qS9J+~J~>)HyaC)?u)$Y&x8~=G$M=uHi4?$)RK=Kp5=8OM43DOFasMA81OALOER@F zZWcVad~w4A^^5B5l0g{h%KPRMTU%GnXq-A}R_m-sHmo!6${*MT4c3HXiR{BgF)u5l z`0Ke|Xj6s%_+6)a%wLH;Y|B6XXg%zsoj*XbVeO*kN1O9^IqW8hr?Y`+29V7N6gyAr zR$r(+ys>5VN>4w&R>H}O@5nA4y#n)bq1`SFE#NIId{N%4;F{JnhPAT)E9!*>edWTs zx?>7$i-mQqI#>`Ei_3`kBDOtaS4E3;s@W%|Rn(LeDf@R5XZ`qwM*ErcgJr*HT+_Jz zp__h(%RJDRS|wVwGv97u@iG*%bPwVQziV9IxMtRG8`mJ4ELt2;Qx@zGT3vh~&Ec(i zi8O)Vyv|G7R0S^z`yr5~7UPdm+Ow>#al=DD9G_albXw9(xWVt_hdV2t>D!6LtScWQ z?ELtaR_cg-=FE!Li&?y4RzA#cX_%ZNwn@~U6Lul9Cu|ok4}MvM5QolfP8$Pb$k>}ji^YA%E*Vif*+qIFhz(^cr~@8@GxtM zjiQ-ClP8+~_r|q$4X9n`)8RcwfL!S8T6y)pwKd^xszA8uOl*hE7newIzNp~W9J zOqw-mqG5hn<3kVKGzpx>hX9uJj_+5Kk^@Z|#5`e5SZ3d}56v!Kn6I1g3w^+TYE=`a zSP2vGkFAfB6VcQO4?)9>$vzmVE!G69yQ<%K)1=?bnEd3#n`cd$^h1K&pBY|mzIoDA zm^J%7>4)Q|Pnw0|u9Y)8z-`~MU)=oAO=C_oi-jXiF-dH(*upF8LWBvmnnM1EH&420 z!lZG)uZ{e;sTO_E#v2}J_GM_?7phV&TLa*5#!SM@@wR249>(I%i~ye*^>!B zu#PgL$dI9TZ!)K~u)gD)TURu#tGMiIc69c}^{ed;r%Bm`-UJLpI^dw7N<*IK82c@$zjBRisl;=A(9kNgsVPP3k$J{ zv;NtTIQ1bn#g)xWi$yC}(^t*HDm&B4lP?es)vTVjQ-fd*sK-q=$s;X4vgqT{APPbb zo=fHj?Pq$PgZUHT%^+1NXCO}_bOx8Ii=KBh3gno)RHE1U2iR$>E4a1C081!$e=pRqWX$7hYwFC=`2fQMFFnbUoovVzbKdoPT@{tF;r79os5j z{%v-NQw}q)*agGv;qj=LZ}pK*(XAmJcbL{#N*u^f_A9+Sqe5nwzVdrblzKr}1R>0D?iPO*^&8$fzQU&obRj<`MAqygy}u*{ z%$pmb&DXP1N~3FayfMF z2$U&(aXK`MCt28w^wZ&*+JJSHeK*#&V9}_Gl=J;oUGZ3Zcuzndy}!5t;TB&Ei}+&> z?XHd}p=JfXe{~GCN&ziKZ~`5RW~EaSE}A{(QPnCPeT4~*-$g6P@6Q&qo@}=P?31){ zJYqvpJkTsCVIfgESHYrA26oC_wm6-yGrx(&JbaCm3YcXvD{bmbCBo$VEv=o5kPID; z_SdW_oT>P&A)Y4LjhwrZMU3WtpA(^5o6*naMpBImPt{>VU7RjsL<+8xEq2|(Onj^D zlNGo+`72(7Oml8L)84C%5q?J1zgp_XlYMS=haX=-qoSgKfBbD4YT#Z=Xd7Hrg%R%&)_`QCJ~=y{CzqNkjYJ~Y4^FX zlUQ`F`X`18+aHw~;c}Fhnbu02Y`3xLA~W2Ff#A`>rW-qrx{l)EZY!+d_H zvTZ~w${uegL9B_52(G^2j3REJ<}xc%S;Qg16va&0(UHEJP^&WovV5C_B^FT2K0X?82qCjzNstjCHOs9`_lp*YNwI0#_@n zO6oo2hu&Ade@l~+mXmq36Ks8Rz|XpdcYy_UlULNRXGzz2(Sw^3dDYs|ijk^maMJ!j zp-hcQRcX$>MmZzfHQ_YR3fB?NG*6|(E&j=hh$(K^MUbS6^X&>(%evLg516~Zb%ssD zk(ucLf5vQq3U8~vu6HBDLyAS%o?q9B{*T#s%~~EA>j{i_Raf}C#>nryoPvsj$xg;5 z;SEWZrrZU~=aC(1jx!=?dj~=5a&9nA&bRBPu{9;hLS55qa#TJnYb$)Y*4cUT#K<43 z1n*J%*FIi?Xu8cS^I1{#LB35fz~OK^ZavAJMI2;chY@>PcD13nJ~6H@fILj`^_^~v z`JEj{0kS#Pw5)lb+kt((>K2FQ`yUyLV(GnG_oFOe&3MhPa>8h6#)~HemqlMpw}gTA$?|)9Q{Yjz@xL?&Gv!N}H>d zkX<#@8=VRYKE^G-YE>lR%ho!7D=WO1P)6-=KMNm@q}q{$qnz`uDtLt4EBoQv`Hyui zf)UMwk#yS*mBU2aVDq@tf1_Ut9pg=`tQ=dg9&;Lc2NMykFZ*YrA4=N7UfI=}E-(`m zUZIK|3-R1_UV8EQ^_HDi7%`{h$tyS^LlD&NG!B2d)n!d2{G0x@sfF9^^WDXkOZEvZ zkGDRtv3|}{J2GKwxx@66hDG?Q@A7$buyb?gv>DUPInvgfHL}35<{F&Vc=AFYPq_IP z6Q};>mdQ`fnq(I!YNWOM5I2qIIipq4#^Q0lRoal?a~JvU$>a9XXx&<}w+Xv9FzlIq ztVOkt#0Vj5l7(R{zUEE1dD%^~md$KhZE+@NK2(PjqlZ)vE7}(UX?T|{oA4XFJ3a~D z&1H7pW`9rezn9_fhx~7kB0S-thdB1>yodLZsYPlQYL=gxpC8w|Y*p1G|I9|!f{SOd z;uUlQ%8(3V4Il;jUEQhnZ07g5kTsiCbwxH=-jR(naEzbpS;2BCh}8k+Fb83J85v;@ zL280e`f&TS=3P^0I#!v=+WIV?ju-Y3Ld5lDeT9%QzCS_CRy*yy#}aaEj^QN_j0Hud3v)O6EU{wiXWrCT7=rf2&^6kqe{ zd=poRYPqgh-n0QQ@BXGm7aP0N;%~&Wmo8e=U>;QUis~sB zqgXoD7$ji4Rv)B9`1A`#1A@rbUkGuB2e*-G0iAEUc9x}1^L|;nVBXKzTZ?@*a=TJ< zTx;d&Yg|{~G266cwWzEZ$^4xS=~$(i6O(iDXaeX9Z-6b|7rVClIvj<>mBvC2!*ayk zhmpDfZ5>}o%!?AKxVh=o&6JRPB9rf$iv%5sTG^KR+PF=3(6G1ex#7h3TPk6(&{62Ovc=A74vT5nS@vM`!Y8FayFXDX#aSN)XVa0Feew)z4{pofvNGjGQG{K z%}tNnu>6aCT40SClGvZHK7)<0n$zlFs=^tD%P+U5%PmSs({j7z(8R4g%fR7pG%Z;#d;x*2OWfZ9b$o{&e`dBaYRL2+uB>cx0 zV9L5Kq!9k@0nbb8 zrOMrIbUvo<^lmDfROkx6eU9b!4ho>=OZy6%77CeF^sm#sN(HJ4Msw}0(BipUiZHiu zL4$P^AT@j$o3{+t3Xbd57&}&W|qU0YX4Oo zK^7aC0wDfZH+GGA9Q_x!*8zq7tH0Ht!hmA1T3YAe`UyA9Y)opL4o`8dEDnw*bc>r) zGNWM%!!<n+CU^{z70 z{~ZRNlQOWQQB#YMXxDhFK;-yF_(UXd_I=>_x@GAl5yJ zdtHzT#M-(!zw?aZ1Ast?i!B|N+i6E|L(^mC57$%|jsbYc(0_IQH8psgZqTBCX4^8&{x{C@>izs@?IPDNN-IZH!yY{tjwap(R-Awm;E!hR^E6& z2mI%>)3$uW+U4ZMdrM5kleuCv)!-y+cYit0(R7|!e*0A z1ip|;+~kppIiq!UlYIuzmL~DalEi!u0dW*oRSJ!|919)EE2;dcVO57)M?RF|VBzJA z6n%qluiQ+t20#zuoxAu3l~!v$j@1=wlK09?Mp&?yZ@zHk!qU#9WzR=;QD-#@&LUOy zdBl3GY5|41X^x4DMJ*AU#9av@S5;C=+`=*NJP%}&&NNXqc zZ5>$jIxY(MMI0ig$fnOGHt!9Xo;Mvu1zWFD9(<4A7q#+F(#6y|wj?Y_yWBYC)H~U* z_dOqItc3hLWX{@Ot@)KX7+1F%o*XWlMA1gBrBtIl4%LE?jF4wAOx`j1Qm)m{_D`)- zD@(QYx$zi?pgKoHQG+g^{Jg=sJEB_TRw2uCjT{^bdtmrPH%_fuw_&w01pq8l70L-_s>I|VguD!L=VFgrKw@oNR zQTw36RZmgB;TcICrt#Rw`eNPMR(w4GA1zIlOfzKI>ro4`F7lf)Rk;*r)~X4*QqnST z%UEk1hr=ZXaGlv{8@O39a!|-dFX*x6P060b@0W!6U0;zwwp^BtyC)1_;of3J5*0aVat+b> zBZPvgS!v6`2R2qd$%s@={#ATTq#ch@rlLVG1{U?Yd3tTOM7t zp>E=eNp*Hx>DDPTrp=g9H@E5GmgY5e57<4vH7i=0*N+?bK=b;?E#3ph+JYl7Ak4OT6-(lRA-SxTP?xbhw+s=*v2ON65+Z{<1FAY zrcryBcw~dkzs)AR(zK*??TQxL@wQJluU%nZ#IGD|6gS#&jTN%e zR#oHdr3BC7Q5}M#tlfyyb#&wk#7jVOc0=np%hWV@GV3|H&Mwxs zJhI7t$nPRHPElLaPjL~9^QygGTLNrpIB^OgH+azo9&R_cJ5Z&oVE@&o^8#w zqYSEUePhu})I|o6wROK*Ww$^pT4G)Fh((HTX$i@i(W8UxC!Zst@g|K5hW#S7;y`Dy*4hPru+>mFFN@F(-;G|Z{Hv3{}9H%_km z>AWTPE?l~#&LkGqFIe(m-NLzb^$Q-XyKmltIg{%ee)hm3``$<0!bRie&41v2`!L1i zx_Jv`-@kOuyao5v-EHX>EL>7||GfG0mRP1s7S^FaWo6&iLuT_E7GYOqN&VgP?w_~h z!O7$1&RenodCpz9sII=wV&pBEH+$**^^58rSi0zeg^L@k_&JvCf_V$(F0xV@=G!fh zsaC4->KcAxMBU+ioGMUAUpYPDa4`qj-|_`rjU=G}AelDc~r-ap6g0M^~zU^T11 z`~C(m${IEM{`z_IC)drXpI?6uYPYCvq2;n@9K^hKbw9ng0W6ePZ~x6+Vpj>#jM)np zEU|AdESYSrT(l%5{pq~L4U_BY7tLFY4w<`X;rz+t(4CgTa<@z@-2(g6AaX%hvxCxz zmVw<|oXo*jEIK8`5U&!bsW% zN?t7&HtvgTEOVlO>UXo^Yn+=>Uryz>#bQpixxCtdI@S8RJX~dy+wsyso@1zS?ri|Lc!O_E!C|?r7%O|`A^;EHeh5iN#Lrx_dQm= z=rBm3)&Blu?TMr~n2QMqgZMIGIwzbuZ?Y-FDFC1>$N1)f+8n2>OY!p_Se0%XtDdl>t)tTyC zG07{b&-2#??*nUBZ?eX$Zk&xS31n6781az}XZn#oRBv#uKo-k+N!a$@4D7xuV}Dp@ z`k|K94iPDr+jTwc(_z`L+zw}#GpQ$zLqby-U%JSCakNLa>ph`T**Rl zpsQ{z|Dt}%&zq+FdfJp9`F&;9iv2a##;jXqw;BGf8gqRuS+T}88UAis()h%*X;T`X znEpuP6L&mveGOXKVr%!mn+9FChS^ejorU!KJJGNkru^>uM#Jv%nT7p(X@)`m`kG-& zku`rmN>z8gqp@z|niYRP&A4Go$D{R~1?*u4~t=Feu zb^-kF2q!i>USBhw`1`WH^;70HO?hNA8;t2b-ZO@+TSi}$m_@+eGazLP+;APZ0m~5@ z3;U;Hr_N}uFtDbxUGxnWE_BND8F%7ZGReE@X54lgmUh~}(HV_>Q@xn7rd!!`cPslB z+k<%Y(PlfH!AjEB%&Obe30QvD$LEN!17RyNdy(H@n;-FZZ-=M0$&TF?+n&>Fl6F!a z*=XOVYc?OP#)jqgez<7)oCbRppIvY7*<7XiR|fKmJEu)uw`yHJwZ0+jX`IGPD7@KD zpsf#yy22B!O>752MXvLg>X|c#3)!}U*-KP?q#+SpIg%w{L zM=Y!;bnU{pbf{TaaZxd1VMU>97sl7CnuQf#yhbdnD0J<@_!3mJu;S~{h=mn}u3Z>k zRcaPie2E#cu%gfy3d0Jcc438Ajgbp02wl4{uJmgbR(uB-v9O}hwF~2dyk=p=rTU14 z6@{){m@k`amR7N%9jk8f-ib7Zq)F8(zu==*w)w>)7hM}G_RYeXZ~wYU*@ z?XGEBJ-WU7P6dCTw(mO>{QcU&?@;jfYZJdi!QZca{0;?wzqax_6#V_#&F@n1_i97G zL&4v#J^c;^f8VzCI}|+zJBuS8c1_*lO^-jacFm^7v_74;X2a^nd$6(F%+tz7`>d#a z?r7qK#ShM(yKupS%kNoK|G>R=$h_Q6wHGh37wttqv$yVv6CYWceK`yryuOuc1>T?rrY`SfX1Z}|~F5YzZGd@CR-Hgjf;YT&$O_)qcva3tq} zkWPZ^Sf_PEU5)JQ;0K?j!MDGDYrmJ-j%MQ%zp?u!v!C?ebDn(Yx61~1bWa)FdHkUt z+MnAuPZ@mb4-ef0=_^MzUpaE<%8}kH9~`*y!I3K;?!EG1_mz*fU-{_pm5=(a96fmD z=+P@5@4NDG&y`Qwu6)vd<=Eyc#|~XN)_bM*z?I%3SB~$!a=iP>iS1WT9KLd*@5;%8 zS56+i(zowQU(c2Pwk!SZS59rda_Z2PQ@vMCAGmV*NNMxl(&p~cmhGi2hf7=fN?Q+> zwjM2Q+gIAwQ`+8E+TLDzYIEtSL#3yBOFIsfb{r|~+*{h&U25B2YCBwN>nrU#SlV^8 zw0mD^cTZ_gTWL>wY47IJ-b1Cmy``rQl%76PdS-9wneNiF+e^A-=~fg`0C_Lg4gF1@(D^y1;ti+!b+4whazS~|F| zbg-xNa$D);_R=exORpR%z0zBH^+4&>Bc(%oONY8kuWc{AcDVFfU+MP;OTRx_`oq4` zA9_lM+e(MqORsM(y?&_ldT;5C1En{Pl-}H1db7LKzP;3bxYXWP>Nr^HI9lr5SL*C3 zb+whc+DqM=OWlV`-Myu^4wT+HQhIxD>Fw^)JKIa|94@`nSL!)f>N#3^cVFqf2j0+Z|TT^(vc&j5B8Qm=q`P@z4YPX(uaMej}DeTI$AoquXMDh^l@A1 z`1A1Z>hJtbbNd1_~Fv=zS4<C-;?3_LTbCN`396 z{>`QSL#6)S(y0TbQ%6dt_m)m~mp5-OZ$4b!+*jUmu)O7HdF#IN)}HdVw(_?2^7hT; z?T59M|XMW_VUid<(+-ywu9xiqvc)u%DZ~XyW7gU+sk`4m-ieh z@98b?Jy70zr2O>W^3&brXSSE0Ib43Gul(%6^0PNRDQX) z{K|pyD@V$&?k&ICT|TtEeCTlbP+$4AgXPzbmVdvm{QI8rAKJ=)XfGe$Tt0lLe7Lv# z`hoK6N6K&PEx*xSesg>I&BNt4`^xPH%k4+Y9s9~1J>|}}a%X$FYje5lP`RtO+-tt@B<+rz&-#%P^yRZDt!SXvt%RT$bJw4@j+sf~@m*3l5e(zBEz25Ts2g>gs zDIeKeKGI$OV0-z4!{rb9${!vqe|WU~(Z2FWJ>{cq<)iK8k2jY;K2-j=xBSV0@+U{i z$M%+wb(ed$mwOMFd;7}A50;M~EuYv|KG9P?*;YQ;Uhdmm?mJZO>n-;mDEA*JpW0hK z)m=Wly?pv``E=jV=7U33qXm{_>o&!UBjtuSHJG8fZ z=;`f4Paht7x^L*2gG0|89eQ@((6c>5``U)~wGZvzJhcDN(Ei?`=MD@#cVy`Ky+hA; z4;|P(bl~vNfxe*^4i3F=bm+x>LofCWz0@}JQv1-s%|izd4IS(qdilW6%SVP@**o+~ z_t2}`hh9BA^lIPGp@Tz*jt;%HZ|Jq2q2ISXG;7)5Q-`Mv?sx-s%uLsmq2Isx(4=JC zZpy~Zp8uk8-EU^EcoP3Uf`5O$n*XkQ(oz^Xe+|g_&9IWwesp((|DJOPf8TwJ(|6w{ zTF>v+^Vzd!P;T~|+w}W({+^?BbChn*?77aL!`~HF*~*@HZrbe|!G>?t=W?1^K%r-!Q%LiM#79ue&`B=?3F9 z-1yLBtJ9f2)TtH!oH>qvzuLyXKjgo?sMEPvGaL_LZ}E|#&~ z0u3MM>Qe_Uoo#(!n@kMLXfYG)m;qkqxLb^Ud%M`3rqqU?Em^dD_QItL>@rxyY^$3# z*`jQ$@%t6i;$UK0-CdHv8AFmyP6ifW?S~Rb#}v33Y@bV8-DKPLt=!;3WRwQogVDA6 z(Js`aTQrf37iog9mhiqm@6tqt!xw_BMg%)sdW?8OhG!{}9okhZ^?3M1;9G9VON$&9 zh^AJuYvq9OJRV12B2F)SIB=KCheJ$I#*n**x6uFLFjYRx^A^yCz){b#0gVJ zS*4qw^Ti~adr9Z z`UjRQU4;8=z6YGzY#|H_wa$ZPpR8ka2D@a4%T#F2IJ*?=qhF;KUF1)L8?sWXqaM#$TrI9qGTU_XhBT-0+ui|CenhtUAUl?<;)B&T{3sdoj2b+ z@16w<7c~@y*>kqH7e7Ztvk*Cp**jL{`I5Q@Uue^Z6^PNhEGb5iLuzM`sfv~t9!NRR zW61EDW;oRxhLkE%_`=`lIzg4-r;$w`rkEm(w>~J;K{{#7;+3^ld#R&Wm$~!Wqp?*| z4rIw_dRe9t$SJ0P>??+Pn3f=albJF7);n&!^OoChy~7JLf3D?>!fKcHR-5i$L-pBA zS9$h)tLNIdVy(r#vxx(U9o;Tg!dDj5#?HQ}>mA?-E>2+7)vDv2A6tag%F~?!Qo<}- zs1rY7Q8A`#ET(|3Ds$zff0i5bA#oP`LzY*ewM(IAtL^7H5yigtsP znyci}*)i7(={dI6V^(5esG|Y_gYRoBahfR!Mcj;5w*wfex@15Qqft#S3FfoEpY9ai*NaxlnXT(MfufSIdFlKi?Q$Y z!Ddw6l8$VA<*$KCwvRSOu*RH=>4b6LEP~+7nRyTjGm}e0i&D6sFbqHT9FXY@yr}pW zOe{;4V79Z$TG$wwbu=xr{Ki}`@~2%^RZwY_z#v%hGEgOlyG$b#?*ruTMx!_1-pW)K zYFtrjM31QC!rIu6eKNJRd7inGnIi>0<{ z=vtH3=JU#l6XxG-3s1d@FJBDbDqE4+T-R9Rf$b9~_WcWg+OSBSZ}^Qn{3zDJkCKXD z$qGJ9JX!ndG_IG|sBBigg43f9SZbNALd>;?%9(ixi0&HX6|jCWy-I$Q)#4*&AuYfJ zp~Z!Ug*Ef14@6kR>ggc?0@_$5TQ!qGG%aBXMStnbsb-C!sD;;BC}K)rnrpB9(#Dw) zDFMwG<_tRhwtw8t`-d~=Kb%4T;S72$XV98=O)5@5i?{S_qtcxOm)kMtO8bh`1lwd= z?Uzk_)j_L=Ic=mjAedP#P`=BBK0kl80xP$lxKrZg#|dpMfp{fB#cmiOtJpsoEw>~y znPFXY|8L|BwKaw|*REdLKAT*pmj+fbE+?kzi)oRjt>&uxJ=KpV+UD;jTjj2J43nm9 z@7OQxfMQBXFW42k&&6v%_vq-muslqg+_kfgZ0$Gpa}ecB6YTJdN~yXwgX0Bgq}J$h zMQeOIv{Lf2%(^#U*sM|WF=R9L>RM)_Ro5QZu5Qh@sxef2Oc{>3`nC=qrS@EbUl>QX!7(A{y`c>5IML+PUpVx%D{59@I~Mgi{4FNyTAdXA7AC#AAMB*k zsx_uoBP-bWnyvP7ta(vTMQg_hZ!5s^84=(9c;c9v>4C;;PW|6$sL?L_f2@s0vDOL2 za>v~EYp)Pe%hlV3vHLC0twvW{ONFIF9zSLC{VgI=1v4HJD-`3e)4;#A0*-C*ks9?k zYvz=0hNi@Z%)RtQc9!icA#>S z461VN^xbTyucUIjqMVAkA+673DF3mg`j7Z}5jF82@%8=@U+=GquUF|-vS97{$D3B$ z%3LAXanxr&9&9f^#2u#Mhkh*Z;r!*efZLd5X3li3h1we?dS7kX`{vXVo?SEF*|kLP zt1Ww9weW(u!zy5`svH;09bQfFhKUU;biv%=1rD#8F$6W^0vC&VRgREc(>T!x8QF}cdPxr6?vH4t*Ddze;e9kdEbh3 zr~_o}_YCl@Znq*&@a_3+M$bU`R;Syn{Au`YdCV}GJ1pPZ?Ee{7pIg!Q_WvE0Zkqj` zX6dF`U8Y$%)9m>)%VV15Kh4UTX8BID^wW@^wPTv)G0oCVw{+7j-E>Pg-O^3Bbki-} zbW1ng(oMH?)2;mJR{nHLKi$$#xAfC3{q(svLU$e6)pu4}T9X-AskM#mL&Rrv&BU1g z_@OvW#O%0PXi;z0#Md?Kp3mdk zGY*$DG?HfX?4~J9p8-C)5@`D%93g+e!t_o0E#jBv%OAe{TO5FfpGVLlDz`sL}* zittN6n32XIF3mStAZ-7vP9#yJYg3=XEA#r)JHeiQF$8)YjV2e>k2vkzB!Oi zL;|oyT%ChYa!%k!4mY$s++r8qH_d4Vsf(C}qN{T)W{Mfv^UrxUty#OK#XLub<)@0Q zfWB2HTKo9J3=2McwZ;CfE}YH{k3Zb7W`)Jzw(U~8B{!qa?m+nqm!(78)rk`x$Coth z`Ba>CF1Kjc>v5=z*W_7scI(JC1e@)f2&?S_CZ3Od0&S*WlD1x|DKO#Ahg&Sh1>rj$ z@n5~#E7eoF>vW$9__eFq=x>Zib)WHp+Fz^r(Py)VjXqO&i

K^xi*PIV>`G@1-J6HVyq|BB9e9+3{vx()}?;JvIxwFIjWhB zHP86MB1hQ-$9mJQwzV44Ey;L`7r)wm)4zc}54=@wF3>lclb9`eX4Or%VNBUA^T+>$ z$F?G}#gJ~gCuacM8Z>58>xQKklnk|sqY*pRx7YR-d#=Z;ajj3&P-@4rl-7I?W+Bj- zm2X$etZET40U!t~oGW2N>Rpw`5 zhUHXf*!UI``z2atvev7=lumm$!_Oi*BsHFW<8@Cwc8IkVo)`8Z-{SXTI09C`ijgq? z48v(2ijBj1oE5{!V^rA4sEBtMT+hr7esBYFQjxy?)RRa2+6=JH3a{jSz)ke;Y z^Op#gZN*g%mvx-rGb}qBs(fiSWrLo!sxlX<3I-943h~gs@1SG>yHWH(C1h_O>$3Z8 z*cnhl%j&QH>Fq)yN3affw@Jp*`Hb^E(QXK_Cfx-q#97tpC5 zp#Zkrt-r$tQjNy+=UEshWNbNn=ZqWKLny|pSXl*gd*P+vCCp$6urbZn=~gk63(~$^ zYw%+mr#(?W+gw3@X!Gs;bvK#s4C?ojN%-?l{JA9IgxF!s!)Z@6Of!csOK{g+b<<}| znkw#{nR~lIWSYH940|TFSHN+LT9MY3Cym(D)bmqmHz+caIj@?&R?ws;gX@NN1Pkv; zD{Q>I=Vq*60C~@L{55Snv2I@)`HjyTO&cn5#j7&9eTC(S4stYAFl=3y52`?jC5?XDwkOrh;E zr1nC1x4k?T45_^q{>WYn>u*U05yK%f%#>VMpv^Q+9HW9coH#z|LxD>ex^-h7me^(+ z@47T@c!GW>%7kINrtMX&IjtiFBns1snh2G+0i}5DZH&zKkU3icEhJC@C>*igLZ#!4 zeZTPC++?fAx(Vi}XOq8qa9T3tiCkKkg&YKuqWyBp6wkw49|8Pd@>^)Eq3i~DuEFYq z&;*da&OpP3eq#k8QdgaX}o8Qh`u`B~lQvN19zSa{PJbzKB{WQ-SMQu#J zoHlN1z{WKeZTYc@6K3CJ9pz(eeFNQ?IFaPC=?|I7pE2XsNp(NA05vlvSi_I>GAFHI1i_p z4$J*|OiVUK>?3MXHkM<|(QH-a48d$hni1mVjbG=8jU9f_qWKBCCtzRK0%1d)LuD>% zZe6=^{fg$+n>Vg$S!r*R<|<05sS_AFlX_cqFPG0*5j{w6)akRQ)tlDo6Qs2xD&=?l z!t1_mblXqG2DX3Sci7kJ(-!!xRr|wyz@6kfYdyg$+;od?Tv3Ln!J}JdR6X*o>*_+Z zS6y9#ZOYWj9y`y8`Mn>cPl{g<0#37=X>3XoewT2u;b>0+_%lMIDUpK44m~9_n!XHD(CF4v zLZj)+AO#Io@-vGDgE0z{NSPgV{)|Xjkw_wC_Ln=AGm)|)kwnVuFZb#xk+LF@M9Q2* z5-BSaNu)HS1`-<0i6k@{QUeK%=0p-24XGN0Msp%xLIWF8^ACb-P9%ZTkg7r8G$)e4 zxhFNBzd{0JR`;fY2&+|zB&_Cz zK7U3WwIq@_nwPqcIBH2GaWpSgQaB3DA&%yy&Jm76bBLpPsR>8W!2g+QMWp;PkwnUU zsYOJ}V~IS5wD%{iBXCwHlEAq?2@^Q06G`CQpT>y5S)IsJ$az6z^*OPyCXvL#g2?J~ zVqr}piG>A`)#t>*nnV%{3!^7Lr+TkVB-MLibnNF;@3o1fdN2HPk3-}0eW>KxL~>qO zlqyN}UY|&+_o7rus`vUtQoR?YN>aVoCz9&DIAulkZcQZBdvOfe=Tz_3L{hyMr-G>7 zt%;<1FHQwfy;~DW^)q7(isoqOdw^O}0CX(vC zG<7@Gdt)N0-b=sK^z=E^dt)N0-b>SqHV73%`8T zmGIv=WNQ=2AzPYA_Qu9UvN!4@t3OiPn-WQFpO;8#drKmz?F$o0ZC{&6n);=Qq^aMS zNMhmBLovXABp5#JOEl47&ozJjk#Ml*K@$)5T$9ot2?%>0G!bFXwFdnoAz{yhCMG`J zp2{N%K5b7lVemy~qS>imbS0X-`st2D6A7PYc|zfyRGm%?{-cTHis`;Y5(fM` zaq#IUi6#&}eId~V!lxf6nm|~X3L_5ICXz7t;=LqI9DMP9qB$=-m`KhGn-a-+;orJL zQ_oPJ&g@S#73$0jiKYsjc`4D-pET1z$fO>AxoWzuu9a z6VYG4lAg0ZUmr~Qu|8kF87qpfSs#0@1@za%z}LNrrsezk<4FGv``>8Q=Nn@6>yM(m zZ`hu1UQEx4xUWy7=bVl#e@#!{aEm!L~{jI;%AK%h|SbKwJd%iuGznf^{=bNV!P5hYtM16=K8^555AA274A%5(6(6l!8TrU#e z(%jhdplNTu?n?5UroY*lXwK7LzmsTA)Zgq$H1+lWcKyfmZsPwh`_JeDqS=4{(UxfT zpFMv;&)I+fu{%9y|NZ9+LH{T5_@7%6O?~^%=Mqi*8EEewXz%kJ2ij@g2ilJmSnP#? z_KylIHguqC=RoHvCG4VY0juk!U=hv(@9rFU_eHVZrNsrSClbEv2_Y2;-}Qv=JvZ=v zu->Do8F+ukzp?4Sckt zz@l*?D-wR>2_dCjrh$*V5+Cg@B=kyrykp>KRP|$*`gmu7m83q7Hh%0?J@)dzF}*Vl z93x@}z|vY};21$_zY0>sDW(3Pjy^`H4sPxk-29%i1~*eX278_w?D<%%9!`jZJv$35 zwsEj$SAoUa5BBUSuvpc>o~H{e8t1{D{RI~7)nLzw0*i~!!JfVXi|ft7o>Q6iE{9{V z=X8NZ+d25|)&h&uN&S}{YE3UwHD#Jf?vAy^U@z7G;Y>6A-Cw>L>A4zxIMZA{-2LST z@tnQ&aHgptpYDw5Vz8He_i0yVa6vIAm&l%6nQ1D)oLnNib!DbG0nW)KvX570nhTCO zu{Im*ty8zdtV2AZvgT2S{sBp5oKj(P@tz4aHT88_x-t_tN zq`Nc|^K+X{;rZj4=49Oj?B2Ow%GP&Slafv}T$X z;qzB=0-A)+U(F2KgwGFW293h!uV)6W!r<{YGKY3y@c5gVL(8xv)3gj5GEK{{B-e|U zVMC^A8J6UB(=cqvH0{EYtYfqb8!}D1u=LAz+2-T43mY>{yRbA_qT{p+8#7J2ur%jK zyRb3SvpKi$_=?xBDp!!1adQ4`(t~p6me|j`C2y2r_T|-=(L}C!wCXu>^$To?@Ahb;)bq%p?5{W@@51!ncdxr2H zJo$9y5a9oQI9H7`{=dJT8AQBEq^fboH;KgHgl`h5YQM+o&m7Im8b+I85{W^ZVG^lfv>7Im7_=D==2B@gHf5R?o zv=htP?av&d8#1YE!W%M)LwwtL zNGgfoHAX6l*d6RkTk?Z_1n*$q%ef??7cwbdU$C1@;t;=fl95UxI*pM^B02~AvJvPb zJO}%-73d>AA(QeYLLrkl#Hh*S{v=9GCUb~WJNHSoAx@2vYD1h3_I2l05~zcHZ)J|p z?h%l940W&14O_d(_mxproiYD4H6Bh`l39qdcTB7=RL=?D9c=h|?thfFG)vpr-I zhx5J34nlS%oy4KSI+p$)K8w^S1GZH(yQe#duz#&^Ht zyFcT*-|=lSDPPC8$s`W(J=ni5^=CgP@WKB5nZp_UOh+!W??-tPc6PRf{Y9_)WP zXT#~&jt*0!2ykPhMmfOyGr;>D;Qblk{SI)GNhLYJO(t<1;Qblk{SNT{4Dfyj_*=O) z4)C{fZ5-hJ8Q}d6@cs<&eh0Y8q_Q30CX+Z0@cs<&eg}Ae26(>%JY%)r0iMn&2m1+U zvxcz>=qGl~1SAH5YCuQ~!qSu`F$hBI@Wc?}Hvj1<$)kKfH42XNnenZpJ3VBh7P{UcBp`bVHH^p8MY=pTW)&_4wApg}E_PE-#X)DlOqF7%IJUFaXdy3jv@ zb)kO*>q7qs)`k8FSjP+UDTnn3X`Awt&)fY+a{V0WA7lon?K6eCIP&v^e9EWjQ=jBC zK1J_OZ|0|H3v9U>CmyGcLvf4|w%`C_^%*KdLIZZ6v?VMBZ?7O;qzoiF4pJCj$AAOWy^z9Eb(;a^;`N0eIsRW|ddsr6rF>wKD8 zZxTt9Tg=wkGlygO z<4m(}?#eW6;Mra6nL{IZc2}n{;;f&dl+V+Wki6P|eTo?#>+c z&Dq^=WsYmk?sqar{gcOTk9xg7$?PGr&+guzIX(`%vv%#_9C~(l?!!IA;o04}5BG3h zJG=X6&PR3rICEI%b6fVD+xoIY;@lRh;JGbN7g*Hpb6cJ*uxL%sZP{O7(R`lU@_d2C zh0nPyFBDj`spq!5RAAAFp4;+rfkj-N+wy9G#YM}xEw2?=w43L){Gq^Ncb?nwdV$5> zJGZ61z@jBQx23bdqUk%grMtkQtvk2n{Q`^HOx7#WUsUIFTRtpE(VUT$q^RQOwtQTW zqDdnwNztaA+tOQ*qL!1Dq-fX9Z8=$xqGcm1N%3|1+?E|#YO4>&)TTTGUywS5b;cmj=${R`m+6h z!tr5$v9|X6)e0^vY@Ch?E^XFd_HX~d{+Ii({YCY&-yc?RX-ogI|LL87*}qpe>x|;t zpmU$rO**4!)c&&nx#RYKs@Zegl@eF?k&L3AiQ6BocusA5vG*_gUwl8fFR~MiWBC@i z%D4UFzwB>M`L?55EuMhBmr?DAZT{Ev!>+dljVbk~S{&BfDiNd>LU70isjdBb+d&7Z z9iKF*R_*cBN1-D~9|fs19J0~gZhs1g zY>;mS=>@$Vq!;u~ke+jolPyZCD^V?Kg6@&EsJ&9w7PVKm7vYeNazFH};E)aSqaeK+ zM}zcg=$`0WrTrwHdaaH-xlvgOW*b$jlkwEE(gov|4_cI{{4%v7rq`)B?q>uuKY>+|< z9I`El|his5S3LLUQ3Mp{N1}SL3AseKi0f%gmf(9J2K?)jh$Ob8B zz#$u?OduSxK_2v;ghMt+0S6A*AO##aWP=oN;E)Ycz=1Y>>hc z9I`G}54%r~3 z-f+kUDfNa!Hb|*A9I`=5z2T4zQtAzdY>-lKIAnv=tO18?keW5%kPT9^1{|_M3JY+^ z1}QASAseKy0EcXl!U7z!L275_LAU&$3mS09##2E94%r|D4LD?j6g1$F4N}m6LpDf3 z0}k0nn*TMS0f%gm8ZtO!gH&(8AseK60}k0nn*X)tBWCqSX*(RU@l@Ilhis72b~t2% zl(xem8>CD<9I`>m)Wabgq_6;oY>>i&EnR$s|0p!rEGmZZ010-{AB6}=I766#gl8&L zK*AZq1thpA_@j^k31)4%#5Kc!GmA$TYjSaGG75OtXs%3vX+cR(OMhHnI}l;Ghjs zcv~c4;SCPjcq+WXK^vs-1_y1BLK_^kK?-Yd&;}`_!9g3Oa0Ul$kU|+8v_T4EaL@)R zK*2#9q~HVxZIFV3fr+G`U{E3{D8NA*!h!-Ev_U2)2&!KsFa#sP0e+B3lHd>w!2wR% zcrG-+NgJfVU{94^bA>$@L$d|kw2?rw1>Cfa{FC(4@$e_9r-R{7Qb#+}fTXn1j0}FN6oTB>SCU`%>Oy83T^h#*y^Cpe^~tMmj1EoHT19ZxOw zq$fC@OCjx8#Ggwe&){AFo=YX|@JUrS&u`Yxa%`i7M#XY)T7yDgaO9vdp)WXS4GDe0 zL2FE`1TRs8V)p@5qWOM%iB<=c_>~X`3DVIf9ID~DFlW!5RvYa?fzv_`y}=~XL8d=6L*EKPHhxYE zLH69+E30PDot9Cv=UfthE30PDotAN;H#o}Es({|$ptUTZH#lhNE4{&uHs5dR2fe{T ztN-W?4qE+3Z*b7+KYD|MR{zl(+-URtW`6Vr2Q7W0H#lhN552*ShUYgE$Q_(4^?}^M z$x<`r4h~j_Cc=UC7vLdImcTjC{$gTD{|4G$N-U}1K>MM@k`@lMzn)l9#DVrV5=*)` z(Ed(hNgW5;-w&2~ql97>{I$2R-=j#KVUi+>nvGa|@itIbz4_3DnV4(ZM zfo@OOEgLY<-5ad8q9?jvOswdM?w1lPdZPPKVnrLf-wD>cnzrOokJ_8_ytmOk>dA^W zx<@@((Z-(F2YS4!??xMY-Uybt*n3{?caMbTV(%>XyC*A3e4l>zWJQVYcMq1i*n2|v zy9di$?49L)_he}fkl#I7kq}PyJTHNZy(e_PdrCzm$b#!VxaMW=g6?`xRtUQ5Jy}s( zlQP$Pu*}Qe6T0g?SyCN{TTp@$3O%9p`NEc z9Pq1v1O2i}1E)R;)+tR?NGPdOvK0fTo{LJHiq1H7D6wS022Q=6STf=Rr#cg>N1b!( zoy3wU95}U44MMB}cA)|oSVs@`Xi29424qQD6u^Ki>3{+lkfi}v00XkLm{0%%vNRkD zU_jPMRl)-pkkub71~352VikB*J%9mO>OuuDAWJ%-00v-LxB@1u|B|QEgS|@C6tpZh z0vJ$USs;J`X)TWtz<{*YzzASKS{;S}2Bd{H1TY}2-m_yOU*Zk+Y8`Ax7Qs<>B7_0c z2u}!MKw5o^5C){B=LlgyS{;oL2Bfu8MhFAaTJ<1=0covz5W;}8Mg<`ZNJ|qD!hp1F zmhGJTGHc_$XyFTi3@EP^0s;Bz4xfec7% z1%^Ndq_qOG;gg=kd|FQCvI_`hKzZ2(gfbv4 zyMRyzq-7Nl%7CtLrL!I6EiLyh3bLfE-RaAYH_oZ!exSV_T=oj_OvmMuGhum+@MClJs`a|B|@NDTyH$cQ5lLq<6Z z#E=n3Aco8~FI_N(j5q?awI{kek}m2P+ANmjzDks%%bLk{o2eC@FBC!YcJ?SMjV0PLO4VZ3H}zuAvjtX z*paiw`J_yOojM0civ!4LRJAyOj5t~xKt{cxgAz2m;4V76w5ONXxz;2m)zY7X(2dE!$!T>Cr;j7CTE1j%*8L)I!-7$cQ7`0vY8j z+X5MJWLqG!%}bYUfs8n^Es#+QWLqF3j%>?=QMN40rl4h45DtNDlvP1E1k$o82!}vg z76suDNXwoe90FAAr&m)-44)r7H3YHsw9FUFp&@siKu`;Z>&@&;hs{efS^w)v4nm|MFnI4 zAQddx0ER|j6=VV!8i5R107yigWC9=)EZG1`sRA+rloCq_XLtl=E`T#U0vW6+q+#CJ7sGEF`i8kVMA6@(A?9UzvFX`gOBnuwUpmb&-UyZw%!j{PHSELAWoY*jETtW_{8 z>{T!;ELJcpY*sJ}Rx4NqyA`Yo%N5KD+ZD_T>lMrj`xVRz3l_`@8y3uL#eDO@Vnzhe zc`s$~R9G>ybCD?4Gl(O>(Fi+crY~4wxDZK#GGVxk5i()A5K4kFVY(1Xf{a+WAe00d zv24-By1`SiXhCcVO2qnvxAX=rt_0h|P!o7=VI{nQW^pr1N4GwdpgX|3o@gp!}z=u5@C2=3W+c}2uQ(lWN-!Ii=o|A1b14urQCnf$Vok?>qtrIqFW2zyXd$+wfG3z(I}x=Mgx_5#T%m z2RIgO!&5N=2RQ=2N8lhw*!Bn<6S;}0LP+jct0=#2RYF*jKD!o^b8|#kfSx_Sw`R>M^@S+aF7#y z#Rwea2!>}FfrFgr8%E$DCp3oKtQd(Kf_E1P;o?I4}YSIkHe^ z8G(Zw>A6SXAV<3H5je<6bw&gZa#EcUfdibqvPkDP^9_&^ z6bR43`YL9JWpZwd;GmctWNErl%nq_NzbIx0Sz4?rW(QfCUlg;0EKMhh*+G_ote72S zsiunAL6&9=#q1zU{jZoEWU0Fqvx6*Id&TS^OXgiMJIIQ@^OzlEN&OYGgDmO4Vs?-v z`>U88WC;_B*+G^puwr(QB^#`m9b^d>irGPyjILsKkR>atm>p!v&MIaHSQef`L(8xf zWJMQx%nq`oR_8os2U*g5#q1y}dSWYMJ&>iD=$yywAS;^fF+0eLW_!#IvSbX-dCU&7 zqKzK2gRE$y$Lt_WOTTj-vjZ#(&*5$Km>pzo70Y9GkR>B=&SQ3vC5x(<9c0N&C}sy) zq4x;Tp}-khXfce30%vGlrI;N|7=4d09+C9b|8VuUd8cSC&(FWeGykjYvWDk7RDZ1%F6?BKnXBzGjTc|$ z`s8Z6)(IC+akX=`UHWqA;AyXql;zUz8Q9}$yNu?gH)*f0wo7v^Z>2}r)pn`Pg>Ej7 zuD0t<|H4r^ie7D(4qeOv0}`d8a!KQ6YZK3cM0I>@^#SKDQeFZZfGnhno? zywA&*alUZ+9j7%DUV7O*Ao4F z=$CBzg+siFeYIWl;f0UYADU$^?%}odtL-v|m$yCR`D=##^C_ygVWHlC6uW|5{01I;iqxO)tGH zeHWZB9edy9h2_hKgckw%^1FI26kk3jeboB>;v4h~yc*x>yVxQ9)vR*ylf$0BAb;su zjmK%>X|K1pL-@aZ+|zdm|Ciq3UHhvY!vFac)Q{_PO{FZQZD;s5f>bmF<%A^e};!{BCDJB0sBTlHM{ zKflw*w?p_pzthL3Bku-nfe_^xQC;VT0#_el|@PF|I-i5o`A^e};>-aR- zbNnv8dD6#E`2X`M>67q({*>F_4&ndLy>34`g#Qa4slNjMFSxz!5dJS7)p!g4=bz>4 z=hY73|NQHY=MLfj;vvUlhwy)Czw3X8@PFxTwfgZs9-rSjg#QcA2oJ*l#TWEk`2X_>-jTlAA^e|zO8q1JpWmta3jY`0P+gzVJh5t)$YW#)&z(=R>f8OqQ zaXbV6r=>r_|AnU=|D7@azo+^O{}+!)KZO5_TCa2p|9?K|>xWL^|NN_NuR4YQuveXd z|4$sRox=Zx&2C>i1OLzXeA+4eU)=we*I)R*cuM0d{9oE4eG>jJw`shD|I4rXda_ga zzx{~uNP!vBS1Ztvn-$d~#=3;*Y(FI~d_g{ORd)+PL3IPCcD z68>X;?h^hlzvB8EuBzwTT;IC_|NDHs&=vFl2Rc|K}X9U4j3Xls@qPirdew!2bv8|G@tVUk`T) z{}+C*=P~~ubNqJ+|Ce^E|AhaG@96pePuH6^*O6W4n&15^$~^(@+btKs(&T&HYT1@0 zS%YO;mVMo~hjK}>%B3omC0Ul;Lx7k#fFOx^V39=<8~|`C0tCSU1S9HtxGbqqeH~#E zC|V($b8sepIp-(z%KbiXo;)|ABUn*bJ9qBfx%YbBwK7j;ZuqZXSH5r+{_AUs-&f(k zKBo9|)$w09H(FO6|8Hl3(}Ki_-{nu z&-8Pd_+NcUe~ACp5sl9>{8#6&;k$Z4dbw<#7wC_9JwksSuj58+Iv(-5en#m*J-w7viaZ@YB4@_`pwdi1UM==HjO6!_UFC^l=$} zszb_8m*J;6!hFI{mHPwB@KYUA{9lHj>bUOr_zn8%tax6ApDNea%kWcOp#Shwy}=~KzAW%#L$(7xm6sPu6KeriXQZ>+#iZASCGVt&xW75J$w z>ikyVr*={NteBq-jqi&2xhMZ!fuEWd!)mR-PkluFUxAF--_dBT!?4>u;Td1{k0Xx&$w_-+u^Go7rMzNe%9kcG}-W0kHkFL#Ls#p=E)|0 z)?*-(4UhFz#rqZWc#G}kk$if^JjScaX@B#0pZ(3F-hywfz++>8@rK975ykrzcx)U~ zyjp?B+$MfDCZzW(<}+?2rsESo8HrAzQEAZU7b5#4ob3?0s zv{s0p=6!|u**v3owc_~suHxg0`9CkcU4j4FVdd{D@ZY{Ph65o0jiU-ED+XMPoVQjC z_$UqJfD4cn06);D0$M8ue1riv;G;|^0kS%#0JLJj#}uGe3^)R?V!&r+G(ZNN1b4-N z8#n__09XO=>cw^K58&0fla(gS0rK*6vR54-R|HV_r7oba>wH%My!ucAy$ayfhe`lf z9UvbmAzKCT>b4wi)qoFayjKnQhyYmy@Y=8(Vimw^2+%5k*GA5(zW{DQS_SYL7c{E? zUOT1pT?O#kX(iOF0A8Emd;q*QBZpoE@EQSh)d7_owyOYMd*_V$1K>3R-YS6CZU}%? z0IzWaW);Al@UH@REnbz$=4TbaYY&wWtOB?Nan%8LKmltNz%7ug4!GwOpjI7lkIJ7{ z0la=(0dp0=>m&rL0A8Qa4ZBqUuTLuhUIp;_w18U$@cO(2aTUPp^GYCB0o)13DuCC| zaJ~Ru=LeZp0I#1_LK63}l0VkZilD*c7;I)b|D1o<}ob%MOX@!`LY z;6^h#-j)K!D*RheSK+@gj{m@a;}qiw|BbWEKm0f1&U2by_-|ZcJmKGhx(fe|RSDcG z{5v69h5rT#_A2~05a3n#_YKlj_-|Z;NBFluUxWX~O^x?8__sh`ga5{s60mFV-#n~@ z;2QilN2LeX;JtxP}6>mrhB7<5pujWaXw@JbpS!_Q8N8 z?HUqrFrX>Fh6J=PYXzEC{ML|mXkT7e6upKBw6BupUqc0&TDh@x4Hal^OC_&E^|OVi z%3H64@w2t3N~EsC$+MMbaO04vYV zxByt5z2gGtcy^8gf86HTc^AOLvkNW&fM-iCfPiP0T!70zyW#?T{@GO*;PlUyU4YkT z6OktC25$ds)dl!{43NC+296)2E~U7E=f~Mnfa^!cQbDXkK`@EGw1Pz_Qv6K_iNCah zg-Y?CDAfuUsdO0kh;=Hof`v-)k$eS!X z3KlA5(()B7QfaJIK?|&4q0+ovRONtC(6G{tP-peLCY=UZGONwS;6J85jlJ2(8j{3~bj^2;0^mf!E zc6RhZp_HHyd!@Ruh2D;OEU91ELZB$@!+9JbWW<(qjMzt8Zk=b#!M#W6#BQC3o`ZWy zJKDF-6HX3v{SpP>)IL9)63{4tr-Mf+E6v zqX59Fx~~)k0LF!U6yUAZp;Po7N3BezOe<;tSo{3ETZJ&L{-X-fr8<(b>nI?)RAVBu zslIid=u#a?x*Y{Xm-hMTcc?;qsZ1u)qY440I+Aj_C?LXAN7Gej6ga}1pGjdcN(eF4 z(R3jf1%#ODsCz<;Ie3^dsi=WER7cZqVNq~Km{fHw6a`j_l_T%cR{~S@NJ=lG3J_I~ z4p9SsDpTGCbgD-^dk|ASmQtc<15m2R#cCpTiE zfW(tKF;PI~S=E(T6p(sWPozt^C?KX*Pq<@fBEJqt4Pt6_JYAkg0TGq^J5hjOR>#u~ zjwnDYtK;bcEeeRI)p0{ZJgtsPwr`y$o^}d|r=0@gY5RQK@RFYqQ0s@KF}KbWP^+g> z-V?_q6Rn=|#8?&2-$)nRQH2m&J(cdZL;)gO)zA4+fC^Q0e>@5hplVJH+EYDk2|#kH z6X}XCc0p;X6X}w(eJk#5C3&t+A_*6ek?K@RDx(H6Qk_l-RTLm2)tPjkAqr5D>I~;{ z0TrpvrZg{Vpdy_DtB5YOqlQ&vmeapr6`5u3B8OB@=Ti0*yI4iuNtcsRfQoQKFA7kR zsxBy_z#_7cZdpZvMMRgNQD70#P3$PJh%8CQZ(Tq{s_&+JF>0V8)pt|A7zNglP_g77 z7px)YP>c&`NHyF|H7p_L6^w3Ou!LO1$u1xv?F&t@#vfm zV+pwgA@Ng{+PLKDM?$Lcw1##;LfRJ=?J|zK7tX9w$08Cxp=c+INZhkl0U}aeMpiFa zM6Ra9J_gMqvT}u85Ru9m4?H4LIg|3X*u^4p9q+zi5xJf&D5Hi&BriZj+85&2LiNll zatjf?U=_LLo>@iooJ+K76}e^CL`B*cu6rNL$Sri`f@S1APX#hk)ne<>Dk@Ta&m)hD zRL-TVjHqE1(F0OZfQnRg$2kftBJn{~ot;Hw&93NF=EA1k$SSho0dNL$VbfD#8QJhu zSVlIW^`d2DgSm-kOypRb7u1uBmXS?P?;-`)N#iI}e$i5*d-QQ2OG#dUlvI||P0y%- zl(d(Q69q1!CG9Im!2Tj)Qq`j^v6Hn#>(WO7T2fg;(=S>}^t40Nu$E{A8ZNhKael~bT3{D=}qK}p&d&ye?BL`rH}bup?SCAAS4 zzlfC7Mo!QwQc}~M(bxqk>C`|OjO6^-q z2ubY}iQy7LQacIa@pMt*sIrV0Eg>W|J(m-0ASAU3&|5-CYLg7n5<*g&AW{ZAYBYYt zNPf43knrPMG>VYaW?TauX)g_sLSXe?uYKvgDgo-o<)2+)mEGlwv z${j;Qc$zwDpds9yj{-EL_70N2gof14a#gp4hSbiIIWD0gasLmWSwciAH#|a!NbOxf zT(XFqvxguewaCmgcZdi-ghtO0k@nJrPY)HTg_3I@i-;a3k9{m6@mRiUI3Lli$*5rw zi3gii!yJ)jWT=PA0i}?9nUUl8$jEc0E zLg;iH%g7CP9vP|J_W4>yZlGREmXVuWqAXcP^lM7=%rbJ5i^)hcQ%BlM@k@}7YaO|8 zhfH?~9ceFJ^ZZ#z@~$`~Sz03^#{&gA!!@#}B`e9g4}_A`Zu^WaBzL$N@Y^W0JBYv~ z3yFRXZ{PC!DEvGW1s0MGq~?-^WCMOLSxD~UdwwUSy`+a!q7js&cIS@9+9tu)ucy==`7kI+d+8B8 zUUEvZqa8Y z{U}6ULQU%W5igoWP3p%8mY1w1m*&YYE}XY_*)TBP;2}MmRTlN9eq&`iMx`djvFTF<&eF-_KPa9Cn$t69o76(R7cw-<6 ztR@#nQK?8A9jnQuZRFAKwX`p7dr***_T|IFj6Hf%iFepF8R*G@UZ!o|^4l%^ zcp3%hN&E5;*hUbh)GxV2iT6TN>hC~h{+`P_oMZl?OJ0Da@WXBN z1xev&u_!=N>b~RPmt79@aB|c@QVs^8)UUg=FY9^7sDh-_Chsy)hIukQ9C) zjsg_rUOGwh`ycs7n2@ z_d!&65Fv)ZqH<-*E=r2hzB27mK~x%tJ@{x!`^v0GA5m%eMzLR+X)le#x?h?(&=2D6 zTYhV%F^HyIAxmit59xgT-ps*i!h~O(X$*75@%%#)rs^ue$FI(`ujtX0I1G{!C9Z>} zw3kkjt@{OClaB)GZ#?O9clLpy1bN8pkKt1yN}n z_xT_yjpJOt`AwSYaWvGg(lmU@>vw4yc?~3`ah#OHZ__l!&?Uc4)4rl*jABf<J-kAmaxmlWlczKm$QG`kD7;e}XN;mW7CajWN<(jbM-2p}vB*`z74)Q` z_f(<=deV4@xOv5TqBjqs271DiOHqKFG~Pifu2@aZy6dP(;~WvguiqTZal6g$-!$H3 zi2MRhBYqlABjh)54(7N<@GCft3ux9=u6P<3a96*C)4u8f@oPAZxJ95=x#DTWwYv(? zl7o4q#Bbs>mJnFKic^Va5wr_eJngG-(@Z7gC+({d=2U`|94sPhej(@J4DrElgQ)t7In) zUu(v%9Er#F)h*H!zn#-QA3wsYvlbJ*?-8w7Ozx76_zj)L=6mddn6%I5V{bKi$W?{k z(&3@9XcaYSFVBIAU(|^bRO>3~NmGxm$4=-;a|qb3q9@H^RQsyaljV0jgUCs9n2Q3x zu+uzB9)1-yX^z>INKcw$^PC`R(mduNAU$cGvI`?7&C{MhvXl1mEqfd3Npp6LRxKu1 zybog1oaOp6K9QjLTFz(CS`x1zX}Zvo<{9F!-`}a;B~o8SOPcQ(CbXoz;%nBc&Q4a2 zl2}|tO%7H(jHt=M3Kvd(kEi*rz1-Q!%4srNzshqEk5sC&$Vq!;5?S`!JUrYNQ%rJ_ z7x;aiX8c&68u1G~?Uh-&;#Yc_OZ?p8cX|%46At`RPctrN)d-h6&4?{3AUSDBiRtztR(*fXhy*|Io{EsQ5r!!O%r8Ta>F} zD7Ik84KU;a7@B?zO+AJ(QVh*FhQbGiW*S3514A>6q1naI%wlL#F%%#$G?y5fMhwkh z|DpbDKs0;({b_VGa~O&P7)mEGG+Q*Fnd+3NXapj6ViYb97F0&H7PfSR2xHzjUlzhkWgbtq%kDW7!qd;=`w~i z8AG{UUp9nN;`FC9IQ=Q{O@B&t)1T5?+EC_(A)Uog#)ctz#TAsPVMtYFusk_Nk(&6* zWCx)Si`1}CIr~7(E16?`Sfu7ds7WsOA=Jo#8W}}uJ}gr6VUd~-p+@^ajf^5F9~MFR zun5YBfTDc>MFybAD1!1Kpd?NC5Kt0N9~MFR5KzG1}HiXpvV9e8Gs@KP-Fm#3_y_qC^7&=2B63Q6d8ab15lFj&qd$)=c3~N zb5U{sx#&CpTvXhr%xN0lr^PvaS`@#hMe%!T@yp!uX>m@U7U%S-=QLGgPE)U+dQLNi zddi%t2cFZkkLNTQp3`J_PLts|O@`+*8O*7gE{fmNqWC>6ir>?s_&sG#)j)AhpBCrz zX;J*17U%S7aZaCF{L*P#{63S7L2*u>O8olL8A$v3GNpPd>FY~-OZoaT*N^uWGBN4P zJpU=m_sQ&Uq%R99@y0=_^Xcqw#4jCK>eu(#tX$%!ztO(b2c$3c0p&}5u-3)C@zz5U zw5$*DQbhVY>%+66OFqLT(`Y`E7xrbn*e$BeZc$}+iypaK^vK^T3*9A*UltA;~?`Co;lvVngUmuwN37$TEuLX$0G6GL!PO>|-i zPYm(NJ^-4g>R%yL28bpv_*aq>Z85Ofx&2~5l%{IG0ACsKoA&udF~Ix+nzf}EV17Y> z(UxL>`9(1~`31>|j#Erdep#H6UlwQNm&Hi<%VH$_Wl=SMS)89=GC%1!zhr(=-+oz~ zpI=(dvH{uWNq>#+K2Q1ED!Tdp`J$ii^DMt>7M*+le37+%p5S-QqUZ0QFS`Ez`J(Ud z^VGig!~4_8?eloPw-qyzeICsBwqnTI=LvjoD-QoY&)$1maRT;vFj+3S&qK+!pgfKA zKF=kwjfawGlP8jF73F20XOX zBiHPj2Occ)85M}M2u}k72D_6{&a5qq@B)&U#96lKTFeNevUipJ zYLEM8?6a)irdoXWBGuxR;Z)A+vZ*|NV#>}umGd%TD!)}Y!tLVUN(DZXrBnO2MaO5e zOl3cwnaW#=r=zmJQ%iR=n)+LH(%&0}I-3&QR32}QW&8HMoMn*v@rlQxrFlyA?n}P= zUQT_#Fa5Tq_H2#OMyeSPq@)&8ez*UC_OS}>KcxNsETi0KDbPMF+Q*`OSzE}0d}#|o z#=={%iqUm{3y(~i+&rUP?T^)1PLn#G^Yp zr_v?p*I978lWpAVq`!P8B^`OCs6(Z=Ltf}DpZ}l@KK@~gSx@6$T0w`fiaJzU(Oh~z zv_`#LEv6VHK4(BpK4xI6sHLS*t+~a)7w(~ zG@ka-*~X{Kiq>40RaB(X`a;*XMOpH=^)p@8J6$#5iQ_>h7Ib126UNfIu8-7bC5ZZ4 zNs9hfilV6#lm2FIIbN3+#}6RI(d^=Dvv_Gy+ALmMls1bO7p2YO)kSGj zKF2I<7OyW#n?*$|#e+wMqi=GFq0!weUSpJqd3bpI)LPt+%X{`iCDT=UX;YW@{pqes zX;T;ZZUs+DH`q&?U7obrP`nf=#VcmTn#F{;6z`T5w-poO(x!aQZ5A(6O7Zc_ z;(lF9v{}4NENylv(Pozt#V6B?t#m2TW|tCeb}7+jmlDNyY>KUP#iC8eqAZUoZCb}u z9Ne^y%j(kc%`WBMbo9xxvQoSlmyRd?Hj7zsX|t%~<)Nasm4}KRS&pY;vQ{#p%R}-< z{ay6N@=(zm%R@zPEDsgEu^eBU>a-_cRD1G7{ay6K@=(za%kg>I&M20LI+|1->S$6q zJ_1;*g@>e(C=V4qq&y@K(Q)M;`nwpX%0ophD-Yovv{$@bDi0OCqr6`9obr12wxZ{h zH#8$z+$nbvRPG|E94|x`&TO+tP`Qhs@@A2sau-46&93q3BB;FCH9lPgl{bq7mAeQk zcM(+XBBt;IU9VK)1HI`8DXXmvSamYeD+Bf`S@x^!!mTo3ze-ko z9wTcd(|~Mg7ytcYq3B^R;>GmN*}RBP`4=r~Om;Re7SNc~;}`K!;bP6=2)$S+j?jyR z;t0KnZ$}mPD~`~M#bS(ju~>`|FU}M_;KiAu2fW}TA{hxUxRsRt=0!dIU5qg=;uF4w zUc}QSMXN~2i=|?WdC_&#DUQ78y6N(w>!!<#r6M6OmWnavMb}N27hN}9UhuY- zk5G&;FL+PO+q%ZbcU?4ByvCty;sxuF*s?#RIp$798Zo{fp5?nQc=j)qcU_gd=(-Mh z!6((|ldnUP>b+R)@*iJosE2&o%=-~*w2jZ0vF)0CGWFz^`kwvWx{mK;x6WJlij&>C zSDftDz2aoI?iDAyb+0(tt$Rf|Y{f?h@`tiqn*~PmdS54YN4#VHU{^vxsh(MRwb#d5Xy` z^T?9sBDQunwXCMHXc*gQD4lnhooLlQeXTgMVKTH-y;Gcp_USv_mG2biA+{FdQv39S zVz>#@+L;Y^`}CvH!aRj}q}wc}^|AF>*N{It-ffO`?|Y(q>v;FplilX2Zu4}}oQOAQ zvZ>Czx;=5YFl-Zp8eeT0)c9t2#<#kPS3qGNR*MOsFbBKM&IN01lm4sC5p7YMd>cwz zj_B;QC0vKwC~I2*?=MSgG20*X&M=cg^lZyb4~RU}C(e zs__vrNaL)>yIf&nyvr3P#*2Cx`xXOAn8mC-%wk#|W-(^ACt^L4&Tvd<_H=3!#emkH zm?~DB8cKVq;%sr6<9py)d)g9N1bKxfm0c=ibJQh4V|f4+ZZlx87UZd=Q_shHO)v;kJ)RQ z4-Cx)hUNl8Ga-Yo86r-ze9JI5yQXwD9w5!Sn{Vx!(%I|9Jg7Z;y-QGMAFHQXsAe*ioZ2QM zV3WK|s(W^X#LQ+_ggHARUm*^h9noalj1MHIUa{{e@?#VEu_+H=}Z!BoQ*G|6&&E~DC5j=kI`qFg4LZoCXdEE$HK$8 z*`>bc;zM?Y1D%V-h`Y@HqN%RIIXBQXIOpPJ(XM^FM&n$3C!%XBqoGqcH_#QK&J7Tu zyp;%LlL%$=ba%@W-R5MsIn`}WcbhZa=4`hqLC8l^m;SkVrn_?SGQWLp;B5ESF6})x z@NW0kVul#|7E{D9i&L_8kUTn*eLGOR~T@pAif6^S)-Or$24e9Q7PZhJs2|OfT}huNmsuN$;AxuiQB{ zUQKlsvwQlIq1>+L2g#5y_w2-bMKbNq5ipF(oNIA8fsqRsIJm|0py5NmAAGJAd}`^cvtlNvnE(=kKsJK|SBL zEh+E$YU;&5X@YvbntJh19OwJ8G(A0ES4|05&)2n0y4CZRED;iYNIl{_f9LO##d&@^ zSsw_kp6_LwK47;e>E)Ua*e$jA0ek&0)nmq0NNk09ByC-^c|4htwAh;72K$*LEzI=N&(9=jVWu~WeujrW zN$>moOq$j6{nXAyHJc{tXOgd;pQbGmubvOmyGS46SucH<-s0F{O7YMgW;DEBF8h&$ zzh@`C=kt+tzh@`CjPlW>4!LtVJIqH@w%Aj$-?MXB1brm(dp=5o@{z#r`6#_T^AS_E z^B}dvTz!I!|%Ff4TfL?YT$Y-K%@)jqp8Y zbMGiN^ZEP;HdDHHT=xDw{ABaBcs=Le{PQ zhfHEBx{!*t@ag@nG_U)QIQahdT0A1Kuk|SQV;w3rzrEfmEe#iH8{ zO1z}uB`!*Oo}@Q*OB;Cplk~b_X#*)M-AT?<+Q6IsTrDAG-%|o}_m&OBIgn&}_QLcIQ37TQ(1lU|c9Z6IDx(o3eLSa%^g$xl=n*Du8lo6Ipc z@Ox=TX+!x~&rW)Cue70jtY;_DSlU3^BoCzxwC$rKY6^9GT^90|6uY#6zR}~$U0qV9 zhJ2OcJ-gIjcYzo$p(({znbKBwfspSm;L87RdcCi7ms5W-nYwhBbAL@1XZ~bHCTIR1 z)60aVyPP>b5UU@j!+uwFIq@gydkv+#ocNQZ8>PFP`4f%sT~7T;iXEl9ocojXDrD&{ zC;wzsEpzgvjTFsFcRBkHG_`j*`zPt;#L`{PzN9ZvmG0`|spkXwh3Gs7F zLsaKU(!|nT@}(!5`Mapl6V3cxWa!C;x`_@wNin8$7ajUQ9L7>#X|O&>;jwfVCHlu} z+7~JM;FwIb=z|n#OLv*U(jCEf7diSsNX06hYC7dMrMnMhrd*;FZ%AvS)Z#As^nuhO z7D(1soB@GSm@GX2npZza@0*q$;5t82LQsn3)6(8A{d_8QJC-BvvLB;xFU3n-8CQ?d zxCqiN(Y0Kp2~+XnWU8afxm1$EXz4NH5_P;6Ui#9{r@a@Bnw78@z8WRoi>c011dhdQ z=Sf59aehX$!uUihS?|hRFDuh75BPkv4b4tjc$tf3*L1d`nod?^q1fz)USpxxSm-qt zdX0t5mIu;Amj@8Xmwujnx6GAb&nI+Dfcpd{z&h>yjlR??MMc@Y2WS50z;L$dHco#7z5H>B6h(DSn)ClJa0NTPP2bE&Nn9 zr*%Z-E9F6Qh3{!2nZg^g@R4-EQ63~yNcl;bADep^U?lHt?PtN0MX3C-ETYgK{wSIJ zj?we#uct^_=7)^1+0N|zwrVpw@4tu5jJ)>iDK9DyGbgY8`d_O)v+|FEdzguM|GnSU zW~L%#W94C{;!E1bL|`GfSWJY*Y#5>a`>WcKdHJ#|<^_v+N$GKUn0e9g4l@y7*M3aI z*EuorvTtZ3qx}c680|ll#b{$8`B-Egf0PpP^6&+D!Z*J_f5<()$!3y`KU2HR8y4xn zZ)qDLf=NLI<%-iL3dA|Q-E3d!-16V4bpdB)VCC(lvMzYfdR(S;XOP2}d z5u8us5TA}tHPxpPJn=8pDlU`V@R5Lw;5J!_WMc%^$x8ZO)^7MuR&+=uu-)G&!K<=5 z(yb9ZE2~2Zm}hsBC;|0XIwd$@){Yc!1SkAtrvyjL>PY!UaK@}P ziuVa!eziu0ZUjK<|!w?n> z{e*pC=qKJ6h{C1<7`^^eH3mjlMCPAT7pi{heW6NXHUdFZ4X+Wo@fGnj^H4j1*YwdFyrz%taPochhZFCkLuB54^oRlI zqf4B8AAQ1e`sfs%(?_pxoPKG^1dh|&_iH)@T&K4m8{g?YgpKd?zJiVG^nMZ>-|77n zHr~_wX>8o5_cPeIPw!{3aiHG5mnp!9di&f%+^DyYE>5D&y?yj?l02`sk4{dKO!W5A z%SrNy-afiHNy69LM?d2WwQ2Ht`{?K-8sFPTPbZQ2-hO&IiPHCdB8}uEQs0kB&T$Bn zq~jIL6FS@{F~?0g`g{Kx8~l5Jf(`$@e}jzx^!^mv3h=ksR)D|5MgcxA zuZDjmfRoU#;1)}trI}N3n}mENfL<$53E(8ue^G71yprrmfd8_#L3_ICT%H2;ucU2L zaIQehGdDd7raW}h^L5n(@86dN+e)gZ0Q(QL4XTwmPl5CwX&Xd;Qx-t~u`GE0mMn1o z6Isywr?P{mIZ)+Q@{*^39{h=&4 z{gEsv)x~41RFzu!Yi)y2B|B5_`8V1IoyuLNVDoRa4KmZ6zVZ}YDh@6)V|k|GWW#HP z|Hg0V(wr9sdwvrWI(`%THlD39yp3neD>fjv95=nQyJHU+n_9fAo7oQ`v$>t_y_UD| z_Jex^Y5NxbexPNH%3FlBgL`+iov3zj@3CyW{^0(CZ2bP9%wuMUmd1>2&ify%X0k2m1e0rqU_B-epN@){mk+f98^bV)gB~N^(f;35!K`AH<$7jOjO72t39Zwo|ush7u6GsvLT~-;+|~SsE!|& z4IS0-bRW6QyTCowcpNeH7ecBhIX@Vwo@73tqcdI()RJsSsh*jWjXzZNdG_)a zv{d84@pL?Rsm6j6$%dF}tox8`n5o7}3dx3=>LuNw*n*pCd=NWrhn(t-)3RZwdXw>m zp6V^e2Y#yWol<=WVxh6}7Ll#`9`%WAtSVOCBC=I)-`4&_wradwmihx9)p$K6*+jN# zyhxR7B3m_HSV}gLt$Ke=HvClYV5o`$X0!LNA+R1sxKdww}@?3{a9O$)wAV~ z;aKT-#JB1r#)}A7eI%aap zz9k#}Yt!ogBlxe)9?^FAug%Jz9>ITY_L8>4e{EKL@Q`#*ZBD%Llyuk{|3~m&i&rwT z{_&i2PwgG`p9iJGUeqq5J zkKn(q&&rn{!GHaj^!5?_*N@R(_^%(ouH(Uf{p7H0_^+QlCL8|i5pL7?!+$+OUb5l8 zK0PlR{_E54%7*{?H1h-h^=al4{_FajZTS)W*JmfSKm6Ah#quNguWOn3a;ztl=BxfL{sI5>cku`Kug44i>3re89v{k1HvHGGNDl%# zwHGlvZHNDQtUsS@_^)5X|KPuVo8!TMUEg3WKZ5`I7UvKD^+ywG5B}@h(%(n$UymR9 z((&NG5kGt-8~z*dgl4kgzcIjg!+&Ey{oxA_J&kxbAgjL(|Bd)zA=&WXIHGvMS08#B zN950Z_aSWBga5{nE$vVIZyZ&Bwu%1@tq51%hX2M<`O`M>zi~|S9jBefyP+k2%iHkZ zIHvj8hX2Nb@|$h=Z!CzvSSv{T$J(*!eBi$k>#rso{`rP@c^m#4mo?wp@ZX5l15$nX zZ^XB_lMVlk_yBRT;lB|t?Jos-eimz?>Z=R9< zY{P%^EXRZYrj~UpZ^M7{tn?sGJB>&4tn#h+KELdDnQ!=SzI#K*hyNz}u?_#t^Wrat zP5WP@Kk(m-?>nXb!+$fr+mvkhZ^jZ2$%g-CEZ>l9_-|ghE*t)vT9mE44gbw+(r5qv z-@Hcq@ZY?ycvfGlVAD@ZSs&lMVmP z04wZD*V74=0lc9iHLeUW`&n&*;wRFq$}nDDil0c6jhC0=t%qde<)wJ}E7^E? zDc*ZXHs@7}7ax+1mzT8cOJ$hzEDh_thVk-}zB^tS#>-2iNrfuIczJ2`w%WtXOIp6P z;@{Ouqe=BD{$Z^&nxb+gE*_H?l(ay7#Xqf;hBZnfM7dJ@sGIe71TQZQr!2QJf|r+u zHC`ilc`1I@O!e{dQvB+hY@%FgSVQig=SuOrZ`zKRmxhxnR{RrPX*hXNWdtuT4JWUy zjNs*^`29ESkC&H*Ps_&3OIpyN5-Y>%e20^lRz`?&rT9H7?T?q2Mw04P{1aelBt`X# ze*i3vq$pDv!OKg!>aL97<)wJ-D7A-|mqyZ6U&X)sl}3{4RYr(%rT9@R)hEi8M&wT; zM7ff#;w%2WuQVcm8o|#?@yk})A2%<>Z(GSG%9Tcvid9C4a;5lvD{Y5@(un+LgeX@U zNh(+I&wQnLM={kW%9TdsKQSyC&yl2Rl^7OmQO(O(J*DAk?N5{|#SiVNJ)&Ic2>wKr zD;>d~h;k)G$w~~1+CRel6Xi-rrqmu$u5=__byZ?ms4p4tPkyE0q(YS#7PhA>qT-+Z zN=H&usKl^n`!L&c{?F-n=6{&;&H2ZF%>OX{WB!Nnhn#=rKj%MXC6$q!f9Bi#4>RB9 zf0+3;|5`7t;-3IZAzW#^iE^cQQ6<^tKfupyUMcG-1(?Y;|5{_Y5;u<+FZoL>zm2W- zN6mjYcG}m$oj1q1Zh0)KIwCQqb^cq`nx_oQ2<{gP2y#W-J zxlZa0q$nYVL>>DHQKUDpq7HE+_L`>TGJabfxj_lBB-*jx5>0yJrZ;tnC%p&v&r(7} z>5Wv95@Jek+)AT_sL~rZrzjz=^v3NgN{B46*D@tH>0w;LQ9^X-jho1na23@XxAiC? z!t~b8uTnyciIzP+M48_DrETgEXL_rr$0;Gw^wy8vr-WG3+gP*n6K#6ympvN9o8Ibi zpBE9Q_u%0Y?GST%s}oz45OsR1H?B}Z-07{K@m`M@je{+ZGqI<)v2Mj6`ovr?%g3x& z^~=oiG3(XA7Ng2b!acolYeh#tX1$7=E0myD)fwf5$55;4{dBjbaty8FZfzxQ8YWe& z-=sc@@QrVNA*tpu#Gt=VCNj|9FB1XiKO__M`(Kd>^!=Zd3GV%$k_qVjpOy*Y{hyHu z-2I=G3D$>RmI=^@=oKg*qE|qCh+aYMA$momI7F|U_;I0g3~YTNbIge!7b>wBa~d#T zm>dIGUnm>{S6?U`%M-t2>N==~z{qyuN8*3Xi64pnF(-Z``p2C3k?0?D;zy!?%!wa~ ze%vLazgaBMA)WiBNT4F{R2)!Io&jc2Kt%wm7@#5uRRmBGh)Vxe1fx=a6#=QVUqw(V zKX`mE)uj+>omrCv)Hj!OC$Yf*)uqvFcZ9KXhFE zK_f!NWg`-y;j&SQP;lAEMCi9{bRyJSHbN2FEgPi><(7?9)MHh`EcHB&R@A4{4a7?P zE}Qzt4~~`Ns73Rz=028T)%Icfk6u*cn=Pq51f!-^hbyrfajM@uuT=dwiV-@k`Y1*< za^AE*ic!0vOQGW^#=$+M&c{&h=?T{#fW$%8^wrdB^$YjSS1^+s9w^gWGqsf#^aE5{Wv0VNV*;? z)@rMCJ?2cNbp1HO@QQT(IHK^1bp1Gj@QQT(IAZXMbp1F&@X9Od79#M9bp1F2@Cv;G z{#WP~yuU)Pp!^kjMR@+CdNl^{eI{xQ;`{RgkUx|c!2BzD0nmRkFM#?_>AV2$ zKa&>#{%7+7$nSeOFM<8OPG6zFuhUuh|I%NiaT^2w@B9!O{J--pZHE4@e)D%^Lw{vZ z7y4t+Um4Vmp)u&M49eTapuaMx8$V;vUl|l_W6)n2)P?^T^j8LTAsK6FCWomE>PF5O z^j8LNt3S{m_bz2ae`Rn(HuP5pr3PcrUx}|{l2j}2K|*G(I1O3>->h455)S-*t!uo2K|*GspS~-SF~nh zg->9`OQs_NDvrKpEZ)Yn>U53WSe8dV02oS3MWvP zAT=FayqrK`Qfc&6UT^}H$#&1WtGPOX(xgVCKSTK_p*d;8ji{a<6Y)vyEW{ktC%86VSZ)c^5V=N5M`NepLV@R@2ZBl9-Eg^ z_n3xU-(y3xHWY!kGI%xbdM@`fsZF|&i+;%Btqi;De3_Cw07xp3AU#G8VcweWph<9J7w+MG%r@M%DU#Gulc3-E%NOoVR$H;YGr^`rnU#HKg zbAPAL$Z~(D&xmnt-hNG6QOs|@DHEyu_M5tl<_pX{-+uFuwxf+-=2$3V_5OP8=xNnJ2y62< zoCA*|f$>zg?`w>se6{(LwKZK#jiY&SYpA+)>R@Zp_kd2Kd~bg~9pEHl_ZB89x3h(f zzP*Wws=a}UoPFiD)D}ASHB1ETiS(%jV!#0f1X4X zUbBrP*hCNBu#FnLSw1@RBaJg^kV?eBN#p?fPND^G*hUGyW*Z&&qHR>*hp&EHM?eF@ z?i>{rpp4@p1aH$bRNyU4a;}{%Y*gS)OjO`)QGXHTm2QT%LmUuh|CnS3mLQC(^-BLHlq0 zl}u=VP2zS6+F#SipMv(^j&X;wQxN~#KcGF3|F#t16vTh=Z`C}!fA3Y9@cyN5$b|RT z-;xRLU-^nmX#dLBWSaIL%Y^pti;7dw{(YJP_V52d+HeZkzyDM14C`hO< z`+=?NjOxEh8*d<&&rZ`;ya1S*-b;64TQ?9)n+WD!N-bMA7$=*Il1;|QCL^?$et~S= zV0>(%mNwB!n@Huy1L`$WX%j!QiJRHP%k~~j)Go6L$$^zh?!zrMxdm_0U8LYv5-O*HW1#AJ&FGJ9-7uuY`T zCc5`=x^LFHf#}&p@oXY@Hqp9|hcwOzolTU&CQ4xwefxM+`yy^OQ8t^%noTtA<0IM^ zLBos}Sksi*L^W)p8XrqyZlW4C5si|<$4S0hH{sVN{Mv+H zoACSbx_Sk_HsRMM{Mt0XQk9$L7t{P=nqN%#{aF0ogkPKR`>_=1Cj8ojUz_l26Mmo1 z>`7*CLU5-5hMynSIm56`7`6$+HqEf~j%8(gKE^b|m}VFghM%WM*t$s)V-tp-PrBbw zoEO~k#47Z}TeI>JOiwJPCl-^5eJ-AEF|jt8*ykek787feiG40Nzs1DbWMcij?ba=( z_W4*E-djwqO{VsFdc>o3i>bBA)IL9^eVJODp4xQtq;<;^i|J{_^t57HnrYe6jLEdd zN5ZFfQ(n`$MXp*bVtTWp=jlh^7Au$a6pNVVtZ0uRW2%cqOn2ImNnyf^MM!rlVseo0 zVi6LaiZ~)NUMxb&QxSuLoEM9b^kNaRo)zseUPybf2zf6SA@R>8wYQLXn@GG(Bp&lU zBtC0y_j>Y%_mKHiB)5JKsZR%$N4DRR3K$^tWOvax4(UC@`^P1itScJH|WjoH2L!=f^~_gw>x*?r&|D9r8y*C2%K9d-??%VGD! z+H%-kx3U~|8`hP>o_(vzVb8ubWzdaUQ3la(SWO1qhP7k}0gbPOD6bxJ*R3N% zK8jUj$X&OF4DBgbeGdiM8*)F;kSM^DQIROXlhKjAVGeuSN;1r0Z(B!(IqYq#$S_B_ zZ4DXbD7UR3!yM%{`ms0Sqo5yAAeXw0enf#>>NfhZH{zq9A5oxlxs85AfzIVN`ms0a zqo5yAz){eTDBvjQ$KI%qf__8+M?pWLfTN%vdq;c}^keUc+dw~}fHu&ND4-4WWAC`z zKtG~@o}wR7Ku^(+P-W@qZS*4wI12g^1suit@!sBhNt16|KW@7K{n$I^0`%jhy%T#A z+6Mu7X>Z&mD9B5DCtZSsytH@9C1}V?d#7E3h`h8n;bWm9(ckG^<+-=fkyNy%5 zk(-hT z#k#d-MX?C2Sy3!PYgQDC&|0o2NbXukQH0c*6=jq$UF#@{#&j)L6nt?lR}{u{t)nQK zxwVd>XvEg6D28s$igMhCwW1tnD%Y$ihJVe9a@>c_6$OV`%N2!*TFVtBPZ8HTnlg>< ztaVgn8s%B*=!ywkLs|ARwv>*qSzDYU#%Dp~(@qgtB(f(@5!alX7`8R%Cd+QrxrsBv zHRmSI2-lpOI3rwhZeq69oSUq=QRgPk_tu=7IGbB@ZsKfi&AExQxiu?^v$-`ZiL<#i zD~Xf0H7kjew>2w?leaZ1iIcZAD~Xf0H7kjew>2xth9}EP;%sisO5$v8%}U~IZp}*K zY;Mg;;%sisO5$v8%}V0rZOuyJgwVTgC2^j$ZY6P^74ILAnvrL%TS=@}>sAtHQR`L` zXHn}`5@%8CRuT)?x|L)YKV7$yIB8n9k~nEvw~{z%TDOuoXsFB?#QODILp(&sf%(^wiDzlzz2%^5;(GZSg4Y6dbcQk|=))1o_FX;$?b@$d9 za>qxphTL%tG$fL9<@4)kNS@EHqak~_)1V=F{<@BaL;)Q`Lt;c2A~d8kjA+Q-K%UU8 zqasn{jBXtri6WsFFYV$QmiWRsY)ZY8tt%6BvC*Olw|h~pxi-8qCi&$cTkcj(3Qa*lqAkpGkgani5f}`@1P`cSAYVP zByIvwfRe-&Jq0L9T(8qplq3r1DM}KT=hQ$+qJSDGNhmxuP?9L121*ilC#ZpvL;*EW zk~lePpd|U+-a$z^bL&hbpIc`l`P`x;ow;=;lFzL(k$i5gBKh1}Me@0|isW-^70Kt; zDw5BwRV1HVt4Kb#R*`&ea~1JKSw-@>btaO}tuv8)Zk>tb{ct9d_rsY;-VbLYc|V+q zSl;e96S10kDaHJb&mCtXPJr%MKb!#Fv3@uKx?}ywdusj2dusj2dusjgjix)+59ca( ztRGkRbkF^c^}_`lrXkW!nA$K8k$6I;7bA?zy1d9tM3Hwi6_KF2$XrB<>b6WqRwT|h z%tlru(l<;;^vbo&N1@1sL>HjQD;8$Gf};&n5`*tfn3I?wH*Zp+$UB;qh;*)HS_(zx zB`eYm=?xPTMIH$=Qz$Yuk>a{}b5kfXIg#eNtqwc+*yr?grlZ4;g?+;Wg>QSH%}}Ap z6h)Dbm~+%AGD(qKd%Vn2q}SfjG!=@>Q@E{9+e8(Lh|3vMZp&0K#p3R>Tp_SXRW2P!_jh^V5d2ViA#gFVb_LHnBP@;)r*N z)^U^4Q+t$6b^uyGiMO zp-fqkcSM=88>TKonNks>iZVq}-Y=A?ScEdAB6dWXvTPO4@q(hMh*~I9ma)1MC{wY> z$`n61xh*SGCfkgvl_@Ktc`H*U$kehjWkuAoGKKoOmX#?hqL!5@#=*6$OfieDWo620 zv7?nKBAtt@OrdgaD_5pYk(DVE78@qDJ)jA}dpNj_SlF z%9Q;8<|33S`)$reC{y+epWCuBWjxXeN0^PhVV;ubx z8;TC=a$wVQnKW!ykIrm5&cs3TAL%wdpSL52KgxydW+&Ff-B_+nH$A6EqoyxtHyv-H zO~BZ6yh%kb?b6wo;*hDam-f0Ea45RIH~dnJ$8f5zYvE01e)snC6IpTkf#Dv>-v1zr zJg=g!RJZOSrImp}ZAV9cLlzSHZ)KsLzbXsi{G2Q_vobI%8^Nr^QmfgMo%c{n7Ex{8 zV*<6NYU>`8S02z)I`^2l@<4jbwB=RW|93UUY+*4?z1qh7{F*E#=Kqw%jQroSn2L&z z$vjjB^f1RgM!KR!V_Wwa-O9j(_6MrUfPC^EL{$cqcE`FL$ssEPdI;k_EL8@ik@o?q zq7Q_(?n6;!U_7;dAA~9cCuPG=W#E)-u=rnO5v%`KS%m4AelGUz6QgsR0G-=J=iDYV zYlQC;m9YrOSY7UQ|G#jr`?%L9)T=Icx{o`_)$Vt>(|z1Yu67@1vUkJ^Cuw9gQQTEa-WOE4=&Gz5y4&PyEiQ9Uvxt z<&+I2@f)XXILYpjsQ^^sCr{bHlHD;=0kp&~pt7MQyMLwvaETv8Wjh89xBy;W+M84b zc!?HN@Bm}+zs`t0Nt z(}^pllU7V8tjY!+I9bJXqN+y^9+0H&Vv?ZlD!q6>a%z*rbXPyRK7eMMz`U!6a36rO zO{Xtx1#E967Vh5B`GUDkD7OjYHbH!ML;C`_P58D6-8O-HSMO3h0BxI)jrq`AtMWs0 zo!%H}Jv7yrW*XB(V>*Gnm-_tB$s?v&#x%*8aJ;LB_hVUx6dY{AuuTZIX@2#<@4D>i@M{x(ZNjfj_}x>s_7Hw;!mmyEwF$p_dU*dK{Mv+HoA7HBe#t2x z!mmyEwF$pA;gR30MUmrn)DlCGoz+PNUWiV)n3tjZue1$1l`(ArrxKVg*i-_u1)9pHwjlFA^r#ug zR6@4}m`doj;8KZ~SDjPh#`v7Wmy2(Ckr0?Wr5=% zSJOh2!2kj zK%lb4Edczyw!zR~G1fQ5NKVNfzLJSr**=o-DBYiY%!6 zsw|-Unk<<6x-5|UeOVCq4Osy92eRPp4`qSdAIXBYZ^{C;Kb8e&-;xDlePv+7?0bf76b{NL^KVF}VLDZF@w7d{q_!^3P>K;A^rV z@Y}K=@H?^~@Vl}g@GoQm;P+$!;Onvg@GoT%7vGRYSp2>$qT-vf0PrnY0Qdu00Qj~n z0Q@Ui0Qf^$0Qe(W0Qh5B0QlFk0PrWW0Pt^Q0pL$%0pQ=t0>HnM1%SGK^rCM6m$m_* zt|lJ=;Qym-09d{MQ20z+T@KLSKw{XYUl->7*6jFq8>Y7ZRweqPJV zx$zym)+3ONuSTgpP*w&n%LdE%W|VBej1St$2F=P4`vYfu%1ztBGrm(K8$jbTKC(eH zzQ`jRNck3D>k*j7hm^D(Q2Cx^>k+6{^gYYgBVdj1;i*2j#%GLV11#UOYlP?o@L9+xy2WkQv2Jm%*Wwc+t6Im_bgjp&aE<}D}FEM#)s!xUe1kg ztF^qGTYMr)?ZY+S_iA}LH@;`t@^Wr`&$8v^+~PA^+8@68USMk*!ug(M%geb{^cAL- zmviHLmaT0#=X;i|ZAj;PmaT1A=X;i|ZD{9vmaT1g=W9_dFXzUGv0B?O&*#os+fZN8 z_bgkn3Y+c?>62b9FXzVhEL+>K&zGxO+tAN<#9Cg?Ej}=&@qqtQtay{%0NsZF_!zcq z_%99XGQi8ZvCva%8~*t|dTSg0S?H;?4gW0k)Y>K>$Ct&`KK!%LQ)?Uk`JQ^q%ek@8 zQ)?UkS?H#>4gW0k)bes}EcDd!a&9d2)bes}e80W54gY+Q)?Uk`QCeLn~)t}8drVzXQ8LoHvGp|%C()q9bZ6~ z4gc}^bJ_48-#(WO|MB7TWP5owzTw{T@@y>h)bjFdrC8A@^9L`_#zIdmFV9xeLQk#7 z#OIP0dTM$3wUQQkYI*rJ7J6!V`L$S0L+ulbS?HT+ZENP*q)?;`qX`!dqV|XlSp{Lekcr0n5r`BV5W1*+kV|Zhsr`BUq-I5l1 zYCVRZ_b=-3;PXDC2R-j!*H(h(OFti$4Lt8(kqJBRD|9^uoid^BF{qTM2UQ(Z%A=b4 z$ArqV)&y!j29>hb1Zq7dRF-3LpER|E%JQtxe+(++xv^|}`|RlfX-!JV!z8^+8F`pQ zhTo<#30}&{V=Ecn7uZTz_+3n*LQ2b{GES88@-WHrzD#A(yp);8R`R@*nuke1_$rmj z^ipyjTXC0#n^DNPR(r%QQym}Gq^Q4f<4kTUf!@yL`_hlxX`v^q@u@ik5#`A>;;Y(@RQ!&Z{N z?_%P+DYuTw_-;zB!^C%Ar!u~q((BlY>!$oVOkDT-RK|5vh87%A7JhL0Bh$5SUW$!+W7(2&JVD5et@;}1FW4NU~&FQfW`SI0T$<<1X!GZ z5@2!uNr1)qCjl1cp9EN(e-dDE{z-tv`6mIEKrjigurLX*un-@?PZuPxFbS}*FbS}* zFbS}*FbS}*FbS}*FbS}*FbS}*FbS}*FiF6Lg-Q5@g-Q5@g-Q5@g-Q5@g-Q5@g-Q5@ zg-Q5@g-L+L`6mGu=br>g+muu);+r;Rv6cgd==% z5{~f6NjSnMC*cU6oP;C$Bplf%;mAG-NA^iLvQNU1eG-oBlYnCpra%KXn*t5oYzj1RvnkNP&89#DH=6xj4J3C8H1N79(7@}aKm*C00u3a03N-M^DbPT2r$7VAodOL! zb_z7`*eTFJa;HE8$(tp#EC8%o09dmCu&^)< zu&^)Tufer_r209#g8t8D~X`sV_r-2R!o(4J`cpB(% z;Ax=4fv15E2c8Bx9C#Y&aNud6!-1!P4hNnFIvjW!=y2dzia0qT4m=HXc3_~h0|T8M z80hT4KxYRAIy*4X*@2U?{T#Lm3V{16IiO3|QgMGhl^3&wv&FJOftv^9*qi z2cCfxTy%!ehKtS++HlbsIKo9|;0PCuwMWyy;-WKfgp1Aq4lX(aIJoEx;NYS=oT z299vi892g4XW$4Ioq;1udfR#NKtjITJz{(B`R(4>pvIB#a9T=?az+ioo{IfuZ^Uneu&OZxuIR7lr;rz2ehx5-8%g8roVGtH(32m@2 zOK5|ISwb5u%mOSd%mOSd%mOSd%mOSd%mOSd%mOSd%mOSd%o6xuVHSR2VHSR2VHSR2 zVHSR2VHSR2VHSR2VHSR2VHSR2VHSR2VHSR2VHSR2VHSR2VHSR2VHSR2A?}AKy@G{V z_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8 z_=Sa8_=Sa8_=Sa8_=Sa8_=Sa8_%#dgYZlfM2r!zh(h`%>w+I1^6`!@M{*} z*DS!VS%67% z%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7% z%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7% z%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7% z%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)>7%%)_r)fM2r! zzh(h`%>w+I1^6`!@M{*}*DS!VS%6=&0KaAde$4{>!omXl!omXl!omXl!omXl!omXl z!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl z!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl z!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXl z!omXl!omXl!omXl!omXl!omXl!omXl!omXl!omXlng#eZ3-D_e;MXj`uUUX!vjD$l z0e;N_{F(*$H4E@-7U0(`z%MK;!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c= z!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c= z!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?c=!Y?d%@g!LA;z_Wu2*0qf2*0qf2*0qf2*0qf z2*0qf2*0qf2)}=STTcQl0`Py@#D>wG32Y$UnZ$OQ)14V?K;4_YZ1!me>xqJD0HGcIPrS;O<<(hTNU2*r2F zo`K(;HMRrr&i}{WyLQKMUDu-D@hjR6V}LOwp+OQ4$+2$ZWigRNhNLVzk}d~Cf+B1Z zU;xmPVtb5)5Iy9?Aq*j50uo)wA>kxWEEo?uK{p;8LZeAavYnjVaqm%LqSmfmReP_w=G?n>Ro9x4Ee3Dgl`RTy{6w}myz$SnMdA$w z#4WLSV^;e``+Amsfepj}5U3}LY zppiLtu!iQ?f#P=TFp)cMfY=>(Q1p%+AbvYTZ;9Z}&|6}-GxU}i?hL)9G1?h=OM|pC z^p-1t7<$VUKn%U*3Lu8was?1WZ@B`9p|@NC#L!!=0AlDZR{$~emMef5ddn3+487$F zAco#@1@QK{0*IlvTmi(;Tdn|N=q*-?|d^5JN{@0mRTzR{$|| z)D=Js9hCya3>}pOI73Gz0nX4-Nq{qS)Fr?h;1VDS8kGdZ4sZp~7&__-pfPmR6+mO? zs1(2%Iw}QlhK@=BoS~zx0AlEIxu+j=BPfp`)$-?Ixu+j=BPfp`)$< zV(6$8AZF;OOMnJlJ^j=BVhp`$JV&QO;CXQ)pCG=`440yslm0i2<(0M1ZX05LS} z3Lu82T>-?D}Wf9b_Eba(^7z#p=qB4$iZnzfHO2L32=s{T>`uTE&*a_+9v^;M5J8- z#L%=WfEb!~1rS5iQUGUYS_D}Wf9b_Eba)2;v- zL({GRVrbeGKnzX00*Ik$R{$|I?Ft}-?sd?D}Wf9b_Eba z)2;wwXxbIP8R`n)40Q!?hPnbcLtO!!p{@YVP$_^jG?D^1LnA4GGc=L{I71^TfHO3b z0ysk>R{#+tas?1WBUb=1G;#$HLnA3b%+Sau0djC832=r+k^pCD7!d#L&nUKn#ss0mRVA6+jG)Tmi(; z$Q3{gja&i5&`1gpGc#2XyghYhDNRcVrV1a?X426y;Wkhw@Re;R*BQzDpA^7B}RLzL}+i7`0T9`oxN3Jv$slQ_Ew3@-YQYq zTO}rYt3+gPm3Zu}5{Z#Y)Ny;UNuw@RG#R*ACSDlyhuCBk~E#8+!oG%LE=$Bup( z&5Eu+H$9DJMOXV69rlZ^KmRe~GMW`T?bA@$FLv6;++d5H_CY$>V&~8QMaPSs_5mpD z7d!34Td>7W`K?W0$)#a{a$9Bk3oK3oP{{Iw5?!4`q-LvFCeVEbqo zY*E-gT?bnnwvWca7KwlUkLr(DY#;u^e$n{n6WT8x+lTV7UqrTV!@(Ale?F`FqVmse zc!*}j<$v|_iOiNO8pn&x|F@05(X8nFua1`p9OEkn$M}k~|7!9b&5D*Wej;LwmzWsi zB`U^viHk8_B4dn~*cjs_I>va3k1<{%WQ>;>8RI1m#`uVYF+O5pjE`s-<0In5c!+B5 z|4aoRG8OTisfg!HMf_$e;x$tdubGN?%~Zr^rXoHw74hg_j`jXzD&ot(4;%NVB7XcE zupTd&ig?LX#7m|kUNRN&l97%(-!m2Qlc|WGOhvq8D&i$m5igmFc*#`6i+>u{<0VrO zFPVyX$yCHkrXpT474ed(h?k6%+WDKQj2~&W^EV@PcD}|ReYN>*6o2(qdK`cB^+%=; z*$O@OPrf>TvlaTBtut6|Z~b$uuD4lDfqZ<- zR`4lX!KZ8mpRyHv%4#0u<72jhU)c(NW%u)I44)U`icIa3?B5tZFJ$&1+0yT%+u~21 z+q(NW?6&xG#BK5CsN3RCz1y1KG`KDPG`g+%O_SS-|C-c6HBbboY4!p!pr*wOM1h)C zFAxW6+Ppv{sA=~Cv7qKlULYFOJm&@CLCrBQ5D{vA&kMwan&0;VQK9B}FVNhi<^?a% z;8OFV7ie};bKDCwJ*he21-jp;`2#Ny!D>!=fkvR3Q(hp7)tvSMjY%~xd4Wh*^JOm( z>uO&10@1GKD_$Vp)qK?pM7)|m^a71s_c(WIN#@^A*#|hheO=SH8nc}Lvbxl+~rM+V6X_+GG zOESgNFUu57UzRDBenqB8`c;|Ys8F~jiazJ((vbIp+Zyst$@AAVenLgf3vvX$!$b{h6(H}*ZU5s>=l;i^{<-zxUHJ~*^V28&emRCG z`#etH^h1G8^wD?yD2dI7@Bg(Ef#T-Ff3d~Vv3I36|2F%+YDjQC9JJwo>|G82AAQg6_r~6p1pWI@ye|@= zkG?ysb4Z4M@prbsHukQB=ode$M|g;D z1(Kv+;ODYdAW{18yVEL=EPZ(6pH(1X`kx>q5BaY1%EL&n4`>~)3OH2o!srtgRmoHqd+WYTHUuWXf+n3Jwbie)TiJpsZpYOVO z@zrD9{TE+-v8VS^$HlHc?(9u;^d&AoQ&rVh0{m(%YTr?fj!FUA>)&GiO?lojh~q$?B(G@9F99>+kKj+*tc0E?@mj z)wk_zpE-Y}`)q$#PxqP5x4QcJ`)aDYN^u#=c*5eD|q!pyrXx2wVDICPFMFE zhY|hRUKKR&H$1Qt& zi{mO4m-tm%`?&L{slO@IAKT4e3!G;SoJ0)Lvt8Z&ACJ`22?Wo@PlZ>Fo&Dh6>1%L$ zm?0AWQ{elx`eUv9*7=T$px$HRa1Yr})2XVKp386dcD-?-KT&h`V4|)zdGrbV)0AlM zc)hE$J8`0?zq9*nS7&ck)rrpDOI>|^U|gcBFL9x>xAXP46L0i(boY0jJCr!z+u51u zIiEOtp`-VW&O?d*oK=k@-Mu5OSk(UCZdD^{Uq{{@_;ujhRKn;l?$ zNB22sMPJX^t`3|pajxg=l}nx7{T+ef2`EcvU!tb}LTBQ$r*y<;5Aq`CIy){_b#>!x z5FaJr$d3N44S9b!8VB`)=x z>pK57{&uokm#@5jv8(UGp~N|8PH)%iSNc)2FBG2b><&kvA5Zo4Ci*%rUaUe-yU=d- zb+2`-6Z`|;;QDe=UnqI=LeHiBJ%NkPLl|+%&U2w<=X&5WUh!+4XZyo3q2=d$E?(?; zGj#22Pxra5;IqD`tEx_8SI6r;-{@pt4CU^gel(TtCID=Np{iYd7dkFpOuXJHhXD+@ z7e#S*(7P+I_w@t#u8xa|%RRlkUS&6*#Py$ROPo61e){Fq$+pC?Q;8ENkAL}CYg=pL zv#C?CKYJ+g^0Cv;9e?R`0yR#iUOfHP#PRk->cy`ne*f5ut%nkAUpaBI?bNBn@sm}@ zUO4gmu{M+)d$HyDms*d#_@zWMj(hR=>BRHLUO09dCp~>U5iY1x9c#mJ?THuKPPROU zGpCx5J%8-`Tv`PCR$~`Bsc^ ziRL!6EYYI#0&?1e*#*3=8BFNM~fOdQ8qPF96#*1E*Y&$Wf3aJ>}%zvVQB z%FvCL<1d~*3G)zodGd68=*!1WwH->NP98fI9MXRB_zQ=sf;({p&W@AdxEI^(EWy=u zP>cww1c$wZPJ3Gtt!=62aW25~;y(C*X62aB-Epb2?{Wu%>7hx$3kZ)elw#oj_5M5G z)s4_Pdl8C|@RL=2vx@9H8-l#AKk-8InU>V4wlnQ;IEFvYE{?r;`pgTdui(0ud%L~? zB~jh-imz0?QvKh5Qhg{&E zQG&-vD8Zv~{ENvqN-#;sHs?%-%5qchqK_sua!9iqy_sE2O#N?weB~b zhls&-uT-Z_wH!MZ&h*mh_9q&vag6)V54qUU{l=A!H#$+hy1VlVW@HyJ7pts=L9??L z(6#9Tp|+hew1P63&>7?T*rnIc0MKuA_V%Cgc42aZSy+FMpC(MndV4OpiL-WJxp?s) zB7*ZuOei{fdpq8)*;nge;#=QJ>@P}u=6CJT#OFSjuu(LWAXqQ=^zE+-UmU_TEX*AD zofX%Hwx56cX*By>XFo)^qSfUM#iaS$iB1mIk2%X5o&Dac{nrnNR#lbxAinUvL-u@x z1L%$FW{{%(2v!WxvwclxU;1#K*E{+;>yM!Mh=NY|8i($yh$>|lj%VEa&s=upz4^P& zOdNG)P1mcRJN?4*Pe4D9orW~4b$jOsSh31OdqS%N%8xujxw9)zQNHg{Fjl|Z)qSq# z&Aum+bw}%XU%|^*xH3}qIVJYqt6d>n_oL;^dFrWSUwZNQNvz#rCTS4*%|dVI8)teu zFJFXUo;i!*^!1LjU$3ct>J>;&?GvxQ)!zQv=byr1uber9apKgeGiPwl3;mZa#^Dto z1y;vr|5Todo38WqclE!$hyJ0&tAOQ9%kdXZq%gpUuaAg{n8|=ty?V4S%7O=Xa1XoW zlZD_L9lc#0uVd0zQ+BQj6*!dm9I~(;K-IpW1P6M)j=1gbz0&zi71iL(n;jRw4ws+3 z(%aYd4Mbz8iHWLi8xu93JMfKzVX7CldcKac?}cN9?Aw9A@@nYHv-`Q5c-r)eWPH5;jM8T=bzSPb(AjaWvp29C&e;bScbDT|hY2M$ z?Leh|TL?e?dPem9*F(?4O+a5~7+Qi(2Up-Wq3?WWuWQ}jo{L@Go##6-$&BlQm6-U; z4voiD;*B>td(U+C_V)DFRKwp7U-n?QCwct}>YaNsapGbp6pql6tJYzO5^7@h0Ox>g zueP1R?C0be%o#D^`_d=%R^IK#oeAzL&`9vehN_?lmpU$^r@Ts-iSHkyf*(v%`oh@r z84Ou{P=O8t#FCmq^^GtlR-ZZ3-*bv{D-BK$JLi$DJecTw z>oQJ_)tHW6Ox!R`Cz9dz0rPyDtKsBNzKXG>|Lx0E?kB4gZ-6%4k93m!(%sL^&;M?y_D#%+bl@uox?W45w9HO? zK2e9+>;97DV`_y7R_F(v^N6webH7#d?9;WsQ}asg6HTvu{@}OX(ssua=TlE$ygqoa z=Go7D?%*@ehJkx;TpXc9r6pT$M7l+pH7T0X8-?LpFg!j{sZ)x0~QrJ5M~c`MMcHHVx^B6Rz7vJk7!s4tI?eu-M`sD zOTqfz1511Z8LzD)m zssp$puJ$UXPuS9JG*+CiTnv-fFsxU-c>xR89L_L|p%TSEv=kK%^iiO{5E|HsW;~1e z7zE$@@rw3;F6>7$!=QEr0*xcN`WhyVLCx^La0p}=?FwUIu)+WsD*8f2PcI%xg`<=UC*Y-x(uZ80|!aiy+`Pyq?N?JLX;1~@i2hJWpf8HkjVG#Lz*&q@sg;6dX zZlmBUxbEi@heN02u_w`Vk?`3>AJ&z+`_I=@f9|*5`t7eg6J{$q`$6~!rPWV*!IRa` zz|%Nwe^>XF&O}`pXuiGgtfAi=eqzQyc9^oZ{2F7G9mrwwQ!I0x#odX)ho=j8W)Kg6 zz$8c#Z)gAa1ajXpN&xRwU-HEw64uqj`c`mYV3o@NZpkiop6q-BcRO;XO@OKN#J#Kr z=~!mRl)==ywWGhIrkXoj0GFMznh1Z)obf=}*(%m@xCd)EeVu#jH@-HwuX8V*IDsbs zkLui&%XnJzm~L^O>5FQ`cM;YVRtQ~DCvdxpQypM2BEGyScBDJo*4NA1LkB?id_Aki z4u}`oF+21Xg}t(5*{YSJg@;y;?GX2|Ltd+*Lo9x{Lo6nR{VFc0=(nW@kO(ErMBi#g8qr4kA?R`OK=S31MyS+b8UN%R$@YU+1`c2 zKp(ECn=E@6@Q9OO+1(a3!*dW{26)8PfXu^3V0HA1U@rLEeV>ijyY`Owq!Hbpiq#wlTj;J2-}})HJIneZZ~4I{R(L7l z>;<%T&tK2mDZ!fl9;%vMh5QcVNTT{mcUSe(RkrO9<({spIQ@PQ!b$&E1K=Hf7y#c> z2|y@6_=(QP)61B1eKlq4+^;C?gDQR8b4SPj459%J#nT2a2`B3lBm{utWZC`zr#T)E zj2dGU?CH_d9H zk3h=eFm6fQZCvCrRHi4zL#y(r2cS4VrakfLFz0`?z<3MGdV|f-x=%pt;YY6hVFdB> z>4A1&AxZ%pUj9L!9$xC%cMA}X3T~-9ja*TFax|}erc}Pd7 ztL31ER&<}ebeYV=cy#R4@h2J^k2XDl7B)Sqd7LObG@d-3i3&K}L5GKF`+WI0wJ)z! z#UNZfo5lC9@WTC zl1&`LH(V}syp6k}v*BTPHy*lP42usvzHC!lra}Mfd;Q5xv`(twXyD!|sP$$4Gd3#= zZVh03%;a+a1H&_CUcf7O$6Le8=T9fvE?w?_J8`a)Z;E#ILR21pWb9-8UJy%OYAM7r z>{(d=?-PJ11L0Gk`blSloBqpT{iHTpHv>u@i=P3wxU0hZ*A|=sMc)^eEj0+2AM%JJ z%6ESu!Jip~qFOwO_LJcb(};}8jPpu?!)rQUV#0@dypgRr;QJ2I!`9GB@ccSujSgM$ zLqGnsI`~kcE_tNkNaNx9BMp`3$E@-I;tA)euC~_;to32q^_Y;adREVELx&#^O{_~* zPe1G;Z~y-0>?4A;CbSK2vPfdECL9Vr-K#8U-I>127rVmS5TGc3mqGgsB>Ij13+QvQ z?D{ZWrUS@fTkl)&;D=tiU@70S_{{z{FZOm+zJ8%re42MK_8R{yKiISD|LSjFBtuwN zI7lQaFa4DTu{yj(E|=p?c1{QSI^PH{=g0TcZ(x=X-YDt6(9xa1uYP(SDU=V*x*mNO zU%hwtUI$6AOYhw}?z>j4EoN5S<;1ZYxaI}|1mt~qt!7Vs_N|qa9rkfUJyoJNJWj5D zss;}tv;kptV9(7bd`At^&HV)ZWC-KDZCb%bz9eb7WyrcX~PgZ~X z;8R!naIkZZ(`i$kMYU4!a*a$&1%h!XvaYq+LODzIbQ|Pp!iH$zeXq*Jd9jj{rJtwnec{Q$60VTJga+zbn^a~w~6uveqGnyiGZ`8 zvBmdZ!6Ur=I*XexRw=*f^7Xx-$d4J00{)f45UPiF$v{>#k823k7kj$j&|LZ~-}JTD z@4VXixeF>|B9L_78vZpqm4Sfpl>xb)yzjoQrCh(e)uOf!Gs4w@Ru@a+?L0?mc zfIQ~mz2Uu}m{%eA%D^l`r94DGPK-1G{&nv=;`y}CaLSs=@svTK_C8xSD+$l7t=Pgp z;Aj1V1ajUb%U>Cb=UU|yI2fK8(<|1G$DDz)YAqR8wu)jBJ9KZ_v~R+w{ob;;`rZs3 zMPzyGcQ#EG@hqaek^9f)WFb-Zmi%JR`ZXRK2W0{9DWs(96YeDtLyw#N`xFjU9wT#J z!yo09KM&mB%)MK($DGP0rJsBvSAzI77y>?_i~CywmwycVFtx%7%V+L;cfoiqHeM+# zJ7+ly!`!vZTVZ&5T;s~U4jlLQ3yTJ)uDl*DSQF;MxLVl8pFNN7McyY5X1#cb_G|a4 zZ1DTfP!`>sz*UdIF$B3Us6HZ$T!}n@;Mej=KaSQFoLG;&P#LC1tbJqre>5arzX>L~ zg)0v=>BT3yp`196kIwSw`p*r`#}dSE3I9JJP>+dh1l*(71U_D&{sRQ+ahi#^4hq|H6UXnMNo6~oiF+CqG%lQg3gv84pzhV$tMYhZ2KzAAJKuvJ`{2h1(AaAH zKB}5;L4{%zyi!&D(48BmeqYqs_0U6ed{*N^fB)q(_!0Q!EB&lleHlL{4WGFv+rb|m z^4B5Z!hKfn|E%fne5?PdZ*^S8>cd(70R5@A!Y`*@{rp>(E*=c02=98I!SAYjFZSSf zB%vL(m8EC!GjUzGyC)IXMYT&ET^Bk3#>;YcMSE!IyX=QM@xwo>q965no!5KLz5Uo4 z_zXwq8y&hv+&WkKGyE;iMfS_ief<3S&?$cw%R&$e}!u~mI*@gEmwtpLc>kij7>2HdE+ZwIH;o8G(q2O@s5i3X?Y2gv6 z7M-HCA$2&^Xm3(Md#ar^+S`(L2sU`~_O`=bP;WKb{gC$hTAri5O*Puv>e-I)xf-^# zuD!jz)mq|3hgtL*e_T_|2c(A*VfEzz!03cZ`bb;Dg2WfTkVuC6ioKbO-*#vn%7pb} zV5ZhW!uVU7GR5^-LOIMK$jV-jFg1Vdv7dBl3+gji?K^joO9*)V7B|MaU+lk9{+q+_ z$}e|*Lez4`6mF%pVxs=wlROD8<>jBll@7O8oDwlx``DAV?K^3*?onqASHmmOJoP7E zG%RJ3Zr1Ad{TFC_%mtElA9ICI-GKeClI@qOk5`b`*;v-|MKo8C{qp3pp*0kjaQorV z<4M3b+sjuGDniEBbpJyet&^4osu3o{T9TSw_6WCZ?0VH&Yn3hJ@Yss5Ug^e{H1K=y zmfwML_*@J9!X)cR_zD3YqV(aXU>E|h{$VkV5U}5M*&ERESPfRp0zIBUV6}r8L1r3* z&R|C$erv`ZjoMKc?>M|~M?Duj`d&HWrGdM4RYdkDT(#|?lkdN(pFFm#6Qvdm2UU&CRphDuQ_e@pI|tqdpfQ8^FvXjUhLhyD-I{0xte)N|FYT}d~T;dELE(%W-VTVtl?TgQFGOrYVs~BGQe&ja< z5b6Fz#9vbmKYHO3v4xWf`X!dy(;6&Lhil^@iK%(m_xaDihEw^EJoe&66xcgFtYst6 zb<874P`JRa$^7a$kLCyQ1Hwny0(uD`%lU6 z-$ODyawln?Q7sJg`KISB*{f#K_hdRpPLnoC=H~{>pJw>S3AvvQ5mn1>2K3b-tPqC}?UV~no8H^rn<;w>_g1leXe=8ubR*_> zzkU{8K6K9qxP31)mL0GCtY1DM#7#nfPvuLke)rYbeC#xC%l6%qgcp~ZkG+^W`PGU& zfd+kYIkm-HdkrN5=6@24*DySz*K zZ0gc&?$g&&m-yY^C4D4yiQo8L(zj8UnA&SepF~~yJ07Pmp)UPBEqwrW=^tq6^UO;> zq@}MjFa0AeeVcjdpJ;v08ol%*T7MzyeOlLLP0-ROnU{V{OJ7!9;x})X^jX!VDelu3 zk(cm2EqG#BXW>_Am;O@LUGCFYkeBdPE!5N}keB#%+NHlyO?;0F`$lB(^T12`(D4#K zpSz^594|5d*OESQyu|EZOZvX?5_5ko>Ep&r%>1=1jF$OT-esY(jBkNeRWA#NfbWIyS)6j=Cfr+-STZ&jI-r&S&XdZzmvsSTK)%FjGkqE zM0uI)~@!VwszkF9!3H7o*j=TIX?2^8IyG%Hj^-a2W+mdLWgZzZn?vK2zMBFI(<*@_@r zA!I9pY=w}m2(lGIwj#(@2-%7tTOnjCf^3D5tq8IeLbf8vRtVXOAX_11D}ro=kgW)^ z6+*Tm$W{p1iXdAdWGjMfg^;ZXvK2zMBFI(<*@_@rA!I9pY=y*K5n?MuY(ZxUUlTRpI`Dc~BoQU!{Dn>Z{iu@T=&nih>Wwj@21m zfr7oNZ(OfZqF41z>krIliiy<>Jvgu9D7uw5gXYr
Yr=2sZ+M)BnYEj=G_b6V(h^hG$ka6< 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
L>4S)Q|TDIYjA5_aW{PE*y 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 @rly^#N?s>MC_#(CvGo3QGPfveb#@X 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 + * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null */ private static $installed; @@ -39,7 +37,7 @@ class InstalledVersions /** * @var array[] - * @psalm-var array}> + * @psalm-var array}> */ private static $installedByVendor = array(); @@ -243,7 +241,7 @@ class InstalledVersions /** * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} */ public static function getRootPackage() { @@ -257,7 +255,7 @@ class InstalledVersions * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} */ public static function getRawData() { @@ -280,7 +278,7 @@ class InstalledVersions * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ public static function getAllRawData() { @@ -303,7 +301,7 @@ class InstalledVersions * @param array[] $data A vendor/composer/installed.php data set * @return void * - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data */ public static function reload($data) { @@ -313,7 +311,7 @@ class InstalledVersions /** * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ private static function getInstalled() { diff --git a/Sources/API/vendor/composer/LICENSE b/Sources/API/vendor/composer/LICENSE index f27399a..62ecfd8 100644 --- a/Sources/API/vendor/composer/LICENSE +++ b/Sources/API/vendor/composer/LICENSE @@ -1,4 +1,3 @@ - Copyright (c) Nils Adermann, Jordi Boggiano Permission is hereby granted, free of charge, to any person obtaining a copy @@ -18,4 +17,3 @@ 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. - diff --git a/Sources/API/vendor/composer/autoload_classmap.php b/Sources/API/vendor/composer/autoload_classmap.php index 6d812c2..dc15c48 100644 --- a/Sources/API/vendor/composer/autoload_classmap.php +++ b/Sources/API/vendor/composer/autoload_classmap.php @@ -2,10 +2,14 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'AltoRouter' => $vendorDir . '/altorouter/altorouter/AltoRouter.php', + 'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); diff --git a/Sources/API/vendor/composer/autoload_files.php b/Sources/API/vendor/composer/autoload_files.php new file mode 100644 index 0000000..33dd33f --- /dev/null +++ b/Sources/API/vendor/composer/autoload_files.php @@ -0,0 +1,12 @@ + $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', + '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', +); diff --git a/Sources/API/vendor/composer/autoload_namespaces.php b/Sources/API/vendor/composer/autoload_namespaces.php index 15a2ff3..b7fc012 100644 --- a/Sources/API/vendor/composer/autoload_namespaces.php +++ b/Sources/API/vendor/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( diff --git a/Sources/API/vendor/composer/autoload_psr4.php b/Sources/API/vendor/composer/autoload_psr4.php index 3890ddc..5bba2b0 100644 --- a/Sources/API/vendor/composer/autoload_psr4.php +++ b/Sources/API/vendor/composer/autoload_psr4.php @@ -2,8 +2,17 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(__DIR__); +$vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), + 'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'), + 'Slim\\' => array($vendorDir . '/slim/slim/Slim'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), + 'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), + 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), ); diff --git a/Sources/API/vendor/composer/autoload_real.php b/Sources/API/vendor/composer/autoload_real.php index 067933a..1db1e4c 100644 --- a/Sources/API/vendor/composer/autoload_real.php +++ b/Sources/API/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit2724f76bdbf961b3280ed7526287b513 +class ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81 { private static $loader; @@ -24,15 +24,57 @@ class ComposerAutoloaderInit2724f76bdbf961b3280ed7526287b513 require __DIR__ . '/platform_check.php'; - spl_autoload_register(array('ComposerAutoloaderInit2724f76bdbf961b3280ed7526287b513', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit2724f76bdbf961b3280ed7526287b513', 'loadClassLoader')); + spl_autoload_register(array('ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81', 'loadClassLoader'), true, true); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); + spl_autoload_unregister(array('ComposerAutoloaderInita934429c0ea4f4482346c5d296943a81', 'loadClassLoader')); - require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit2724f76bdbf961b3280ed7526287b513::getInitializer($loader)); + $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInita934429c0ea4f4482346c5d296943a81::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } $loader->register(true); + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInita934429c0ea4f4482346c5d296943a81::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequirea934429c0ea4f4482346c5d296943a81($fileIdentifier, $file); + } + return $loader; } } + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequirea934429c0ea4f4482346c5d296943a81($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/Sources/API/vendor/composer/autoload_static.php b/Sources/API/vendor/composer/autoload_static.php index e084f89..2d0493e 100644 --- a/Sources/API/vendor/composer/autoload_static.php +++ b/Sources/API/vendor/composer/autoload_static.php @@ -4,17 +4,91 @@ namespace Composer\Autoload; -class ComposerStaticInit2724f76bdbf961b3280ed7526287b513 +class ComposerStaticInita934429c0ea4f4482346c5d296943a81 { + public static $files = array ( + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', + '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Php80\\' => 23, + 'Slim\\Psr7\\' => 10, + 'Slim\\' => 5, + ), + 'P' => + array ( + 'Psr\\Log\\' => 8, + 'Psr\\Http\\Server\\' => 16, + 'Psr\\Http\\Message\\' => 17, + 'Psr\\Container\\' => 14, + ), + 'F' => + array ( + 'Fig\\Http\\Message\\' => 17, + 'FastRoute\\' => 10, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Php80\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', + ), + 'Slim\\Psr7\\' => + array ( + 0 => __DIR__ . '/..' . '/slim/psr7/src', + ), + 'Slim\\' => + array ( + 0 => __DIR__ . '/..' . '/slim/slim/Slim', + ), + 'Psr\\Log\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/log/src', + ), + 'Psr\\Http\\Server\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-server-handler/src', + 1 => __DIR__ . '/..' . '/psr/http-server-middleware/src', + ), + 'Psr\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/http-factory/src', + 1 => __DIR__ . '/..' . '/psr/http-message/src', + ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), + 'Fig\\Http\\Message\\' => + array ( + 0 => __DIR__ . '/..' . '/fig/http-message-util/src', + ), + 'FastRoute\\' => + array ( + 0 => __DIR__ . '/..' . '/nikic/fast-route/src', + ), + ); + public static $classMap = array ( - 'AltoRouter' => __DIR__ . '/..' . '/altorouter/altorouter/AltoRouter.php', + 'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', + 'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', + 'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', + 'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->classMap = ComposerStaticInit2724f76bdbf961b3280ed7526287b513::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInita934429c0ea4f4482346c5d296943a81::$classMap; }, null, ClassLoader::class); } diff --git a/Sources/API/vendor/composer/installed.json b/Sources/API/vendor/composer/installed.json index d4c5dd8..b69dd50 100644 --- a/Sources/API/vendor/composer/installed.json +++ b/Sources/API/vendor/composer/installed.json @@ -1,29 +1,749 @@ { "packages": [ { - "name": "altorouter/altorouter", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", + "name": "fig/http-message-util", + "version": "1.1.5", + "version_normalized": "1.1.5.0", "source": { "type": "git", - "url": "https://github.com/dannyvankooten/AltoRouter.git", - "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4" + "url": "https://github.com/php-fig/http-message-util.git", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dannyvankooten/AltoRouter/zipball/09d9d946c546bae6d22a7654cdb3b825ffda54b4", - "reference": "09d9d946c546bae6d22a7654cdb3b825ffda54b4", + "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", + "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "time": "2020-11-24T22:02:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-message-util/issues", + "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" + }, + "install-path": "../fig/http-message-util" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "version_normalized": "1.3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "time": "2018-02-13T20:26:39+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "FastRoute\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, + "install-path": "../nikic/fast-route" + }, + { + "name": "psr/container", + "version": "2.0.2", + "version_normalized": "2.0.2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "time": "2021-11-05T16:47:00+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "install-path": "../psr/container" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "time": "2019-04-30T12:38:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "install-path": "../psr/http-factory" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2014-04-16T09:44:40+00:00", + "time": "2016-08-06T14:39:51+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "installation-source": "dist", "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "install-path": "../psr/http-message" + }, + { + "name": "psr/http-server-handler", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "time": "2018-10-30T16:46:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-handler/issues", + "source": "https://github.com/php-fig/http-server-handler/tree/master" + }, + "install-path": "../psr/http-server-handler" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "time": "2018-10-30T17:12:04+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/master" + }, + "install-path": "../psr/http-server-middleware" + }, + { + "name": "psr/log", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-07-14T16:46:02+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "install-path": "../psr/log" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "install-path": "../ralouphie/getallheaders" + }, + { + "name": "slim/psr7", + "version": "1.6", + "version_normalized": "1.6.0.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim-Psr7.git", + "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/3471c22c1a0d26c51c78f6aeb06489d38cf46a4d", + "reference": "3471c22c1a0d26c51c78f6aeb06489d38cf46a4d", + "shasum": "" + }, + "require": { + "fig/http-message-util": "^1.1.5", + "php": "^7.4 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0", + "symfony/polyfill-php80": "^1.26" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.3", + "ext-json": "*", + "http-interop/http-factory-tests": "^0.9.0", + "php-http/psr7-integration-tests": "dev-master", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "time": "2022-11-05T18:50:24+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Slim\\Psr7\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "description": "Strict PSR-7 implementation", + "homepage": "https://www.slimframework.com", + "keywords": [ + "http", + "psr-7", + "psr7" + ], + "support": { + "issues": "https://github.com/slimphp/Slim-Psr7/issues", + "source": "https://github.com/slimphp/Slim-Psr7/tree/1.6" + }, + "install-path": "../slim/psr7" + }, + { + "name": "slim/slim", + "version": "4.11.0", + "version_normalized": "4.11.0.0", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim.git", + "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7", + "reference": "b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "nikic/fast-route": "^1.3", + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "adriansuter/php-autoload-override": "^1.3", + "ext-simplexml": "*", + "guzzlehttp/psr7": "^2.4", + "httpsoft/http-message": "^1.0", + "httpsoft/http-server-request": "^1.0", + "laminas/laminas-diactoros": "^2.17", + "nyholm/psr7": "^1.5", + "nyholm/psr7-server": "^1.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "slim/http": "^1.2", + "slim/psr7": "^1.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." + }, + "time": "2022-11-06T16:33:39+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "homepage": "https://www.slimframework.com", + "keywords": [ + "api", + "framework", + "micro", + "router" + ], + "support": { + "docs": "https://www.slimframework.com/docs/v4/", + "forum": "https://discourse.slimframework.com/", + "irc": "irc://irc.freenode.net:6667/slimphp", + "issues": "https://github.com/slimphp/Slim/issues", + "rss": "https://www.slimframework.com/blog/feed.rss", + "slack": "https://slimphp.slack.com/", + "source": "https://github.com/slimphp/Slim", + "wiki": "https://github.com/slimphp/Slim/wiki" + }, + "funding": [ + { + "url": "https://opencollective.com/slimphp", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slim/slim", + "type": "tidelift" + } + ], + "install-path": "../slim/slim" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "time": "2022-11-03T14:55:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ - "AltoRouter.php" + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -32,31 +752,44 @@ ], "authors": [ { - "name": "Danny van Kooten", - "email": "dannyvankooten@gmail.com", - "homepage": "http://dannyvankooten.com/" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" }, { - "name": "Koen Punt", - "homepage": "https://github.com/koenpunt" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "niahoo", - "homepage": "https://github.com/niahoo" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A lightning fast router for PHP", - "homepage": "https://github.com/dannyvankooten/AltoRouter", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "lightweight", - "router", - "routing" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/dannyvankooten/AltoRouter/issues", - "source": "https://github.com/dannyvankooten/AltoRouter/tree/master" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, - "install-path": "../altorouter/altorouter" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php80" } ], "dev": true, diff --git a/Sources/API/vendor/composer/installed.php b/Sources/API/vendor/composer/installed.php index c0e230c..e795d48 100644 --- a/Sources/API/vendor/composer/installed.php +++ b/Sources/API/vendor/composer/installed.php @@ -1,31 +1,142 @@ array( - 'name' => '__root__', 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '451f8aec79f58d67eb8a9d6097c39c99d26f8b09', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), + 'reference' => '7167670b929c4f3fec015404893ade05128b1ea4', + 'name' => '__root__', 'dev' => true, ), 'versions' => array( '__root__' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '451f8aec79f58d67eb8a9d6097c39c99d26f8b09', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), + 'reference' => '7167670b929c4f3fec015404893ade05128b1ea4', + 'dev_requirement' => false, + ), + 'fig/http-message-util' => array( + 'pretty_version' => '1.1.5', + 'version' => '1.1.5.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../fig/http-message-util', + 'aliases' => array(), + 'reference' => '9d94dc0154230ac39e5bf89398b324a86f63f765', + 'dev_requirement' => false, + ), + 'nikic/fast-route' => array( + 'pretty_version' => 'v1.3.0', + 'version' => '1.3.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../nikic/fast-route', + 'aliases' => array(), + 'reference' => '181d480e08d9476e61381e04a71b34dc0432e812', + 'dev_requirement' => false, + ), + 'psr/container' => array( + 'pretty_version' => '2.0.2', + 'version' => '2.0.2.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/container', + 'aliases' => array(), + 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', + 'dev_requirement' => false, + ), + 'psr/http-factory' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-factory', + 'aliases' => array(), + 'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be', + 'dev_requirement' => false, + ), + 'psr/http-factory-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/http-message' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-message', + 'aliases' => array(), + 'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363', + 'dev_requirement' => false, + ), + 'psr/http-message-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), + 'psr/http-server-handler' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-server-handler', + 'aliases' => array(), + 'reference' => 'aff2f80e33b7f026ec96bb42f63242dc50ffcae7', + 'dev_requirement' => false, + ), + 'psr/http-server-middleware' => array( + 'pretty_version' => '1.0.1', + 'version' => '1.0.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/http-server-middleware', + 'aliases' => array(), + 'reference' => '2296f45510945530b9dceb8bcedb5cb84d40c5f5', + 'dev_requirement' => false, + ), + 'psr/log' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/log', + 'aliases' => array(), + 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', + 'dev_requirement' => false, + ), + 'ralouphie/getallheaders' => array( + 'pretty_version' => '3.0.3', + 'version' => '3.0.3.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../ralouphie/getallheaders', + 'aliases' => array(), + 'reference' => '120b605dfeb996808c31b6477290a714d356e822', + 'dev_requirement' => false, + ), + 'slim/psr7' => array( + 'pretty_version' => '1.6', + 'version' => '1.6.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../slim/psr7', + 'aliases' => array(), + 'reference' => '3471c22c1a0d26c51c78f6aeb06489d38cf46a4d', + 'dev_requirement' => false, + ), + 'slim/slim' => array( + 'pretty_version' => '4.11.0', + 'version' => '4.11.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../slim/slim', + 'aliases' => array(), + 'reference' => 'b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7', 'dev_requirement' => false, ), - 'altorouter/altorouter' => array( - 'pretty_version' => 'v1.1.0', - 'version' => '1.1.0.0', - 'reference' => '09d9d946c546bae6d22a7654cdb3b825ffda54b4', + 'symfony/polyfill-php80' => array( + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', 'type' => 'library', - 'install_path' => __DIR__ . '/../altorouter/altorouter', + 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), + 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', 'dev_requirement' => false, ), ), diff --git a/Sources/API/vendor/composer/platform_check.php b/Sources/API/vendor/composer/platform_check.php index 7621d4f..adfb472 100644 --- a/Sources/API/vendor/composer/platform_check.php +++ b/Sources/API/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 50300)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 5.3.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 80000)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/Sources/API/vendor/fig/http-message-util/.gitignore b/Sources/API/vendor/fig/http-message-util/.gitignore new file mode 100644 index 0000000..48b8bf9 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/.gitignore @@ -0,0 +1 @@ +vendor/ diff --git a/Sources/API/vendor/fig/http-message-util/CHANGELOG.md b/Sources/API/vendor/fig/http-message-util/CHANGELOG.md new file mode 100644 index 0000000..1a02e54 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/CHANGELOG.md @@ -0,0 +1,147 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.1.5 - 2020-11-24 + +### Added + +- [#19](https://github.com/php-fig/http-message-util/pull/19) adds support for PHP 8. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.4 - 2020-02-05 + +### Added + +- Nothing. + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- [#15](https://github.com/php-fig/http-message-util/pull/15) removes the dependency on psr/http-message, as it is not technically necessary for usage of this package. + +### Fixed + +- Nothing. + +## 1.1.3 - 2018-11-19 + +### Added + +- [#10](https://github.com/php-fig/http-message-util/pull/10) adds the constants `StatusCodeInterface::STATUS_EARLY_HINTS` (103) and + `StatusCodeInterface::STATUS_TOO_EARLY` (425). + +### Changed + +- Nothing. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.2 - 2017-02-09 + +### Added + +- [#4](https://github.com/php-fig/http-message-util/pull/4) adds the constant + `StatusCodeInterface::STATUS_MISDIRECTED_REQUEST` (421). + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.1 - 2017-02-06 + +### Added + +- [#3](https://github.com/php-fig/http-message-util/pull/3) adds the constant + `StatusCodeInterface::STATUS_IM_A_TEAPOT` (418). + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.1.0 - 2016-09-19 + +### Added + +- [#1](https://github.com/php-fig/http-message-util/pull/1) adds + `Fig\Http\Message\StatusCodeInterface`, with constants named after common + status reason phrases, with values indicating the status codes themselves. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. + +## 1.0.0 - 2017-08-05 + +### Added + +- Adds `Fig\Http\Message\RequestMethodInterface`, with constants covering the + most common HTTP request methods as specified by the IETF. + +### Deprecated + +- Nothing. + +### Removed + +- Nothing. + +### Fixed + +- Nothing. diff --git a/Sources/API/vendor/fig/http-message-util/LICENSE b/Sources/API/vendor/fig/http-message-util/LICENSE new file mode 100644 index 0000000..e2fa347 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2016 PHP Framework Interoperability Group + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/fig/http-message-util/README.md b/Sources/API/vendor/fig/http-message-util/README.md new file mode 100644 index 0000000..ea5b5aa --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/README.md @@ -0,0 +1,17 @@ +# PSR Http Message Util + +This repository holds utility classes and constants to facilitate common +operations of [PSR-7](https://www.php-fig.org/psr/psr-7/); the primary purpose is +to provide constants for referring to request methods, response status codes and +messages, and potentially common headers. + +Implementation of PSR-7 interfaces is **not** within the scope of this package. + +## Installation + +Install by adding the package as a [Composer](https://getcomposer.org) +requirement: + +```bash +$ composer require fig/http-message-util +``` diff --git a/Sources/API/vendor/fig/http-message-util/composer.json b/Sources/API/vendor/fig/http-message-util/composer.json new file mode 100644 index 0000000..8645893 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/composer.json @@ -0,0 +1,28 @@ +{ + "name": "fig/http-message-util", + "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "keywords": ["psr", "psr-7", "http", "http-message", "request", "response"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "suggest": { + "psr/http-message": "The package containing the PSR-7 interfaces" + }, + "autoload": { + "psr-4": { + "Fig\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + } +} diff --git a/Sources/API/vendor/fig/http-message-util/src/RequestMethodInterface.php b/Sources/API/vendor/fig/http-message-util/src/RequestMethodInterface.php new file mode 100644 index 0000000..97d9a93 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/src/RequestMethodInterface.php @@ -0,0 +1,34 @@ + + * class RequestFactory implements RequestMethodInterface + * { + * public static function factory( + * $uri = '/', + * $method = self::METHOD_GET, + * $data = [] + * ) { + * } + * } + * + */ +interface RequestMethodInterface +{ + const METHOD_HEAD = 'HEAD'; + const METHOD_GET = 'GET'; + const METHOD_POST = 'POST'; + const METHOD_PUT = 'PUT'; + const METHOD_PATCH = 'PATCH'; + const METHOD_DELETE = 'DELETE'; + const METHOD_PURGE = 'PURGE'; + const METHOD_OPTIONS = 'OPTIONS'; + const METHOD_TRACE = 'TRACE'; + const METHOD_CONNECT = 'CONNECT'; +} diff --git a/Sources/API/vendor/fig/http-message-util/src/StatusCodeInterface.php b/Sources/API/vendor/fig/http-message-util/src/StatusCodeInterface.php new file mode 100644 index 0000000..99b7e78 --- /dev/null +++ b/Sources/API/vendor/fig/http-message-util/src/StatusCodeInterface.php @@ -0,0 +1,107 @@ + + * class ResponseFactory implements StatusCodeInterface + * { + * public function createResponse($code = self::STATUS_OK) + * { + * } + * } + * + */ +interface StatusCodeInterface +{ + // Informational 1xx + const STATUS_CONTINUE = 100; + const STATUS_SWITCHING_PROTOCOLS = 101; + const STATUS_PROCESSING = 102; + const STATUS_EARLY_HINTS = 103; + // Successful 2xx + const STATUS_OK = 200; + const STATUS_CREATED = 201; + const STATUS_ACCEPTED = 202; + const STATUS_NON_AUTHORITATIVE_INFORMATION = 203; + const STATUS_NO_CONTENT = 204; + const STATUS_RESET_CONTENT = 205; + const STATUS_PARTIAL_CONTENT = 206; + const STATUS_MULTI_STATUS = 207; + const STATUS_ALREADY_REPORTED = 208; + const STATUS_IM_USED = 226; + // Redirection 3xx + const STATUS_MULTIPLE_CHOICES = 300; + const STATUS_MOVED_PERMANENTLY = 301; + const STATUS_FOUND = 302; + const STATUS_SEE_OTHER = 303; + const STATUS_NOT_MODIFIED = 304; + const STATUS_USE_PROXY = 305; + const STATUS_RESERVED = 306; + const STATUS_TEMPORARY_REDIRECT = 307; + const STATUS_PERMANENT_REDIRECT = 308; + // Client Errors 4xx + const STATUS_BAD_REQUEST = 400; + const STATUS_UNAUTHORIZED = 401; + const STATUS_PAYMENT_REQUIRED = 402; + const STATUS_FORBIDDEN = 403; + const STATUS_NOT_FOUND = 404; + const STATUS_METHOD_NOT_ALLOWED = 405; + const STATUS_NOT_ACCEPTABLE = 406; + const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407; + const STATUS_REQUEST_TIMEOUT = 408; + const STATUS_CONFLICT = 409; + const STATUS_GONE = 410; + const STATUS_LENGTH_REQUIRED = 411; + const STATUS_PRECONDITION_FAILED = 412; + const STATUS_PAYLOAD_TOO_LARGE = 413; + const STATUS_URI_TOO_LONG = 414; + const STATUS_UNSUPPORTED_MEDIA_TYPE = 415; + const STATUS_RANGE_NOT_SATISFIABLE = 416; + const STATUS_EXPECTATION_FAILED = 417; + const STATUS_IM_A_TEAPOT = 418; + const STATUS_MISDIRECTED_REQUEST = 421; + const STATUS_UNPROCESSABLE_ENTITY = 422; + const STATUS_LOCKED = 423; + const STATUS_FAILED_DEPENDENCY = 424; + const STATUS_TOO_EARLY = 425; + const STATUS_UPGRADE_REQUIRED = 426; + const STATUS_PRECONDITION_REQUIRED = 428; + const STATUS_TOO_MANY_REQUESTS = 429; + const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; + const STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451; + // Server Errors 5xx + const STATUS_INTERNAL_SERVER_ERROR = 500; + const STATUS_NOT_IMPLEMENTED = 501; + const STATUS_BAD_GATEWAY = 502; + const STATUS_SERVICE_UNAVAILABLE = 503; + const STATUS_GATEWAY_TIMEOUT = 504; + const STATUS_VERSION_NOT_SUPPORTED = 505; + const STATUS_VARIANT_ALSO_NEGOTIATES = 506; + const STATUS_INSUFFICIENT_STORAGE = 507; + const STATUS_LOOP_DETECTED = 508; + const STATUS_NOT_EXTENDED = 510; + const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511; +} diff --git a/Sources/API/vendor/nikic/fast-route/.gitignore b/Sources/API/vendor/nikic/fast-route/.gitignore new file mode 100644 index 0000000..e378a07 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/.gitignore @@ -0,0 +1,5 @@ +/vendor/ +.idea/ + +# ignore lock file since we have no extra dependencies +composer.lock diff --git a/Sources/API/vendor/nikic/fast-route/.hhconfig b/Sources/API/vendor/nikic/fast-route/.hhconfig new file mode 100644 index 0000000..0c2153c --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/.hhconfig @@ -0,0 +1 @@ +assume_php=false diff --git a/Sources/API/vendor/nikic/fast-route/.travis.yml b/Sources/API/vendor/nikic/fast-route/.travis.yml new file mode 100644 index 0000000..10f8381 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/.travis.yml @@ -0,0 +1,20 @@ +sudo: false +language: php + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - 7.2 + - hhvm + +script: + - ./vendor/bin/phpunit + +before_install: + - travis_retry composer self-update + +install: + - composer install diff --git a/Sources/API/vendor/nikic/fast-route/FastRoute.hhi b/Sources/API/vendor/nikic/fast-route/FastRoute.hhi new file mode 100644 index 0000000..8d50738 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/FastRoute.hhi @@ -0,0 +1,126 @@ +; + } + + class RouteCollector { + public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator); + public function addRoute(mixed $httpMethod, string $route, mixed $handler): void; + public function getData(): array; + } + + class Route { + public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables); + public function matches(string $str): bool; + } + + interface DataGenerator { + public function addRoute(string $httpMethod, array $routeData, mixed $handler); + public function getData(): array; + } + + interface Dispatcher { + const int NOT_FOUND = 0; + const int FOUND = 1; + const int METHOD_NOT_ALLOWED = 2; + public function dispatch(string $httpMethod, string $uri): array; + } + + function simpleDispatcher( + (function(RouteCollector): void) $routeDefinitionCallback, + shape( + ?'routeParser' => classname, + ?'dataGenerator' => classname, + ?'dispatcher' => classname, + ?'routeCollector' => classname, + ) $options = shape()): Dispatcher; + + function cachedDispatcher( + (function(RouteCollector): void) $routeDefinitionCallback, + shape( + ?'routeParser' => classname, + ?'dataGenerator' => classname, + ?'dispatcher' => classname, + ?'routeCollector' => classname, + ?'cacheDisabled' => bool, + ?'cacheFile' => string, + ) $options = shape()): Dispatcher; +} + +namespace FastRoute\DataGenerator { + abstract class RegexBasedAbstract implements \FastRoute\DataGenerator { + protected abstract function getApproxChunkSize(); + protected abstract function processChunk($regexToRoutesMap); + + public function addRoute(string $httpMethod, array $routeData, mixed $handler): void; + public function getData(): array; + } + + class CharCountBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class GroupCountBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class GroupPosBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } + + class MarkBased extends RegexBasedAbstract { + protected function getApproxChunkSize(): int; + protected function processChunk(array $regexToRoutesMap): array; + } +} + +namespace FastRoute\Dispatcher { + abstract class RegexBasedAbstract implements \FastRoute\Dispatcher { + protected abstract function dispatchVariableRoute(array $routeData, string $uri): array; + + public function dispatch(string $httpMethod, string $uri): array; + } + + class GroupPosBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class GroupCountBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class CharCountBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } + + class MarkBased extends RegexBasedAbstract { + public function __construct(array $data); + protected function dispatchVariableRoute(array $routeData, string $uri): array; + } +} + +namespace FastRoute\RouteParser { + class Std implements \FastRoute\RouteParser { + const string VARIABLE_REGEX = <<<'REGEX' +\{ + \s* ([a-zA-Z][a-zA-Z0-9_]*) \s* + (?: + : \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*) + )? +\} +REGEX; + const string DEFAULT_DISPATCH_REGEX = '[^/]+'; + public function parse(string $route): array; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/LICENSE b/Sources/API/vendor/nikic/fast-route/LICENSE new file mode 100644 index 0000000..478e764 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2013 by Nikita Popov. + +Some rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/API/vendor/nikic/fast-route/README.md b/Sources/API/vendor/nikic/fast-route/README.md new file mode 100644 index 0000000..91bd466 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/README.md @@ -0,0 +1,313 @@ +FastRoute - Fast request router for PHP +======================================= + +This library provides a fast implementation of a regular expression based router. [Blog post explaining how the +implementation works and why it is fast.][blog_post] + +Install +------- + +To install with composer: + +```sh +composer require nikic/fast-route +``` + +Requires PHP 5.4 or newer. + +Usage +----- + +Here's a basic usage example: + +```php +addRoute('GET', '/users', 'get_all_users_handler'); + // {id} must be a number (\d+) + $r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler'); + // The /{title} suffix is optional + $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler'); +}); + +// Fetch method and URI from somewhere +$httpMethod = $_SERVER['REQUEST_METHOD']; +$uri = $_SERVER['REQUEST_URI']; + +// Strip query string (?foo=bar) and decode URI +if (false !== $pos = strpos($uri, '?')) { + $uri = substr($uri, 0, $pos); +} +$uri = rawurldecode($uri); + +$routeInfo = $dispatcher->dispatch($httpMethod, $uri); +switch ($routeInfo[0]) { + case FastRoute\Dispatcher::NOT_FOUND: + // ... 404 Not Found + break; + case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: + $allowedMethods = $routeInfo[1]; + // ... 405 Method Not Allowed + break; + case FastRoute\Dispatcher::FOUND: + $handler = $routeInfo[1]; + $vars = $routeInfo[2]; + // ... call $handler with $vars + break; +} +``` + +### Defining routes + +The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts +a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling +`addRoute()` on the collector instance: + +```php +$r->addRoute($method, $routePattern, $handler); +``` + +The `$method` is an uppercase HTTP method string for which a certain route should match. It +is possible to specify multiple valid methods using an array: + +```php +// These two calls +$r->addRoute('GET', '/test', 'handler'); +$r->addRoute('POST', '/test', 'handler'); +// Are equivalent to this one call +$r->addRoute(['GET', 'POST'], '/test', 'handler'); +``` + +By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo` +and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify +a custom pattern by writing `{bar:[0-9]+}`. Some examples: + +```php +// Matches /user/42, but not /user/xyz +$r->addRoute('GET', '/user/{id:\d+}', 'handler'); + +// Matches /user/foobar, but not /user/foo/bar +$r->addRoute('GET', '/user/{name}', 'handler'); + +// Matches /user/foo/bar as well +$r->addRoute('GET', '/user/{name:.+}', 'handler'); +``` + +Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}` +is not a valid placeholder, because `()` is a capturing group. Instead you can use either +`{lang:en|de}` or `{lang:(?:en|de)}`. + +Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]` +will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position, +not in the middle of a route. + +```php +// This route +$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler'); +// Is equivalent to these two routes +$r->addRoute('GET', '/user/{id:\d+}', 'handler'); +$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler'); + +// Multiple nested optional parts are possible as well +$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler'); + +// This route is NOT valid, because optional parts can only occur at the end +$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler'); +``` + +The `$handler` parameter does not necessarily have to be a callback, it could also be a controller +class name or any other kind of data you wish to associate with the route. FastRoute only tells you +which handler corresponds to your URI, how you interpret it is up to you. + +#### Shorcut methods for common request methods + +For the `GET`, `POST`, `PUT`, `PATCH`, `DELETE` and `HEAD` request methods shortcut methods are available. For example: + +```php +$r->get('/get-route', 'get_handler'); +$r->post('/post-route', 'post_handler'); +``` + +Is equivalent to: + +```php +$r->addRoute('GET', '/get-route', 'get_handler'); +$r->addRoute('POST', '/post-route', 'post_handler'); +``` + +#### Route Groups + +Additionally, you can specify routes inside of a group. All routes defined inside a group will have a common prefix. + +For example, defining your routes as: + +```php +$r->addGroup('/admin', function (RouteCollector $r) { + $r->addRoute('GET', '/do-something', 'handler'); + $r->addRoute('GET', '/do-another-thing', 'handler'); + $r->addRoute('GET', '/do-something-else', 'handler'); +}); +``` + +Will have the same result as: + + ```php +$r->addRoute('GET', '/admin/do-something', 'handler'); +$r->addRoute('GET', '/admin/do-another-thing', 'handler'); +$r->addRoute('GET', '/admin/do-something-else', 'handler'); + ``` + +Nested groups are also supported, in which case the prefixes of all the nested groups are combined. + +### Caching + +The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless +caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated +routing data and construct the dispatcher from the cached information: + +```php +addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); +}, [ + 'cacheFile' => __DIR__ . '/route.cache', /* required */ + 'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */ +]); +``` + +The second parameter to the function is an options array, which can be used to specify the cache +file location, among other things. + +### Dispatching a URI + +A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method +accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them +appropriately) is your job - this library is not bound to the PHP web SAPIs. + +The `dispatch()` method returns an array whose first element contains a status code. It is one +of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the +method not allowed status the second array element contains a list of HTTP methods allowed for +the supplied URI. For example: + + [FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']] + +> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the +`Allow:` header to detail available methods for the requested resource. Applications using FastRoute +should use the second array element to add this header when relaying a 405 response. + +For the found status the second array element is the handler that was associated with the route +and the third array element is a dictionary of placeholder names to their values. For example: + + /* Routing against GET /user/nikic/42 */ + + [FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']] + +### Overriding the route parser and dispatcher + +The routing process makes use of three components: A route parser, a data generator and a +dispatcher. The three components adhere to the following interfaces: + +```php + 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', +]); +``` + +The above options array corresponds to the defaults. By replacing `GroupCountBased` by +`GroupPosBased` you could switch to a different dispatching strategy. + +### A Note on HEAD Requests + +The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]: + +> The methods GET and HEAD MUST be supported by all general-purpose servers + +To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an +available GET route for a given resource. The PHP web SAPI transparently removes the entity body +from HEAD responses so this behavior has no effect on the vast majority of users. + +However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST +NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is +*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases. + +Finally, note that applications MAY always specify their own HEAD method route for a given +resource to bypass this behavior entirely. + +### Credits + +This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server. + +A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey]. + + +[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1" +[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html +[levi]: https://github.com/morrisonlevi +[rdlowrey]: https://github.com/rdlowrey diff --git a/Sources/API/vendor/nikic/fast-route/composer.json b/Sources/API/vendor/nikic/fast-route/composer.json new file mode 100644 index 0000000..fb446a2 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/composer.json @@ -0,0 +1,24 @@ +{ + "name": "nikic/fast-route", + "description": "Fast request router for PHP", + "keywords": ["routing", "router"], + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": ["src/functions.php"] + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + } +} diff --git a/Sources/API/vendor/nikic/fast-route/phpunit.xml b/Sources/API/vendor/nikic/fast-route/phpunit.xml new file mode 100644 index 0000000..3c807b6 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/phpunit.xml @@ -0,0 +1,24 @@ + + + + + + ./test/ + + + + + + ./src/ + + + diff --git a/Sources/API/vendor/nikic/fast-route/psalm.xml b/Sources/API/vendor/nikic/fast-route/psalm.xml new file mode 100644 index 0000000..0dca5d7 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/psalm.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/API/vendor/nikic/fast-route/src/BadRouteException.php b/Sources/API/vendor/nikic/fast-route/src/BadRouteException.php new file mode 100644 index 0000000..62262ec --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/BadRouteException.php @@ -0,0 +1,7 @@ + $route) { + $suffixLen++; + $suffix .= "\t"; + + $regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})'; + $routeMap[$suffix] = [$route->handler, $route->variables]; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php new file mode 100644 index 0000000..54d9a05 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupCountBased.php @@ -0,0 +1,30 @@ + $route) { + $numVariables = count($route->variables); + $numGroups = max($numGroups, $numVariables); + + $regexes[] = $regex . str_repeat('()', $numGroups - $numVariables); + $routeMap[$numGroups + 1] = [$route->handler, $route->variables]; + + ++$numGroups; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php new file mode 100644 index 0000000..fc4dc0a --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/GroupPosBased.php @@ -0,0 +1,27 @@ + $route) { + $regexes[] = $regex; + $routeMap[$offset] = [$route->handler, $route->variables]; + + $offset += count($route->variables); + } + + $regex = '~^(?:' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php new file mode 100644 index 0000000..0aebed9 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/MarkBased.php @@ -0,0 +1,27 @@ + $route) { + $regexes[] = $regex . '(*MARK:' . $markName . ')'; + $routeMap[$markName] = [$route->handler, $route->variables]; + + ++$markName; + } + + $regex = '~^(?|' . implode('|', $regexes) . ')$~'; + return ['regex' => $regex, 'routeMap' => $routeMap]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php new file mode 100644 index 0000000..6457290 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php @@ -0,0 +1,186 @@ +isStaticRoute($routeData)) { + $this->addStaticRoute($httpMethod, $routeData, $handler); + } else { + $this->addVariableRoute($httpMethod, $routeData, $handler); + } + } + + /** + * @return mixed[] + */ + public function getData() + { + if (empty($this->methodToRegexToRoutesMap)) { + return [$this->staticRoutes, []]; + } + + return [$this->staticRoutes, $this->generateVariableRouteData()]; + } + + /** + * @return mixed[] + */ + private function generateVariableRouteData() + { + $data = []; + foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) { + $chunkSize = $this->computeChunkSize(count($regexToRoutesMap)); + $chunks = array_chunk($regexToRoutesMap, $chunkSize, true); + $data[$method] = array_map([$this, 'processChunk'], $chunks); + } + return $data; + } + + /** + * @param int + * @return int + */ + private function computeChunkSize($count) + { + $numParts = max(1, round($count / $this->getApproxChunkSize())); + return (int) ceil($count / $numParts); + } + + /** + * @param mixed[] + * @return bool + */ + private function isStaticRoute($routeData) + { + return count($routeData) === 1 && is_string($routeData[0]); + } + + private function addStaticRoute($httpMethod, $routeData, $handler) + { + $routeStr = $routeData[0]; + + if (isset($this->staticRoutes[$httpMethod][$routeStr])) { + throw new BadRouteException(sprintf( + 'Cannot register two routes matching "%s" for method "%s"', + $routeStr, $httpMethod + )); + } + + if (isset($this->methodToRegexToRoutesMap[$httpMethod])) { + foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) { + if ($route->matches($routeStr)) { + throw new BadRouteException(sprintf( + 'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"', + $routeStr, $route->regex, $httpMethod + )); + } + } + } + + $this->staticRoutes[$httpMethod][$routeStr] = $handler; + } + + private function addVariableRoute($httpMethod, $routeData, $handler) + { + list($regex, $variables) = $this->buildRegexForRoute($routeData); + + if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) { + throw new BadRouteException(sprintf( + 'Cannot register two routes matching "%s" for method "%s"', + $regex, $httpMethod + )); + } + + $this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route( + $httpMethod, $handler, $regex, $variables + ); + } + + /** + * @param mixed[] + * @return mixed[] + */ + private function buildRegexForRoute($routeData) + { + $regex = ''; + $variables = []; + foreach ($routeData as $part) { + if (is_string($part)) { + $regex .= preg_quote($part, '~'); + continue; + } + + list($varName, $regexPart) = $part; + + if (isset($variables[$varName])) { + throw new BadRouteException(sprintf( + 'Cannot use the same placeholder "%s" twice', $varName + )); + } + + if ($this->regexHasCapturingGroups($regexPart)) { + throw new BadRouteException(sprintf( + 'Regex "%s" for parameter "%s" contains a capturing group', + $regexPart, $varName + )); + } + + $variables[$varName] = $varName; + $regex .= '(' . $regexPart . ')'; + } + + return [$regex, $variables]; + } + + /** + * @param string + * @return bool + */ + private function regexHasCapturingGroups($regex) + { + if (false === strpos($regex, '(')) { + // Needs to have at least a ( to contain a capturing group + return false; + } + + // Semi-accurate detection for capturing groups + return (bool) preg_match( + '~ + (?: + \(\?\( + | \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \] + | \\\\ . + ) (*SKIP)(*FAIL) | + \( + (?! + \? (?! <(?![!=]) | P< | \' ) + | \* + ) + ~x', + $regex + ); + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher.php new file mode 100644 index 0000000..4ae72a3 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher.php @@ -0,0 +1,26 @@ + 'value', ...]] + * + * @param string $httpMethod + * @param string $uri + * + * @return array + */ + public function dispatch($httpMethod, $uri); +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php new file mode 100644 index 0000000..ef1eec1 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/CharCountBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][end($matches)]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php new file mode 100644 index 0000000..493e7a9 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupCountBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][count($matches)]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php new file mode 100644 index 0000000..498220e --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/GroupPosBased.php @@ -0,0 +1,33 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + // find first non-empty match + for ($i = 1; '' === $matches[$i]; ++$i); + + list($handler, $varNames) = $data['routeMap'][$i]; + + $vars = []; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[$i++]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php new file mode 100644 index 0000000..22eb09b --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/MarkBased.php @@ -0,0 +1,31 @@ +staticRouteMap, $this->variableRouteData) = $data; + } + + protected function dispatchVariableRoute($routeData, $uri) + { + foreach ($routeData as $data) { + if (!preg_match($data['regex'], $uri, $matches)) { + continue; + } + + list($handler, $varNames) = $data['routeMap'][$matches['MARK']]; + + $vars = []; + $i = 0; + foreach ($varNames as $varName) { + $vars[$varName] = $matches[++$i]; + } + return [self::FOUND, $handler, $vars]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php new file mode 100644 index 0000000..206e879 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php @@ -0,0 +1,88 @@ +staticRouteMap[$httpMethod][$uri])) { + $handler = $this->staticRouteMap[$httpMethod][$uri]; + return [self::FOUND, $handler, []]; + } + + $varRouteData = $this->variableRouteData; + if (isset($varRouteData[$httpMethod])) { + $result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + + // For HEAD requests, attempt fallback to GET + if ($httpMethod === 'HEAD') { + if (isset($this->staticRouteMap['GET'][$uri])) { + $handler = $this->staticRouteMap['GET'][$uri]; + return [self::FOUND, $handler, []]; + } + if (isset($varRouteData['GET'])) { + $result = $this->dispatchVariableRoute($varRouteData['GET'], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + } + + // If nothing else matches, try fallback routes + if (isset($this->staticRouteMap['*'][$uri])) { + $handler = $this->staticRouteMap['*'][$uri]; + return [self::FOUND, $handler, []]; + } + if (isset($varRouteData['*'])) { + $result = $this->dispatchVariableRoute($varRouteData['*'], $uri); + if ($result[0] === self::FOUND) { + return $result; + } + } + + // Find allowed methods for this URI by matching against all other HTTP methods as well + $allowedMethods = []; + + foreach ($this->staticRouteMap as $method => $uriMap) { + if ($method !== $httpMethod && isset($uriMap[$uri])) { + $allowedMethods[] = $method; + } + } + + foreach ($varRouteData as $method => $routeData) { + if ($method === $httpMethod) { + continue; + } + + $result = $this->dispatchVariableRoute($routeData, $uri); + if ($result[0] === self::FOUND) { + $allowedMethods[] = $method; + } + } + + // If there are no allowed methods the route simply does not exist + if ($allowedMethods) { + return [self::METHOD_NOT_ALLOWED, $allowedMethods]; + } + + return [self::NOT_FOUND]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/Route.php b/Sources/API/vendor/nikic/fast-route/src/Route.php new file mode 100644 index 0000000..e1bf7dd --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/Route.php @@ -0,0 +1,47 @@ +httpMethod = $httpMethod; + $this->handler = $handler; + $this->regex = $regex; + $this->variables = $variables; + } + + /** + * Tests whether this route matches the given string. + * + * @param string $str + * + * @return bool + */ + public function matches($str) + { + $regex = '~^' . $this->regex . '$~'; + return (bool) preg_match($regex, $str); + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/RouteCollector.php b/Sources/API/vendor/nikic/fast-route/src/RouteCollector.php new file mode 100644 index 0000000..c1c1762 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/RouteCollector.php @@ -0,0 +1,152 @@ +routeParser = $routeParser; + $this->dataGenerator = $dataGenerator; + $this->currentGroupPrefix = ''; + } + + /** + * Adds a route to the collection. + * + * The syntax used in the $route string depends on the used route parser. + * + * @param string|string[] $httpMethod + * @param string $route + * @param mixed $handler + */ + public function addRoute($httpMethod, $route, $handler) + { + $route = $this->currentGroupPrefix . $route; + $routeDatas = $this->routeParser->parse($route); + foreach ((array) $httpMethod as $method) { + foreach ($routeDatas as $routeData) { + $this->dataGenerator->addRoute($method, $routeData, $handler); + } + } + } + + /** + * Create a route group with a common prefix. + * + * All routes created in the passed callback will have the given group prefix prepended. + * + * @param string $prefix + * @param callable $callback + */ + public function addGroup($prefix, callable $callback) + { + $previousGroupPrefix = $this->currentGroupPrefix; + $this->currentGroupPrefix = $previousGroupPrefix . $prefix; + $callback($this); + $this->currentGroupPrefix = $previousGroupPrefix; + } + + /** + * Adds a GET route to the collection + * + * This is simply an alias of $this->addRoute('GET', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function get($route, $handler) + { + $this->addRoute('GET', $route, $handler); + } + + /** + * Adds a POST route to the collection + * + * This is simply an alias of $this->addRoute('POST', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function post($route, $handler) + { + $this->addRoute('POST', $route, $handler); + } + + /** + * Adds a PUT route to the collection + * + * This is simply an alias of $this->addRoute('PUT', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function put($route, $handler) + { + $this->addRoute('PUT', $route, $handler); + } + + /** + * Adds a DELETE route to the collection + * + * This is simply an alias of $this->addRoute('DELETE', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function delete($route, $handler) + { + $this->addRoute('DELETE', $route, $handler); + } + + /** + * Adds a PATCH route to the collection + * + * This is simply an alias of $this->addRoute('PATCH', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function patch($route, $handler) + { + $this->addRoute('PATCH', $route, $handler); + } + + /** + * Adds a HEAD route to the collection + * + * This is simply an alias of $this->addRoute('HEAD', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function head($route, $handler) + { + $this->addRoute('HEAD', $route, $handler); + } + + /** + * Returns the collected route data, as provided by the data generator. + * + * @return array + */ + public function getData() + { + return $this->dataGenerator->getData(); + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/RouteParser.php b/Sources/API/vendor/nikic/fast-route/src/RouteParser.php new file mode 100644 index 0000000..6a7685c --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/RouteParser.php @@ -0,0 +1,37 @@ + $segment) { + if ($segment === '' && $n !== 0) { + throw new BadRouteException('Empty optional part'); + } + + $currentRoute .= $segment; + $routeDatas[] = $this->parsePlaceholders($currentRoute); + } + return $routeDatas; + } + + /** + * Parses a route string that does not contain optional segments. + * + * @param string + * @return mixed[] + */ + private function parsePlaceholders($route) + { + if (!preg_match_all( + '~' . self::VARIABLE_REGEX . '~x', $route, $matches, + PREG_OFFSET_CAPTURE | PREG_SET_ORDER + )) { + return [$route]; + } + + $offset = 0; + $routeData = []; + foreach ($matches as $set) { + if ($set[0][1] > $offset) { + $routeData[] = substr($route, $offset, $set[0][1] - $offset); + } + $routeData[] = [ + $set[1][0], + isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX + ]; + $offset = $set[0][1] + strlen($set[0][0]); + } + + if ($offset !== strlen($route)) { + $routeData[] = substr($route, $offset); + } + + return $routeData; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/src/bootstrap.php b/Sources/API/vendor/nikic/fast-route/src/bootstrap.php new file mode 100644 index 0000000..0bce3a4 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/src/bootstrap.php @@ -0,0 +1,12 @@ + 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + ]; + + /** @var RouteCollector $routeCollector */ + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + return new $options['dispatcher']($routeCollector->getData()); + } + + /** + * @param callable $routeDefinitionCallback + * @param array $options + * + * @return Dispatcher + */ + function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) + { + $options += [ + 'routeParser' => 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + 'cacheDisabled' => false, + ]; + + if (!isset($options['cacheFile'])) { + throw new \LogicException('Must specify "cacheFile" option'); + } + + if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { + $dispatchData = require $options['cacheFile']; + if (!is_array($dispatchData)) { + throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); + } + return new $options['dispatcher']($dispatchData); + } + + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + /** @var RouteCollector $routeCollector */ + $dispatchData = $routeCollector->getData(); + if (!$options['cacheDisabled']) { + file_put_contents( + $options['cacheFile'], + ' $this->getDataGeneratorClass(), + 'dispatcher' => $this->getDispatcherClass() + ]; + } + + /** + * @dataProvider provideFoundDispatchCases + */ + public function testFoundDispatches($method, $uri, $callback, $handler, $argDict) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $info = $dispatcher->dispatch($method, $uri); + $this->assertSame($dispatcher::FOUND, $info[0]); + $this->assertSame($handler, $info[1]); + $this->assertSame($argDict, $info[2]); + } + + /** + * @dataProvider provideNotFoundDispatchCases + */ + public function testNotFoundDispatches($method, $uri, $callback) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $routeInfo = $dispatcher->dispatch($method, $uri); + $this->assertArrayNotHasKey(1, $routeInfo, + 'NOT_FOUND result must only contain a single element in the returned info array' + ); + $this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]); + } + + /** + * @dataProvider provideMethodNotAllowedDispatchCases + */ + public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods) + { + $dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions()); + $routeInfo = $dispatcher->dispatch($method, $uri); + $this->assertArrayHasKey(1, $routeInfo, + 'METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1' + ); + + list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri); + $this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus); + $this->assertSame($availableMethods, $methodArray); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot use the same placeholder "test" twice + */ + public function testDuplicateVariableNameError() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET" + */ + public function testDuplicateVariableRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;) + $r->addRoute('GET', '/user/{name}', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET" + */ + public function testDuplicateStaticRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user', 'handler0'); + $r->addRoute('GET', '/user', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET" + */ + public function testShadowedStaticRoute() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/nikic', 'handler1'); + }, $this->generateDispatcherOptions()); + } + + /** + * @expectedException \FastRoute\BadRouteException + * @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group + */ + public function testCapturing() + { + \FastRoute\simpleDispatcher(function (RouteCollector $r) { + $r->addRoute('GET', '/{lang:(en|de)}', 'handler0'); + }, $this->generateDispatcherOptions()); + } + + public function provideFoundDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'GET'; + $uri = '/resource/123/456'; + $handler = 'handler0'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 1 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/handler0', 'handler0'); + $r->addRoute('GET', '/handler1', 'handler1'); + $r->addRoute('GET', '/handler2', 'handler2'); + }; + + $method = 'GET'; + $uri = '/handler2'; + $handler = 'handler2'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 2 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey'; + $handler = 'handler2'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 3 --------------------------------------------------------------------------------------> + + // reuse $callback from #2 + + $method = 'GET'; + $uri = '/user/12345'; + $handler = 'handler1'; + $argDict = ['id' => '12345']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 4 --------------------------------------------------------------------------------------> + + // reuse $callback from #3 + + $method = 'GET'; + $uri = '/user/NaN'; + $handler = 'handler2'; + $argDict = ['name' => 'NaN']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 5 --------------------------------------------------------------------------------------> + + // reuse $callback from #4 + + $method = 'GET'; + $uri = '/user/rdlowrey/12345'; + $handler = 'handler0'; + $argDict = ['name' => 'rdlowrey', 'id' => '12345']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 6 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/12345/extension', 'handler1'); + $r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/user/12345.svg'; + $handler = 'handler2'; + $argDict = ['id' => '12345', 'extension' => 'svg']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 7 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/static0', 'handler2'); + $r->addRoute('GET', '/static1', 'handler3'); + $r->addRoute('HEAD', '/static1', 'handler4'); + }; + + $method = 'HEAD'; + $uri = '/user/rdlowrey'; + $handler = 'handler0'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 8 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + // reuse $callback from #7 + + $method = 'HEAD'; + $uri = '/user/rdlowrey/1234'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey', 'id' => '1234']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 9 ----- Test GET method fallback on HEAD route miss ------------------------------------> + + // reuse $callback from #8 + + $method = 'HEAD'; + $uri = '/static0'; + $handler = 'handler2'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 10 ---- Test existing HEAD route used if available (no fallback) -----------------------> + + // reuse $callback from #9 + + $method = 'HEAD'; + $uri = '/static1'; + $handler = 'handler4'; + $argDict = []; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 11 ---- More specified routes are not shadowed by less specific of another method ------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); + }; + + $method = 'POST'; + $uri = '/user/rdlowrey'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 12 ---- Handler of more specific routes is used, if it occurs first --------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1'); + $r->addRoute('POST', '/user/{name}', 'handler2'); + }; + + $method = 'POST'; + $uri = '/user/rdlowrey'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 13 ---- Route with constant suffix -----------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}', 'handler0'); + $r->addRoute('GET', '/user/{name}/edit', 'handler1'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey/edit'; + $handler = 'handler1'; + $argDict = ['name' => 'rdlowrey']; + + $cases[] = [$method, $uri, $callback, $handler, $argDict]; + + // 14 ---- Handle multiple methods with the same handler ----------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); + $r->addRoute(['DELETE'], '/user', 'handlerDelete'); + $r->addRoute([], '/user', 'handlerNone'); + }; + + $argDict = []; + $cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict]; + $cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict]; + $cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict]; + + // 17 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user.json', 'handler0'); + $r->addRoute('GET', '/{entity}.json', 'handler1'); + }; + + $cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']]; + + // 18 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '', 'handler0'); + }; + + $cases[] = ['GET', '', $callback, 'handler0', []]; + + // 19 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('HEAD', '/a/{foo}', 'handler0'); + $r->addRoute('GET', '/b/{foo}', 'handler1'); + }; + + $cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']]; + + // 20 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('HEAD', '/a', 'handler0'); + $r->addRoute('GET', '/b', 'handler1'); + }; + + $cases[] = ['HEAD', '/b', $callback, 'handler1', []]; + + // 21 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/foo', 'handler0'); + $r->addRoute('HEAD', '/{bar}', 'handler1'); + }; + + $cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']]; + + // 22 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('*', '/user', 'handler0'); + $r->addRoute('*', '/{user}', 'handler1'); + $r->addRoute('GET', '/user', 'handler2'); + }; + + $cases[] = ['GET', '/user', $callback, 'handler2', []]; + + // 23 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('*', '/user', 'handler0'); + $r->addRoute('GET', '/user', 'handler1'); + }; + + $cases[] = ['POST', '/user', $callback, 'handler0', []]; + + // 24 ---- + + $cases[] = ['HEAD', '/user', $callback, 'handler1', []]; + + // 25 ---- + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/{bar}', 'handler0'); + $r->addRoute('*', '/foo', 'handler1'); + }; + + $cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']]; + + // 26 ---- + + $callback = function(RouteCollector $r) { + $r->addRoute('GET', '/user', 'handler0'); + $r->addRoute('*', '/{foo:.*}', 'handler1'); + }; + + $cases[] = ['POST', '/bar', $callback, 'handler1', ['foo' => 'bar']]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } + + public function provideNotFoundDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 1 --------------------------------------------------------------------------------------> + + // reuse callback from #0 + $method = 'POST'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 2 --------------------------------------------------------------------------------------> + + // reuse callback from #1 + $method = 'PUT'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 3 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/handler0', 'handler0'); + $r->addRoute('GET', '/handler1', 'handler1'); + $r->addRoute('GET', '/handler2', 'handler2'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 4 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1'); + $r->addRoute('GET', '/user/{name}', 'handler2'); + }; + + $method = 'GET'; + $uri = '/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 5 --------------------------------------------------------------------------------------> + + // reuse callback from #4 + $method = 'GET'; + $uri = '/user/rdlowrey/12345/not-found'; + + $cases[] = [$method, $uri, $callback]; + + // 6 --------------------------------------------------------------------------------------> + + // reuse callback from #5 + $method = 'HEAD'; + + $cases[] = [$method, $uri, $callback]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } + + public function provideMethodNotAllowedDispatchCases() + { + $cases = []; + + // 0 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + }; + + $method = 'POST'; + $uri = '/resource/123/456'; + $allowedMethods = ['GET']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 1 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/resource/123/456', 'handler0'); + $r->addRoute('POST', '/resource/123/456', 'handler1'); + $r->addRoute('PUT', '/resource/123/456', 'handler2'); + $r->addRoute('*', '/', 'handler3'); + }; + + $method = 'DELETE'; + $uri = '/resource/123/456'; + $allowedMethods = ['GET', 'POST', 'PUT']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 2 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0'); + $r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1'); + $r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2'); + $r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3'); + }; + + $method = 'DELETE'; + $uri = '/user/rdlowrey/42'; + $allowedMethods = ['GET', 'POST', 'PUT', 'PATCH']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 3 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user/{name}', 'handler1'); + $r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2'); + $r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3'); + }; + + $method = 'GET'; + $uri = '/user/rdlowrey'; + $allowedMethods = ['POST', 'PUT', 'PATCH']; + + $cases[] = [$method, $uri, $callback, $allowedMethods]; + + // 4 --------------------------------------------------------------------------------------> + + $callback = function (RouteCollector $r) { + $r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost'); + $r->addRoute(['DELETE'], '/user', 'handlerDelete'); + $r->addRoute([], '/user', 'handlerNone'); + }; + + $cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']]; + + // 5 + + $callback = function (RouteCollector $r) { + $r->addRoute('POST', '/user.json', 'handler0'); + $r->addRoute('GET', '/{entity}.json', 'handler1'); + }; + + $cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']]; + + // x --------------------------------------------------------------------------------------> + + return $cases; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php b/Sources/API/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php new file mode 100644 index 0000000..f821ef5 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/Dispatcher/GroupCountBasedTest.php @@ -0,0 +1,16 @@ +markTestSkipped('PHP 5.6 required for MARK support'); + } + } + + protected function getDispatcherClass() + { + return 'FastRoute\\Dispatcher\\MarkBased'; + } + + protected function getDataGeneratorClass() + { + return 'FastRoute\\DataGenerator\\MarkBased'; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php new file mode 100644 index 0000000..b6fc53f --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/HackTypecheckerTest.php @@ -0,0 +1,44 @@ +markTestSkipped('HHVM only'); + } + if (!version_compare(HHVM_VERSION, '3.9.0', '>=')) { + $this->markTestSkipped('classname requires HHVM 3.9+'); + } + + // The typechecker recurses the whole tree, so it makes sure + // that everything in fixtures/ is valid when this runs. + + $output = []; + $exit_code = null; + exec( + 'hh_server --check ' . escapeshellarg(__DIR__ . '/../../') . ' 2>&1', + $output, + $exit_code + ); + if ($exit_code === self::SERVER_ALREADY_RUNNING_CODE) { + $this->assertTrue( + $recurse, + 'Typechecker still running after running hh_client stop' + ); + // Server already running - 3.10 => 3.11 regression: + // https://github.com/facebook/hhvm/issues/6646 + exec('hh_client stop 2>/dev/null'); + $this->testTypechecks(/* recurse = */ false); + return; + + } + $this->assertSame(0, $exit_code, implode("\n", $output)); + } +} diff --git a/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php new file mode 100644 index 0000000..05a9af2 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/all_options.php @@ -0,0 +1,29 @@ + {}, + shape( + 'routeParser' => \FastRoute\RouteParser\Std::class, + 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, + 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, + 'routeCollector' => \FastRoute\RouteCollector::class, + ), + ); +} + +function all_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher( + $collector ==> {}, + shape( + 'routeParser' => \FastRoute\RouteParser\Std::class, + 'dataGenerator' => \FastRoute\DataGenerator\GroupCountBased::class, + 'dispatcher' => \FastRoute\Dispatcher\GroupCountBased::class, + 'routeCollector' => \FastRoute\RouteCollector::class, + 'cacheFile' => '/dev/null', + 'cacheDisabled' => false, + ), + ); +} diff --git a/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php new file mode 100644 index 0000000..61eb541 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/empty_options.php @@ -0,0 +1,11 @@ + {}, shape()); +} + +function empty_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher($collector ==> {}, shape()); +} diff --git a/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php new file mode 100644 index 0000000..44b5422 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/HackTypechecker/fixtures/no_options.php @@ -0,0 +1,11 @@ + {}); +} + +function no_options_cached(): \FastRoute\Dispatcher { + return \FastRoute\cachedDispatcher($collector ==> {}); +} diff --git a/Sources/API/vendor/nikic/fast-route/test/RouteCollectorTest.php b/Sources/API/vendor/nikic/fast-route/test/RouteCollectorTest.php new file mode 100644 index 0000000..cc54407 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/RouteCollectorTest.php @@ -0,0 +1,108 @@ +delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $expected = [ + ['DELETE', '/delete', 'delete'], + ['GET', '/get', 'get'], + ['HEAD', '/head', 'head'], + ['PATCH', '/patch', 'patch'], + ['POST', '/post', 'post'], + ['PUT', '/put', 'put'], + ]; + + $this->assertSame($expected, $r->routes); + } + + public function testGroups() + { + $r = new DummyRouteCollector(); + + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $r->addGroup('/group-one', function (DummyRouteCollector $r) { + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + + $r->addGroup('/group-two', function (DummyRouteCollector $r) { + $r->delete('/delete', 'delete'); + $r->get('/get', 'get'); + $r->head('/head', 'head'); + $r->patch('/patch', 'patch'); + $r->post('/post', 'post'); + $r->put('/put', 'put'); + }); + }); + + $r->addGroup('/admin', function (DummyRouteCollector $r) { + $r->get('-some-info', 'admin-some-info'); + }); + $r->addGroup('/admin-', function (DummyRouteCollector $r) { + $r->get('more-info', 'admin-more-info'); + }); + + $expected = [ + ['DELETE', '/delete', 'delete'], + ['GET', '/get', 'get'], + ['HEAD', '/head', 'head'], + ['PATCH', '/patch', 'patch'], + ['POST', '/post', 'post'], + ['PUT', '/put', 'put'], + ['DELETE', '/group-one/delete', 'delete'], + ['GET', '/group-one/get', 'get'], + ['HEAD', '/group-one/head', 'head'], + ['PATCH', '/group-one/patch', 'patch'], + ['POST', '/group-one/post', 'post'], + ['PUT', '/group-one/put', 'put'], + ['DELETE', '/group-one/group-two/delete', 'delete'], + ['GET', '/group-one/group-two/get', 'get'], + ['HEAD', '/group-one/group-two/head', 'head'], + ['PATCH', '/group-one/group-two/patch', 'patch'], + ['POST', '/group-one/group-two/post', 'post'], + ['PUT', '/group-one/group-two/put', 'put'], + ['GET', '/admin-some-info', 'admin-some-info'], + ['GET', '/admin-more-info', 'admin-more-info'], + ]; + + $this->assertSame($expected, $r->routes); + } +} + +class DummyRouteCollector extends RouteCollector +{ + public $routes = []; + + public function __construct() + { + } + + public function addRoute($method, $route, $handler) + { + $route = $this->currentGroupPrefix . $route; + $this->routes[] = [$method, $route, $handler]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/test/RouteParser/StdTest.php b/Sources/API/vendor/nikic/fast-route/test/RouteParser/StdTest.php new file mode 100644 index 0000000..e13e4de --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/RouteParser/StdTest.php @@ -0,0 +1,154 @@ +parse($routeString); + $this->assertSame($expectedRouteDatas, $routeDatas); + } + + /** @dataProvider provideTestParseError */ + public function testParseError($routeString, $expectedExceptionMessage) + { + $parser = new Std(); + $this->setExpectedException('FastRoute\\BadRouteException', $expectedExceptionMessage); + $parser->parse($routeString); + } + + public function provideTestParse() + { + return [ + [ + '/test', + [ + ['/test'], + ] + ], + [ + '/test/{param}', + [ + ['/test/', ['param', '[^/]+']], + ] + ], + [ + '/te{ param }st', + [ + ['/te', ['param', '[^/]+'], 'st'] + ] + ], + [ + '/test/{param1}/test2/{param2}', + [ + ['/test/', ['param1', '[^/]+'], '/test2/', ['param2', '[^/]+']] + ] + ], + [ + '/test/{param:\d+}', + [ + ['/test/', ['param', '\d+']] + ] + ], + [ + '/test/{ param : \d{1,9} }', + [ + ['/test/', ['param', '\d{1,9}']] + ] + ], + [ + '/test[opt]', + [ + ['/test'], + ['/testopt'], + ] + ], + [ + '/test[/{param}]', + [ + ['/test'], + ['/test/', ['param', '[^/]+']], + ] + ], + [ + '/{param}[opt]', + [ + ['/', ['param', '[^/]+']], + ['/', ['param', '[^/]+'], 'opt'] + ] + ], + [ + '/test[/{name}[/{id:[0-9]+}]]', + [ + ['/test'], + ['/test/', ['name', '[^/]+']], + ['/test/', ['name', '[^/]+'], '/', ['id', '[0-9]+']], + ] + ], + [ + '', + [ + [''], + ] + ], + [ + '[test]', + [ + [''], + ['test'], + ] + ], + [ + '/{foo-bar}', + [ + ['/', ['foo-bar', '[^/]+']] + ] + ], + [ + '/{_foo:.*}', + [ + ['/', ['_foo', '.*']] + ] + ], + ]; + } + + public function provideTestParseError() + { + return [ + [ + '/test[opt', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/test[opt[opt2]', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/testopt]', + "Number of opening '[' and closing ']' does not match" + ], + [ + '/test[]', + 'Empty optional part' + ], + [ + '/test[[opt]]', + 'Empty optional part' + ], + [ + '[[test]]', + 'Empty optional part' + ], + [ + '/test[/opt]/required', + 'Optional segments can only occur at the end of a route' + ], + ]; + } +} diff --git a/Sources/API/vendor/nikic/fast-route/test/bootstrap.php b/Sources/API/vendor/nikic/fast-route/test/bootstrap.php new file mode 100644 index 0000000..3023f41 --- /dev/null +++ b/Sources/API/vendor/nikic/fast-route/test/bootstrap.php @@ -0,0 +1,11 @@ +=7.4.0" + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/container/src/ContainerExceptionInterface.php b/Sources/API/vendor/psr/container/src/ContainerExceptionInterface.php new file mode 100644 index 0000000..0f213f2 --- /dev/null +++ b/Sources/API/vendor/psr/container/src/ContainerExceptionInterface.php @@ -0,0 +1,12 @@ +=7.0.0", + "psr/http-message": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/http-factory/src/RequestFactoryInterface.php b/Sources/API/vendor/psr/http-factory/src/RequestFactoryInterface.php new file mode 100644 index 0000000..cb39a08 --- /dev/null +++ b/Sources/API/vendor/psr/http-factory/src/RequestFactoryInterface.php @@ -0,0 +1,18 @@ +=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/http-message/src/MessageInterface.php b/Sources/API/vendor/psr/http-message/src/MessageInterface.php new file mode 100644 index 0000000..dd46e5e --- /dev/null +++ b/Sources/API/vendor/psr/http-message/src/MessageInterface.php @@ -0,0 +1,187 @@ +getHeaders() as $name => $values) { + * echo $name . ": " . implode(", ", $values); + * } + * + * // Emit headers iteratively: + * foreach ($message->getHeaders() as $name => $values) { + * foreach ($values as $value) { + * header(sprintf('%s: %s', $name, $value), false); + * } + * } + * + * While header names are not case-sensitive, getHeaders() will preserve the + * exact case in which headers were originally specified. + * + * @return string[][] Returns an associative array of the message's headers. Each + * key MUST be a header name, and each value MUST be an array of strings + * for that header. + */ + public function getHeaders(); + + /** + * Checks if a header exists by the given case-insensitive name. + * + * @param string $name Case-insensitive header field name. + * @return bool Returns true if any header names match the given header + * name using a case-insensitive string comparison. Returns false if + * no matching header name is found in the message. + */ + public function hasHeader($name); + + /** + * Retrieves a message header value by the given case-insensitive name. + * + * This method returns an array of all the header values of the given + * case-insensitive header name. + * + * If the header does not appear in the message, this method MUST return an + * empty array. + * + * @param string $name Case-insensitive header field name. + * @return string[] An array of string values as provided for the given + * header. If the header does not appear in the message, this method MUST + * return an empty array. + */ + public function getHeader($name); + + /** + * Retrieves a comma-separated string of the values for a single header. + * + * This method returns all of the header values of the given + * case-insensitive header name as a string concatenated together using + * a comma. + * + * NOTE: Not all header values may be appropriately represented using + * comma concatenation. For such headers, use getHeader() instead + * and supply your own delimiter when concatenating. + * + * If the header does not appear in the message, this method MUST return + * an empty string. + * + * @param string $name Case-insensitive header field name. + * @return string A string of values as provided for the given header + * concatenated together using a comma. If the header does not appear in + * the message, this method MUST return an empty string. + */ + public function getHeaderLine($name); + + /** + * Return an instance with the provided value replacing the specified header. + * + * While header names are case-insensitive, the casing of the header will + * be preserved by this function, and returned from getHeaders(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new and/or updated header and value. + * + * @param string $name Case-insensitive header field name. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withHeader($name, $value); + + /** + * Return an instance with the specified header appended with the given value. + * + * Existing values for the specified header will be maintained. The new + * value(s) will be appended to the existing list. If the header did not + * exist previously, it will be added. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * new header and/or value. + * + * @param string $name Case-insensitive header field name to add. + * @param string|string[] $value Header value(s). + * @return static + * @throws \InvalidArgumentException for invalid header names or values. + */ + public function withAddedHeader($name, $value); + + /** + * Return an instance without the specified header. + * + * Header resolution MUST be done without case-sensitivity. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the named header. + * + * @param string $name Case-insensitive header field name to remove. + * @return static + */ + public function withoutHeader($name); + + /** + * Gets the body of the message. + * + * @return StreamInterface Returns the body as a stream. + */ + public function getBody(); + + /** + * Return an instance with the specified message body. + * + * The body MUST be a StreamInterface object. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return a new instance that has the + * new body stream. + * + * @param StreamInterface $body Body. + * @return static + * @throws \InvalidArgumentException When the body is not valid. + */ + public function withBody(StreamInterface $body); +} diff --git a/Sources/API/vendor/psr/http-message/src/RequestInterface.php b/Sources/API/vendor/psr/http-message/src/RequestInterface.php new file mode 100644 index 0000000..a96d4fd --- /dev/null +++ b/Sources/API/vendor/psr/http-message/src/RequestInterface.php @@ -0,0 +1,129 @@ +getQuery()` + * or from the `QUERY_STRING` server param. + * + * @return array + */ + public function getQueryParams(); + + /** + * Return an instance with the specified query string arguments. + * + * These values SHOULD remain immutable over the course of the incoming + * request. They MAY be injected during instantiation, such as from PHP's + * $_GET superglobal, or MAY be derived from some other value such as the + * URI. In cases where the arguments are parsed from the URI, the data + * MUST be compatible with what PHP's parse_str() would return for + * purposes of how duplicate query parameters are handled, and how nested + * sets are handled. + * + * Setting query string arguments MUST NOT change the URI stored by the + * request, nor the values in the server params. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated query string arguments. + * + * @param array $query Array of query string arguments, typically from + * $_GET. + * @return static + */ + public function withQueryParams(array $query); + + /** + * Retrieve normalized file upload data. + * + * This method returns upload metadata in a normalized tree, with each leaf + * an instance of Psr\Http\Message\UploadedFileInterface. + * + * These values MAY be prepared from $_FILES or the message body during + * instantiation, or MAY be injected via withUploadedFiles(). + * + * @return array An array tree of UploadedFileInterface instances; an empty + * array MUST be returned if no data is present. + */ + public function getUploadedFiles(); + + /** + * Create a new instance with the specified uploaded files. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param array $uploadedFiles An array tree of UploadedFileInterface instances. + * @return static + * @throws \InvalidArgumentException if an invalid structure is provided. + */ + public function withUploadedFiles(array $uploadedFiles); + + /** + * Retrieve any parameters provided in the request body. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, this method MUST + * return the contents of $_POST. + * + * Otherwise, this method may return any results of deserializing + * the request body content; as parsing returns structured content, the + * potential types MUST be arrays or objects only. A null value indicates + * the absence of body content. + * + * @return null|array|object The deserialized body parameters, if any. + * These will typically be an array or object. + */ + public function getParsedBody(); + + /** + * Return an instance with the specified body parameters. + * + * These MAY be injected during instantiation. + * + * If the request Content-Type is either application/x-www-form-urlencoded + * or multipart/form-data, and the request method is POST, use this method + * ONLY to inject the contents of $_POST. + * + * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of + * deserializing the request body content. Deserialization/parsing returns + * structured data, and, as such, this method ONLY accepts arrays or objects, + * or a null value if nothing was available to parse. + * + * As an example, if content negotiation determines that the request data + * is a JSON payload, this method could be used to create a request + * instance with the deserialized parameters. + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated body parameters. + * + * @param null|array|object $data The deserialized body data. This will + * typically be in an array or object. + * @return static + * @throws \InvalidArgumentException if an unsupported argument type is + * provided. + */ + public function withParsedBody($data); + + /** + * Retrieve attributes derived from the request. + * + * The request "attributes" may be used to allow injection of any + * parameters derived from the request: e.g., the results of path + * match operations; the results of decrypting cookies; the results of + * deserializing non-form-encoded message bodies; etc. Attributes + * will be application and request specific, and CAN be mutable. + * + * @return array Attributes derived from the request. + */ + public function getAttributes(); + + /** + * Retrieve a single derived request attribute. + * + * Retrieves a single derived request attribute as described in + * getAttributes(). If the attribute has not been previously set, returns + * the default value as provided. + * + * This method obviates the need for a hasAttribute() method, as it allows + * specifying a default value to return if the attribute is not found. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $default Default value to return if the attribute does not exist. + * @return mixed + */ + public function getAttribute($name, $default = null); + + /** + * Return an instance with the specified derived request attribute. + * + * This method allows setting a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that has the + * updated attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @param mixed $value The value of the attribute. + * @return static + */ + public function withAttribute($name, $value); + + /** + * Return an instance that removes the specified derived request attribute. + * + * This method allows removing a single derived request attribute as + * described in getAttributes(). + * + * This method MUST be implemented in such a way as to retain the + * immutability of the message, and MUST return an instance that removes + * the attribute. + * + * @see getAttributes() + * @param string $name The attribute name. + * @return static + */ + public function withoutAttribute($name); +} diff --git a/Sources/API/vendor/psr/http-message/src/StreamInterface.php b/Sources/API/vendor/psr/http-message/src/StreamInterface.php new file mode 100644 index 0000000..f68f391 --- /dev/null +++ b/Sources/API/vendor/psr/http-message/src/StreamInterface.php @@ -0,0 +1,158 @@ + + * [user-info@]host[:port] + * + * + * If the port component is not set or is the standard port for the current + * scheme, it SHOULD NOT be included. + * + * @see https://tools.ietf.org/html/rfc3986#section-3.2 + * @return string The URI authority, in "[user-info@]host[:port]" format. + */ + public function getAuthority(); + + /** + * Retrieve the user information component of the URI. + * + * If no user information is present, this method MUST return an empty + * string. + * + * If a user is present in the URI, this will return that value; + * additionally, if the password is also present, it will be appended to the + * user value, with a colon (":") separating the values. + * + * The trailing "@" character is not part of the user information and MUST + * NOT be added. + * + * @return string The URI user information, in "username[:password]" format. + */ + public function getUserInfo(); + + /** + * Retrieve the host component of the URI. + * + * If no host is present, this method MUST return an empty string. + * + * The value returned MUST be normalized to lowercase, per RFC 3986 + * Section 3.2.2. + * + * @see http://tools.ietf.org/html/rfc3986#section-3.2.2 + * @return string The URI host. + */ + public function getHost(); + + /** + * Retrieve the port component of the URI. + * + * If a port is present, and it is non-standard for the current scheme, + * this method MUST return it as an integer. If the port is the standard port + * used with the current scheme, this method SHOULD return null. + * + * If no port is present, and no scheme is present, this method MUST return + * a null value. + * + * If no port is present, but a scheme is present, this method MAY return + * the standard port for that scheme, but SHOULD return null. + * + * @return null|int The URI port. + */ + public function getPort(); + + /** + * Retrieve the path component of the URI. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * Normally, the empty path "" and absolute path "/" are considered equal as + * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically + * do this normalization because in contexts with a trimmed base path, e.g. + * the front controller, this difference becomes significant. It's the task + * of the user to handle both "" and "/". + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.3. + * + * As an example, if the value should include a slash ("/") not intended as + * delimiter between path segments, that value MUST be passed in encoded + * form (e.g., "%2F") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.3 + * @return string The URI path. + */ + public function getPath(); + + /** + * Retrieve the query string of the URI. + * + * If no query string is present, this method MUST return an empty string. + * + * The leading "?" character is not part of the query and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.4. + * + * As an example, if a value in a key/value pair of the query string should + * include an ampersand ("&") not intended as a delimiter between values, + * that value MUST be passed in encoded form (e.g., "%26") to the instance. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.4 + * @return string The URI query string. + */ + public function getQuery(); + + /** + * Retrieve the fragment component of the URI. + * + * If no fragment is present, this method MUST return an empty string. + * + * The leading "#" character is not part of the fragment and MUST NOT be + * added. + * + * The value returned MUST be percent-encoded, but MUST NOT double-encode + * any characters. To determine what characters to encode, please refer to + * RFC 3986, Sections 2 and 3.5. + * + * @see https://tools.ietf.org/html/rfc3986#section-2 + * @see https://tools.ietf.org/html/rfc3986#section-3.5 + * @return string The URI fragment. + */ + public function getFragment(); + + /** + * Return an instance with the specified scheme. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified scheme. + * + * Implementations MUST support the schemes "http" and "https" case + * insensitively, and MAY accommodate other schemes if required. + * + * An empty scheme is equivalent to removing the scheme. + * + * @param string $scheme The scheme to use with the new instance. + * @return static A new instance with the specified scheme. + * @throws \InvalidArgumentException for invalid or unsupported schemes. + */ + public function withScheme($scheme); + + /** + * Return an instance with the specified user information. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified user information. + * + * Password is optional, but the user information MUST include the + * user; an empty string for the user is equivalent to removing user + * information. + * + * @param string $user The user name to use for authority. + * @param null|string $password The password associated with $user. + * @return static A new instance with the specified user information. + */ + public function withUserInfo($user, $password = null); + + /** + * Return an instance with the specified host. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified host. + * + * An empty host value is equivalent to removing the host. + * + * @param string $host The hostname to use with the new instance. + * @return static A new instance with the specified host. + * @throws \InvalidArgumentException for invalid hostnames. + */ + public function withHost($host); + + /** + * Return an instance with the specified port. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified port. + * + * Implementations MUST raise an exception for ports outside the + * established TCP and UDP port ranges. + * + * A null value provided for the port is equivalent to removing the port + * information. + * + * @param null|int $port The port to use with the new instance; a null value + * removes the port information. + * @return static A new instance with the specified port. + * @throws \InvalidArgumentException for invalid ports. + */ + public function withPort($port); + + /** + * Return an instance with the specified path. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified path. + * + * The path can either be empty or absolute (starting with a slash) or + * rootless (not starting with a slash). Implementations MUST support all + * three syntaxes. + * + * If the path is intended to be domain-relative rather than path relative then + * it must begin with a slash ("/"). Paths not starting with a slash ("/") + * are assumed to be relative to some base path known to the application or + * consumer. + * + * Users can provide both encoded and decoded path characters. + * Implementations ensure the correct encoding as outlined in getPath(). + * + * @param string $path The path to use with the new instance. + * @return static A new instance with the specified path. + * @throws \InvalidArgumentException for invalid paths. + */ + public function withPath($path); + + /** + * Return an instance with the specified query string. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified query string. + * + * Users can provide both encoded and decoded query characters. + * Implementations ensure the correct encoding as outlined in getQuery(). + * + * An empty query string value is equivalent to removing the query string. + * + * @param string $query The query string to use with the new instance. + * @return static A new instance with the specified query string. + * @throws \InvalidArgumentException for invalid query strings. + */ + public function withQuery($query); + + /** + * Return an instance with the specified URI fragment. + * + * This method MUST retain the state of the current instance, and return + * an instance that contains the specified URI fragment. + * + * Users can provide both encoded and decoded fragment characters. + * Implementations ensure the correct encoding as outlined in getFragment(). + * + * An empty fragment value is equivalent to removing the fragment. + * + * @param string $fragment The fragment to use with the new instance. + * @return static A new instance with the specified fragment. + */ + public function withFragment($fragment); + + /** + * Return the string representation as a URI reference. + * + * Depending on which components of the URI are present, the resulting + * string is either a full URI or relative reference according to RFC 3986, + * Section 4.1. The method concatenates the various components of the URI, + * using the appropriate delimiters: + * + * - If a scheme is present, it MUST be suffixed by ":". + * - If an authority is present, it MUST be prefixed by "//". + * - The path can be concatenated without delimiters. But there are two + * cases where the path has to be adjusted to make the URI reference + * valid as PHP does not allow to throw an exception in __toString(): + * - If the path is rootless and an authority is present, the path MUST + * be prefixed by "/". + * - If the path is starting with more than one "/" and no authority is + * present, the starting slashes MUST be reduced to one. + * - If a query is present, it MUST be prefixed by "?". + * - If a fragment is present, it MUST be prefixed by "#". + * + * @see http://tools.ietf.org/html/rfc3986#section-4.1 + * @return string + */ + public function __toString(); +} diff --git a/Sources/API/vendor/psr/http-server-handler/LICENSE b/Sources/API/vendor/psr/http-server-handler/LICENSE new file mode 100644 index 0000000..b71ec5d --- /dev/null +++ b/Sources/API/vendor/psr/http-server-handler/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 PHP Framework Interoperability Group + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/psr/http-server-handler/README.md b/Sources/API/vendor/psr/http-server-handler/README.md new file mode 100644 index 0000000..1b7b486 --- /dev/null +++ b/Sources/API/vendor/psr/http-server-handler/README.md @@ -0,0 +1,6 @@ +HTTP Server Handler +=================== + +Provides the `RequestHandlerInterface` of [PSR-15][psr-15]. + +[psr-15]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-15-request-handlers.md diff --git a/Sources/API/vendor/psr/http-server-handler/composer.json b/Sources/API/vendor/psr/http-server-handler/composer.json new file mode 100644 index 0000000..9e8b51d --- /dev/null +++ b/Sources/API/vendor/psr/http-server-handler/composer.json @@ -0,0 +1,36 @@ +{ + "name": "psr/http-server-handler", + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "psr", + "psr-7", + "psr-15", + "http-interop", + "http", + "server", + "handler", + "request", + "response" + ], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/http-server-handler/src/RequestHandlerInterface.php b/Sources/API/vendor/psr/http-server-handler/src/RequestHandlerInterface.php new file mode 100644 index 0000000..83911e2 --- /dev/null +++ b/Sources/API/vendor/psr/http-server-handler/src/RequestHandlerInterface.php @@ -0,0 +1,22 @@ +=7.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0" + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/http-server-middleware/src/MiddlewareInterface.php b/Sources/API/vendor/psr/http-server-middleware/src/MiddlewareInterface.php new file mode 100644 index 0000000..a6c14f8 --- /dev/null +++ b/Sources/API/vendor/psr/http-server-middleware/src/MiddlewareInterface.php @@ -0,0 +1,25 @@ += 5.3. + +[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders) +[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master) +[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders) + + +This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). + +## Install + +For PHP version **`>= 5.6`**: + +``` +composer require ralouphie/getallheaders +``` + +For PHP version **`< 5.6`**: + +``` +composer require ralouphie/getallheaders "^2" +``` diff --git a/Sources/API/vendor/ralouphie/getallheaders/composer.json b/Sources/API/vendor/ralouphie/getallheaders/composer.json new file mode 100644 index 0000000..de8ce62 --- /dev/null +++ b/Sources/API/vendor/ralouphie/getallheaders/composer.json @@ -0,0 +1,26 @@ +{ + "name": "ralouphie/getallheaders", + "description": "A polyfill for getallheaders.", + "license": "MIT", + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^5 || ^6.5", + "php-coveralls/php-coveralls": "^2.1" + }, + "autoload": { + "files": ["src/getallheaders.php"] + }, + "autoload-dev": { + "psr-4": { + "getallheaders\\Tests\\": "tests/" + } + } +} diff --git a/Sources/API/vendor/ralouphie/getallheaders/src/getallheaders.php b/Sources/API/vendor/ralouphie/getallheaders/src/getallheaders.php new file mode 100644 index 0000000..c7285a5 --- /dev/null +++ b/Sources/API/vendor/ralouphie/getallheaders/src/getallheaders.php @@ -0,0 +1,46 @@ + 'Content-Type', + 'CONTENT_LENGTH' => 'Content-Length', + 'CONTENT_MD5' => 'Content-Md5', + ); + + foreach ($_SERVER as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $key = substr($key, 5); + if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) { + $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); + $headers[$key] = $value; + } + } elseif (isset($copy_server[$key])) { + $headers[$copy_server[$key]] = $value; + } + } + + if (!isset($headers['Authorization'])) { + if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($_SERVER['PHP_AUTH_USER'])) { + $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : ''; + $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass); + } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + +} diff --git a/Sources/API/vendor/slim/psr7/LICENSE.md b/Sources/API/vendor/slim/psr7/LICENSE.md new file mode 100644 index 0000000..2bd2d5a --- /dev/null +++ b/Sources/API/vendor/slim/psr7/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Slim Framework + +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 NONINFRINGEMENT. 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. + diff --git a/Sources/API/vendor/slim/psr7/MAINTAINERS.md b/Sources/API/vendor/slim/psr7/MAINTAINERS.md new file mode 100644 index 0000000..5c2496e --- /dev/null +++ b/Sources/API/vendor/slim/psr7/MAINTAINERS.md @@ -0,0 +1,17 @@ +# Maintainers + +There aren't many rules for maintainers of Slim-Psr7 to remember; what we have is listed here. + +## We don't merge our own PRs + +Our code is better if more than one set of eyes looks at it. Therefore we do not merge our own pull requests unless there is an exceptional circumstance. This helps to spot errors in the patch and also enables us to share information about the project around the maintainer team. + +## PRs tagged `[WIP]` are not ready to be merged + +Sometimes it's helpful to collaborate on a patch before it's ready to be merged. We use the `[WIP]` tag (for _Work in Progress_) in the title to mark these PRs. + +If a PR has `[WIP]` in its title, then it is not to be merged. The person who raised the PR will remove the `[WIP]` tag when they are ready for a full review and merge. + +## Assign a merged PR to a milestone + +By ensuring that all merged PRs are assigned to a milestone, we can easily find which PRs were in which release. diff --git a/Sources/API/vendor/slim/psr7/composer.json b/Sources/API/vendor/slim/psr7/composer.json new file mode 100644 index 0000000..318f710 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/composer.json @@ -0,0 +1,76 @@ +{ + "name": "slim/psr7", + "type": "library", + "description": "Strict PSR-7 implementation", + "keywords": ["psr7","psr-7","http"], + "homepage": "https://www.slimframework.com", + "license": "MIT", + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "http://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + } + ], + "require": { + "php": "^7.4 || ^8.0", + "fig/http-message-util": "^1.1.5", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "ext-json": "*", + "adriansuter/php-autoload-override": "^1.3", + "http-interop/http-factory-tests": "^0.9.0", + "php-http/psr7-integration-tests": "dev-master", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-factory-implementation": "1.0" + }, + "autoload": { + "psr-4": { + "Slim\\Psr7\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Slim\\Tests\\Psr7\\": "tests" + } + }, + "scripts": { + "test": [ + "@phpunit", + "@phpcs", + "@phpstan" + ], + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpstan": "phpstan --memory-limit=-1" + }, + "config": { + "sort-packages": true + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Cookies.php b/Sources/API/vendor/slim/psr7/src/Cookies.php new file mode 100644 index 0000000..044d438 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Cookies.php @@ -0,0 +1,218 @@ + '', + 'domain' => null, + 'hostonly' => null, + 'path' => null, + 'expires' => null, + 'secure' => false, + 'httponly' => false, + 'samesite' => null + ]; + + /** + * @param array $cookies + */ + public function __construct(array $cookies = []) + { + $this->requestCookies = $cookies; + } + + /** + * Set default cookie properties + * + * @param array $settings + * + * @return static + */ + public function setDefaults(array $settings): self + { + $this->defaults = array_replace($this->defaults, $settings); + + return $this; + } + + /** + * Get cookie + * + * @param string $name + * @param string|array|null $default + * @return mixed|null + */ + public function get(string $name, $default = null) + { + return array_key_exists($name, $this->requestCookies) ? $this->requestCookies[$name] : $default; + } + + /** + * Set cookie + * + * @param string $name + * @param string|array $value + * @return static + */ + public function set(string $name, $value): self + { + if (!is_array($value)) { + $value = ['value' => $value]; + } + + $this->responseCookies[$name] = array_replace($this->defaults, $value); + + return $this; + } + + /** + * Convert all response cookies into an associate array of header values + * + * @return array + */ + public function toHeaders(): array + { + $headers = []; + + foreach ($this->responseCookies as $name => $properties) { + $headers[] = $this->toHeader($name, $properties); + } + + return $headers; + } + + /** + * Convert to `Set-Cookie` header + * + * @param string $name Cookie name + * @param array $properties Cookie properties + * + * @return string + */ + protected function toHeader(string $name, array $properties): string + { + $result = urlencode($name) . '=' . urlencode($properties['value']); + + if (isset($properties['domain'])) { + $result .= '; domain=' . $properties['domain']; + } + + if (isset($properties['path'])) { + $result .= '; path=' . $properties['path']; + } + + if (isset($properties['expires'])) { + if (is_string($properties['expires'])) { + $timestamp = strtotime($properties['expires']); + } else { + $timestamp = (int) $properties['expires']; + } + if ($timestamp && $timestamp !== 0) { + $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); + } + } + + if (isset($properties['secure']) && $properties['secure']) { + $result .= '; secure'; + } + + if (isset($properties['hostonly']) && $properties['hostonly']) { + $result .= '; HostOnly'; + } + + if (isset($properties['httponly']) && $properties['httponly']) { + $result .= '; HttpOnly'; + } + + if ( + isset($properties['samesite']) + && in_array(strtolower($properties['samesite']), ['lax', 'strict', 'none'], true) + ) { + // While strtolower is needed for correct comparison, the RFC doesn't care about case + $result .= '; SameSite=' . $properties['samesite']; + } + + return $result; + } + + /** + * Parse cookie values from header value + * + * Returns an associative array of cookie names and values + * + * @param string|array $header + * + * @return array + */ + public static function parseHeader($header): array + { + if (is_array($header)) { + $header = $header[0] ?? ''; + } + + if (!is_string($header)) { + throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); + } + + $header = rtrim($header, "\r\n"); + $pieces = preg_split('@[;]\s*@', $header); + $cookies = []; + + if (is_array($pieces)) { + foreach ($pieces as $cookie) { + $cookie = explode('=', $cookie, 2); + + if (count($cookie) === 2) { + $key = urldecode($cookie[0]); + $value = urldecode($cookie[1]); + + if (!isset($cookies[$key])) { + $cookies[$key] = $value; + } + } + } + } + + return $cookies; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Environment.php b/Sources/API/vendor/slim/psr7/src/Environment.php new file mode 100644 index 0000000..55f187b --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Environment.php @@ -0,0 +1,55 @@ + 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', + 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8', + 'HTTP_USER_AGENT' => 'Slim Framework', + 'QUERY_STRING' => '', + 'REMOTE_ADDR' => '127.0.0.1', + 'REQUEST_METHOD' => 'GET', + 'REQUEST_SCHEME' => $scheme, + 'REQUEST_TIME' => time(), + 'REQUEST_TIME_FLOAT' => microtime(true), + 'REQUEST_URI' => '', + 'SCRIPT_NAME' => '', + 'SERVER_NAME' => 'localhost', + 'SERVER_PORT' => $port, + 'SERVER_PROTOCOL' => 'HTTP/1.1', + ], $data); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/RequestFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/RequestFactory.php new file mode 100644 index 0000000..e825ee3 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/RequestFactory.php @@ -0,0 +1,59 @@ +streamFactory = $streamFactory ?? new StreamFactory(); + $this->uriFactory = $uriFactory ?? new UriFactory(); + } + + /** + * {@inheritdoc} + */ + public function createRequest(string $method, $uri): RequestInterface + { + if (is_string($uri)) { + $uri = $this->uriFactory->createUri($uri); + } + + if (!$uri instanceof UriInterface) { + throw new InvalidArgumentException( + 'Parameter 2 of RequestFactory::createRequest() must be a string or a compatible UriInterface.' + ); + } + + $body = $this->streamFactory->createStream(); + + return new Request($method, $uri, new Headers(), [], [], $body); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/ResponseFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/ResponseFactory.php new file mode 100644 index 0000000..c1a23a7 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/ResponseFactory.php @@ -0,0 +1,35 @@ +withStatus($code, $reasonPhrase); + } + + return $res; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/ServerRequestFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/ServerRequestFactory.php new file mode 100644 index 0000000..5bc2447 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/ServerRequestFactory.php @@ -0,0 +1,110 @@ +streamFactory = $streamFactory ?? new StreamFactory(); + $this->uriFactory = $uriFactory ?? new UriFactory(); + } + + /** + * {@inheritdoc} + */ + public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface + { + if (is_string($uri)) { + $uri = $this->uriFactory->createUri($uri); + } + + if (!$uri instanceof UriInterface) { + throw new InvalidArgumentException('URI must either be string or instance of ' . UriInterface::class); + } + + $body = $this->streamFactory->createStream(); + $headers = new Headers(); + $cookies = []; + + if (!empty($serverParams)) { + $headers = Headers::createFromGlobals(); + $cookies = Cookies::parseHeader($headers->getHeader('Cookie', [])); + } + + return new Request($method, $uri, $headers, $cookies, $serverParams, $body); + } + + /** + * Create new ServerRequest from environment. + * + * @internal This method is not part of PSR-17 + * + * @return Request + */ + public static function createFromGlobals(): Request + { + $method = $_SERVER['REQUEST_METHOD'] ?? 'GET'; + $uri = (new UriFactory())->createFromGlobals($_SERVER); + + $headers = Headers::createFromGlobals(); + $cookies = Cookies::parseHeader($headers->getHeader('Cookie', [])); + + // Cache the php://input stream as it cannot be re-read + $cacheResource = fopen('php://temp', 'wb+'); + $cache = $cacheResource ? new Stream($cacheResource) : null; + + $body = (new StreamFactory())->createStreamFromFile('php://input', 'r', $cache); + $uploadedFiles = UploadedFile::createFromGlobals($_SERVER); + + $request = new Request($method, $uri, $headers, $cookies, $_SERVER, $body, $uploadedFiles); + $contentTypes = $request->getHeader('Content-Type'); + + $parsedContentType = ''; + foreach ($contentTypes as $contentType) { + $fragments = explode(';', $contentType); + $parsedContentType = current($fragments); + } + + $contentTypesWithParsedBodies = ['application/x-www-form-urlencoded', 'multipart/form-data']; + if ($method === 'POST' && in_array($parsedContentType, $contentTypesWithParsedBodies)) { + return $request->withParsedBody($_POST); + } + + return $request; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/StreamFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/StreamFactory.php new file mode 100644 index 0000000..31d99b5 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/StreamFactory.php @@ -0,0 +1,95 @@ +createStreamFromResource($resource); + } + + /** + * {@inheritdoc} + */ + public function createStreamFromFile( + string $filename, + string $mode = 'r', + StreamInterface $cache = null + ): StreamInterface { + set_error_handler( + static function (int $errno, string $errstr) use ($filename, $mode): void { + throw new RuntimeException( + "Unable to open $filename using mode $mode: $errstr", + $errno + ); + } + ); + + try { + $resource = fopen($filename, $mode); + } catch (ValueError $exception) { + throw new RuntimeException("Unable to open $filename using mode $mode: " . $exception->getMessage()); + } finally { + restore_error_handler(); + } + + if (!is_resource($resource)) { + throw new RuntimeException( + "StreamFactory::createStreamFromFile() could not create resource from file `$filename`" + ); + } + + return new Stream($resource, $cache); + } + + /** + * {@inheritdoc} + */ + public function createStreamFromResource($resource, StreamInterface $cache = null): StreamInterface + { + if (!is_resource($resource)) { + throw new InvalidArgumentException( + 'Parameter 1 of StreamFactory::createStreamFromResource() must be a resource.' + ); + } + + return new Stream($resource, $cache); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/UploadedFileFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/UploadedFileFactory.php new file mode 100644 index 0000000..5699e96 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/UploadedFileFactory.php @@ -0,0 +1,47 @@ +getMetadata('uri'); + + if (!is_string($file) || !$stream->isReadable()) { + throw new InvalidArgumentException('File is not readable.'); + } + + if ($size === null) { + $size = $stream->getSize(); + } + + return new UploadedFile($stream, $clientFilename, $clientMediaType, $size, $error); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Factory/UriFactory.php b/Sources/API/vendor/slim/psr7/src/Factory/UriFactory.php new file mode 100644 index 0000000..74ab377 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Factory/UriFactory.php @@ -0,0 +1,113 @@ + 1) { + $queryString = parse_url('https://www.example.com' . $globals['REQUEST_URI'], PHP_URL_QUERY) ?? ''; + } + } + + // Build Uri and return + return new Uri($scheme, $host, $port, $requestUri, $queryString, '', $username, $password); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Header.php b/Sources/API/vendor/slim/psr7/src/Header.php new file mode 100644 index 0000000..ecdad32 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Header.php @@ -0,0 +1,96 @@ +originalName = $originalName; + $this->normalizedName = $normalizedName; + $this->values = $values; + } + + /** + * @return string + */ + public function getOriginalName(): string + { + return $this->originalName; + } + + /** + * @return string + */ + public function getNormalizedName(): string + { + return $this->normalizedName; + } + + /** + * @param string $value + * + * @return self + */ + public function addValue(string $value): self + { + $this->values[] = $value; + + return $this; + } + + /** + * @param array|string $values + * + * @return self + */ + public function addValues($values): self + { + if (is_string($values)) { + return $this->addValue($values); + } + + if (!is_array($values)) { + throw new InvalidArgumentException('Parameter 1 of Header::addValues() should be a string or an array.'); + } + + $this->values = array_merge($this->values, $values); + + return $this; + } + + /** + * @return array + */ + public function getValues(): array + { + return $this->values; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Headers.php b/Sources/API/vendor/slim/psr7/src/Headers.php new file mode 100644 index 0000000..038e792 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Headers.php @@ -0,0 +1,318 @@ +globals = $globals ?? $_SERVER; + $this->setHeaders($headers); + } + + /** + * {@inheritdoc} + */ + public function addHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + if (isset($this->headers[$normalizedName])) { + $header = $this->headers[$normalizedName]; + $header->addValues($values); + } else { + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function removeHeader(string $name): HeadersInterface + { + $name = $this->normalizeHeaderName($name); + unset($this->headers[$name]); + return $this; + } + + /** + * {@inheritdoc} + */ + public function getHeader(string $name, $default = []): array + { + $name = $this->normalizeHeaderName($name); + + if (isset($this->headers[$name])) { + $header = $this->headers[$name]; + return $header->getValues(); + } + + if (empty($default)) { + return $default; + } + + $this->validateHeader($name, $default); + return $this->trimHeaderValue($default); + } + + /** + * {@inheritdoc} + */ + public function setHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + // Ensure we preserve original case if the header already exists in the stack + if (isset($this->headers[$normalizedName])) { + $existingHeader = $this->headers[$normalizedName]; + $originalName = $existingHeader->getOriginalName(); + } + + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setHeaders(array $headers): HeadersInterface + { + $this->headers = []; + + foreach ($this->parseAuthorizationHeader($headers) as $name => $value) { + $this->addHeader($name, $value); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function hasHeader(string $name): bool + { + $name = $this->normalizeHeaderName($name); + return isset($this->headers[$name]); + } + + /** + * {@inheritdoc} + */ + public function getHeaders(bool $originalCase = false): array + { + $headers = []; + + foreach ($this->headers as $header) { + $name = $originalCase ? $header->getOriginalName() : $header->getNormalizedName(); + $headers[$name] = $header->getValues(); + } + + return $headers; + } + + /** + * @param string $name + * @param bool $preserveCase + * @return string + */ + protected function normalizeHeaderName(string $name, bool $preserveCase = false): string + { + $name = strtr($name, '_', '-'); + + if (!$preserveCase) { + $name = strtolower($name); + } + + if (strpos(strtolower($name), 'http-') === 0) { + $name = substr($name, 5); + } + + return $name; + } + + /** + * Parse incoming headers and determine Authorization header from original headers + * + * @param array $headers + * @return array + */ + protected function parseAuthorizationHeader(array $headers): array + { + $hasAuthorizationHeader = false; + foreach ($headers as $name => $value) { + if (strtolower((string) $name) === 'authorization') { + $hasAuthorizationHeader = true; + break; + } + } + + if (!$hasAuthorizationHeader) { + if (isset($this->globals['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $this->globals['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($this->globals['PHP_AUTH_USER'])) { + $pw = $this->globals['PHP_AUTH_PW'] ?? ''; + $headers['Authorization'] = 'Basic ' . base64_encode($this->globals['PHP_AUTH_USER'] . ':' . $pw); + } elseif (isset($this->globals['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $this->globals['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + + /** + * @param array|string $value + * + * @return array + */ + protected function trimHeaderValue($value): array + { + $items = is_array($value) ? $value : [$value]; + $result = []; + foreach ($items as $item) { + $result[] = trim((string) $item, " \t"); + } + return $result; + } + + /** + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException + * + * @return array + */ + protected function prepareHeader($name, $value): array + { + $this->validateHeader($name, $value); + $values = $this->trimHeaderValue($value); + $originalName = $this->normalizeHeaderName($name, true); + $normalizedName = $this->normalizeHeaderName($name); + return [$values, $originalName, $normalizedName]; + } + + /** + * Make sure the header complies with RFC 7230. + * + * Header names must be a non-empty string consisting of token characters. + * + * Header values must be strings consisting of visible characters with all optional + * leading and trailing whitespace stripped. This method will always strip such + * optional whitespace. Note that the method does not allow folding whitespace within + * the values as this was deprecated for almost all instances by the RFC. + * + * header-field = field-name ":" OWS field-value OWS + * field-name = 1*( "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" + * / "_" / "`" / "|" / "~" / %x30-39 / ( %x41-5A / %x61-7A ) ) + * OWS = *( SP / HTAB ) + * field-value = *( ( %x21-7E / %x80-FF ) [ 1*( SP / HTAB ) ( %x21-7E / %x80-FF ) ] ) + * + * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 + * + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException; + */ + protected function validateHeader($name, $value): void + { + $this->validateHeaderName($name); + $this->validateHeaderValue($value); + } + + /** + * @param mixed $name + * + * @throws InvalidArgumentException + */ + protected function validateHeaderName($name): void + { + if (!is_string($name) || preg_match("@^[!#$%&'*+.^_`|~0-9A-Za-z-]+$@", $name) !== 1) { + throw new InvalidArgumentException('Header name must be an RFC 7230 compatible string.'); + } + } + + /** + * @param mixed $value + * + * @throws InvalidArgumentException + */ + protected function validateHeaderValue($value): void + { + $items = is_array($value) ? $value : [$value]; + + if (empty($items)) { + throw new InvalidArgumentException( + 'Header values must be a string or an array of strings, empty array given.' + ); + } + + $pattern = "@^[ \t\x21-\x7E\x80-\xFF]*$@"; + foreach ($items as $item) { + $hasInvalidType = !is_numeric($item) && !is_string($item); + $rejected = $hasInvalidType || preg_match($pattern, (string) $item) !== 1; + if ($rejected) { + throw new InvalidArgumentException( + 'Header values must be RFC 7230 compatible strings.' + ); + } + } + } + + /** + * @return static + */ + public static function createFromGlobals() + { + $headers = null; + + if (function_exists('getallheaders')) { + $headers = getallheaders(); + } + + if (!is_array($headers)) { + $headers = []; + } + + return new static($headers); + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Interfaces/HeadersInterface.php b/Sources/API/vendor/slim/psr7/src/Interfaces/HeadersInterface.php new file mode 100644 index 0000000..3f486f1 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Interfaces/HeadersInterface.php @@ -0,0 +1,90 @@ + true, + '1.1' => true, + '2.0' => true, + '2' => true, + ]; + + /** + * @var HeadersInterface + */ + protected $headers; + + /** + * @var StreamInterface + */ + protected $body; + + /** + * Disable magic setter to ensure immutability + * + * @param string $name The property name + * @param mixed $value The property value + * + * @return void + */ + public function __set($name, $value): void + { + // Do nothing + } + + /** + * {@inheritdoc} + */ + public function getProtocolVersion(): string + { + return $this->protocolVersion; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withProtocolVersion($version) + { + if (!isset(self::$validProtocolVersions[$version])) { + throw new InvalidArgumentException( + 'Invalid HTTP version. Must be one of: ' + . implode(', ', array_keys(self::$validProtocolVersions)) + ); + } + + $clone = clone $this; + $clone->protocolVersion = $version; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getHeaders(): array + { + return $this->headers->getHeaders(true); + } + + /** + * {@inheritdoc} + */ + public function hasHeader($name): bool + { + return $this->headers->hasHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeader($name): array + { + return $this->headers->getHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeaderLine($name): string + { + $values = $this->headers->getHeader($name); + return implode(',', $values); + } + + /** + * @return static + * {@inheritdoc} + */ + public function withHeader($name, $value) + { + $clone = clone $this; + $clone->headers->setHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withAddedHeader($name, $value) + { + $clone = clone $this; + $clone->headers->addHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withoutHeader($name) + { + $clone = clone $this; + $clone->headers->removeHeader($name); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header_remove($name); + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getBody(): StreamInterface + { + return $this->body; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withBody(StreamInterface $body) + { + $clone = clone $this; + $clone->body = $body; + + return $clone; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/NonBufferedBody.php b/Sources/API/vendor/slim/psr7/src/NonBufferedBody.php new file mode 100644 index 0000000..ad22c2d --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/NonBufferedBody.php @@ -0,0 +1,153 @@ +method = $this->filterMethod($method); + $this->uri = $uri; + $this->headers = $headers; + $this->cookies = $cookies; + $this->serverParams = $serverParams; + $this->attributes = []; + $this->body = $body; + $this->uploadedFiles = $uploadedFiles; + + if (isset($serverParams['SERVER_PROTOCOL'])) { + $this->protocolVersion = str_replace('HTTP/', '', $serverParams['SERVER_PROTOCOL']); + } + + if (!$this->headers->hasHeader('Host') || $this->uri->getHost() !== '') { + $this->headers->setHeader('Host', $this->uri->getHost()); + } + } + + /** + * This method is applied to the cloned object after PHP performs an initial shallow-copy. + * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers. + */ + public function __clone() + { + $this->headers = clone $this->headers; + $this->body = clone $this->body; + } + + /** + * {@inheritdoc} + */ + public function getMethod(): string + { + return $this->method; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withMethod($method) + { + $method = $this->filterMethod($method); + $clone = clone $this; + $clone->method = $method; + + return $clone; + } + + /** + * Validate the HTTP method + * + * @param string $method + * + * @return string + * + * @throws InvalidArgumentException on invalid HTTP method. + */ + protected function filterMethod($method): string + { + /** @var mixed $method */ + if (!is_string($method)) { + throw new InvalidArgumentException(sprintf( + 'Unsupported HTTP method; must be a string, received %s', + (is_object($method) ? get_class($method) : gettype($method)) + )); + } + + if (preg_match("/^[!#$%&'*+.^_`|~0-9a-z-]+$/i", $method) !== 1) { + throw new InvalidArgumentException(sprintf( + 'Unsupported HTTP method "%s" provided', + $method + )); + } + + return $method; + } + + /** + * {@inheritdoc} + */ + public function getRequestTarget(): string + { + if ($this->requestTarget) { + return $this->requestTarget; + } + + if ($this->uri === null) { + return '/'; + } + + $path = $this->uri->getPath(); + $path = '/' . ltrim($path, '/'); + + $query = $this->uri->getQuery(); + if ($query) { + $path .= '?' . $query; + } + + return $path; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withRequestTarget($requestTarget) + { + if (!is_string($requestTarget) || preg_match('#\s#', $requestTarget)) { + throw new InvalidArgumentException( + 'Invalid request target provided; must be a string and cannot contain whitespace' + ); + } + + $clone = clone $this; + $clone->requestTarget = $requestTarget; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getUri(): UriInterface + { + return $this->uri; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withUri(UriInterface $uri, $preserveHost = false) + { + $clone = clone $this; + $clone->uri = $uri; + + if (!$preserveHost && $uri->getHost() !== '') { + $clone->headers->setHeader('Host', $uri->getHost()); + return $clone; + } + + if (($uri->getHost() !== '' && !$this->hasHeader('Host') || $this->getHeaderLine('Host') === '')) { + $clone->headers->setHeader('Host', $uri->getHost()); + return $clone; + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getCookieParams(): array + { + return $this->cookies; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withCookieParams(array $cookies) + { + $clone = clone $this; + $clone->cookies = $cookies; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getQueryParams(): array + { + if (is_array($this->queryParams)) { + return $this->queryParams; + } + + if ($this->uri === null) { + return []; + } + + parse_str($this->uri->getQuery(), $this->queryParams); // <-- URL decodes data + assert(is_array($this->queryParams)); + + return $this->queryParams; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withQueryParams(array $query) + { + $clone = clone $this; + $clone->queryParams = $query; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getUploadedFiles(): array + { + return $this->uploadedFiles; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withUploadedFiles(array $uploadedFiles) + { + $clone = clone $this; + $clone->uploadedFiles = $uploadedFiles; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getServerParams(): array + { + return $this->serverParams; + } + + /** + * {@inheritdoc} + */ + public function getAttributes(): array + { + return $this->attributes; + } + + /** + * {@inheritdoc} + * @return mixed + */ + public function getAttribute($name, $default = null) + { + return $this->attributes[$name] ?? $default; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withAttribute($name, $value) + { + $clone = clone $this; + $clone->attributes[$name] = $value; + + return $clone; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withoutAttribute($name) + { + $clone = clone $this; + + unset($clone->attributes[$name]); + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getParsedBody() + { + return $this->parsedBody; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withParsedBody($data) + { + /** @var mixed $data */ + if (!is_null($data) && !is_object($data) && !is_array($data)) { + throw new InvalidArgumentException('Parsed body value must be an array, an object, or null'); + } + + $clone = clone $this; + $clone->parsedBody = $data; + + return $clone; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Response.php b/Sources/API/vendor/slim/psr7/src/Response.php new file mode 100644 index 0000000..c6d4c6e --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Response.php @@ -0,0 +1,216 @@ + 'Continue', + StatusCodeInterface::STATUS_SWITCHING_PROTOCOLS => 'Switching Protocols', + StatusCodeInterface::STATUS_PROCESSING => 'Processing', + + // Successful 2xx + StatusCodeInterface::STATUS_OK => 'OK', + StatusCodeInterface::STATUS_CREATED => 'Created', + StatusCodeInterface::STATUS_ACCEPTED => 'Accepted', + StatusCodeInterface::STATUS_NON_AUTHORITATIVE_INFORMATION => 'Non-Authoritative Information', + StatusCodeInterface::STATUS_NO_CONTENT => 'No Content', + StatusCodeInterface::STATUS_RESET_CONTENT => 'Reset Content', + StatusCodeInterface::STATUS_PARTIAL_CONTENT => 'Partial Content', + StatusCodeInterface::STATUS_MULTI_STATUS => 'Multi-Status', + StatusCodeInterface::STATUS_ALREADY_REPORTED => 'Already Reported', + StatusCodeInterface::STATUS_IM_USED => 'IM Used', + + // Redirection 3xx + StatusCodeInterface::STATUS_MULTIPLE_CHOICES => 'Multiple Choices', + StatusCodeInterface::STATUS_MOVED_PERMANENTLY => 'Moved Permanently', + StatusCodeInterface::STATUS_FOUND => 'Found', + StatusCodeInterface::STATUS_SEE_OTHER => 'See Other', + StatusCodeInterface::STATUS_NOT_MODIFIED => 'Not Modified', + StatusCodeInterface::STATUS_USE_PROXY => 'Use Proxy', + StatusCodeInterface::STATUS_RESERVED => '(Unused)', + StatusCodeInterface::STATUS_TEMPORARY_REDIRECT => 'Temporary Redirect', + StatusCodeInterface::STATUS_PERMANENT_REDIRECT => 'Permanent Redirect', + + // Client Error 4xx + StatusCodeInterface::STATUS_BAD_REQUEST => 'Bad Request', + StatusCodeInterface::STATUS_UNAUTHORIZED => 'Unauthorized', + StatusCodeInterface::STATUS_PAYMENT_REQUIRED => 'Payment Required', + StatusCodeInterface::STATUS_FORBIDDEN => 'Forbidden', + StatusCodeInterface::STATUS_NOT_FOUND => 'Not Found', + StatusCodeInterface::STATUS_METHOD_NOT_ALLOWED => 'Method Not Allowed', + StatusCodeInterface::STATUS_NOT_ACCEPTABLE => 'Not Acceptable', + StatusCodeInterface::STATUS_PROXY_AUTHENTICATION_REQUIRED => 'Proxy Authentication Required', + StatusCodeInterface::STATUS_REQUEST_TIMEOUT => 'Request Timeout', + StatusCodeInterface::STATUS_CONFLICT => 'Conflict', + StatusCodeInterface::STATUS_GONE => 'Gone', + StatusCodeInterface::STATUS_LENGTH_REQUIRED => 'Length Required', + StatusCodeInterface::STATUS_PRECONDITION_FAILED => 'Precondition Failed', + StatusCodeInterface::STATUS_PAYLOAD_TOO_LARGE => 'Request Entity Too Large', + StatusCodeInterface::STATUS_URI_TOO_LONG => 'Request-URI Too Long', + StatusCodeInterface::STATUS_UNSUPPORTED_MEDIA_TYPE => 'Unsupported Media Type', + StatusCodeInterface::STATUS_RANGE_NOT_SATISFIABLE => 'Requested Range Not Satisfiable', + StatusCodeInterface::STATUS_EXPECTATION_FAILED => 'Expectation Failed', + StatusCodeInterface::STATUS_IM_A_TEAPOT => 'I\'m a teapot', + StatusCodeInterface::STATUS_MISDIRECTED_REQUEST => 'Misdirected Request', + StatusCodeInterface::STATUS_UNPROCESSABLE_ENTITY => 'Unprocessable Entity', + StatusCodeInterface::STATUS_LOCKED => 'Locked', + StatusCodeInterface::STATUS_FAILED_DEPENDENCY => 'Failed Dependency', + StatusCodeInterface::STATUS_UPGRADE_REQUIRED => 'Upgrade Required', + StatusCodeInterface::STATUS_PRECONDITION_REQUIRED => 'Precondition Required', + StatusCodeInterface::STATUS_TOO_MANY_REQUESTS => 'Too Many Requests', + StatusCodeInterface::STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE => 'Request Header Fields Too Large', + 444 => 'Connection Closed Without Response', + StatusCodeInterface::STATUS_UNAVAILABLE_FOR_LEGAL_REASONS => 'Unavailable For Legal Reasons', + 499 => 'Client Closed Request', + + // Server Error 5xx + StatusCodeInterface::STATUS_INTERNAL_SERVER_ERROR => 'Internal Server Error', + StatusCodeInterface::STATUS_NOT_IMPLEMENTED => 'Not Implemented', + StatusCodeInterface::STATUS_BAD_GATEWAY => 'Bad Gateway', + StatusCodeInterface::STATUS_SERVICE_UNAVAILABLE => 'Service Unavailable', + StatusCodeInterface::STATUS_GATEWAY_TIMEOUT => 'Gateway Timeout', + StatusCodeInterface::STATUS_VERSION_NOT_SUPPORTED => 'HTTP Version Not Supported', + StatusCodeInterface::STATUS_VARIANT_ALSO_NEGOTIATES => 'Variant Also Negotiates', + StatusCodeInterface::STATUS_INSUFFICIENT_STORAGE => 'Insufficient Storage', + StatusCodeInterface::STATUS_LOOP_DETECTED => 'Loop Detected', + StatusCodeInterface::STATUS_NOT_EXTENDED => 'Not Extended', + StatusCodeInterface::STATUS_NETWORK_AUTHENTICATION_REQUIRED => 'Network Authentication Required', + 599 => 'Network Connect Timeout Error', + ]; + + /** + * @param int $status The response status code. + * @param HeadersInterface|null $headers The response headers. + * @param StreamInterface|null $body The response body. + */ + public function __construct( + int $status = StatusCodeInterface::STATUS_OK, + ?HeadersInterface $headers = null, + ?StreamInterface $body = null + ) { + $this->status = $this->filterStatus($status); + $this->headers = $headers ?: new Headers([], []); + $this->body = $body ?: (new StreamFactory())->createStream(); + } + + /** + * This method is applied to the cloned object after PHP performs an initial shallow-copy. + * This method completes a deep-copy by creating new objects for the cloned object's internal reference pointers. + */ + public function __clone() + { + $this->headers = clone $this->headers; + } + + /** + * {@inheritdoc} + */ + public function getStatusCode(): int + { + return $this->status; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withStatus($code, $reasonPhrase = '') + { + $code = $this->filterStatus($code); + $reasonPhrase = $this->filterReasonPhrase($reasonPhrase); + + $clone = clone $this; + $clone->status = $code; + $clone->reasonPhrase = $reasonPhrase; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getReasonPhrase(): string + { + if ($this->reasonPhrase !== '') { + return $this->reasonPhrase; + } + + if (isset(static::$messages[$this->status])) { + return static::$messages[$this->status]; + } + + return ''; + } + + /** + * Filter HTTP status code. + * + * @param int $status HTTP status code. + * + * @return int + * + * @throws InvalidArgumentException If an invalid HTTP status code is provided. + */ + protected function filterStatus($status): int + { + if (!is_integer($status) || $status < StatusCodeInterface::STATUS_CONTINUE || $status > 599) { + throw new InvalidArgumentException('Invalid HTTP status code.'); + } + + return $status; + } + + /** + * Filter Reason Phrase + * + * @param mixed $reasonPhrase + * + * @return string + * + * @throws InvalidArgumentException + */ + protected function filterReasonPhrase($reasonPhrase = ''): string + { + if (is_object($reasonPhrase) && method_exists($reasonPhrase, '__toString')) { + $reasonPhrase = (string) $reasonPhrase; + } + + if (!is_string($reasonPhrase)) { + throw new InvalidArgumentException('Response reason phrase must be a string.'); + } + + if (strpos($reasonPhrase, "\r") !== false || strpos($reasonPhrase, "\n") !== false) { + throw new InvalidArgumentException( + 'Reason phrase contains one of the following prohibited characters: \r \n' + ); + } + + return $reasonPhrase; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Stream.php b/Sources/API/vendor/slim/psr7/src/Stream.php new file mode 100644 index 0000000..9de6685 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Stream.php @@ -0,0 +1,396 @@ +attach($stream); + + if ($cache && (!$cache->isSeekable() || !$cache->isWritable())) { + throw new RuntimeException('Cache stream must be seekable and writable'); + } + $this->cache = $cache; + } + + /** + * {@inheritdoc} + * @return array|mixed + */ + public function getMetadata($key = null) + { + if (!$this->stream) { + return null; + } + + $this->meta = stream_get_meta_data($this->stream); + + if (!$key) { + return $this->meta; + } + + return $this->meta[$key] ?? null; + } + + /** + * Attach new resource to this object. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param resource $stream A PHP resource handle. + * + * @throws InvalidArgumentException If argument is not a valid PHP resource. + * + * @return void + */ + protected function attach($stream): void + { + if (!is_resource($stream)) { + throw new InvalidArgumentException(__METHOD__ . ' argument must be a valid PHP resource'); + } + + if ($this->stream) { + $this->detach(); + } + + $this->stream = $stream; + } + + /** + * {@inheritdoc} + */ + public function detach() + { + $oldResource = $this->stream; + $this->stream = null; + $this->meta = null; + $this->readable = null; + $this->writable = null; + $this->seekable = null; + $this->size = null; + $this->isPipe = null; + + $this->cache = null; + $this->finished = false; + + return $oldResource; + } + + /** + * {@inheritdoc} + */ + public function __toString(): string + { + if (!$this->stream) { + return ''; + } + if ($this->cache && $this->finished) { + $this->cache->rewind(); + return $this->cache->getContents(); + } + if ($this->isSeekable()) { + $this->rewind(); + } + return $this->getContents(); + } + + /** + * {@inheritdoc} + */ + public function close(): void + { + if ($this->stream) { + if ($this->isPipe()) { + pclose($this->stream); + } else { + fclose($this->stream); + } + } + + $this->detach(); + } + + /** + * {@inheritdoc} + */ + public function getSize(): ?int + { + if ($this->stream && !$this->size) { + $stats = fstat($this->stream); + + if ($stats) { + $this->size = !$this->isPipe() ? $stats['size'] : null; + } + } + + return $this->size; + } + + /** + * {@inheritdoc} + */ + public function tell(): int + { + $position = false; + + if ($this->stream) { + $position = ftell($this->stream); + } + + if ($position === false || $this->isPipe()) { + throw new RuntimeException('Could not get the position of the pointer in stream.'); + } + + return $position; + } + + /** + * {@inheritdoc} + */ + public function eof(): bool + { + return !$this->stream || feof($this->stream); + } + + /** + * {@inheritdoc} + */ + public function isReadable(): bool + { + if ($this->readable !== null) { + return $this->readable; + } + + $this->readable = false; + + if ($this->stream) { + $mode = $this->getMetadata('mode'); + + if (is_string($mode) && (strstr($mode, 'r') !== false || strstr($mode, '+') !== false)) { + $this->readable = true; + } + } + + return $this->readable; + } + + /** + * {@inheritdoc} + */ + public function isWritable(): bool + { + if ($this->writable === null) { + $this->writable = false; + + if ($this->stream) { + $mode = $this->getMetadata('mode'); + + if (is_string($mode) && (strstr($mode, 'w') !== false || strstr($mode, '+') !== false)) { + $this->writable = true; + } + } + } + + return $this->writable; + } + + /** + * {@inheritdoc} + */ + public function isSeekable(): bool + { + if ($this->seekable === null) { + $this->seekable = false; + + if ($this->stream) { + $this->seekable = !$this->isPipe() && $this->getMetadata('seekable'); + } + } + + return $this->seekable; + } + + /** + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET): void + { + if (!$this->isSeekable() || $this->stream && fseek($this->stream, $offset, $whence) === -1) { + throw new RuntimeException('Could not seek in stream.'); + } + } + + /** + * {@inheritdoc} + */ + public function rewind(): void + { + if (!$this->isSeekable() || $this->stream && rewind($this->stream) === false) { + throw new RuntimeException('Could not rewind stream.'); + } + } + + /** + * {@inheritdoc} + */ + public function read($length): string + { + $data = false; + + if ($this->isReadable() && $this->stream && $length >= 0) { + $data = fread($this->stream, $length); + } + + if (is_string($data)) { + if ($this->cache) { + $this->cache->write($data); + } + if ($this->eof()) { + $this->finished = true; + } + return $data; + } + + throw new RuntimeException('Could not read from stream.'); + } + + /** + * {@inheritdoc} + * @return int + */ + public function write($string) + { + $written = false; + + if ($this->isWritable() && $this->stream) { + $written = fwrite($this->stream, $string); + } + + if ($written !== false) { + $this->size = null; + return $written; + } + + throw new RuntimeException('Could not write to stream.'); + } + + /** + * {@inheritdoc} + */ + public function getContents(): string + { + if ($this->cache && $this->finished) { + $this->cache->rewind(); + return $this->cache->getContents(); + } + + $contents = false; + + if ($this->stream) { + $contents = stream_get_contents($this->stream); + } + + if (is_string($contents)) { + if ($this->cache) { + $this->cache->write($contents); + } + if ($this->eof()) { + $this->finished = true; + } + return $contents; + } + + throw new RuntimeException('Could not get contents of stream.'); + } + + /** + * Returns whether or not the stream is a pipe. + * + * @internal This method is not part of the PSR-7 standard. + * + * @return bool + */ + public function isPipe(): bool + { + if ($this->isPipe === null) { + $this->isPipe = false; + + if ($this->stream) { + $stats = fstat($this->stream); + + if (is_array($stats)) { + $this->isPipe = ($stats['mode'] & self::FSTAT_MODE_S_IFIFO) !== 0; + } + } + } + + return $this->isPipe; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/UploadedFile.php b/Sources/API/vendor/slim/psr7/src/UploadedFile.php new file mode 100644 index 0000000..b0c4df5 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/UploadedFile.php @@ -0,0 +1,279 @@ +getMetadata('uri'); + if (!is_string($file)) { + throw new InvalidArgumentException('No URI associated with the stream.'); + } + $this->file = $file; + $this->stream = $fileNameOrStream; + } elseif (is_string($fileNameOrStream)) { + $this->file = $fileNameOrStream; + } else { + throw new InvalidArgumentException( + 'Please provide a string (full path to the uploaded file) or an instance of StreamInterface.' + ); + } + $this->name = $name; + $this->type = $type; + $this->size = $size; + $this->error = $error; + $this->sapi = $sapi; + } + + /** + * {@inheritdoc} + * @return StreamInterface + */ + public function getStream() + { + if ($this->moved) { + throw new RuntimeException(sprintf('Uploaded file %s has already been moved', $this->name)); + } + + if (!$this->stream) { + $this->stream = (new StreamFactory())->createStreamFromFile($this->file); + } + + return $this->stream; + } + + /** + * {@inheritdoc} + */ + public function moveTo($targetPath): void + { + if ($this->moved) { + throw new RuntimeException('Uploaded file already moved'); + } + + $targetIsStream = strpos($targetPath, '://') > 0; + if (!$targetIsStream && !is_writable(dirname($targetPath))) { + throw new InvalidArgumentException('Upload target path is not writable'); + } + + if ($targetIsStream) { + if (!copy($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + + if (!unlink($this->file)) { + throw new RuntimeException(sprintf('Error removing uploaded file %s', $this->name)); + } + } elseif ($this->sapi) { + if (!is_uploaded_file($this->file)) { + throw new RuntimeException(sprintf('%s is not a valid uploaded file', $this->file)); + } + + if (!move_uploaded_file($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + } else { + if (!rename($this->file, $targetPath)) { + throw new RuntimeException(sprintf('Error moving uploaded file %s to %s', $this->name, $targetPath)); + } + } + + $this->moved = true; + } + + /** + * {@inheritdoc} + */ + public function getError(): int + { + return $this->error; + } + + /** + * {@inheritdoc} + */ + public function getClientFilename(): ?string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function getClientMediaType(): ?string + { + return $this->type; + } + + /** + * {@inheritdoc} + */ + public function getSize(): ?int + { + return $this->size; + } + + /** + * Returns the client-provided full path to the file + * + * @internal This method is not part of the PSR-7 standard + * + * @return string + */ + public function getFilePath(): string + { + return $this->file; + } + + /** + * Create a normalized tree of UploadedFile instances from the Environment. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param array $globals The global server variables. + * + * @return array A normalized tree of UploadedFile instances or null if none are provided. + */ + public static function createFromGlobals(array $globals): array + { + if (isset($globals['slim.files']) && is_array($globals['slim.files'])) { + return $globals['slim.files']; + } + + if (!empty($_FILES)) { + return self::parseUploadedFiles($_FILES); + } + + return []; + } + + /** + * Parse a non-normalized, i.e. $_FILES superglobal, tree of uploaded file data. + * + * @internal This method is not part of the PSR-7 standard. + * + * @param array $uploadedFiles The non-normalized tree of uploaded file data. + * + * @return array A normalized tree of UploadedFile instances. + */ + private static function parseUploadedFiles(array $uploadedFiles): array + { + $parsed = []; + foreach ($uploadedFiles as $field => $uploadedFile) { + if (!isset($uploadedFile['error'])) { + if (is_array($uploadedFile)) { + $parsed[$field] = self::parseUploadedFiles($uploadedFile); + } + continue; + } + + $parsed[$field] = []; + if (!is_array($uploadedFile['error'])) { + $parsed[$field] = new static( + $uploadedFile['tmp_name'], + $uploadedFile['name'] ?? null, + $uploadedFile['type'] ?? null, + $uploadedFile['size'] ?? null, + $uploadedFile['error'], + true + ); + } else { + $subArray = []; + foreach ($uploadedFile['error'] as $fileIdx => $error) { + // Normalize sub array and re-parse to move the input's key name up a level + $subArray[$fileIdx]['name'] = $uploadedFile['name'][$fileIdx]; + $subArray[$fileIdx]['type'] = $uploadedFile['type'][$fileIdx]; + $subArray[$fileIdx]['tmp_name'] = $uploadedFile['tmp_name'][$fileIdx]; + $subArray[$fileIdx]['error'] = $uploadedFile['error'][$fileIdx]; + $subArray[$fileIdx]['size'] = $uploadedFile['size'][$fileIdx]; + + $parsed[$field] = self::parseUploadedFiles($subArray); + } + } + } + + return $parsed; + } +} diff --git a/Sources/API/vendor/slim/psr7/src/Uri.php b/Sources/API/vendor/slim/psr7/src/Uri.php new file mode 100644 index 0000000..b43aa54 --- /dev/null +++ b/Sources/API/vendor/slim/psr7/src/Uri.php @@ -0,0 +1,494 @@ + null, + 'http' => 80, + 'https' => 443 + ]; + + /** + * Uri scheme (without "://" suffix) + */ + protected string $scheme = ''; + + protected string $user = ''; + + protected string $password = ''; + + protected string $host = ''; + + protected ?int $port; + + protected string $path = ''; + + /** + * Uri query string (without "?" prefix) + */ + protected string $query = ''; + + /** + * Uri fragment string (without "#" prefix) + */ + protected string $fragment = ''; + + /** + * @param string $scheme Uri scheme. + * @param string $host Uri host. + * @param int|null $port Uri port number. + * @param string $path Uri path. + * @param string $query Uri query string. + * @param string $fragment Uri fragment. + * @param string $user Uri user. + * @param string $password Uri password. + */ + public function __construct( + string $scheme, + string $host, + ?int $port = null, + string $path = '/', + string $query = '', + string $fragment = '', + string $user = '', + string $password = '' + ) { + $this->scheme = $this->filterScheme($scheme); + $this->host = $this->filterHost($host); + $this->port = $this->filterPort($port); + $this->path = $this->filterPath($path); + $this->query = $this->filterQuery($query); + $this->fragment = $this->filterFragment($fragment); + $this->user = $this->filterUserInfo($user); + $this->password = $this->filterUserInfo($password); + } + + /** + * {@inheritdoc} + */ + public function getScheme(): string + { + return $this->scheme; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withScheme($scheme) + { + $scheme = $this->filterScheme($scheme); + $clone = clone $this; + $clone->scheme = $scheme; + + return $clone; + } + + /** + * Filter Uri scheme. + * + * @param mixed $scheme Raw Uri scheme. + * + * @return string + * + * @throws InvalidArgumentException If the Uri scheme is not a string. + * @throws InvalidArgumentException If Uri scheme is not exists in SUPPORTED_SCHEMES + */ + protected function filterScheme($scheme): string + { + if (!is_string($scheme)) { + throw new InvalidArgumentException('Uri scheme must be a string.'); + } + + $scheme = str_replace('://', '', strtolower($scheme)); + if (!key_exists($scheme, static::SUPPORTED_SCHEMES)) { + throw new InvalidArgumentException( + 'Uri scheme must be one of: "' . implode('", "', array_keys(static::SUPPORTED_SCHEMES)) . '"' + ); + } + + return $scheme; + } + + /** + * {@inheritdoc} + */ + public function getAuthority(): string + { + $userInfo = $this->getUserInfo(); + $host = $this->getHost(); + $port = $this->getPort(); + + return ($userInfo !== '' ? $userInfo . '@' : '') . $host . ($port !== null ? ':' . $port : ''); + } + + /** + * {@inheritdoc} + */ + public function getUserInfo(): string + { + $info = $this->user; + + if ($this->password !== '') { + $info .= ':' . $this->password; + } + + return $info; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withUserInfo($user, $password = null) + { + $clone = clone $this; + $clone->user = $this->filterUserInfo($user); + + if ($clone->user !== '') { + $clone->password = $this->filterUserInfo($password); + } else { + $clone->password = ''; + } + + return $clone; + } + + /** + * Filters the user info string. + * + * Returns the percent-encoded query string. + * + * @param string|null $info The raw uri query string. + * + * @return string + */ + protected function filterUserInfo(?string $info = null): string + { + if (!is_string($info)) { + return ''; + } + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=]+|%(?![A-Fa-f0-9]{2}))/u', + function ($match) { + return rawurlencode($match[0]); + }, + $info + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getHost(): string + { + return $this->host; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withHost($host) + { + $clone = clone $this; + $clone->host = $this->filterHost($host); + + return $clone; + } + + /** + * Filter Uri host. + * + * If the supplied host is an IPv6 address, then it is converted to a reference + * as per RFC 2373. + * + * @param mixed $host The host to filter. + * + * @return string + * + * @throws InvalidArgumentException for invalid host names. + */ + protected function filterHost($host): string + { + if (is_object($host) && method_exists($host, '__toString')) { + $host = (string) $host; + } + + if (!is_string($host)) { + throw new InvalidArgumentException('Uri host must be a string'); + } + + if (filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $host = '[' . $host . ']'; + } + + return strtolower($host); + } + + /** + * {@inheritdoc} + */ + public function getPort(): ?int + { + return $this->port && !$this->hasStandardPort() ? $this->port : null; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withPort($port) + { + $port = $this->filterPort($port); + $clone = clone $this; + $clone->port = $port; + + return $clone; + } + + /** + * Does this Uri use a standard port? + * + * @return bool + */ + protected function hasStandardPort(): bool + { + return static::SUPPORTED_SCHEMES[$this->scheme] === $this->port; + } + + /** + * Filter Uri port. + * + * @param int|null $port The Uri port number. + * + * @return int|null + * + * @throws InvalidArgumentException If the port is invalid. + */ + protected function filterPort($port): ?int + { + if (is_null($port) || (is_integer($port) && ($port >= 1 && $port <= 65535))) { + return $port; + } + + throw new InvalidArgumentException('Uri port must be null or an integer between 1 and 65535 (inclusive)'); + } + + /** + * {@inheritdoc} + */ + public function getPath(): string + { + return $this->path; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withPath($path) + { + if (!is_string($path)) { + throw new InvalidArgumentException('Uri path must be a string'); + } + + $clone = clone $this; + $clone->path = $this->filterPath($path); + + return $clone; + } + + /** + * Filter Uri path. + * + * This method percent-encodes all reserved characters in the provided path string. + * This method will NOT double-encode characters that are already percent-encoded. + * + * @param string $path The raw uri path. + * + * @return string The RFC 3986 percent-encoded uri path. + * + * @link http://www.faqs.org/rfcs/rfc3986.html + */ + protected function filterPath($path): string + { + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~:@&=\+\$,\/;%]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $path + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getQuery(): string + { + return $this->query; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withQuery($query) + { + $query = ltrim($this->filterQuery($query), '?'); + $clone = clone $this; + $clone->query = $query; + + return $clone; + } + + /** + * Filters the query string of a URI. + * + * Returns the percent-encoded query string. + * + * @param mixed $query The raw uri query string. + * + * @return string + */ + protected function filterQuery($query): string + { + if (is_object($query) && method_exists($query, '__toString')) { + $query = (string) $query; + } + + if (!is_string($query)) { + throw new InvalidArgumentException('Uri query must be a string.'); + } + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $query + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function getFragment(): string + { + return $this->fragment; + } + + /** + * {@inheritdoc} + * @return static + */ + public function withFragment($fragment) + { + $fragment = $this->filterFragment($fragment); + $clone = clone $this; + $clone->fragment = $fragment; + + return $clone; + } + + /** + * Filters fragment of a URI. + * + * Returns the percent-encoded fragment. + * + * @param mixed $fragment The raw uri query string. + * + * @return string + */ + protected function filterFragment($fragment): string + { + if (is_object($fragment) && method_exists($fragment, '__toString')) { + $fragment = (string) $fragment; + } + + if (!is_string($fragment)) { + throw new InvalidArgumentException('Uri fragment must be a string.'); + } + + $fragment = ltrim($fragment, '#'); + + $match = preg_replace_callback( + '/(?:[^a-zA-Z0-9_\-\.~!\$&\'\(\)\*\+,;=%:@\/\?]+|%(?![A-Fa-f0-9]{2}))/', + function ($match) { + return rawurlencode($match[0]); + }, + $fragment + ); + + return is_string($match) ? $match : ''; + } + + /** + * {@inheritdoc} + */ + public function __toString(): string + { + $scheme = $this->getScheme(); + $authority = $this->getAuthority(); + $path = $this->getPath(); + $query = $this->getQuery(); + $fragment = $this->getFragment(); + + if ($path !== '') { + if ($path[0] !== '/') { + if ($authority !== '') { + // If the path is rootless and an authority is present, the path MUST be prefixed by "/". + $path = '/' . $path; + } + } elseif (isset($path[1]) && $path[1] === '/') { + if ($authority === '') { + // If the path is starting with more than one "/" and no authority is present, + // the starting slashes MUST be reduced to one. + $path = '/' . ltrim($path, '/'); + } + } + } + + return ($scheme !== '' ? $scheme . ':' : '') + . ($authority !== '' ? '//' . $authority : '') + . $path + . ($query !== '' ? '?' . $query : '') + . ($fragment !== '' ? '#' . $fragment : ''); + } +} diff --git a/Sources/API/vendor/slim/slim/CHANGELOG.md b/Sources/API/vendor/slim/slim/CHANGELOG.md new file mode 100644 index 0000000..4953c3e --- /dev/null +++ b/Sources/API/vendor/slim/slim/CHANGELOG.md @@ -0,0 +1,208 @@ +# Changelog + +# 4.10.0 - 2022-03-14 +- [3120: Add a new PSR-17 factory to Psr17FactoryProvider](https://github.com/slimphp/Slim/pull/3120) thanks to @solventt +- [3123: Replace deprecated setMethods() in tests](https://github.com/slimphp/Slim/pull/3123) thanks to @solventt +- [3126: Update guzzlehttp/psr7 requirement from ^2.0 to ^2.1](https://github.com/slimphp/Slim/pull/3126) thanks to @dependabot[bot] +- [3127: PHPStan v1.0](https://github.com/slimphp/Slim/pull/3127) thanks to @t0mmy742 +- [3128: Update phpstan/phpstan requirement from ^1.0 to ^1.2](https://github.com/slimphp/Slim/pull/3128) thanks to @dependabot[bot] +- [3129: Deprecate PHP 7.3](https://github.com/slimphp/Slim/pull/3129) thanks to @l0gicgate +- [3130: Removed double defined PHP 7.4](https://github.com/slimphp/Slim/pull/3130) thanks to @flangofas +- [3132: Add new `RequestResponseNamedArgs` route strategy](https://github.com/slimphp/Slim/pull/3132) thanks to @adoy +- [3133: Improve typehinting for `RouteParserInterface`](https://github.com/slimphp/Slim/pull/3133) thanks to @jerowork +- [3135: Update phpstan/phpstan requirement from ^1.2 to ^1.3](https://github.com/slimphp/Slim/pull/3135) thanks to @dependabot[bot] +- [3137: Update phpspec/prophecy requirement from ^1.14 to ^1.15](https://github.com/slimphp/Slim/pull/3137) thanks to @dependabot[bot] +- [3138: Update license year](https://github.com/slimphp/Slim/pull/3138) thanks to @Awilum +- [3139: Fixed #1730 (reintroduced in 4.x)](https://github.com/slimphp/Slim/pull/3139) thanks to @adoy +- [3145: Update phpstan/phpstan requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3145) thanks to @dependabot[bot] +- [3146: Inherit HttpException from RuntimeException](https://github.com/slimphp/Slim/pull/3146) thanks to @nbayramberdiyev +- [3148: Upgrade to HTML5](https://github.com/slimphp/Slim/pull/3148) thanks to @nbayramberdiyev +- [3172: Update nyholm/psr7 requirement from ^1.4 to ^1.5](https://github.com/slimphp/Slim/pull/3172) thanks to @dependabot[bot] + +# 4.9.0 - 2021-10-05 +- [3058: Implement exception class for Gone Http error](https://github.com/slimphp/Slim/pull/3058) thanks to @TheKernelPanic +- [3086: Update slim/psr7 requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3086) thanks to @dependabot[bot] +- [3087: Update nyholm/psr7-server requirement from ^1.0.1 to ^1.0.2](https://github.com/slimphp/Slim/pull/3087) thanks to @dependabot[bot] +- [3093: Update phpstan/phpstan requirement from ^0.12.85 to ^0.12.90](https://github.com/slimphp/Slim/pull/3093) thanks to @dependabot[bot] +- [3099: Allow updated psr log](https://github.com/slimphp/Slim/pull/3099) thanks to @t0mmy742 +- [3104: Drop php7.2](https://github.com/slimphp/Slim/pull/3104) thanks to @t0mmy742 +- [3106: Use PSR-17 factory from Guzzle/psr7 2.0](https://github.com/slimphp/Slim/pull/3106) thanks to @t0mmy742 +- [3108: Update README file](https://github.com/slimphp/Slim/pull/3108) thanks to @t0mmy742 +- [3112: Update laminas/laminas-diactoros requirement from ^2.6 to ^2.8](https://github.com/slimphp/Slim/pull/3112) thanks to @dependabot[bot] +- [3114: Update slim/psr7 requirement from ^1.4 to ^1.5](https://github.com/slimphp/Slim/pull/3114) thanks to @dependabot[bot] +- [3115: Update phpstan/phpstan requirement from ^0.12.96 to ^0.12.99](https://github.com/slimphp/Slim/pull/3115) thanks to @dependabot[bot] +- [3116: Remove Zend Diactoros references](https://github.com/slimphp/Slim/pull/3116) thanks to @l0gicgate + +# 4.8.0 - 2021-05-19 +- [3034: Fix phpunit dependency version](https://github.com/slimphp/Slim/pull/3034) thanks to @l0gicgate +- [3037: Replace Travis by GitHub Actions](https://github.com/slimphp/Slim/pull/3037) thanks to @t0mmy742 +- [3043: Cover App creation from AppFactory with empty Container](https://github.com/slimphp/Slim/pull/3043) thanks to @t0mmy742 +- [3045: Update phpstan/phpstan requirement from ^0.12.58 to ^0.12.64](https://github.com/slimphp/Slim/pull/3045) thanks to @dependabot-preview[bot] +- [3047: documentation: min php 7.2 required](https://github.com/slimphp/Slim/pull/3047) thanks to @Rotzbua +- [3054: Update phpstan/phpstan requirement from ^0.12.64 to ^0.12.70](https://github.com/slimphp/Slim/pull/3054) thanks to @dependabot-preview[bot] +- [3056: Fix docblock in ErrorMiddleware](https://github.com/slimphp/Slim/pull/3056) thanks to @piotr-cz +- [3060: Update phpstan/phpstan requirement from ^0.12.70 to ^0.12.80](https://github.com/slimphp/Slim/pull/3060) thanks to @dependabot-preview[bot] +- [3061: Update nyholm/psr7 requirement from ^1.3 to ^1.4](https://github.com/slimphp/Slim/pull/3061) thanks to @dependabot-preview[bot] +- [3063: Allow ^1.0 || ^2.0 in psr/container](https://github.com/slimphp/Slim/pull/3063) thanks to @Ayesh +- [3069: Classname/Method Callable Arrays](https://github.com/slimphp/Slim/pull/3069) thanks to @ddrv +- [3078: Update squizlabs/php_codesniffer requirement from ^3.5 to ^3.6](https://github.com/slimphp/Slim/pull/3078) thanks to @dependabot[bot] +- [3079: Update phpspec/prophecy requirement from ^1.12 to ^1.13](https://github.com/slimphp/Slim/pull/3079) thanks to @dependabot[bot] +- [3080: Update guzzlehttp/psr7 requirement from ^1.7 to ^1.8](https://github.com/slimphp/Slim/pull/3080) thanks to @dependabot[bot] +- [3082: Update phpstan/phpstan requirement from ^0.12.80 to ^0.12.85](https://github.com/slimphp/Slim/pull/3082) thanks to @dependabot[bot] + +# 4.7.0 - 2020-11-30 + +### Fixed +- [3027: Fix: FastRoute dispatcher and data generator should match](https://github.com/slimphp/Slim/pull/3027) thanks to @edudobay + +### Added +- [3015: PHP 8 support](https://github.com/slimphp/Slim/pull/3015) thanks to @edudobay + +### Optimizations +- [3024: Randomize tests](https://github.com/slimphp/Slim/pull/3024) thanks to @pawel-slowik + +## 4.6.0 - 2020-11-15 + +### Fixed +- [2942: Fix PHPdoc for error handlers in ErrorMiddleware ](https://github.com/slimphp/Slim/pull/2942) thanks to @TiMESPLiNTER +- [2944: Remove unused function in ErrorHandler](https://github.com/slimphp/Slim/pull/2944) thanks to @l0gicgate +- [2960: Fix phpstan 0.12 errors](https://github.com/slimphp/Slim/pull/2960) thanks to @adriansuter +- [2982: Removing cloning statements in tests](https://github.com/slimphp/Slim/pull/2982) thanks to @l0gicgate +- [3017: Fix request creator factory test](https://github.com/slimphp/Slim/pull/3017) thanks to @pawel-slowik +- [3022: Ensure RouteParser Always Present After Routing](https://github.com/slimphp/Slim/pull/3022) thanks to @l0gicgate + +### Added +- [2949: Add the support in composer.json](https://github.com/slimphp/Slim/pull/2949) thanks to @ddrv +- [2958: Strict empty string content type checking in BodyParsingMiddleware::getMediaType](https://github.com/slimphp/Slim/pull/2958) thanks to @Ayesh +- [2997: Add hints to methods](https://github.com/slimphp/Slim/pull/2997) thanks to @evgsavosin - [3000: Fix route controller test](https://github.com/slimphp/Slim/pull/3000) thanks to @pawel-slowik +- [3001: Add missing `$strategy` parameter in a Route test](https://github.com/slimphp/Slim/pull/3001) thanks to @pawel-slowik + +### Optimizations +- [2951: Minor optimizations in if() blocks](https://github.com/slimphp/Slim/pull/2951) thanks to @Ayesh +- [2959: Micro optimization: Declare closures in BodyParsingMiddleware as static](https://github.com/slimphp/Slim/pull/2959) thanks to @Ayesh +- [2978: Split the routing results to its own function.](https://github.com/slimphp/Slim/pull/2978) thanks to @dlundgren + +### Dependencies Updated +- [2953: Update nyholm/psr7-server requirement from ^0.4.1](https://github.com/slimphp/Slim/pull/2953) thanks to @dependabot-preview[bot] +- [2954: Update laminas/laminas-diactoros requirement from ^2.1 to ^2.3](https://github.com/slimphp/Slim/pull/2954) thanks to @dependabot-preview[bot] +- [2955: Update guzzlehttp/psr7 requirement from ^1.5 to ^1.6](https://github.com/slimphp/Slim/pull/2955) thanks to @dependabot-preview[bot] +- [2956: Update slim/psr7 requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/2956) thanks to @dependabot-preview[bot] +- [2957: Update nyholm/psr7 requirement from ^1.1 to ^1.2](https://github.com/slimphp/Slim/pull/2957) thanks to @dependabot-preview[bot] +- [2963: Update phpstan/phpstan requirement from ^0.12.23 to ^0.12.25](https://github.com/slimphp/Slim/pull/2963) thanks to @dependabot-preview[bot] +- [2965: Update adriansuter/php-autoload-override requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/2965) thanks to @dependabot-preview[bot] +- [2967: Update nyholm/psr7 requirement from ^1.2 to ^1.3](https://github.com/slimphp/Slim/pull/2967) thanks to @dependabot-preview[bot] +- [2969: Update nyholm/psr7-server requirement from ^0.4.1 to ^1.0.0](https://github.com/slimphp/Slim/pull/2969) thanks to @dependabot-preview[bot] +- [2970: Update phpstan/phpstan requirement from ^0.12.25 to ^0.12.26](https://github.com/slimphp/Slim/pull/2970) thanks to @dependabot-preview[bot] +- [2971: Update phpstan/phpstan requirement from ^0.12.26 to ^0.12.27](https://github.com/slimphp/Slim/pull/2971) thanks to @dependabot-preview[bot] +- [2972: Update phpstan/phpstan requirement from ^0.12.27 to ^0.12.28](https://github.com/slimphp/Slim/pull/2972) thanks to @dependabot-preview[bot] +- [2973: Update phpstan/phpstan requirement from ^0.12.28 to ^0.12.29](https://github.com/slimphp/Slim/pull/2973) thanks to @dependabot-preview[bot] +- [2975: Update phpstan/phpstan requirement from ^0.12.29 to ^0.12.30](https://github.com/slimphp/Slim/pull/2975) thanks to @dependabot-preview[bot] +- [2976: Update phpstan/phpstan requirement from ^0.12.30 to ^0.12.31](https://github.com/slimphp/Slim/pull/2976) thanks to @dependabot-preview[bot] +- [2980: Update phpstan/phpstan requirement from ^0.12.31 to ^0.12.32](https://github.com/slimphp/Slim/pull/2980) thanks to @dependabot-preview[bot] +- [2981: Update phpspec/prophecy requirement from ^1.10 to ^1.11](https://github.com/slimphp/Slim/pull/2981) thanks to @dependabot-preview[bot] +- [2986: Update phpstan/phpstan requirement from ^0.12.32 to ^0.12.33](https://github.com/slimphp/Slim/pull/2986) thanks to @dependabot-preview[bot] +- [2990: Update phpstan/phpstan requirement from ^0.12.33 to ^0.12.34](https://github.com/slimphp/Slim/pull/2990) thanks to @dependabot-preview[bot] +- [2991: Update phpstan/phpstan requirement from ^0.12.34 to ^0.12.35](https://github.com/slimphp/Slim/pull/2991) thanks to @dependabot-preview[bot] +- [2993: Update phpstan/phpstan requirement from ^0.12.35 to ^0.12.36](https://github.com/slimphp/Slim/pull/2993) thanks to @dependabot-preview[bot] +- [2995: Update phpstan/phpstan requirement from ^0.12.36 to ^0.12.37](https://github.com/slimphp/Slim/pull/2995) thanks to @dependabot-preview[bot] +- [3010: Update guzzlehttp/psr7 requirement from ^1.6 to ^1.7](https://github.com/slimphp/Slim/pull/3010) thanks to @dependabot-preview[bot] +- [3011: Update phpspec/prophecy requirement from ^1.11 to ^1.12](https://github.com/slimphp/Slim/pull/3011) thanks to @dependabot-preview[bot] +- [3012: Update slim/http requirement from ^1.0 to ^1.1](https://github.com/slimphp/Slim/pull/3012) thanks to @dependabot-preview[bot] +- [3013: Update slim/psr7 requirement from ^1.1 to ^1.2](https://github.com/slimphp/Slim/pull/3013) thanks to @dependabot-preview[bot] +- [3014: Update laminas/laminas-diactoros requirement from ^2.3 to ^2.4](https://github.com/slimphp/Slim/pull/3014) thanks to @dependabot-preview[bot] +- [3018: Update phpstan/phpstan requirement from ^0.12.37 to ^0.12.54](https://github.com/slimphp/Slim/pull/3018) thanks to @dependabot-preview[bot] + +## 4.5.0 - 2020-04-14 + +### Added +- [2928](https://github.com/slimphp/Slim/pull/2928) Test against PHP 7.4 +- [2937](https://github.com/slimphp/Slim/pull/2937) Add support for PSR-3 + +### Fixed +- [2916](https://github.com/slimphp/Slim/pull/2916) Rename phpcs.xml to phpcs.xml.dist +- [2917](https://github.com/slimphp/Slim/pull/2917) Update .editorconfig +- [2925](https://github.com/slimphp/Slim/pull/2925) ResponseEmitter: Don't remove Content-Type and Content-Length when body is empt +- [2932](https://github.com/slimphp/Slim/pull/2932) Update the Tidelift enterprise language +- [2938](https://github.com/slimphp/Slim/pull/2938) Modify usage of deprecated expectExceptionMessageRegExp() method + +## 4.4.0 - 2020-01-04 + +### Added +- [2862](https://github.com/slimphp/Slim/pull/2862) Optionally handle subclasses of exceptions in custom error handler +- [2869](https://github.com/slimphp/Slim/pull/2869) php-di/php-di added in composer suggestion +- [2874](https://github.com/slimphp/Slim/pull/2874) Add `null` to param type-hints +- [2889](https://github.com/slimphp/Slim/pull/2889) Make `RouteContext` attributes customizable and change default to use private names +- [2907](https://github.com/slimphp/Slim/pull/2907) Migrate to PSR-12 convention +- [2910](https://github.com/slimphp/Slim/pull/2910) Migrate Zend to Laminas +- [2912](https://github.com/slimphp/Slim/pull/2912) Add Laminas PSR17 Factory +- [2913](https://github.com/slimphp/Slim/pull/2913) Update php-autoload-override version +- [2914](https://github.com/slimphp/Slim/pull/2914) Added ability to add handled exceptions as an array + +### Fixed +- [2864](https://github.com/slimphp/Slim/pull/2864) Optimize error message in error handling if displayErrorDetails was not set +- [2876](https://github.com/slimphp/Slim/pull/2876) Update links from http to https +- [2877](https://github.com/slimphp/Slim/pull/2877) Fix docblock for `Slim\Routing\RouteCollector::cacheFile` +- [2878](https://github.com/slimphp/Slim/pull/2878) check body is writable only on ouput buffering append +- [2896](https://github.com/slimphp/Slim/pull/2896) Render errors uniformly +- [2902](https://github.com/slimphp/Slim/pull/2902) Fix prophecies +- [2908](https://github.com/slimphp/Slim/pull/2908) Use autoload-dev for `Slim\Tests` namespace + +### Removed +- [2871](https://github.com/slimphp/Slim/pull/2871) Remove explicit type-hint +- [2872](https://github.com/slimphp/Slim/pull/2872) Remove type-hint + +## 4.3.0 - 2019-10-05 + +### Added +- [2819](https://github.com/slimphp/Slim/pull/2819) Added description to addRoutingMiddleware() +- [2820](https://github.com/slimphp/Slim/pull/2820) Update link to homepage in composer.json +- [2828](https://github.com/slimphp/Slim/pull/2828) Allow URIs with leading multi-slashes +- [2832](https://github.com/slimphp/Slim/pull/2832) Refactor `FastRouteDispatcher` +- [2835](https://github.com/slimphp/Slim/pull/2835) Rename `pathFor` to `urlFor` in docblock +- [2846](https://github.com/slimphp/Slim/pull/2846) Correcting the branch name as per issue-2843 +- [2849](https://github.com/slimphp/Slim/pull/2849) Create class alias for FastRoute\RouteCollector +- [2855](https://github.com/slimphp/Slim/pull/2855) Add list of allowed methods to HttpMethodNotAllowedException +- [2860](https://github.com/slimphp/Slim/pull/2860) Add base path to `$request` and use `RouteContext` to read + +### Fixed +- [2839](https://github.com/slimphp/Slim/pull/2839) Fix description for handler signature in phpdocs +- [2844](https://github.com/slimphp/Slim/pull/2844) Handle base path by routeCollector instead of RouteCollectorProxy +- [2845](https://github.com/slimphp/Slim/pull/2845) Fix composer scripts +- [2851](https://github.com/slimphp/Slim/pull/2851) Fix example of 'Hello World' app +- [2854](https://github.com/slimphp/Slim/pull/2854) Fix undefined property in tests + +### Removed +- [2853](https://github.com/slimphp/Slim/pull/2853) Remove unused classes + +## 4.2.0 - 2019-08-20 + +### Added +- [2787](https://github.com/slimphp/Slim/pull/2787) Add an advanced callable resolver +- [2791](https://github.com/slimphp/Slim/pull/2791) Add `inferPrivatePropertyTypeFromConstructor` to phpstan +- [2793](https://github.com/slimphp/Slim/pull/2793) Add ability to configure application via a container in `AppFactory` +- [2798](https://github.com/slimphp/Slim/pull/2798) Add PSR-7 Agnostic Body Parsing Middleware +- [2801](https://github.com/slimphp/Slim/pull/2801) Add `setLogErrorRenderer()` method to `ErrorHandler` +- [2807](https://github.com/slimphp/Slim/pull/2807) Add check for Slim callable notation if no resolver given +- [2803](https://github.com/slimphp/Slim/pull/2803) Add ability to emit non seekable streams in `ResponseEmitter` +- [2817](https://github.com/slimphp/Slim/pull/2817) Add the ability to pass in a custom `MiddlewareDispatcherInterface` to the `App` + +### Fixed +- [2789](https://github.com/slimphp/Slim/pull/2789) Fix Cookie header detection in `ResponseEmitter` +- [2796](https://github.com/slimphp/Slim/pull/2796) Fix http message format +- [2800](https://github.com/slimphp/Slim/pull/2800) Fix null comparisons more clear in `ErrorHandler` +- [2802](https://github.com/slimphp/Slim/pull/2802) Fix incorrect search of a header in stack +- [2806](https://github.com/slimphp/Slim/pull/2806) Simplify `Route::prepare()` method argument preparation +- [2809](https://github.com/slimphp/Slim/pull/2809) Eliminate a duplicate code via HOF in `MiddlewareDispatcher` +- [2816](https://github.com/slimphp/Slim/pull/2816) Fix RouteCollectorProxy::redirect() bug + +### Removed +- [2811](https://github.com/slimphp/Slim/pull/2811) Remove `DeferredCallable` + +## 4.1.0 - 2019-08-06 + +### Added +- [#2779](https://github.com/slimphp/Slim/pull/2774) Add support for Slim callables `Class:method` resolution & Container Closure auto-binding in `MiddlewareDispatcher` +- [#2774](https://github.com/slimphp/Slim/pull/2774) Add possibility for custom `RequestHandler` invocation strategies + +### Fixed +- [#2776](https://github.com/slimphp/Slim/pull/2774) Fix group middleware on multiple nested groups diff --git a/Sources/API/vendor/slim/slim/LICENSE.md b/Sources/API/vendor/slim/slim/LICENSE.md new file mode 100644 index 0000000..d6fd559 --- /dev/null +++ b/Sources/API/vendor/slim/slim/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2011-2022 Josh Lockhart + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/slim/slim/MAINTAINERS.md b/Sources/API/vendor/slim/slim/MAINTAINERS.md new file mode 100644 index 0000000..2b8ad04 --- /dev/null +++ b/Sources/API/vendor/slim/slim/MAINTAINERS.md @@ -0,0 +1,17 @@ +# Maintainers + +There aren't many rules for maintainers of Slim to remember; what we have is listed here. + +## We don't merge our own PRs + +Our code is better if more than one set of eyes looks at it. Therefore we do not merge our own pull requests unless there is an exceptional circumstance. This helps to spot errors in the patch and also enables us to share information about the project around the maintainer team. + +## PRs tagged `WIP` are not ready to be merged + +Sometimes it's helpful to collaborate on a patch before it's ready to be merged. We use the text `WIP` (for _Work in Progress_) in the title to mark these PRs. + +If a PR has `WIP` in its title, then it is not to be merged. The person who raised the PR will remove the `WIP` text when they are ready for a full review and merge. + +## Assign a merged PR to a milestone + +By ensuring that all merged PRs are assigned to a milestone, we can easily find which PRs were in which release. diff --git a/Sources/API/vendor/slim/slim/SECURITY.md b/Sources/API/vendor/slim/slim/SECURITY.md new file mode 100644 index 0000000..a5b6df0 --- /dev/null +++ b/Sources/API/vendor/slim/slim/SECURITY.md @@ -0,0 +1,14 @@ +# Security Policy + +### Supported Versions + + +| Version | Supported | +| ------- | ------------------ | +| 3.x.x | :white_check_mark: | +| 4.x.x | :white_check_mark: | + + +### Reporting a Vulnerability + +To report a vulnerability please send an email to security@slimframework.com diff --git a/Sources/API/vendor/slim/slim/Slim/App.php b/Sources/API/vendor/slim/slim/Slim/App.php new file mode 100644 index 0000000..1374d6f --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/App.php @@ -0,0 +1,216 @@ +routeResolver = $routeResolver ?? new RouteResolver($this->routeCollector); + $routeRunner = new RouteRunner($this->routeResolver, $this->routeCollector->getRouteParser(), $this); + + if (!$middlewareDispatcher) { + $middlewareDispatcher = new MiddlewareDispatcher($routeRunner, $this->callableResolver, $container); + } else { + $middlewareDispatcher->seedMiddlewareStack($routeRunner); + } + + $this->middlewareDispatcher = $middlewareDispatcher; + } + + /** + * @return RouteResolverInterface + */ + public function getRouteResolver(): RouteResolverInterface + { + return $this->routeResolver; + } + + /** + * @return MiddlewareDispatcherInterface + */ + public function getMiddlewareDispatcher(): MiddlewareDispatcherInterface + { + return $this->middlewareDispatcher; + } + + /** + * @param MiddlewareInterface|string|callable $middleware + */ + public function add($middleware): self + { + $this->middlewareDispatcher->add($middleware); + return $this; + } + + /** + * @param MiddlewareInterface $middleware + */ + public function addMiddleware(MiddlewareInterface $middleware): self + { + $this->middlewareDispatcher->addMiddleware($middleware); + return $this; + } + + /** + * Add the Slim built-in routing middleware to the app middleware stack + * + * This method can be used to control middleware order and is not required for default routing operation. + * + * @return RoutingMiddleware + */ + public function addRoutingMiddleware(): RoutingMiddleware + { + $routingMiddleware = new RoutingMiddleware( + $this->getRouteResolver(), + $this->getRouteCollector()->getRouteParser() + ); + $this->add($routingMiddleware); + return $routingMiddleware; + } + + /** + * Add the Slim built-in error middleware to the app middleware stack + * + * @param bool $displayErrorDetails + * @param bool $logErrors + * @param bool $logErrorDetails + * @param LoggerInterface|null $logger + * + * @return ErrorMiddleware + */ + public function addErrorMiddleware( + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails, + ?LoggerInterface $logger = null + ): ErrorMiddleware { + $errorMiddleware = new ErrorMiddleware( + $this->getCallableResolver(), + $this->getResponseFactory(), + $displayErrorDetails, + $logErrors, + $logErrorDetails, + $logger + ); + $this->add($errorMiddleware); + return $errorMiddleware; + } + + /** + * Add the Slim body parsing middleware to the app middleware stack + * + * @param callable[] $bodyParsers + * + * @return BodyParsingMiddleware + */ + public function addBodyParsingMiddleware(array $bodyParsers = []): BodyParsingMiddleware + { + $bodyParsingMiddleware = new BodyParsingMiddleware($bodyParsers); + $this->add($bodyParsingMiddleware); + return $bodyParsingMiddleware; + } + + /** + * Run application + * + * This method traverses the application middleware stack and then sends the + * resultant Response object to the HTTP client. + * + * @param ServerRequestInterface|null $request + * @return void + */ + public function run(?ServerRequestInterface $request = null): void + { + if (!$request) { + $serverRequestCreator = ServerRequestCreatorFactory::create(); + $request = $serverRequestCreator->createServerRequestFromGlobals(); + } + + $response = $this->handle($request); + $responseEmitter = new ResponseEmitter(); + $responseEmitter->emit($response); + } + + /** + * Handle a request + * + * This method traverses the application middleware stack and then returns the + * resultant Response object. + * + * @param ServerRequestInterface $request + * @return ResponseInterface + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + $response = $this->middlewareDispatcher->handle($request); + + /** + * This is to be in compliance with RFC 2616, Section 9. + * If the incoming request method is HEAD, we need to ensure that the response body + * is empty as the request may fall back on a GET route handler due to FastRoute's + * routing logic which could potentially append content to the response body + * https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 + */ + $method = strtoupper($request->getMethod()); + if ($method === 'HEAD') { + $emptyBody = $this->responseFactory->createResponse()->getBody(); + return $response->withBody($emptyBody); + } + + return $response; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/CallableResolver.php b/Sources/API/vendor/slim/slim/Slim/CallableResolver.php new file mode 100644 index 0000000..66f225d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/CallableResolver.php @@ -0,0 +1,193 @@ +container = $container; + } + + /** + * {@inheritdoc} + */ + public function resolve($toResolve): callable + { + $toResolve = $this->prepareToResolve($toResolve); + if (is_callable($toResolve)) { + return $this->bindToContainer($toResolve); + } + $resolved = $toResolve; + if (is_string($toResolve)) { + $resolved = $this->resolveSlimNotation($toResolve); + $resolved[1] ??= '__invoke'; + } + $callable = $this->assertCallable($resolved, $toResolve); + return $this->bindToContainer($callable); + } + + /** + * {@inheritdoc} + */ + public function resolveRoute($toResolve): callable + { + return $this->resolveByPredicate($toResolve, [$this, 'isRoute'], 'handle'); + } + + /** + * {@inheritdoc} + */ + public function resolveMiddleware($toResolve): callable + { + return $this->resolveByPredicate($toResolve, [$this, 'isMiddleware'], 'process'); + } + + /** + * @param string|callable $toResolve + * + * @throws RuntimeException + */ + private function resolveByPredicate($toResolve, callable $predicate, string $defaultMethod): callable + { + $toResolve = $this->prepareToResolve($toResolve); + if (is_callable($toResolve)) { + return $this->bindToContainer($toResolve); + } + $resolved = $toResolve; + if ($predicate($toResolve)) { + $resolved = [$toResolve, $defaultMethod]; + } + if (is_string($toResolve)) { + [$instance, $method] = $this->resolveSlimNotation($toResolve); + if ($method === null && $predicate($instance)) { + $method = $defaultMethod; + } + $resolved = [$instance, $method ?? '__invoke']; + } + $callable = $this->assertCallable($resolved, $toResolve); + return $this->bindToContainer($callable); + } + + /** + * @param mixed $toResolve + */ + private function isRoute($toResolve): bool + { + return $toResolve instanceof RequestHandlerInterface; + } + + /** + * @param mixed $toResolve + */ + private function isMiddleware($toResolve): bool + { + return $toResolve instanceof MiddlewareInterface; + } + + /** + * @throws RuntimeException + * + * @return array{object, string|null} [Instance, Method Name] + */ + private function resolveSlimNotation(string $toResolve): array + { + preg_match(CallableResolver::$callablePattern, $toResolve, $matches); + [$class, $method] = $matches ? [$matches[1], $matches[2]] : [$toResolve, null]; + + /** @var string $class */ + /** @var string|null $method */ + if ($this->container && $this->container->has($class)) { + $instance = $this->container->get($class); + if (!is_object($instance)) { + throw new RuntimeException(sprintf('%s container entry is not an object', $class)); + } + } else { + if (!class_exists($class)) { + if ($method) { + $class .= '::' . $method . '()'; + } + throw new RuntimeException(sprintf('Callable %s does not exist', $class)); + } + $instance = new $class($this->container); + } + return [$instance, $method]; + } + + /** + * @param mixed $resolved + * @param mixed $toResolve + * + * @throws RuntimeException + */ + private function assertCallable($resolved, $toResolve): callable + { + if (!is_callable($resolved)) { + if (is_callable($toResolve) || is_object($toResolve) || is_array($toResolve)) { + $formatedToResolve = ($toResolveJson = json_encode($toResolve)) !== false ? $toResolveJson : ''; + } else { + $formatedToResolve = is_string($toResolve) ? $toResolve : ''; + } + throw new RuntimeException(sprintf('%s is not resolvable', $formatedToResolve)); + } + return $resolved; + } + + private function bindToContainer(callable $callable): callable + { + if (is_array($callable) && $callable[0] instanceof Closure) { + $callable = $callable[0]; + } + if ($this->container && $callable instanceof Closure) { + /** @var Closure $callable */ + $callable = $callable->bindTo($this->container); + } + return $callable; + } + + /** + * @param string|callable $toResolve + * @return string|callable + */ + private function prepareToResolve($toResolve) + { + if (!is_array($toResolve)) { + return $toResolve; + } + $candidate = $toResolve; + $class = array_shift($candidate); + $method = array_shift($candidate); + if (is_string($class) && is_string($method)) { + return $class . ':' . $method; + } + return $toResolve; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php b/Sources/API/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php new file mode 100644 index 0000000..90b290d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Error/AbstractErrorRenderer.php @@ -0,0 +1,46 @@ +getTitle(); + } + + return $this->defaultErrorTitle; + } + + protected function getErrorDescription(Throwable $exception): string + { + if ($exception instanceof HttpException) { + return $exception->getDescription(); + } + + return $this->defaultErrorDescription; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php new file mode 100644 index 0000000..e030522 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php @@ -0,0 +1,84 @@ +The application could not run because of the following error:

'; + $html .= '

Details

'; + $html .= $this->renderExceptionFragment($exception); + } else { + $html = "

{$this->getErrorDescription($exception)}

"; + } + + return $this->renderHtmlBody($this->getErrorTitle($exception), $html); + } + + private function renderExceptionFragment(Throwable $exception): string + { + $html = sprintf('
Type: %s
', get_class($exception)); + + /** @var int|string $code */ + $code = $exception->getCode(); + $html .= sprintf('
Code: %s
', $code); + + $html .= sprintf('
Message: %s
', htmlentities($exception->getMessage())); + + $html .= sprintf('
File: %s
', $exception->getFile()); + + $html .= sprintf('
Line: %s
', $exception->getLine()); + + $html .= '

Trace

'; + $html .= sprintf('
%s
', htmlentities($exception->getTraceAsString())); + + return $html; + } + + public function renderHtmlBody(string $title = '', string $html = ''): string + { + return sprintf( + '' . + '' . + ' ' . + ' ' . + ' ' . + ' %s' . + ' ' . + ' ' . + ' ' . + '

%s

' . + '
%s
' . + '
Go Back' . + ' ' . + '', + $title, + $title, + $html + ); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php new file mode 100644 index 0000000..63d905b --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php @@ -0,0 +1,56 @@ + $this->getErrorTitle($exception)]; + + if ($displayErrorDetails) { + $error['exception'] = []; + do { + $error['exception'][] = $this->formatExceptionFragment($exception); + } while ($exception = $exception->getPrevious()); + } + + return (string) json_encode($error, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } + + /** + * @return array + */ + private function formatExceptionFragment(Throwable $exception): array + { + /** @var int|string $code */ + $code = $exception->getCode(); + return [ + 'type' => get_class($exception), + 'code' => $code, + 'message' => $exception->getMessage(), + 'file' => $exception->getFile(), + 'line' => $exception->getLine(), + ]; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php new file mode 100644 index 0000000..3d80c74 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php @@ -0,0 +1,59 @@ +getErrorTitle($exception)}\n"; + + if ($displayErrorDetails) { + $text .= $this->formatExceptionFragment($exception); + + while ($exception = $exception->getPrevious()) { + $text .= "\nPrevious Error:\n"; + $text .= $this->formatExceptionFragment($exception); + } + } + + return $text; + } + + private function formatExceptionFragment(Throwable $exception): string + { + $text = sprintf("Type: %s\n", get_class($exception)); + + $code = $exception->getCode(); + /** @var int|string $code */ + $text .= sprintf("Code: %s\n", $code); + + $text .= sprintf("Message: %s\n", htmlentities($exception->getMessage())); + + $text .= sprintf("File: %s\n", $exception->getFile()); + + $text .= sprintf("Line: %s\n", $exception->getLine()); + + $text .= sprintf('Trace: %s', $exception->getTraceAsString()); + + return $text; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php new file mode 100644 index 0000000..1171b79 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php @@ -0,0 +1,54 @@ +\n"; + $xml .= "\n " . $this->createCdataSection($this->getErrorTitle($exception)) . "\n"; + + if ($displayErrorDetails) { + do { + $xml .= " \n"; + $xml .= ' ' . get_class($exception) . "\n"; + $xml .= ' ' . $exception->getCode() . "\n"; + $xml .= ' ' . $this->createCdataSection($exception->getMessage()) . "\n"; + $xml .= ' ' . $exception->getFile() . "\n"; + $xml .= ' ' . $exception->getLine() . "\n"; + $xml .= " \n"; + } while ($exception = $exception->getPrevious()); + } + + $xml .= ''; + + return $xml; + } + + /** + * Returns a CDATA section with the given content. + */ + private function createCdataSection(string $content): string + { + return sprintf('', str_replace(']]>', ']]]]>', $content)); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php b/Sources/API/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php new file mode 100644 index 0000000..caea20f --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Exception/HttpBadRequestException.php @@ -0,0 +1,28 @@ +request = $request; + } + + public function getRequest(): ServerRequestInterface + { + return $this->request; + } + + public function getTitle(): string + { + return $this->title; + } + + public function setTitle(string $title): self + { + $this->title = $title; + return $this; + } + + public function getDescription(): string + { + return $this->description; + } + + public function setDescription(string $description): self + { + $this->description = $description; + return $this; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php b/Sources/API/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php new file mode 100644 index 0000000..dd3bb23 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Exception/HttpForbiddenException.php @@ -0,0 +1,27 @@ +allowedMethods; + } + + /** + * @param string[] $methods + */ + public function setAllowedMethods(array $methods): self + { + $this->allowedMethods = $methods; + $this->message = 'Method not allowed. Must be one of: ' . implode(', ', $methods); + return $this; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php b/Sources/API/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php new file mode 100644 index 0000000..865146d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Exception/HttpNotFoundException.php @@ -0,0 +1,27 @@ +message = $message; + } + + parent::__construct($request, $this->message, $this->code, $previous); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php b/Sources/API/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php new file mode 100644 index 0000000..07bd70d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Exception/HttpUnauthorizedException.php @@ -0,0 +1,27 @@ +has(ResponseFactoryInterface::class) + && ( + $responseFactoryFromContainer = $container->get(ResponseFactoryInterface::class) + ) instanceof ResponseFactoryInterface + ? $responseFactoryFromContainer + : self::determineResponseFactory(); + + $callableResolver = $container->has(CallableResolverInterface::class) + && ( + $callableResolverFromContainer = $container->get(CallableResolverInterface::class) + ) instanceof CallableResolverInterface + ? $callableResolverFromContainer + : null; + + $routeCollector = $container->has(RouteCollectorInterface::class) + && ( + $routeCollectorFromContainer = $container->get(RouteCollectorInterface::class) + ) instanceof RouteCollectorInterface + ? $routeCollectorFromContainer + : null; + + $routeResolver = $container->has(RouteResolverInterface::class) + && ( + $routeResolverFromContainer = $container->get(RouteResolverInterface::class) + ) instanceof RouteResolverInterface + ? $routeResolverFromContainer + : null; + + $middlewareDispatcher = $container->has(MiddlewareDispatcherInterface::class) + && ( + $middlewareDispatcherFromContainer = $container->get(MiddlewareDispatcherInterface::class) + ) instanceof MiddlewareDispatcherInterface + ? $middlewareDispatcherFromContainer + : null; + + return new App( + $responseFactory, + $container, + $callableResolver, + $routeCollector, + $routeResolver, + $middlewareDispatcher + ); + } + + /** + * @throws RuntimeException + */ + public static function determineResponseFactory(): ResponseFactoryInterface + { + if (static::$responseFactory) { + if (static::$streamFactory) { + return static::attemptResponseFactoryDecoration(static::$responseFactory, static::$streamFactory); + } + return static::$responseFactory; + } + + $psr17FactoryProvider = static::$psr17FactoryProvider ?? new Psr17FactoryProvider(); + + /** @var Psr17Factory $psr17factory */ + foreach ($psr17FactoryProvider->getFactories() as $psr17factory) { + if ($psr17factory::isResponseFactoryAvailable()) { + $responseFactory = $psr17factory::getResponseFactory(); + + if (static::$streamFactory || $psr17factory::isStreamFactoryAvailable()) { + $streamFactory = static::$streamFactory ?? $psr17factory::getStreamFactory(); + return static::attemptResponseFactoryDecoration($responseFactory, $streamFactory); + } + + return $responseFactory; + } + } + + throw new RuntimeException( + "Could not detect any PSR-17 ResponseFactory implementations. " . + "Please install a supported implementation in order to use `AppFactory::create()`. " . + "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations." + ); + } + + protected static function attemptResponseFactoryDecoration( + ResponseFactoryInterface $responseFactory, + StreamFactoryInterface $streamFactory + ): ResponseFactoryInterface { + if ( + static::$slimHttpDecoratorsAutomaticDetectionEnabled + && SlimHttpPsr17Factory::isResponseFactoryAvailable() + ) { + return SlimHttpPsr17Factory::createDecoratedResponseFactory($responseFactory, $streamFactory); + } + + return $responseFactory; + } + + public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void + { + static::$psr17FactoryProvider = $psr17FactoryProvider; + } + + public static function setResponseFactory(ResponseFactoryInterface $responseFactory): void + { + static::$responseFactory = $responseFactory; + } + + public static function setStreamFactory(StreamFactoryInterface $streamFactory): void + { + static::$streamFactory = $streamFactory; + } + + public static function setContainer(ContainerInterface $container): void + { + static::$container = $container; + } + + public static function setCallableResolver(CallableResolverInterface $callableResolver): void + { + static::$callableResolver = $callableResolver; + } + + public static function setRouteCollector(RouteCollectorInterface $routeCollector): void + { + static::$routeCollector = $routeCollector; + } + + public static function setRouteResolver(RouteResolverInterface $routeResolver): void + { + static::$routeResolver = $routeResolver; + } + + public static function setMiddlewareDispatcher(MiddlewareDispatcherInterface $middlewareDispatcher): void + { + static::$middlewareDispatcher = $middlewareDispatcher; + } + + public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void + { + static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php new file mode 100644 index 0000000..32a548a --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php @@ -0,0 +1,19 @@ +serverRequestCreator = $serverRequestCreator; + $this->serverRequestCreatorMethod = $serverRequestCreatorMethod; + } + + /** + * {@inheritdoc} + */ + public function createServerRequestFromGlobals(): ServerRequestInterface + { + /** @var callable $callable */ + $callable = [$this->serverRequestCreator, $this->serverRequestCreatorMethod]; + return (Closure::fromCallable($callable))(); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php new file mode 100644 index 0000000..5d63631 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php @@ -0,0 +1,39 @@ +serverRequestCreator = $serverRequestCreator; + } + + /** + * {@inheritdoc} + */ + public function createServerRequestFromGlobals(): ServerRequestInterface + { + if (!static::isServerRequestDecoratorAvailable()) { + throw new RuntimeException('The Slim-Http ServerRequest decorator is not available.'); + } + + $request = $this->serverRequestCreator->createServerRequestFromGlobals(); + + if ( + !(( + $decoratedServerRequest = new static::$serverRequestDecoratorClass($request) + ) instanceof ServerRequestInterface) + ) { + throw new RuntimeException(get_called_class() . ' could not instantiate a decorated server request.'); + } + + return $decoratedServerRequest; + } + + public static function isServerRequestDecoratorAvailable(): bool + { + return class_exists(static::$serverRequestDecoratorClass); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php new file mode 100644 index 0000000..46c46f9 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php @@ -0,0 +1,19 @@ +getFactories() as $psr17Factory) { + if ($psr17Factory::isServerRequestCreatorAvailable()) { + $serverRequestCreator = $psr17Factory::getServerRequestCreator(); + return static::attemptServerRequestCreatorDecoration($serverRequestCreator); + } + } + + throw new RuntimeException( + "Could not detect any ServerRequest creator implementations. " . + "Please install a supported implementation in order to use `App::run()` " . + "without having to pass in a `ServerRequest` object. " . + "See https://github.com/slimphp/Slim/blob/4.x/README.md for a list of supported implementations." + ); + } + + protected static function attemptServerRequestCreatorDecoration( + ServerRequestCreatorInterface $serverRequestCreator + ): ServerRequestCreatorInterface { + if ( + static::$slimHttpDecoratorsAutomaticDetectionEnabled + && SlimHttpServerRequestCreator::isServerRequestDecoratorAvailable() + ) { + return new SlimHttpServerRequestCreator($serverRequestCreator); + } + + return $serverRequestCreator; + } + + public static function setPsr17FactoryProvider(Psr17FactoryProviderInterface $psr17FactoryProvider): void + { + static::$psr17FactoryProvider = $psr17FactoryProvider; + } + + public static function setServerRequestCreator(ServerRequestCreatorInterface $serverRequestCreator): void + { + self::$serverRequestCreator = $serverRequestCreator; + } + + public static function setSlimHttpDecoratorsAutomaticDetection(bool $enabled): void + { + static::$slimHttpDecoratorsAutomaticDetectionEnabled = $enabled; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Handlers/ErrorHandler.php b/Sources/API/vendor/slim/slim/Slim/Handlers/ErrorHandler.php new file mode 100644 index 0000000..f9606e3 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Handlers/ErrorHandler.php @@ -0,0 +1,308 @@ + + */ + protected array $errorRenderers = [ + 'application/json' => JsonErrorRenderer::class, + 'application/xml' => XmlErrorRenderer::class, + 'text/xml' => XmlErrorRenderer::class, + 'text/html' => HtmlErrorRenderer::class, + 'text/plain' => PlainTextErrorRenderer::class, + ]; + + protected bool $displayErrorDetails = false; + + protected bool $logErrors; + + protected bool $logErrorDetails = false; + + protected ?string $contentType = null; + + protected ?string $method = null; + + protected ServerRequestInterface $request; + + protected Throwable $exception; + + protected int $statusCode; + + protected CallableResolverInterface $callableResolver; + + protected ResponseFactoryInterface $responseFactory; + + protected LoggerInterface $logger; + + public function __construct( + CallableResolverInterface $callableResolver, + ResponseFactoryInterface $responseFactory, + ?LoggerInterface $logger = null + ) { + $this->callableResolver = $callableResolver; + $this->responseFactory = $responseFactory; + $this->logger = $logger ?: $this->getDefaultLogger(); + } + + /** + * Invoke error handler + * + * @param ServerRequestInterface $request The most recent Request object + * @param Throwable $exception The caught Exception object + * @param bool $displayErrorDetails Whether or not to display the error details + * @param bool $logErrors Whether or not to log errors + * @param bool $logErrorDetails Whether or not to log error details + */ + public function __invoke( + ServerRequestInterface $request, + Throwable $exception, + bool $displayErrorDetails, + bool $logErrors, + bool $logErrorDetails + ): ResponseInterface { + $this->displayErrorDetails = $displayErrorDetails; + $this->logErrors = $logErrors; + $this->logErrorDetails = $logErrorDetails; + $this->request = $request; + $this->exception = $exception; + $this->method = $request->getMethod(); + $this->statusCode = $this->determineStatusCode(); + if ($this->contentType === null) { + $this->contentType = $this->determineContentType($request); + } + + if ($logErrors) { + $this->writeToErrorLog(); + } + + return $this->respond(); + } + + /** + * Force the content type for all error handler responses. + * + * @param string|null $contentType The content type + */ + public function forceContentType(?string $contentType): void + { + $this->contentType = $contentType; + } + + protected function determineStatusCode(): int + { + if ($this->method === 'OPTIONS') { + return 200; + } + + if ($this->exception instanceof HttpException) { + return $this->exception->getCode(); + } + + return 500; + } + + /** + * Determine which content type we know about is wanted using Accept header + * + * Note: This method is a bare-bones implementation designed specifically for + * Slim's error handling requirements. Consider a fully-feature solution such + * as willdurand/negotiation for any other situation. + */ + protected function determineContentType(ServerRequestInterface $request): ?string + { + $acceptHeader = $request->getHeaderLine('Accept'); + $selectedContentTypes = array_intersect( + explode(',', $acceptHeader), + array_keys($this->errorRenderers) + ); + $count = count($selectedContentTypes); + + if ($count) { + $current = current($selectedContentTypes); + + /** + * Ensure other supported content types take precedence over text/plain + * when multiple content types are provided via Accept header. + */ + if ($current === 'text/plain' && $count > 1) { + $next = next($selectedContentTypes); + if (is_string($next)) { + return $next; + } + } + + if (is_string($current)) { + return $current; + } + } + + if (preg_match('/\+(json|xml)/', $acceptHeader, $matches)) { + $mediaType = 'application/' . $matches[1]; + if (array_key_exists($mediaType, $this->errorRenderers)) { + return $mediaType; + } + } + + return null; + } + + /** + * Determine which renderer to use based on content type + * + * @throws RuntimeException + */ + protected function determineRenderer(): callable + { + if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) { + $renderer = $this->errorRenderers[$this->contentType]; + } else { + $renderer = $this->defaultErrorRenderer; + } + + return $this->callableResolver->resolve($renderer); + } + + /** + * Register an error renderer for a specific content-type + * + * @param string $contentType The content-type this renderer should be registered to + * @param ErrorRendererInterface|string|callable $errorRenderer The error renderer + */ + public function registerErrorRenderer(string $contentType, $errorRenderer): void + { + $this->errorRenderers[$contentType] = $errorRenderer; + } + + /** + * Set the default error renderer + * + * @param string $contentType The content type of the default error renderer + * @param ErrorRendererInterface|string|callable $errorRenderer The default error renderer + */ + public function setDefaultErrorRenderer(string $contentType, $errorRenderer): void + { + $this->defaultErrorRendererContentType = $contentType; + $this->defaultErrorRenderer = $errorRenderer; + } + + /** + * Set the renderer for the error logger + * + * @param ErrorRendererInterface|string|callable $logErrorRenderer + */ + public function setLogErrorRenderer($logErrorRenderer): void + { + $this->logErrorRenderer = $logErrorRenderer; + } + + /** + * Write to the error log if $logErrors has been set to true + */ + protected function writeToErrorLog(): void + { + $renderer = $this->callableResolver->resolve($this->logErrorRenderer); + $error = $renderer($this->exception, $this->logErrorDetails); + if (!$this->displayErrorDetails) { + $error .= "\nTips: To display error details in HTTP response "; + $error .= 'set "displayErrorDetails" to true in the ErrorHandler constructor.'; + } + $this->logError($error); + } + + /** + * Wraps the error_log function so that this can be easily tested + */ + protected function logError(string $error): void + { + $this->logger->error($error); + } + + /** + * Returns a default logger implementation. + */ + protected function getDefaultLogger(): LoggerInterface + { + return new Logger(); + } + + protected function respond(): ResponseInterface + { + $response = $this->responseFactory->createResponse($this->statusCode); + if ($this->contentType !== null && array_key_exists($this->contentType, $this->errorRenderers)) { + $response = $response->withHeader('Content-type', $this->contentType); + } else { + $response = $response->withHeader('Content-type', $this->defaultErrorRendererContentType); + } + + if ($this->exception instanceof HttpMethodNotAllowedException) { + $allowedMethods = implode(', ', $this->exception->getAllowedMethods()); + $response = $response->withHeader('Allow', $allowedMethods); + } + + $renderer = $this->determineRenderer(); + $body = call_user_func($renderer, $this->exception, $this->displayErrorDetails); + if ($body !== false) { + /** @var string $body */ + $response->getBody()->write($body); + } + + return $response; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php new file mode 100644 index 0000000..ea88a5f --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestHandler.php @@ -0,0 +1,48 @@ +appendRouteArgumentsToRequestAttributes = $appendRouteArgumentsToRequestAttributes; + } + + /** + * Invoke a route callable that implements RequestHandlerInterface + * + * @param array $routeArguments + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + if ($this->appendRouteArgumentsToRequestAttributes) { + foreach ($routeArguments as $k => $v) { + $request = $request->withAttribute($k, $v); + } + } + + return $callable($request); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php new file mode 100644 index 0000000..45b2c05 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php @@ -0,0 +1,40 @@ + $routeArguments + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + foreach ($routeArguments as $k => $v) { + $request = $request->withAttribute($k, $v); + } + + return $callable($request, $response, $routeArguments); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php new file mode 100644 index 0000000..c4ab16d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php @@ -0,0 +1,38 @@ + $routeArguments + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + return $callable($request, $response, ...array_values($routeArguments)); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php new file mode 100644 index 0000000..651111d --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php @@ -0,0 +1,44 @@ += 8.0.0'); + } + } + + /** + * Invoke a route callable with request, response and all route parameters + * as individual arguments. + * + * @param array $routeArguments + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface { + return $callable($request, $response, ...$routeArguments); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php b/Sources/API/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php new file mode 100644 index 0000000..aa1d897 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php @@ -0,0 +1,28 @@ + $routeArguments The route's placeholder arguments + * + * @return ResponseInterface The response from the callable. + */ + public function __invoke( + callable $callable, + ServerRequestInterface $request, + ResponseInterface $response, + array $routeArguments + ): ResponseInterface; +} diff --git a/Sources/API/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php b/Sources/API/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php new file mode 100644 index 0000000..aa7a26a --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php @@ -0,0 +1,42 @@ + + */ + public function getArguments(): array; + + /** + * Set a route argument + */ + public function setArgument(string $name, string $value): RouteInterface; + + /** + * Replace route arguments + * + * @param array $arguments + */ + public function setArguments(array $arguments): self; + + /** + * @param MiddlewareInterface|string|callable $middleware + */ + public function add($middleware): self; + + public function addMiddleware(MiddlewareInterface $middleware): self; + + /** + * Prepare the route for use + * + * @param array $arguments + */ + public function prepare(array $arguments): self; + + /** + * Run route + * + * This method traverses the middleware stack, including the route's callable + * and captures the resultant HTTP response object. It then sends the response + * back to the Application. + */ + public function run(ServerRequestInterface $request): ResponseInterface; +} diff --git a/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php b/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php new file mode 100644 index 0000000..03d9326 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteParserInterface.php @@ -0,0 +1,52 @@ + $data Named argument replacement data + * @param array $queryParams Optional query string parameters + * + * @throws RuntimeException If named route does not exist + * @throws InvalidArgumentException If required data not provided + */ + public function relativeUrlFor(string $routeName, array $data = [], array $queryParams = []): string; + + /** + * Build the path for a named route including the base path + * + * @param string $routeName Route name + * @param array $data Named argument replacement data + * @param array $queryParams Optional query string parameters + * + * @throws RuntimeException If named route does not exist + * @throws InvalidArgumentException If required data not provided + */ + public function urlFor(string $routeName, array $data = [], array $queryParams = []): string; + + /** + * Get fully qualified URL for named route + * + * @param UriInterface $uri + * @param string $routeName Route name + * @param array $data Named argument replacement data + * @param array $queryParams Optional query string parameters + */ + public function fullUrlFor(UriInterface $uri, string $routeName, array $data = [], array $queryParams = []): string; +} diff --git a/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php b/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php new file mode 100644 index 0000000..256a359 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Interfaces/RouteResolverInterface.php @@ -0,0 +1,17 @@ +getPath() + */ + public function computeRoutingResults(string $uri, string $method): RoutingResults; + + public function resolveRoute(string $identifier): RouteInterface; +} diff --git a/Sources/API/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php b/Sources/API/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php new file mode 100644 index 0000000..54d231e --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php @@ -0,0 +1,18 @@ + $context + * + * @throws InvalidArgumentException + */ + public function log($level, $message, array $context = []): void + { + error_log((string) $message); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php new file mode 100644 index 0000000..9a90f30 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/BodyParsingMiddleware.php @@ -0,0 +1,196 @@ + callable + */ + public function __construct(array $bodyParsers = []) + { + $this->registerDefaultBodyParsers(); + + foreach ($bodyParsers as $mediaType => $parser) { + $this->registerBodyParser($mediaType, $parser); + } + } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $parsedBody = $request->getParsedBody(); + + if (empty($parsedBody)) { + $parsedBody = $this->parseBody($request); + $request = $request->withParsedBody($parsedBody); + } + + return $handler->handle($request); + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + * @param callable $callable A callable that returns parsed contents for media type. + */ + public function registerBodyParser(string $mediaType, callable $callable): self + { + $this->bodyParsers[$mediaType] = $callable; + return $this; + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + */ + public function hasBodyParser(string $mediaType): bool + { + return isset($this->bodyParsers[$mediaType]); + } + + /** + * @param string $mediaType A HTTP media type (excluding content-type params). + * @throws RuntimeException + */ + public function getBodyParser(string $mediaType): callable + { + if (!isset($this->bodyParsers[$mediaType])) { + throw new RuntimeException('No parser for type ' . $mediaType); + } + return $this->bodyParsers[$mediaType]; + } + + protected function registerDefaultBodyParsers(): void + { + $this->registerBodyParser('application/json', static function ($input) { + $result = json_decode($input, true); + + if (!is_array($result)) { + return null; + } + + return $result; + }); + + $this->registerBodyParser('application/x-www-form-urlencoded', static function ($input) { + parse_str($input, $data); + return $data; + }); + + $xmlCallable = static function ($input) { + $backup = self::disableXmlEntityLoader(true); + $backup_errors = libxml_use_internal_errors(true); + $result = simplexml_load_string($input); + + self::disableXmlEntityLoader($backup); + libxml_clear_errors(); + libxml_use_internal_errors($backup_errors); + + if ($result === false) { + return null; + } + + return $result; + }; + + $this->registerBodyParser('application/xml', $xmlCallable); + $this->registerBodyParser('text/xml', $xmlCallable); + } + + /** + * @return null|array|object + */ + protected function parseBody(ServerRequestInterface $request) + { + $mediaType = $this->getMediaType($request); + if ($mediaType === null) { + return null; + } + + // Check if this specific media type has a parser registered first + if (!isset($this->bodyParsers[$mediaType])) { + // If not, look for a media type with a structured syntax suffix (RFC 6839) + $parts = explode('+', $mediaType); + if (count($parts) >= 2) { + $mediaType = 'application/' . $parts[count($parts) - 1]; + } + } + + if (isset($this->bodyParsers[$mediaType])) { + $body = (string)$request->getBody(); + $parsed = $this->bodyParsers[$mediaType]($body); + + if ($parsed !== null && !is_object($parsed) && !is_array($parsed)) { + throw new RuntimeException( + 'Request body media type parser return value must be an array, an object, or null' + ); + } + + return $parsed; + } + + return null; + } + + /** + * @return string|null The serverRequest media type, minus content-type params + */ + protected function getMediaType(ServerRequestInterface $request): ?string + { + $contentType = $request->getHeader('Content-Type')[0] ?? null; + + if (is_string($contentType) && trim($contentType) !== '') { + $contentTypeParts = explode(';', $contentType); + return strtolower(trim($contentTypeParts[0])); + } + + return null; + } + + protected static function disableXmlEntityLoader(bool $disable): bool + { + if (LIBXML_VERSION >= 20900) { + // libxml >= 2.9.0 disables entity loading by default, so it is + // safe to skip the real call (deprecated in PHP 8). + return true; + } + + // @codeCoverageIgnoreStart + return libxml_disable_entity_loader($disable); + // @codeCoverageIgnoreEnd + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php new file mode 100644 index 0000000..8fa13bc --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/ContentLengthMiddleware.php @@ -0,0 +1,32 @@ +handle($request); + + // Add Content-Length header if not already added + $size = $response->getBody()->getSize(); + if ($size !== null && !$response->hasHeader('Content-Length')) { + $response = $response->withHeader('Content-Length', (string) $size); + } + + return $response; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php new file mode 100644 index 0000000..2eb5cc9 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/ErrorMiddleware.php @@ -0,0 +1,212 @@ +callableResolver = $callableResolver; + $this->responseFactory = $responseFactory; + $this->displayErrorDetails = $displayErrorDetails; + $this->logErrors = $logErrors; + $this->logErrorDetails = $logErrorDetails; + $this->logger = $logger; + } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + try { + return $handler->handle($request); + } catch (Throwable $e) { + return $this->handleException($request, $e); + } + } + + public function handleException(ServerRequestInterface $request, Throwable $exception): ResponseInterface + { + if ($exception instanceof HttpException) { + $request = $exception->getRequest(); + } + + $exceptionType = get_class($exception); + $handler = $this->getErrorHandler($exceptionType); + + return $handler($request, $exception, $this->displayErrorDetails, $this->logErrors, $this->logErrorDetails); + } + + /** + * Get callable to handle scenarios where an error + * occurs when processing the current request. + * + * @param string $type Exception/Throwable name. ie: RuntimeException::class + * @return callable|ErrorHandler + */ + public function getErrorHandler(string $type) + { + if (isset($this->handlers[$type])) { + return $this->callableResolver->resolve($this->handlers[$type]); + } + + if (isset($this->subClassHandlers[$type])) { + return $this->callableResolver->resolve($this->subClassHandlers[$type]); + } + + foreach ($this->subClassHandlers as $class => $handler) { + if (is_subclass_of($type, $class)) { + return $this->callableResolver->resolve($handler); + } + } + + return $this->getDefaultErrorHandler(); + } + + /** + * Get default error handler + * + * @return ErrorHandler|callable + */ + public function getDefaultErrorHandler() + { + if ($this->defaultErrorHandler === null) { + $this->defaultErrorHandler = new ErrorHandler( + $this->callableResolver, + $this->responseFactory, + $this->logger + ); + } + + return $this->callableResolver->resolve($this->defaultErrorHandler); + } + + /** + * Set callable as the default Slim application error handler. + * + * The callable signature MUST match the ErrorHandlerInterface + * + * @see \Slim\Interfaces\ErrorHandlerInterface + * + * 1. Instance of \Psr\Http\Message\ServerRequestInterface + * 2. Instance of \Throwable + * 3. Boolean $displayErrorDetails + * 4. Boolean $logErrors + * 5. Boolean $logErrorDetails + * + * The callable MUST return an instance of + * \Psr\Http\Message\ResponseInterface. + * + * @param string|callable|ErrorHandler $handler + */ + public function setDefaultErrorHandler($handler): self + { + $this->defaultErrorHandler = $handler; + return $this; + } + + /** + * Set callable to handle scenarios where an error + * occurs when processing the current request. + * + * The callable signature MUST match the ErrorHandlerInterface + * + * Pass true to $handleSubclasses to make the handler handle all subclasses of + * the type as well. Pass an array of classes to make the same function handle multiple exceptions. + * + * @see \Slim\Interfaces\ErrorHandlerInterface + * + * 1. Instance of \Psr\Http\Message\ServerRequestInterface + * 2. Instance of \Throwable + * 3. Boolean $displayErrorDetails + * 4. Boolean $logErrors + * 5. Boolean $logErrorDetails + * + * The callable MUST return an instance of + * \Psr\Http\Message\ResponseInterface. + * + * @param string|string[] $typeOrTypes Exception/Throwable name. + * ie: RuntimeException::class or an array of classes + * ie: [HttpNotFoundException::class, HttpMethodNotAllowedException::class] + * @param string|callable|ErrorHandlerInterface $handler + */ + public function setErrorHandler($typeOrTypes, $handler, bool $handleSubclasses = false): self + { + if (is_array($typeOrTypes)) { + foreach ($typeOrTypes as $type) { + $this->addErrorHandler($type, $handler, $handleSubclasses); + } + } else { + $this->addErrorHandler($typeOrTypes, $handler, $handleSubclasses); + } + + return $this; + } + + /** + * Used internally to avoid code repetition when passing multiple exceptions to setErrorHandler(). + * @param string|callable|ErrorHandlerInterface $handler + */ + private function addErrorHandler(string $type, $handler, bool $handleSubclasses): void + { + if ($handleSubclasses) { + $this->subClassHandlers[$type] = $handler; + } else { + $this->handlers[$type] = $handler; + } + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php new file mode 100644 index 0000000..079a1f1 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php @@ -0,0 +1,43 @@ +getHeaderLine('X-Http-Method-Override'); + + if ($methodHeader) { + $request = $request->withMethod($methodHeader); + } elseif (strtoupper($request->getMethod()) === 'POST') { + $body = $request->getParsedBody(); + + if (is_array($body) && !empty($body['_METHOD'])) { + $request = $request->withMethod($body['_METHOD']); + } + + if ($request->getBody()->eof()) { + $request->getBody()->rewind(); + } + } + + return $handler->handle($request); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php new file mode 100644 index 0000000..69ee1f6 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php @@ -0,0 +1,74 @@ +streamFactory = $streamFactory; + $this->style = $style; + + if (!in_array($style, [static::APPEND, static::PREPEND], true)) { + throw new InvalidArgumentException("Invalid style `{$style}`. Must be `append` or `prepend`"); + } + } + + /** + * @throws Throwable + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + try { + ob_start(); + $response = $handler->handle($request); + $output = ob_get_clean(); + } catch (Throwable $e) { + ob_end_clean(); + throw $e; + } + + if (!empty($output)) { + if ($this->style === static::PREPEND) { + $body = $this->streamFactory->createStream(); + $body->write($output . $response->getBody()); + $response = $response->withBody($body); + } elseif ($this->style === static::APPEND && $response->getBody()->isWritable()) { + $response->getBody()->write($output); + } + } + + return $response; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php b/Sources/API/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php new file mode 100644 index 0000000..a3d3085 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php @@ -0,0 +1,98 @@ +routeResolver = $routeResolver; + $this->routeParser = $routeParser; + } + + /** + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + * @throws RuntimeException + */ + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + $request = $this->performRouting($request); + return $handler->handle($request); + } + + /** + * Perform routing + * + * @param ServerRequestInterface $request PSR7 Server Request + * + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + * @throws RuntimeException + */ + public function performRouting(ServerRequestInterface $request): ServerRequestInterface + { + $request = $request->withAttribute(RouteContext::ROUTE_PARSER, $this->routeParser); + + $routingResults = $this->resolveRoutingResultsFromRequest($request); + $routeStatus = $routingResults->getRouteStatus(); + + $request = $request->withAttribute(RouteContext::ROUTING_RESULTS, $routingResults); + + switch ($routeStatus) { + case RoutingResults::FOUND: + $routeArguments = $routingResults->getRouteArguments(); + $routeIdentifier = $routingResults->getRouteIdentifier() ?? ''; + $route = $this->routeResolver + ->resolveRoute($routeIdentifier) + ->prepare($routeArguments); + return $request->withAttribute(RouteContext::ROUTE, $route); + + case RoutingResults::NOT_FOUND: + throw new HttpNotFoundException($request); + + case RoutingResults::METHOD_NOT_ALLOWED: + $exception = new HttpMethodNotAllowedException($request); + $exception->setAllowedMethods($routingResults->getAllowedMethods()); + throw $exception; + + default: + throw new RuntimeException('An unexpected error occurred while performing routing.'); + } + } + + /** + * Resolves the route from the given request + */ + protected function resolveRoutingResultsFromRequest(ServerRequestInterface $request): RoutingResults + { + return $this->routeResolver->computeRoutingResults( + $request->getUri()->getPath(), + $request->getMethod() + ); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/MiddlewareDispatcher.php b/Sources/API/vendor/slim/slim/Slim/MiddlewareDispatcher.php new file mode 100644 index 0000000..7e05644 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/MiddlewareDispatcher.php @@ -0,0 +1,275 @@ +seedMiddlewareStack($kernel); + $this->callableResolver = $callableResolver; + $this->container = $container; + } + + /** + * {@inheritdoc} + */ + public function seedMiddlewareStack(RequestHandlerInterface $kernel): void + { + $this->tip = $kernel; + } + + /** + * Invoke the middleware stack + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->tip->handle($request); + } + + /** + * Add a new middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + * + * @param MiddlewareInterface|string|callable $middleware + */ + public function add($middleware): MiddlewareDispatcherInterface + { + if ($middleware instanceof MiddlewareInterface) { + return $this->addMiddleware($middleware); + } + + if (is_string($middleware)) { + return $this->addDeferred($middleware); + } + + if (is_callable($middleware)) { + return $this->addCallable($middleware); + } + + /** @phpstan-ignore-next-line */ + throw new RuntimeException( + 'A middleware must be an object/class name referencing an implementation of ' . + 'MiddlewareInterface or a callable with a matching signature.' + ); + } + + /** + * Add a new middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + */ + public function addMiddleware(MiddlewareInterface $middleware): MiddlewareDispatcherInterface + { + $next = $this->tip; + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface { + private MiddlewareInterface $middleware; + + private RequestHandlerInterface $next; + + public function __construct(MiddlewareInterface $middleware, RequestHandlerInterface $next) + { + $this->middleware = $middleware; + $this->next = $next; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return $this->middleware->process($request, $this->next); + } + }; + + return $this; + } + + /** + * Add a new middleware by class name + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + */ + public function addDeferred(string $middleware): self + { + $next = $this->tip; + $this->tip = new class ( + $middleware, + $next, + $this->container, + $this->callableResolver + ) implements RequestHandlerInterface { + private string $middleware; + + private RequestHandlerInterface $next; + + private ?ContainerInterface $container; + + private ?CallableResolverInterface $callableResolver; + + public function __construct( + string $middleware, + RequestHandlerInterface $next, + ?ContainerInterface $container = null, + ?CallableResolverInterface $callableResolver = null + ) { + $this->middleware = $middleware; + $this->next = $next; + $this->container = $container; + $this->callableResolver = $callableResolver; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveMiddleware($this->middleware); + return $callable($request, $this->next); + } + + $callable = null; + + if ($this->callableResolver instanceof CallableResolverInterface) { + try { + $callable = $this->callableResolver->resolve($this->middleware); + } catch (RuntimeException $e) { + // Do Nothing + } + } + + if (!$callable) { + $resolved = $this->middleware; + $instance = null; + $method = null; + + // Check for Slim callable as `class:method` + if (preg_match(CallableResolver::$callablePattern, $resolved, $matches)) { + $resolved = $matches[1]; + $method = $matches[2]; + } + + if ($this->container && $this->container->has($resolved)) { + $instance = $this->container->get($resolved); + if ($instance instanceof MiddlewareInterface) { + return $instance->process($request, $this->next); + } + } elseif (!function_exists($resolved)) { + if (!class_exists($resolved)) { + throw new RuntimeException(sprintf('Middleware %s does not exist', $resolved)); + } + $instance = new $resolved($this->container); + } + + if ($instance && $instance instanceof MiddlewareInterface) { + return $instance->process($request, $this->next); + } + + $callable = $instance ?? $resolved; + if ($instance && $method) { + $callable = [$instance, $method]; + } + + if ($this->container && $callable instanceof Closure) { + $callable = $callable->bindTo($this->container); + } + } + + if (!is_callable($callable)) { + throw new RuntimeException( + sprintf( + 'Middleware %s is not resolvable', + $this->middleware + ) + ); + } + + return $callable($request, $this->next); + } + }; + + return $this; + } + + /** + * Add a (non-standard) callable middleware to the stack + * + * Middleware are organized as a stack. That means middleware + * that have been added before will be executed after the newly + * added one (last in, first out). + */ + public function addCallable(callable $middleware): self + { + $next = $this->tip; + + if ($this->container && $middleware instanceof Closure) { + /** @var Closure $middleware */ + $middleware = $middleware->bindTo($this->container); + } + + $this->tip = new class ($middleware, $next) implements RequestHandlerInterface { + /** + * @var callable + */ + private $middleware; + + /** + * @var RequestHandlerInterface + */ + private $next; + + public function __construct(callable $middleware, RequestHandlerInterface $next) + { + $this->middleware = $middleware; + $this->next = $next; + } + + public function handle(ServerRequestInterface $request): ResponseInterface + { + return ($this->middleware)($request, $this->next); + } + }; + + return $this; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/ResponseEmitter.php b/Sources/API/vendor/slim/slim/Slim/ResponseEmitter.php new file mode 100644 index 0000000..fac36e9 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/ResponseEmitter.php @@ -0,0 +1,136 @@ +responseChunkSize = $responseChunkSize; + } + + /** + * Send the response the client + */ + public function emit(ResponseInterface $response): void + { + $isEmpty = $this->isResponseEmpty($response); + if (headers_sent() === false) { + $this->emitHeaders($response); + + // Set the status _after_ the headers, because of PHP's "helpful" behavior with location headers. + // See https://github.com/slimphp/Slim/issues/1730 + + $this->emitStatusLine($response); + } + + if (!$isEmpty) { + $this->emitBody($response); + } + } + + /** + * Emit Response Headers + */ + private function emitHeaders(ResponseInterface $response): void + { + foreach ($response->getHeaders() as $name => $values) { + $first = strtolower($name) !== 'set-cookie'; + foreach ($values as $value) { + $header = sprintf('%s: %s', $name, $value); + header($header, $first); + $first = false; + } + } + } + + /** + * Emit Status Line + */ + private function emitStatusLine(ResponseInterface $response): void + { + $statusLine = sprintf( + 'HTTP/%s %s %s', + $response->getProtocolVersion(), + $response->getStatusCode(), + $response->getReasonPhrase() + ); + header($statusLine, true, $response->getStatusCode()); + } + + /** + * Emit Body + */ + private function emitBody(ResponseInterface $response): void + { + $body = $response->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + + $amountToRead = (int) $response->getHeaderLine('Content-Length'); + if (!$amountToRead) { + $amountToRead = $body->getSize(); + } + + if ($amountToRead) { + while ($amountToRead > 0 && !$body->eof()) { + $length = min($this->responseChunkSize, $amountToRead); + $data = $body->read($length); + echo $data; + + $amountToRead -= strlen($data); + + if (connection_status() !== CONNECTION_NORMAL) { + break; + } + } + } else { + while (!$body->eof()) { + echo $body->read($this->responseChunkSize); + if (connection_status() !== CONNECTION_NORMAL) { + break; + } + } + } + } + + /** + * Asserts response body is empty or status code is 204, 205 or 304 + */ + public function isResponseEmpty(ResponseInterface $response): bool + { + if (in_array($response->getStatusCode(), [204, 205, 304], true)) { + return true; + } + $stream = $response->getBody(); + $seekable = $stream->isSeekable(); + if ($seekable) { + $stream->rewind(); + } + return $seekable ? $stream->read(1) === '' : $stream->eof(); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/Dispatcher.php b/Sources/API/vendor/slim/slim/Slim/Routing/Dispatcher.php new file mode 100644 index 0000000..e33eac3 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/Dispatcher.php @@ -0,0 +1,78 @@ +routeCollector = $routeCollector; + } + + protected function createDispatcher(): FastRouteDispatcher + { + if ($this->dispatcher) { + return $this->dispatcher; + } + + $routeDefinitionCallback = function (FastRouteCollector $r): void { + $basePath = $this->routeCollector->getBasePath(); + + foreach ($this->routeCollector->getRoutes() as $route) { + $r->addRoute($route->getMethods(), $basePath . $route->getPattern(), $route->getIdentifier()); + } + }; + + $cacheFile = $this->routeCollector->getCacheFile(); + if ($cacheFile) { + /** @var FastRouteDispatcher $dispatcher */ + $dispatcher = \FastRoute\cachedDispatcher($routeDefinitionCallback, [ + 'dataGenerator' => GroupCountBased::class, + 'dispatcher' => FastRouteDispatcher::class, + 'routeParser' => new Std(), + 'cacheFile' => $cacheFile, + ]); + } else { + /** @var FastRouteDispatcher $dispatcher */ + $dispatcher = \FastRoute\simpleDispatcher($routeDefinitionCallback, [ + 'dataGenerator' => GroupCountBased::class, + 'dispatcher' => FastRouteDispatcher::class, + 'routeParser' => new Std(), + ]); + } + + $this->dispatcher = $dispatcher; + return $this->dispatcher; + } + + /** + * {@inheritdoc} + */ + public function dispatch(string $method, string $uri): RoutingResults + { + $dispatcher = $this->createDispatcher(); + $results = $dispatcher->dispatch($method, $uri); + return new RoutingResults($this, $method, $uri, $results[0], $results[1], $results[2]); + } + + /** + * {@inheritdoc} + */ + public function getAllowedMethods(string $uri): array + { + $dispatcher = $this->createDispatcher(); + return $dispatcher->getAllowedMethods($uri); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php b/Sources/API/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php new file mode 100644 index 0000000..1f567b5 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/FastRouteDispatcher.php @@ -0,0 +1,109 @@ +} + */ + public function dispatch($httpMethod, $uri): array + { + $routingResults = $this->routingResults($httpMethod, $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + + // For HEAD requests, attempt fallback to GET + if ($httpMethod === 'HEAD') { + $routingResults = $this->routingResults('GET', $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + } + + // If nothing else matches, try fallback routes + $routingResults = $this->routingResults('*', $uri); + if ($routingResults[0] === self::FOUND) { + return $routingResults; + } + + if (!empty($this->getAllowedMethods($uri))) { + return [self::METHOD_NOT_ALLOWED, null, []]; + } + + return [self::NOT_FOUND, null, []]; + } + + /** + * @param string $httpMethod + * @param string $uri + * + * @return array{int, string|null, array} + */ + private function routingResults(string $httpMethod, string $uri): array + { + if (isset($this->staticRouteMap[$httpMethod][$uri])) { + /** @var string $routeIdentifier */ + $routeIdentifier = $this->staticRouteMap[$httpMethod][$uri]; + return [self::FOUND, $routeIdentifier, []]; + } + + if (isset($this->variableRouteData[$httpMethod])) { + /** @var array{0: int, 1?: string, 2?: array} $result */ + $result = $this->dispatchVariableRoute($this->variableRouteData[$httpMethod], $uri); + if ($result[0] === self::FOUND) { + /** @var array{int, string, array} $result */ + return [self::FOUND, $result[1], $result[2]]; + } + } + + return [self::NOT_FOUND, null, []]; + } + + /** + * @param string $uri + * + * @return string[] + */ + public function getAllowedMethods(string $uri): array + { + if (isset($this->allowedMethods[$uri])) { + return $this->allowedMethods[$uri]; + } + + $this->allowedMethods[$uri] = []; + foreach ($this->staticRouteMap as $method => $uriMap) { + if (isset($uriMap[$uri])) { + $this->allowedMethods[$uri][] = $method; + } + } + + foreach ($this->variableRouteData as $method => $routeData) { + $result = $this->dispatchVariableRoute($routeData, $uri); + if ($result[0] === self::FOUND) { + $this->allowedMethods[$uri][] = $method; + } + } + + return $this->allowedMethods[$uri]; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/Route.php b/Sources/API/vendor/slim/slim/Slim/Routing/Route.php new file mode 100644 index 0000000..c498423 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/Route.php @@ -0,0 +1,360 @@ + + */ + protected array $arguments = []; + + /** + * Route arguments parameters + * + * @var string[] + */ + protected array $savedArguments = []; + + /** + * Container + */ + protected ?ContainerInterface $container = null; + + protected MiddlewareDispatcher $middlewareDispatcher; + + /** + * Route callable + * + * @var callable|string + */ + protected $callable; + + protected CallableResolverInterface $callableResolver; + + protected ResponseFactoryInterface $responseFactory; + + /** + * Route pattern + */ + protected string $pattern; + + protected bool $groupMiddlewareAppended = false; + + /** + * @param string[] $methods The route HTTP methods + * @param string $pattern The route pattern + * @param callable|string $callable The route callable + * @param ResponseFactoryInterface $responseFactory + * @param CallableResolverInterface $callableResolver + * @param ContainerInterface|null $container + * @param InvocationStrategyInterface|null $invocationStrategy + * @param RouteGroup[] $groups The parent route groups + * @param int $identifier The route identifier + */ + public function __construct( + array $methods, + string $pattern, + $callable, + ResponseFactoryInterface $responseFactory, + CallableResolverInterface $callableResolver, + ?ContainerInterface $container = null, + ?InvocationStrategyInterface $invocationStrategy = null, + array $groups = [], + int $identifier = 0 + ) { + $this->methods = $methods; + $this->pattern = $pattern; + $this->callable = $callable; + $this->responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->invocationStrategy = $invocationStrategy ?? new RequestResponse(); + $this->groups = $groups; + $this->identifier = 'route' . $identifier; + $this->middlewareDispatcher = new MiddlewareDispatcher($this, $callableResolver, $container); + } + + public function getCallableResolver(): CallableResolverInterface + { + return $this->callableResolver; + } + + /** + * {@inheritdoc} + */ + public function getInvocationStrategy(): InvocationStrategyInterface + { + return $this->invocationStrategy; + } + + /** + * {@inheritdoc} + */ + public function setInvocationStrategy(InvocationStrategyInterface $invocationStrategy): RouteInterface + { + $this->invocationStrategy = $invocationStrategy; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getMethods(): array + { + return $this->methods; + } + + /** + * {@inheritdoc} + */ + public function getPattern(): string + { + return $this->pattern; + } + + /** + * {@inheritdoc} + */ + public function setPattern(string $pattern): RouteInterface + { + $this->pattern = $pattern; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getCallable() + { + return $this->callable; + } + + /** + * {@inheritdoc} + */ + public function setCallable($callable): RouteInterface + { + $this->callable = $callable; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getName(): ?string + { + return $this->name; + } + + /** + * {@inheritdoc} + */ + public function setName(string $name): RouteInterface + { + $this->name = $name; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getIdentifier(): string + { + return $this->identifier; + } + + /** + * {@inheritdoc} + */ + public function getArgument(string $name, ?string $default = null): ?string + { + if (array_key_exists($name, $this->arguments)) { + return $this->arguments[$name]; + } + return $default; + } + + /** + * {@inheritdoc} + */ + public function getArguments(): array + { + return $this->arguments; + } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments, bool $includeInSavedArguments = true): RouteInterface + { + if ($includeInSavedArguments) { + $this->savedArguments = $arguments; + } + + $this->arguments = $arguments; + return $this; + } + + /** + * @return RouteGroupInterface[] + */ + public function getGroups(): array + { + return $this->groups; + } + + /** + * {@inheritdoc} + */ + public function add($middleware): RouteInterface + { + $this->middlewareDispatcher->add($middleware); + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMiddleware(MiddlewareInterface $middleware): RouteInterface + { + $this->middlewareDispatcher->addMiddleware($middleware); + return $this; + } + + /** + * {@inheritdoc} + */ + public function prepare(array $arguments): RouteInterface + { + $this->arguments = array_replace($this->savedArguments, $arguments); + return $this; + } + + /** + * {@inheritdoc} + */ + public function setArgument(string $name, string $value, bool $includeInSavedArguments = true): RouteInterface + { + if ($includeInSavedArguments) { + $this->savedArguments[$name] = $value; + } + + $this->arguments[$name] = $value; + return $this; + } + + /** + * {@inheritdoc} + */ + public function run(ServerRequestInterface $request): ResponseInterface + { + if (!$this->groupMiddlewareAppended) { + $this->appendGroupMiddlewareToRoute(); + } + + return $this->middlewareDispatcher->handle($request); + } + + /** + * @return void + */ + protected function appendGroupMiddlewareToRoute(): void + { + $inner = $this->middlewareDispatcher; + $this->middlewareDispatcher = new MiddlewareDispatcher($inner, $this->callableResolver, $this->container); + + /** @var RouteGroupInterface $group */ + foreach (array_reverse($this->groups) as $group) { + $group->appendMiddlewareToDispatcher($this->middlewareDispatcher); + } + + $this->groupMiddlewareAppended = true; + } + + /** + * {@inheritdoc} + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveRoute($this->callable); + } else { + $callable = $this->callableResolver->resolve($this->callable); + } + $strategy = $this->invocationStrategy; + + /** @var string[] $strategyImplements */ + $strategyImplements = class_implements($strategy); + + if ( + is_array($callable) + && $callable[0] instanceof RequestHandlerInterface + && !in_array(RequestHandlerInvocationStrategyInterface::class, $strategyImplements) + ) { + $strategy = new RequestHandler(); + } + + $response = $this->responseFactory->createResponse(); + return $strategy($callable, $request, $response, $this->arguments); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollector.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollector.php new file mode 100644 index 0000000..4a74285 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollector.php @@ -0,0 +1,280 @@ +responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->defaultInvocationStrategy = $defaultInvocationStrategy ?? new RequestResponse(); + $this->routeParser = $routeParser ?? new RouteParser($this); + + if ($cacheFile) { + $this->setCacheFile($cacheFile); + } + } + + public function getRouteParser(): RouteParserInterface + { + return $this->routeParser; + } + + /** + * Get default route invocation strategy + */ + public function getDefaultInvocationStrategy(): InvocationStrategyInterface + { + return $this->defaultInvocationStrategy; + } + + public function setDefaultInvocationStrategy(InvocationStrategyInterface $strategy): RouteCollectorInterface + { + $this->defaultInvocationStrategy = $strategy; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getCacheFile(): ?string + { + return $this->cacheFile; + } + + /** + * {@inheritdoc} + */ + public function setCacheFile(string $cacheFile): RouteCollectorInterface + { + if (file_exists($cacheFile) && !is_readable($cacheFile)) { + throw new RuntimeException( + sprintf('Route collector cache file `%s` is not readable', $cacheFile) + ); + } + + if (!file_exists($cacheFile) && !is_writable(dirname($cacheFile))) { + throw new RuntimeException( + sprintf('Route collector cache file directory `%s` is not writable', dirname($cacheFile)) + ); + } + + $this->cacheFile = $cacheFile; + return $this; + } + + /** + * {@inheritdoc} + */ + public function getBasePath(): string + { + return $this->basePath; + } + + /** + * Set the base path used in urlFor() + */ + public function setBasePath(string $basePath): RouteCollectorInterface + { + $this->basePath = $basePath; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getRoutes(): array + { + return $this->routes; + } + + /** + * {@inheritdoc} + */ + public function removeNamedRoute(string $name): RouteCollectorInterface + { + $route = $this->getNamedRoute($name); + + unset($this->routesByName[$route->getName()], $this->routes[$route->getIdentifier()]); + return $this; + } + + /** + * {@inheritdoc} + */ + public function getNamedRoute(string $name): RouteInterface + { + if (isset($this->routesByName[$name])) { + $route = $this->routesByName[$name]; + if ($route->getName() === $name) { + return $route; + } + + unset($this->routesByName[$name]); + } + + foreach ($this->routes as $route) { + if ($name === $route->getName()) { + $this->routesByName[$name] = $route; + return $route; + } + } + + throw new RuntimeException('Named route does not exist for name: ' . $name); + } + + /** + * {@inheritdoc} + */ + public function lookupRoute(string $identifier): RouteInterface + { + if (!isset($this->routes[$identifier])) { + throw new RuntimeException('Route not found, looks like your route cache is stale.'); + } + return $this->routes[$identifier]; + } + + /** + * {@inheritdoc} + */ + public function group(string $pattern, $callable): RouteGroupInterface + { + $routeCollectorProxy = new RouteCollectorProxy( + $this->responseFactory, + $this->callableResolver, + $this->container, + $this, + $pattern + ); + + $routeGroup = new RouteGroup($pattern, $callable, $this->callableResolver, $routeCollectorProxy); + $this->routeGroups[] = $routeGroup; + + $routeGroup->collectRoutes(); + array_pop($this->routeGroups); + + return $routeGroup; + } + + /** + * {@inheritdoc} + */ + public function map(array $methods, string $pattern, $handler): RouteInterface + { + $route = $this->createRoute($methods, $pattern, $handler); + $this->routes[$route->getIdentifier()] = $route; + + $routeName = $route->getName(); + if ($routeName !== null && !isset($this->routesByName[$routeName])) { + $this->routesByName[$routeName] = $route; + } + + $this->routeCounter++; + + return $route; + } + + /** + * @param string[] $methods + * @param callable|string $callable + */ + protected function createRoute(array $methods, string $pattern, $callable): RouteInterface + { + return new Route( + $methods, + $pattern, + $callable, + $this->responseFactory, + $this->callableResolver, + $this->container, + $this->defaultInvocationStrategy, + $this->routeGroups, + $this->routeCounter + ); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php new file mode 100644 index 0000000..f8bc232 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteCollectorProxy.php @@ -0,0 +1,187 @@ +responseFactory = $responseFactory; + $this->callableResolver = $callableResolver; + $this->container = $container; + $this->routeCollector = $routeCollector ?? new RouteCollector($responseFactory, $callableResolver, $container); + $this->groupPattern = $groupPattern; + } + + /** + * {@inheritdoc} + */ + public function getResponseFactory(): ResponseFactoryInterface + { + return $this->responseFactory; + } + + /** + * {@inheritdoc} + */ + public function getCallableResolver(): CallableResolverInterface + { + return $this->callableResolver; + } + + /** + * {@inheritdoc} + */ + public function getContainer(): ?ContainerInterface + { + return $this->container; + } + + /** + * {@inheritdoc} + */ + public function getRouteCollector(): RouteCollectorInterface + { + return $this->routeCollector; + } + + /** + * {@inheritdoc} + */ + public function getBasePath(): string + { + return $this->routeCollector->getBasePath(); + } + + /** + * {@inheritdoc} + */ + public function setBasePath(string $basePath): RouteCollectorProxyInterface + { + $this->routeCollector->setBasePath($basePath); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function get(string $pattern, $callable): RouteInterface + { + return $this->map(['GET'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function post(string $pattern, $callable): RouteInterface + { + return $this->map(['POST'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function put(string $pattern, $callable): RouteInterface + { + return $this->map(['PUT'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function patch(string $pattern, $callable): RouteInterface + { + return $this->map(['PATCH'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function delete(string $pattern, $callable): RouteInterface + { + return $this->map(['DELETE'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function options(string $pattern, $callable): RouteInterface + { + return $this->map(['OPTIONS'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function any(string $pattern, $callable): RouteInterface + { + return $this->map(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function map(array $methods, string $pattern, $callable): RouteInterface + { + $pattern = $this->groupPattern . $pattern; + + return $this->routeCollector->map($methods, $pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function group(string $pattern, $callable): RouteGroupInterface + { + $pattern = $this->groupPattern . $pattern; + + return $this->routeCollector->group($pattern, $callable); + } + + /** + * {@inheritdoc} + */ + public function redirect(string $from, $to, int $status = 302): RouteInterface + { + $responseFactory = $this->responseFactory; + + $handler = function () use ($to, $status, $responseFactory) { + $response = $responseFactory->createResponse($status); + return $response->withHeader('Location', (string) $to); + }; + + return $this->get($from, $handler); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteContext.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteContext.php new file mode 100644 index 0000000..3ba5e23 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteContext.php @@ -0,0 +1,88 @@ +getAttribute(self::ROUTE); + $routeParser = $serverRequest->getAttribute(self::ROUTE_PARSER); + $routingResults = $serverRequest->getAttribute(self::ROUTING_RESULTS); + $basePath = $serverRequest->getAttribute(self::BASE_PATH); + + if ($routeParser === null || $routingResults === null) { + throw new RuntimeException('Cannot create RouteContext before routing has been completed'); + } + + /** @var RouteInterface|null $route */ + /** @var RouteParserInterface $routeParser */ + /** @var RoutingResults $routingResults */ + /** @var string|null $basePath */ + return new self($route, $routeParser, $routingResults, $basePath); + } + + private ?RouteInterface $route; + + private RouteParserInterface $routeParser; + + private RoutingResults $routingResults; + + private ?string $basePath; + + private function __construct( + ?RouteInterface $route, + RouteParserInterface $routeParser, + RoutingResults $routingResults, + ?string $basePath = null + ) { + $this->route = $route; + $this->routeParser = $routeParser; + $this->routingResults = $routingResults; + $this->basePath = $basePath; + } + + public function getRoute(): ?RouteInterface + { + return $this->route; + } + + public function getRouteParser(): RouteParserInterface + { + return $this->routeParser; + } + + public function getRoutingResults(): RoutingResults + { + return $this->routingResults; + } + + public function getBasePath(): string + { + if ($this->basePath === null) { + throw new RuntimeException('No base path defined.'); + } + return $this->basePath; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteGroup.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteGroup.php new file mode 100644 index 0000000..cd2f4e7 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteGroup.php @@ -0,0 +1,104 @@ +pattern = $pattern; + $this->callable = $callable; + $this->callableResolver = $callableResolver; + $this->routeCollectorProxy = $routeCollectorProxy; + } + + /** + * {@inheritdoc} + */ + public function collectRoutes(): RouteGroupInterface + { + if ($this->callableResolver instanceof AdvancedCallableResolverInterface) { + $callable = $this->callableResolver->resolveRoute($this->callable); + } else { + $callable = $this->callableResolver->resolve($this->callable); + } + $callable($this->routeCollectorProxy); + return $this; + } + + /** + * {@inheritdoc} + */ + public function add($middleware): RouteGroupInterface + { + $this->middleware[] = $middleware; + return $this; + } + + /** + * {@inheritdoc} + */ + public function addMiddleware(MiddlewareInterface $middleware): RouteGroupInterface + { + $this->middleware[] = $middleware; + return $this; + } + + /** + * {@inheritdoc} + */ + public function appendMiddlewareToDispatcher(MiddlewareDispatcher $dispatcher): RouteGroupInterface + { + foreach ($this->middleware as $middleware) { + $dispatcher->add($middleware); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function getPattern(): string + { + return $this->pattern; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteParser.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteParser.php new file mode 100644 index 0000000..afb533c --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteParser.php @@ -0,0 +1,127 @@ +routeCollector = $routeCollector; + $this->routeParser = new Std(); + } + + /** + * {@inheritdoc} + */ + public function relativeUrlFor(string $routeName, array $data = [], array $queryParams = []): string + { + $route = $this->routeCollector->getNamedRoute($routeName); + $pattern = $route->getPattern(); + + $segments = []; + $segmentName = ''; + + /* + * $routes is an associative array of expressions representing a route as multiple segments + * There is an expression for each optional parameter plus one without the optional parameters + * The most specific is last, hence why we reverse the array before iterating over it + */ + $expressions = array_reverse($this->routeParser->parse($pattern)); + foreach ($expressions as $expression) { + foreach ($expression as $segment) { + /* + * Each $segment is either a string or an array of strings + * containing optional parameters of an expression + */ + if (is_string($segment)) { + $segments[] = $segment; + continue; + } + + /** @var string[] $segment */ + /* + * If we don't have a data element for this segment in the provided $data + * we cancel testing to move onto the next expression with a less specific item + */ + if (!array_key_exists($segment[0], $data)) { + $segments = []; + $segmentName = $segment[0]; + break; + } + + $segments[] = $data[$segment[0]]; + } + + /* + * If we get to this logic block we have found all the parameters + * for the provided $data which means we don't need to continue testing + * less specific expressions + */ + if (!empty($segments)) { + break; + } + } + + if (empty($segments)) { + throw new InvalidArgumentException('Missing data for URL segment: ' . $segmentName); + } + + $url = implode('', $segments); + if ($queryParams) { + $url .= '?' . http_build_query($queryParams); + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function urlFor(string $routeName, array $data = [], array $queryParams = []): string + { + $basePath = $this->routeCollector->getBasePath(); + $url = $this->relativeUrlFor($routeName, $data, $queryParams); + + if ($basePath) { + $url = $basePath . $url; + } + + return $url; + } + + /** + * {@inheritdoc} + */ + public function fullUrlFor(UriInterface $uri, string $routeName, array $data = [], array $queryParams = []): string + { + $path = $this->urlFor($routeName, $data, $queryParams); + $scheme = $uri->getScheme(); + $authority = $uri->getAuthority(); + $protocol = ($scheme ? $scheme . ':' : '') . ($authority ? '//' . $authority : ''); + return $protocol . $path; + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteResolver.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteResolver.php new file mode 100644 index 0000000..d4f4eaf --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteResolver.php @@ -0,0 +1,56 @@ +routeCollector = $routeCollector; + $this->dispatcher = $dispatcher ?? new Dispatcher($routeCollector); + } + + /** + * @param string $uri Should be $request->getUri()->getPath() + */ + public function computeRoutingResults(string $uri, string $method): RoutingResults + { + $uri = rawurldecode($uri); + if ($uri === '' || $uri[0] !== '/') { + $uri = '/' . $uri; + } + return $this->dispatcher->dispatch($method, $uri); + } + + /** + * @throws RuntimeException + */ + public function resolveRoute(string $identifier): RouteInterface + { + return $this->routeCollector->lookupRoute($identifier); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RouteRunner.php b/Sources/API/vendor/slim/slim/Slim/Routing/RouteRunner.php new file mode 100644 index 0000000..40946af --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RouteRunner.php @@ -0,0 +1,70 @@ +routeResolver = $routeResolver; + $this->routeParser = $routeParser; + $this->routeCollectorProxy = $routeCollectorProxy; + } + + /** + * This request handler is instantiated automatically in App::__construct() + * It is at the very tip of the middleware queue meaning it will be executed + * last and it detects whether or not routing has been performed in the user + * defined middleware stack. In the event that the user did not perform routing + * it is done here + * + * @throws HttpNotFoundException + * @throws HttpMethodNotAllowedException + */ + public function handle(ServerRequestInterface $request): ResponseInterface + { + // If routing hasn't been done, then do it now so we can dispatch + if ($request->getAttribute(RouteContext::ROUTING_RESULTS) === null) { + $routingMiddleware = new RoutingMiddleware($this->routeResolver, $this->routeParser); + $request = $routingMiddleware->performRouting($request); + } + + if ($this->routeCollectorProxy !== null) { + $request = $request->withAttribute( + RouteContext::BASE_PATH, + $this->routeCollectorProxy->getBasePath() + ); + } + + /** @var Route $route */ + $route = $request->getAttribute(RouteContext::ROUTE); + return $route->run($request); + } +} diff --git a/Sources/API/vendor/slim/slim/Slim/Routing/RoutingResults.php b/Sources/API/vendor/slim/slim/Slim/Routing/RoutingResults.php new file mode 100644 index 0000000..ac2fa64 --- /dev/null +++ b/Sources/API/vendor/slim/slim/Slim/Routing/RoutingResults.php @@ -0,0 +1,112 @@ + + */ + protected array $routeArguments; + + /** + * @param array $routeArguments + */ + public function __construct( + DispatcherInterface $dispatcher, + string $method, + string $uri, + int $routeStatus, + ?string $routeIdentifier = null, + array $routeArguments = [] + ) { + $this->dispatcher = $dispatcher; + $this->method = $method; + $this->uri = $uri; + $this->routeStatus = $routeStatus; + $this->routeIdentifier = $routeIdentifier; + $this->routeArguments = $routeArguments; + } + + public function getDispatcher(): DispatcherInterface + { + return $this->dispatcher; + } + + public function getMethod(): string + { + return $this->method; + } + + public function getUri(): string + { + return $this->uri; + } + + public function getRouteStatus(): int + { + return $this->routeStatus; + } + + public function getRouteIdentifier(): ?string + { + return $this->routeIdentifier; + } + + /** + * @return array + */ + public function getRouteArguments(bool $urlDecode = true): array + { + if (!$urlDecode) { + return $this->routeArguments; + } + + $routeArguments = []; + foreach ($this->routeArguments as $key => $value) { + $routeArguments[$key] = rawurldecode($value); + } + + return $routeArguments; + } + + /** + * @return string[] + */ + public function getAllowedMethods(): array + { + return $this->dispatcher->getAllowedMethods($this->uri); + } +} diff --git a/Sources/API/vendor/slim/slim/composer.json b/Sources/API/vendor/slim/slim/composer.json new file mode 100644 index 0000000..31e8b55 --- /dev/null +++ b/Sources/API/vendor/slim/slim/composer.json @@ -0,0 +1,102 @@ +{ + "name": "slim/slim", + "type": "library", + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "keywords": ["framework","micro","api","router"], + "homepage": "https://www.slimframework.com", + "license": "MIT", + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Pierre Berube", + "email": "pierre@lgse.com", + "homepage": "http://www.lgse.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "support": { + "docs": "https://www.slimframework.com/docs/v4/", + "forum": "https://discourse.slimframework.com/", + "irc": "irc://irc.freenode.net:6667/slimphp", + "issues": "https://github.com/slimphp/Slim/issues", + "rss": "https://www.slimframework.com/blog/feed.rss", + "slack": "https://slimphp.slack.com/", + "source": "https://github.com/slimphp/Slim", + "wiki": "https://github.com/slimphp/Slim/wiki" + }, + "require": { + "php": "^7.4 || ^8.0", + "ext-json": "*", + "nikic/fast-route": "^1.3", + "psr/container": "^1.0 || ^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "ext-simplexml": "*", + "adriansuter/php-autoload-override": "^1.3", + "guzzlehttp/psr7": "^2.4", + "httpsoft/http-message": "^1.0", + "httpsoft/http-server-request": "^1.0", + "laminas/laminas-diactoros": "^2.17", + "nyholm/psr7": "^1.5", + "nyholm/psr7-server": "^1.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.5", + "slim/http": "^1.2", + "slim/psr7": "^1.5", + "squizlabs/php_codesniffer": "^3.7" + }, + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "autoload-dev": { + "psr-4": { + "Slim\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "@phpunit", + "@phpcs", + "@phpstan" + ], + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpstan": "phpstan --memory-limit=-1" + }, + "suggest": { + "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", + "ext-xml": "Needed to support XML format in BodyParsingMiddleware", + "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information.", + "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim" + }, + "config": { + "sort-packages": true + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/LICENSE b/Sources/API/vendor/symfony/polyfill-php80/LICENSE new file mode 100644 index 0000000..5593b1d --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020 Fabien Potencier + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/symfony/polyfill-php80/Php80.php b/Sources/API/vendor/symfony/polyfill-php80/Php80.php new file mode 100644 index 0000000..362dd1a --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Php80.php @@ -0,0 +1,115 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Ion Bazan + * @author Nico Oelgart + * @author Nicolas Grekas + * + * @internal + */ +final class Php80 +{ + public static function fdiv(float $dividend, float $divisor): float + { + return @($dividend / $divisor); + } + + public static function get_debug_type($value): string + { + switch (true) { + case null === $value: return 'null'; + case \is_bool($value): return 'bool'; + case \is_string($value): return 'string'; + case \is_array($value): return 'array'; + case \is_int($value): return 'int'; + case \is_float($value): return 'float'; + case \is_object($value): break; + case $value instanceof \__PHP_Incomplete_Class: return '__PHP_Incomplete_Class'; + default: + if (null === $type = @get_resource_type($value)) { + return 'unknown'; + } + + if ('Unknown' === $type) { + $type = 'closed'; + } + + return "resource ($type)"; + } + + $class = \get_class($value); + + if (false === strpos($class, '@')) { + return $class; + } + + return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous'; + } + + public static function get_resource_id($res): int + { + if (!\is_resource($res) && null === @get_resource_type($res)) { + throw new \TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res))); + } + + return (int) $res; + } + + public static function preg_last_error_msg(): string + { + switch (preg_last_error()) { + case \PREG_INTERNAL_ERROR: + return 'Internal error'; + case \PREG_BAD_UTF8_ERROR: + return 'Malformed UTF-8 characters, possibly incorrectly encoded'; + case \PREG_BAD_UTF8_OFFSET_ERROR: + return 'The offset did not correspond to the beginning of a valid UTF-8 code point'; + case \PREG_BACKTRACK_LIMIT_ERROR: + return 'Backtrack limit exhausted'; + case \PREG_RECURSION_LIMIT_ERROR: + return 'Recursion limit exhausted'; + case \PREG_JIT_STACKLIMIT_ERROR: + return 'JIT stack limit exhausted'; + case \PREG_NO_ERROR: + return 'No error'; + default: + return 'Unknown error'; + } + } + + public static function str_contains(string $haystack, string $needle): bool + { + return '' === $needle || false !== strpos($haystack, $needle); + } + + public static function str_starts_with(string $haystack, string $needle): bool + { + return 0 === strncmp($haystack, $needle, \strlen($needle)); + } + + public static function str_ends_with(string $haystack, string $needle): bool + { + if ('' === $needle || $needle === $haystack) { + return true; + } + + if ('' === $haystack) { + return false; + } + + $needleLength = \strlen($needle); + + return $needleLength <= \strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength); + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/PhpToken.php b/Sources/API/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..fe6e691 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/README.md b/Sources/API/vendor/symfony/polyfill-php80/README.md new file mode 100644 index 0000000..3816c55 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/README.md @@ -0,0 +1,25 @@ +Symfony Polyfill / Php80 +======================== + +This component provides features added to PHP 8.0 core: + +- [`Stringable`](https://php.net/stringable) interface +- [`fdiv`](https://php.net/fdiv) +- [`ValueError`](https://php.net/valueerror) class +- [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class +- `FILTER_VALIDATE_BOOL` constant +- [`get_debug_type`](https://php.net/get_debug_type) +- [`PhpToken`](https://php.net/phptoken) class +- [`preg_last_error_msg`](https://php.net/preg_last_error_msg) +- [`str_contains`](https://php.net/str_contains) +- [`str_starts_with`](https://php.net/str_starts_with) +- [`str_ends_with`](https://php.net/str_ends_with) +- [`get_resource_id`](https://php.net/get_resource_id) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php new file mode 100644 index 0000000..2b95542 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +#[Attribute(Attribute::TARGET_CLASS)] +final class Attribute +{ + public const TARGET_CLASS = 1; + public const TARGET_FUNCTION = 2; + public const TARGET_METHOD = 4; + public const TARGET_PROPERTY = 8; + public const TARGET_CLASS_CONSTANT = 16; + public const TARGET_PARAMETER = 32; + public const TARGET_ALL = 63; + public const IS_REPEATABLE = 64; + + /** @var int */ + public $flags; + + public function __construct(int $flags = self::TARGET_ALL) + { + $this->flags = $flags; + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php new file mode 100644 index 0000000..bd1212f --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { + class PhpToken extends Symfony\Polyfill\Php80\PhpToken + { + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php new file mode 100644 index 0000000..7c62d75 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + interface Stringable + { + /** + * @return string + */ + public function __toString(); + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php new file mode 100644 index 0000000..01c6c6c --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class UnhandledMatchError extends Error + { + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php new file mode 100644 index 0000000..783dbc2 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80000) { + class ValueError extends Error + { + } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/bootstrap.php b/Sources/API/vendor/symfony/polyfill-php80/bootstrap.php new file mode 100644 index 0000000..e5f7dbc --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/bootstrap.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php80 as p; + +if (\PHP_VERSION_ID >= 80000) { + return; +} + +if (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) { + define('FILTER_VALIDATE_BOOL', \FILTER_VALIDATE_BOOLEAN); +} + +if (!function_exists('fdiv')) { + function fdiv(float $num1, float $num2): float { return p\Php80::fdiv($num1, $num2); } +} +if (!function_exists('preg_last_error_msg')) { + function preg_last_error_msg(): string { return p\Php80::preg_last_error_msg(); } +} +if (!function_exists('str_contains')) { + function str_contains(?string $haystack, ?string $needle): bool { return p\Php80::str_contains($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_starts_with')) { + function str_starts_with(?string $haystack, ?string $needle): bool { return p\Php80::str_starts_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('str_ends_with')) { + function str_ends_with(?string $haystack, ?string $needle): bool { return p\Php80::str_ends_with($haystack ?? '', $needle ?? ''); } +} +if (!function_exists('get_debug_type')) { + function get_debug_type($value): string { return p\Php80::get_debug_type($value); } +} +if (!function_exists('get_resource_id')) { + function get_resource_id($resource): int { return p\Php80::get_resource_id($resource); } +} diff --git a/Sources/API/vendor/symfony/polyfill-php80/composer.json b/Sources/API/vendor/symfony/polyfill-php80/composer.json new file mode 100644 index 0000000..bd9a326 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-php80/composer.json @@ -0,0 +1,40 @@ +{ + "name": "symfony/polyfill-php80", + "type": "library", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} From f8caddc10d70975a9f687fac5d007b340a7a8699 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Sat, 10 Dec 2022 08:35:50 +0100 Subject: [PATCH 07/12] ajout d'une route de type post fonctionnelle --- Sources/API/routes/Inscrit.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index 244949f..e7d9ba8 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -31,7 +31,7 @@ $app->get('/Inscrit', function(Request $request, Response $response){ }); $app->post('/Inscrit/one', function(Request $request, Response $response,array $args){ - $mail = $request->getParsedBody(); + $mail = $request->getParsedBody()["email"]; $query = 'SELECT * FROM Inscrit WHERE mail=:mail'; try{ @@ -39,8 +39,9 @@ $app->post('/Inscrit/one', function(Request $request, Response $response,array $ $conn = $db->connect(); $stmt = $conn->prepare($query); - $stmt->bindValue(':mail',$mail, PDO::PARAM_STR); + $stmt->bindValue(':mail', $mail, PDO::PARAM_STR); + $stmt->execute(); $inscrit = $stmt->fetchAll(PDO::FETCH_OBJ); $db = null; From f10b2e4736bab306f05edf04e45c5e9244521b92 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Sun, 11 Dec 2022 23:46:01 +0100 Subject: [PATCH 08/12] ajout de deux routes avec des requetes PUT (pas encore fonctionnelle) et test de documentation avec swagger --- Sources/API/composer.json | 3 +- Sources/API/composer.lock | 613 ++++++- Sources/API/documentation/api.php | 6 + Sources/API/routes/Inscrit.php | 83 +- .../API/vendor/composer/autoload_files.php | 4 +- Sources/API/vendor/composer/autoload_psr4.php | 8 + .../API/vendor/composer/autoload_static.php | 50 +- Sources/API/vendor/composer/installed.json | 638 +++++++ Sources/API/vendor/composer/installed.php | 85 +- .../API/vendor/composer/platform_check.php | 4 +- .../API/vendor/doctrine/annotations/LICENSE | 19 + .../API/vendor/doctrine/annotations/README.md | 24 + .../vendor/doctrine/annotations/composer.json | 72 + .../annotations/docs/en/annotations.rst | 252 +++ .../doctrine/annotations/docs/en/custom.rst | 443 +++++ .../doctrine/annotations/docs/en/index.rst | 110 ++ .../doctrine/annotations/docs/en/sidebar.rst | 6 + .../Common/Annotations/Annotation.php | 57 + .../Annotations/Annotation/Attribute.php | 21 + .../Annotations/Annotation/Attributes.php | 15 + .../Common/Annotations/Annotation/Enum.php | 69 + .../Annotation/IgnoreAnnotation.php | 43 + .../Annotation/NamedArgumentConstructor.php | 13 + .../Annotations/Annotation/Required.php | 13 + .../Common/Annotations/Annotation/Target.php | 101 ++ .../Annotations/AnnotationException.php | 167 ++ .../Common/Annotations/AnnotationReader.php | 389 +++++ .../Common/Annotations/AnnotationRegistry.php | 190 +++ .../Common/Annotations/CachedReader.php | 266 +++ .../Doctrine/Common/Annotations/DocLexer.php | 139 ++ .../Doctrine/Common/Annotations/DocParser.php | 1485 +++++++++++++++++ .../Common/Annotations/FileCacheReader.php | 315 ++++ .../ImplicitlyIgnoredAnnotationNames.php | 178 ++ .../Common/Annotations/IndexedReader.php | 100 ++ .../NamedArgumentConstructorAnnotation.php | 14 + .../Doctrine/Common/Annotations/PhpParser.php | 92 + .../Common/Annotations/PsrCachedReader.php | 232 +++ .../Doctrine/Common/Annotations/Reader.php | 80 + .../Annotations/SimpleAnnotationReader.php | 114 ++ .../Common/Annotations/TokenParser.php | 206 +++ .../API/vendor/doctrine/annotations/psalm.xml | 15 + .../API/vendor/doctrine/deprecations/LICENSE | 19 + .../vendor/doctrine/deprecations/README.md | 154 ++ .../doctrine/deprecations/composer.json | 32 + .../lib/Doctrine/Deprecations/Deprecation.php | 266 +++ .../PHPUnit/VerifyDeprecations.php | 66 + .../vendor/doctrine/deprecations/phpcs.xml | 22 + Sources/API/vendor/doctrine/lexer/LICENSE | 19 + Sources/API/vendor/doctrine/lexer/README.md | 9 + Sources/API/vendor/doctrine/lexer/UPGRADE.md | 14 + .../API/vendor/doctrine/lexer/composer.json | 56 + .../doctrine/lexer/src/AbstractLexer.php | 336 ++++ .../API/vendor/doctrine/lexer/src/Token.php | 129 ++ Sources/API/vendor/psr/cache/CHANGELOG.md | 16 + Sources/API/vendor/psr/cache/LICENSE.txt | 19 + Sources/API/vendor/psr/cache/README.md | 12 + Sources/API/vendor/psr/cache/composer.json | 25 + .../vendor/psr/cache/src/CacheException.php | 10 + .../psr/cache/src/CacheItemInterface.php | 105 ++ .../psr/cache/src/CacheItemPoolInterface.php | 138 ++ .../cache/src/InvalidArgumentException.php | 13 + .../deprecation-contracts/CHANGELOG.md | 5 + .../symfony/deprecation-contracts/LICENSE | 19 + .../symfony/deprecation-contracts/README.md | 26 + .../deprecation-contracts/composer.json | 35 + .../deprecation-contracts/function.php | 27 + .../API/vendor/symfony/finder/CHANGELOG.md | 98 ++ .../symfony/finder/Comparator/Comparator.php | 62 + .../finder/Comparator/DateComparator.php | 50 + .../finder/Comparator/NumberComparator.php | 78 + .../Exception/AccessDeniedException.php | 19 + .../Exception/DirectoryNotFoundException.php | 19 + Sources/API/vendor/symfony/finder/Finder.php | 846 ++++++++++ .../API/vendor/symfony/finder/Gitignore.php | 93 ++ Sources/API/vendor/symfony/finder/Glob.php | 109 ++ .../finder/Iterator/CustomFilterIterator.php | 61 + .../Iterator/DateRangeFilterIterator.php | 58 + .../Iterator/DepthRangeFilterIterator.php | 48 + .../ExcludeDirectoryFilterIterator.php | 88 + .../Iterator/FileTypeFilterIterator.php | 53 + .../Iterator/FilecontentFilterIterator.php | 58 + .../Iterator/FilenameFilterIterator.php | 45 + .../symfony/finder/Iterator/LazyIterator.php | 32 + .../Iterator/MultiplePcreFilterIterator.php | 111 ++ .../finder/Iterator/PathFilterIterator.php | 56 + .../Iterator/RecursiveDirectoryIterator.php | 146 ++ .../Iterator/SizeRangeFilterIterator.php | 57 + .../finder/Iterator/SortableIterator.php | 121 ++ .../Iterator/VcsIgnoredFilterIterator.php | 178 ++ Sources/API/vendor/symfony/finder/LICENSE | 19 + Sources/API/vendor/symfony/finder/README.md | 14 + .../API/vendor/symfony/finder/SplFileInfo.php | 82 + .../API/vendor/symfony/finder/composer.json | 31 + .../vendor/symfony/polyfill-ctype/Ctype.php | 232 +++ .../API/vendor/symfony/polyfill-ctype/LICENSE | 19 + .../vendor/symfony/polyfill-ctype/README.md | 12 + .../symfony/polyfill-ctype/bootstrap.php | 50 + .../symfony/polyfill-ctype/bootstrap80.php | 46 + .../symfony/polyfill-ctype/composer.json | 41 + Sources/API/vendor/symfony/yaml/CHANGELOG.md | 248 +++ .../symfony/yaml/Command/LintCommand.php | 276 +++ Sources/API/vendor/symfony/yaml/Dumper.php | 138 ++ Sources/API/vendor/symfony/yaml/Escaper.php | 95 ++ .../symfony/yaml/Exception/DumpException.php | 21 + .../yaml/Exception/ExceptionInterface.php | 21 + .../symfony/yaml/Exception/ParseException.php | 126 ++ .../yaml/Exception/RuntimeException.php | 21 + Sources/API/vendor/symfony/yaml/Inline.php | 816 +++++++++ Sources/API/vendor/symfony/yaml/LICENSE | 19 + Sources/API/vendor/symfony/yaml/Parser.php | 1246 ++++++++++++++ Sources/API/vendor/symfony/yaml/README.md | 13 + .../vendor/symfony/yaml/Tag/TaggedValue.php | 38 + Sources/API/vendor/symfony/yaml/Unescaper.php | 110 ++ Sources/API/vendor/symfony/yaml/Yaml.php | 96 ++ Sources/API/vendor/symfony/yaml/composer.json | 41 + .../API/vendor/zircote/swagger-php/LICENSE | 202 +++ .../API/vendor/zircote/swagger-php/README.md | 155 ++ .../vendor/zircote/swagger-php/composer.json | 118 ++ .../src/Analysers/AnalyserInterface.php | 18 + .../Analysers/AnnotationFactoryInterface.php | 21 + .../Analysers/AttributeAnnotationFactory.php | 142 ++ .../Analysers/ComposerAutoloaderScanner.php | 53 + .../Analysers/DocBlockAnnotationFactory.php | 58 + .../src/Analysers/DocBlockParser.php | 83 + .../src/Analysers/ReflectionAnalyser.php | 190 +++ .../src/Analysers/TokenAnalyser.php | 639 +++++++ .../src/Analysers/TokenScanner.php | 366 ++++ .../zircote/swagger-php/src/Analysis.php | 439 +++++ .../src/Annotations/AbstractAnnotation.php | 716 ++++++++ .../src/Annotations/AdditionalProperties.php | 38 + .../src/Annotations/Attachable.php | 73 + .../src/Annotations/Components.php | 146 ++ .../swagger-php/src/Annotations/Contact.php | 63 + .../swagger-php/src/Annotations/Delete.php | 25 + .../src/Annotations/Discriminator.php | 69 + .../swagger-php/src/Annotations/Examples.php | 96 ++ .../src/Annotations/ExternalDocumentation.php | 76 + .../swagger-php/src/Annotations/Flow.php | 106 ++ .../swagger-php/src/Annotations/Get.php | 25 + .../swagger-php/src/Annotations/Head.php | 25 + .../swagger-php/src/Annotations/Header.php | 99 ++ .../swagger-php/src/Annotations/Info.php | 98 ++ .../swagger-php/src/Annotations/Items.php | 62 + .../src/Annotations/JsonContent.php | 42 + .../swagger-php/src/Annotations/License.php | 102 ++ .../swagger-php/src/Annotations/Link.php | 114 ++ .../swagger-php/src/Annotations/MediaType.php | 88 + .../swagger-php/src/Annotations/OpenApi.php | 233 +++ .../swagger-php/src/Annotations/Operation.php | 248 +++ .../swagger-php/src/Annotations/Options.php | 25 + .../swagger-php/src/Annotations/Parameter.php | 299 ++++ .../swagger-php/src/Annotations/Patch.php | 25 + .../swagger-php/src/Annotations/PathItem.php | 151 ++ .../src/Annotations/PathParameter.php | 25 + .../swagger-php/src/Annotations/Post.php | 25 + .../swagger-php/src/Annotations/Property.php | 47 + .../swagger-php/src/Annotations/Put.php | 25 + .../src/Annotations/RequestBody.php | 94 ++ .../swagger-php/src/Annotations/Response.php | 128 ++ .../swagger-php/src/Annotations/Schema.php | 444 +++++ .../src/Annotations/SecurityScheme.php | 136 ++ .../swagger-php/src/Annotations/Server.php | 87 + .../src/Annotations/ServerVariable.php | 87 + .../swagger-php/src/Annotations/Tag.php | 66 + .../swagger-php/src/Annotations/Trace.php | 25 + .../swagger-php/src/Annotations/Xml.php | 95 ++ .../src/Annotations/XmlContent.php | 43 + .../src/Attributes/AdditionalProperties.php | 101 ++ .../swagger-php/src/Attributes/Attachable.php | 16 + .../swagger-php/src/Attributes/Components.php | 47 + .../swagger-php/src/Attributes/Contact.php | 34 + .../swagger-php/src/Attributes/Delete.php | 13 + .../src/Attributes/Discriminator.php | 33 + .../swagger-php/src/Attributes/Examples.php | 42 + .../src/Attributes/ExternalDocumentation.php | 32 + .../swagger-php/src/Attributes/Flow.php | 38 + .../swagger-php/src/Attributes/Get.php | 13 + .../swagger-php/src/Attributes/Head.php | 13 + .../swagger-php/src/Attributes/Header.php | 40 + .../swagger-php/src/Attributes/Info.php | 38 + .../swagger-php/src/Attributes/Items.php | 105 ++ .../src/Attributes/JsonContent.php | 108 ++ .../swagger-php/src/Attributes/License.php | 34 + .../swagger-php/src/Attributes/Link.php | 44 + .../swagger-php/src/Attributes/MediaType.php | 38 + .../swagger-php/src/Attributes/OpenApi.php | 41 + .../src/Attributes/OperationTrait.php | 54 + .../swagger-php/src/Attributes/Options.php | 13 + .../swagger-php/src/Attributes/Parameter.php | 13 + .../src/Attributes/ParameterTrait.php | 60 + .../swagger-php/src/Attributes/Patch.php | 13 + .../swagger-php/src/Attributes/PathItem.php | 38 + .../src/Attributes/PathParameter.php | 13 + .../swagger-php/src/Attributes/Post.php | 13 + .../swagger-php/src/Attributes/Property.php | 107 ++ .../swagger-php/src/Attributes/Put.php | 13 + .../src/Attributes/RequestBody.php | 38 + .../swagger-php/src/Attributes/Response.php | 41 + .../swagger-php/src/Attributes/Schema.php | 106 ++ .../src/Attributes/SecurityScheme.php | 48 + .../swagger-php/src/Attributes/Server.php | 34 + .../src/Attributes/ServerVariable.php | 39 + .../swagger-php/src/Attributes/Tag.php | 33 + .../swagger-php/src/Attributes/Trace.php | 13 + .../swagger-php/src/Attributes/Xml.php | 38 + .../swagger-php/src/Attributes/XmlContent.php | 108 ++ .../zircote/swagger-php/src/Context.php | 274 +++ .../zircote/swagger-php/src/Generator.php | 475 ++++++ .../swagger-php/src/Loggers/ConsoleLogger.php | 97 ++ .../swagger-php/src/Loggers/DefaultLogger.php | 33 + .../src/Processors/AugmentParameters.php | 96 ++ .../src/Processors/AugmentProperties.php | 191 +++ .../src/Processors/AugmentRefs.php | 49 + .../src/Processors/AugmentSchemas.php | 112 ++ .../swagger-php/src/Processors/BuildPaths.php | 60 + .../src/Processors/CleanUnmerged.php | 35 + .../src/Processors/CleanUnusedComponents.php | 96 ++ .../Processors/Concerns/CollectorTrait.php | 67 + .../src/Processors/Concerns/DocblockTrait.php | 171 ++ .../Concerns/MergePropertiesTrait.php | 65 + .../src/Processors/Concerns/TypesTrait.php | 54 + .../src/Processors/DocBlockDescriptions.php | 94 ++ .../src/Processors/ExpandClasses.php | 50 + .../src/Processors/ExpandEnums.php | 106 ++ .../src/Processors/ExpandInterfaces.php | 56 + .../src/Processors/ExpandTraits.php | 81 + .../src/Processors/MergeIntoComponents.php | 34 + .../src/Processors/MergeIntoOpenApi.php | 55 + .../src/Processors/MergeJsonContent.php | 56 + .../src/Processors/MergeXmlContent.php | 56 + .../src/Processors/OperationId.php | 74 + .../zircote/swagger-php/src/Serializer.php | 209 +++ .../vendor/zircote/swagger-php/src/Util.php | 154 ++ 233 files changed, 26073 insertions(+), 10 deletions(-) create mode 100644 Sources/API/documentation/api.php create mode 100644 Sources/API/vendor/doctrine/annotations/LICENSE create mode 100644 Sources/API/vendor/doctrine/annotations/README.md create mode 100644 Sources/API/vendor/doctrine/annotations/composer.json create mode 100644 Sources/API/vendor/doctrine/annotations/docs/en/annotations.rst create mode 100644 Sources/API/vendor/doctrine/annotations/docs/en/custom.rst create mode 100644 Sources/API/vendor/doctrine/annotations/docs/en/index.rst create mode 100644 Sources/API/vendor/doctrine/annotations/docs/en/sidebar.rst create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attributes.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Required.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PhpParser.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php create mode 100644 Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php create mode 100644 Sources/API/vendor/doctrine/annotations/psalm.xml create mode 100644 Sources/API/vendor/doctrine/deprecations/LICENSE create mode 100644 Sources/API/vendor/doctrine/deprecations/README.md create mode 100644 Sources/API/vendor/doctrine/deprecations/composer.json create mode 100644 Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php create mode 100644 Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php create mode 100644 Sources/API/vendor/doctrine/deprecations/phpcs.xml create mode 100644 Sources/API/vendor/doctrine/lexer/LICENSE create mode 100644 Sources/API/vendor/doctrine/lexer/README.md create mode 100644 Sources/API/vendor/doctrine/lexer/UPGRADE.md create mode 100644 Sources/API/vendor/doctrine/lexer/composer.json create mode 100644 Sources/API/vendor/doctrine/lexer/src/AbstractLexer.php create mode 100644 Sources/API/vendor/doctrine/lexer/src/Token.php create mode 100644 Sources/API/vendor/psr/cache/CHANGELOG.md create mode 100644 Sources/API/vendor/psr/cache/LICENSE.txt create mode 100644 Sources/API/vendor/psr/cache/README.md create mode 100644 Sources/API/vendor/psr/cache/composer.json create mode 100644 Sources/API/vendor/psr/cache/src/CacheException.php create mode 100644 Sources/API/vendor/psr/cache/src/CacheItemInterface.php create mode 100644 Sources/API/vendor/psr/cache/src/CacheItemPoolInterface.php create mode 100644 Sources/API/vendor/psr/cache/src/InvalidArgumentException.php create mode 100644 Sources/API/vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 Sources/API/vendor/symfony/deprecation-contracts/LICENSE create mode 100644 Sources/API/vendor/symfony/deprecation-contracts/README.md create mode 100644 Sources/API/vendor/symfony/deprecation-contracts/composer.json create mode 100644 Sources/API/vendor/symfony/deprecation-contracts/function.php create mode 100644 Sources/API/vendor/symfony/finder/CHANGELOG.md create mode 100644 Sources/API/vendor/symfony/finder/Comparator/Comparator.php create mode 100644 Sources/API/vendor/symfony/finder/Comparator/DateComparator.php create mode 100644 Sources/API/vendor/symfony/finder/Comparator/NumberComparator.php create mode 100644 Sources/API/vendor/symfony/finder/Exception/AccessDeniedException.php create mode 100644 Sources/API/vendor/symfony/finder/Exception/DirectoryNotFoundException.php create mode 100644 Sources/API/vendor/symfony/finder/Finder.php create mode 100644 Sources/API/vendor/symfony/finder/Gitignore.php create mode 100644 Sources/API/vendor/symfony/finder/Glob.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/CustomFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/FilenameFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/LazyIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/PathFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/SortableIterator.php create mode 100644 Sources/API/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php create mode 100644 Sources/API/vendor/symfony/finder/LICENSE create mode 100644 Sources/API/vendor/symfony/finder/README.md create mode 100644 Sources/API/vendor/symfony/finder/SplFileInfo.php create mode 100644 Sources/API/vendor/symfony/finder/composer.json create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/LICENSE create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/README.md create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 Sources/API/vendor/symfony/polyfill-ctype/composer.json create mode 100644 Sources/API/vendor/symfony/yaml/CHANGELOG.md create mode 100644 Sources/API/vendor/symfony/yaml/Command/LintCommand.php create mode 100644 Sources/API/vendor/symfony/yaml/Dumper.php create mode 100644 Sources/API/vendor/symfony/yaml/Escaper.php create mode 100644 Sources/API/vendor/symfony/yaml/Exception/DumpException.php create mode 100644 Sources/API/vendor/symfony/yaml/Exception/ExceptionInterface.php create mode 100644 Sources/API/vendor/symfony/yaml/Exception/ParseException.php create mode 100644 Sources/API/vendor/symfony/yaml/Exception/RuntimeException.php create mode 100644 Sources/API/vendor/symfony/yaml/Inline.php create mode 100644 Sources/API/vendor/symfony/yaml/LICENSE create mode 100644 Sources/API/vendor/symfony/yaml/Parser.php create mode 100644 Sources/API/vendor/symfony/yaml/README.md create mode 100644 Sources/API/vendor/symfony/yaml/Tag/TaggedValue.php create mode 100644 Sources/API/vendor/symfony/yaml/Unescaper.php create mode 100644 Sources/API/vendor/symfony/yaml/Yaml.php create mode 100644 Sources/API/vendor/symfony/yaml/composer.json create mode 100644 Sources/API/vendor/zircote/swagger-php/LICENSE create mode 100644 Sources/API/vendor/zircote/swagger-php/README.md create mode 100644 Sources/API/vendor/zircote/swagger-php/composer.json create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/AnnotationFactoryInterface.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Analysis.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Attachable.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Components.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Contact.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Delete.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Discriminator.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Examples.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Flow.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Get.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Head.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Header.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Info.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Items.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/JsonContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/License.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Link.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/MediaType.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/OpenApi.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Operation.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Options.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Parameter.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Patch.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/PathItem.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/PathParameter.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Post.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Property.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Put.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/RequestBody.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Response.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Schema.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Server.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Tag.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Trace.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/Xml.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Annotations/XmlContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Attachable.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Components.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Contact.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Delete.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Discriminator.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Examples.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Flow.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Get.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Head.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Header.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Info.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Items.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/JsonContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/License.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Link.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/MediaType.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/OpenApi.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Options.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Parameter.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/ParameterTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Patch.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/PathItem.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/PathParameter.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Post.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Property.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Put.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/RequestBody.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Response.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Schema.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Server.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Tag.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Trace.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/Xml.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Attributes/XmlContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Context.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Generator.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/BuildPaths.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/CollectorTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/DocblockTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/MergePropertiesTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/TypesTrait.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Processors/OperationId.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Serializer.php create mode 100644 Sources/API/vendor/zircote/swagger-php/src/Util.php diff --git a/Sources/API/composer.json b/Sources/API/composer.json index 0158a81..6addf56 100644 --- a/Sources/API/composer.json +++ b/Sources/API/composer.json @@ -1,6 +1,7 @@ { "require": { "slim/slim": "4.*", - "slim/psr7": "^1.6" + "slim/psr7": "^1.6", + "zircote/swagger-php": "^4.5" } } diff --git a/Sources/API/composer.lock b/Sources/API/composer.lock index 8ff62b8..acf5477 100644 --- a/Sources/API/composer.lock +++ b/Sources/API/composer.lock @@ -4,8 +4,205 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3330638b65a325a8387769d50108b43a", + "content-hash": "07907c3d50700ee017ad7949856672cc", "packages": [ + { + "name": "doctrine/annotations", + "version": "1.14.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.0" + }, + "time": "2022-12-11T18:25:48+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "3cf140b81e55d5d640f73367d829db7e3023ef69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/3cf140b81e55d5d640f73367d829db7e3023ef69", + "reference": "3cf140b81e55d5d640f73367d829db7e3023ef69", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-11T10:51:23+00:00" + }, { "name": "fig/http-message-util", "version": "1.1.5", @@ -112,6 +309,55 @@ }, "time": "2018-02-13T20:26:39+00:00" }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -678,6 +924,219 @@ ], "time": "2022-11-06T16:33:39+00:00" }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-10-09T08:55:40+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, { "name": "symfony/polyfill-php80", "version": "v1.27.0", @@ -760,6 +1219,158 @@ } ], "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T19:00:27+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "4.5.1", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "eb84fb4d65a327e604812fbddc6c27f69b9ed6e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/eb84fb4d65a327e604812fbddc6c27f69b9ed6e2", + "reference": "eb84fb4d65a327e604812fbddc6c27f69b9ed6e2", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.7", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.5.1" + }, + "time": "2022-11-09T00:17:13+00:00" } ], "packages-dev": [], diff --git a/Sources/API/documentation/api.php b/Sources/API/documentation/api.php new file mode 100644 index 0000000..c2daa3d --- /dev/null +++ b/Sources/API/documentation/api.php @@ -0,0 +1,6 @@ +toJSON(); +?> \ No newline at end of file diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index e7d9ba8..9562879 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -1,11 +1,22 @@ get('/Inscrit', function(Request $request, Response $response){ +/** +* @OA\Get(path="/api/Inscrit", +* @OA\Response(response="200", description="Succes") +* @OA\Response(response="500", description="Bdd Error") +* ) +*/ +$app->get('/Inscrit/', function(Request $request, Response $response){ $query = "SELECT * FROM Inscrit"; try{ @@ -30,7 +41,7 @@ $app->get('/Inscrit', function(Request $request, Response $response){ } }); -$app->post('/Inscrit/one', function(Request $request, Response $response,array $args){ +$app->post('/Inscrit/FromMail/', function(Request $request, Response $response,array $args){ $mail = $request->getParsedBody()["email"]; $query = 'SELECT * FROM Inscrit WHERE mail=:mail'; @@ -58,4 +69,72 @@ $app->post('/Inscrit/one', function(Request $request, Response $response,array $ ->withStatus(500); } }); + +$app->put('/Inscrit/UpdatePassword/', function(Request $request, Response $response, array $args){ + $mail = $request->getParsedbody(); + $password = $request->getParsedBody()["password"]; + + var_dump($mail); + + $query = 'UPDATE Inscrit SET mdp=:password WHERE mail=:mail'; + + try{ + $db = new Database(); + $conn = $db->connect(); + + $stmt = $conn->prepare($query); + $stmt->bindValue(':mail', $mail, PDO::PARAM_STR); + $stmt->bindValue(':password', $password, PDO::PARAM_STR); + + $result = $stmt->execute(); + + $db = null; + $response->getBody()->write(json_encode($result)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(200); + } catch(PDOException $e){ + $error = array("message" => $e->getMessage()); + + $response->getBody()->write(json_encode($error)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(500); + } +}); + +$app->post('/Inscrit/add/', function(Request $request, Response $response, array $args){ + $nom = $request->getParsedBody()["nom"]; + $prenom = $request->getParsedBody()["prenom"]; + $mail = $request->getParsedbody()["email"]; + $password = $request->getParsedBody()["password"]; + + $query = "INSERT INTO Inscrit (nom, prenom, mail, mdp) VALUES (:nom, :prenom, :mail, :password);"; + + try{ + $db = new Database(); + $conn = $db->connect(); + + $stmt = $conn->prepare($query); + $stmt->bindValue(':nom', $nom, PDO::PARAM_STR); + $stmt->bindValue(':prenom', $prenom, PDO::PARAM_STR); + $stmt->bindValue(':mail', $mail, PDO::PARAM_STR); + $stmt->bindValue(':password', $password, PDO::PARAM_STR); + + $result = $stmt->execute(); + + $db = null; + $response->getBody()->write(json_encode($result)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(200); + } catch(PDOException $e){ + $error = array("message" => $e->getMessage()); + + $response->getBody()->write(json_encode($error)); + return $response + ->withHeader('content-type', 'application/json') + ->withStatus(500); + } +}) ?> \ No newline at end of file diff --git a/Sources/API/vendor/composer/autoload_files.php b/Sources/API/vendor/composer/autoload_files.php index 33dd33f..a9948aa 100644 --- a/Sources/API/vendor/composer/autoload_files.php +++ b/Sources/API/vendor/composer/autoload_files.php @@ -6,7 +6,9 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', ); diff --git a/Sources/API/vendor/composer/autoload_psr4.php b/Sources/API/vendor/composer/autoload_psr4.php index 5bba2b0..7bd4ca5 100644 --- a/Sources/API/vendor/composer/autoload_psr4.php +++ b/Sources/API/vendor/composer/autoload_psr4.php @@ -7,12 +7,20 @@ $baseDir = dirname($vendorDir); return array( 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'), 'Slim\\' => array($vendorDir . '/slim/slim/Slim'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), 'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'OpenApi\\' => array($vendorDir . '/zircote/swagger-php/src'), 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), + 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations'), + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'), + 'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib/Doctrine/Common/Annotations'), ); diff --git a/Sources/API/vendor/composer/autoload_static.php b/Sources/API/vendor/composer/autoload_static.php index 2d0493e..b5ab53d 100644 --- a/Sources/API/vendor/composer/autoload_static.php +++ b/Sources/API/vendor/composer/autoload_static.php @@ -7,15 +7,20 @@ namespace Composer\Autoload; class ComposerStaticInita934429c0ea4f4482346c5d296943a81 { public static $files = array ( - 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', + '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', ); public static $prefixLengthsPsr4 = array ( 'S' => array ( 'Symfony\\Polyfill\\Php80\\' => 23, + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Symfony\\Component\\Yaml\\' => 23, + 'Symfony\\Component\\Finder\\' => 25, 'Slim\\Psr7\\' => 10, 'Slim\\' => 5, ), @@ -25,12 +30,23 @@ class ComposerStaticInita934429c0ea4f4482346c5d296943a81 'Psr\\Http\\Server\\' => 16, 'Psr\\Http\\Message\\' => 17, 'Psr\\Container\\' => 14, + 'Psr\\Cache\\' => 10, + ), + 'O' => + array ( + 'OpenApi\\' => 8, ), 'F' => array ( 'Fig\\Http\\Message\\' => 17, 'FastRoute\\' => 10, ), + 'D' => + array ( + 'Doctrine\\Deprecations\\' => 22, + 'Doctrine\\Common\\Lexer\\' => 22, + 'Doctrine\\Common\\Annotations\\' => 28, + ), ); public static $prefixDirsPsr4 = array ( @@ -38,6 +54,18 @@ class ComposerStaticInita934429c0ea4f4482346c5d296943a81 array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php80', ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Symfony\\Component\\Yaml\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/yaml', + ), + 'Symfony\\Component\\Finder\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/finder', + ), 'Slim\\Psr7\\' => array ( 0 => __DIR__ . '/..' . '/slim/psr7/src', @@ -64,6 +92,14 @@ class ComposerStaticInita934429c0ea4f4482346c5d296943a81 array ( 0 => __DIR__ . '/..' . '/psr/container/src', ), + 'Psr\\Cache\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/cache/src', + ), + 'OpenApi\\' => + array ( + 0 => __DIR__ . '/..' . '/zircote/swagger-php/src', + ), 'Fig\\Http\\Message\\' => array ( 0 => __DIR__ . '/..' . '/fig/http-message-util/src', @@ -72,6 +108,18 @@ class ComposerStaticInita934429c0ea4f4482346c5d296943a81 array ( 0 => __DIR__ . '/..' . '/nikic/fast-route/src', ), + 'Doctrine\\Deprecations\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations', + ), + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/src', + ), + 'Doctrine\\Common\\Annotations\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/annotations/lib/Doctrine/Common/Annotations', + ), ); public static $classMap = array ( diff --git a/Sources/API/vendor/composer/installed.json b/Sources/API/vendor/composer/installed.json index b69dd50..34e0075 100644 --- a/Sources/API/vendor/composer/installed.json +++ b/Sources/API/vendor/composer/installed.json @@ -1,5 +1,211 @@ { "packages": [ + { + "name": "doctrine/annotations", + "version": "1.14.0", + "version_normalized": "1.14.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1 || ^2", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "time": "2022-12-11T18:25:48+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.14.0" + }, + "install-path": "../doctrine/annotations" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "time": "2022-05-02T15:47:09+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "install-path": "../doctrine/deprecations" + }, + { + "name": "doctrine/lexer", + "version": "2.0.0", + "version_normalized": "2.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "3cf140b81e55d5d640f73367d829db7e3023ef69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/3cf140b81e55d5d640f73367d829db7e3023ef69", + "reference": "3cf140b81e55d5d640f73367d829db7e3023ef69", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "time": "2022-12-11T10:51:23+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "install-path": "../doctrine/lexer" + }, { "name": "fig/http-message-util", "version": "1.1.5", @@ -112,6 +318,58 @@ }, "install-path": "../nikic/fast-route" }, + { + "name": "psr/cache", + "version": "3.0.0", + "version_normalized": "3.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "time": "2021-02-03T23:26:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "install-path": "../psr/cache" + }, { "name": "psr/container", "version": "2.0.2", @@ -705,6 +963,228 @@ ], "install-path": "../slim/slim" }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.0", + "version_normalized": "3.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "time": "2022-11-25T10:21:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/deprecation-contracts" + }, + { + "name": "symfony/finder", + "version": "v6.2.0", + "version_normalized": "6.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "time": "2022-10-09T08:55:40+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/finder" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2022-11-03T14:55:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, { "name": "symfony/polyfill-php80", "version": "v1.27.0", @@ -790,6 +1270,164 @@ } ], "install-path": "../symfony/polyfill-php80" + }, + { + "name": "symfony/yaml", + "version": "v6.2.0", + "version_normalized": "6.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "time": "2022-11-25T19:00:27+00:00", + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/yaml" + }, + { + "name": "zircote/swagger-php", + "version": "4.5.1", + "version_normalized": "4.5.1.0", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "eb84fb4d65a327e604812fbddc6c27f69b9ed6e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/eb84fb4d65a327e604812fbddc6c27f69b9ed6e2", + "reference": "eb84fb4d65a327e604812fbddc6c27f69b9ed6e2", + "shasum": "" + }, + "require": { + "doctrine/annotations": "^1.7", + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "time": "2022-11-09T00:17:13+00:00", + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.5.1" + }, + "install-path": "../zircote/swagger-php" } ], "dev": true, diff --git a/Sources/API/vendor/composer/installed.php b/Sources/API/vendor/composer/installed.php index e795d48..60cf54c 100644 --- a/Sources/API/vendor/composer/installed.php +++ b/Sources/API/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '7167670b929c4f3fec015404893ade05128b1ea4', + 'reference' => 'f8caddc10d70975a9f687fac5d007b340a7a8699', 'name' => '__root__', 'dev' => true, ), @@ -16,7 +16,34 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => '7167670b929c4f3fec015404893ade05128b1ea4', + 'reference' => 'f8caddc10d70975a9f687fac5d007b340a7a8699', + 'dev_requirement' => false, + ), + 'doctrine/annotations' => array( + 'pretty_version' => '1.14.0', + 'version' => '1.14.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/annotations', + 'aliases' => array(), + 'reference' => '3587ab58646bc515b2e03bbd3cfcd3682e8df5bf', + 'dev_requirement' => false, + ), + 'doctrine/deprecations' => array( + 'pretty_version' => 'v1.0.0', + 'version' => '1.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/deprecations', + 'aliases' => array(), + 'reference' => '0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de', + 'dev_requirement' => false, + ), + 'doctrine/lexer' => array( + 'pretty_version' => '2.0.0', + 'version' => '2.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../doctrine/lexer', + 'aliases' => array(), + 'reference' => '3cf140b81e55d5d640f73367d829db7e3023ef69', 'dev_requirement' => false, ), 'fig/http-message-util' => array( @@ -37,6 +64,15 @@ 'reference' => '181d480e08d9476e61381e04a71b34dc0432e812', 'dev_requirement' => false, ), + 'psr/cache' => array( + 'pretty_version' => '3.0.0', + 'version' => '3.0.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/cache', + 'aliases' => array(), + 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', + 'dev_requirement' => false, + ), 'psr/container' => array( 'pretty_version' => '2.0.2', 'version' => '2.0.2.0', @@ -130,6 +166,33 @@ 'reference' => 'b0f4ca393ea037be9ac7292ba7d0a34d18bac0c7', 'dev_requirement' => false, ), + 'symfony/deprecation-contracts' => array( + 'pretty_version' => 'v3.2.0', + 'version' => '3.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', + 'aliases' => array(), + 'reference' => '1ee04c65529dea5d8744774d474e7cbd2f1206d3', + 'dev_requirement' => false, + ), + 'symfony/finder' => array( + 'pretty_version' => 'v6.2.0', + 'version' => '6.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/finder', + 'aliases' => array(), + 'reference' => 'eb2355f69519e4ef33f1835bca4c935f5d42e570', + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a', + 'dev_requirement' => false, + ), 'symfony/polyfill-php80' => array( 'pretty_version' => 'v1.27.0', 'version' => '1.27.0.0', @@ -139,5 +202,23 @@ 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', 'dev_requirement' => false, ), + 'symfony/yaml' => array( + 'pretty_version' => 'v6.2.0', + 'version' => '6.2.0.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/yaml', + 'aliases' => array(), + 'reference' => 'f2570f21bd4adc3589aa3133323273995109bae0', + 'dev_requirement' => false, + ), + 'zircote/swagger-php' => array( + 'pretty_version' => '4.5.1', + 'version' => '4.5.1.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../zircote/swagger-php', + 'aliases' => array(), + 'reference' => 'eb84fb4d65a327e604812fbddc6c27f69b9ed6e2', + 'dev_requirement' => false, + ), ), ); diff --git a/Sources/API/vendor/composer/platform_check.php b/Sources/API/vendor/composer/platform_check.php index adfb472..4c3a5d6 100644 --- a/Sources/API/vendor/composer/platform_check.php +++ b/Sources/API/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 80000)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 80100)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/Sources/API/vendor/doctrine/annotations/LICENSE b/Sources/API/vendor/doctrine/annotations/LICENSE new file mode 100644 index 0000000..5e781fc --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2013 Doctrine Project + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/doctrine/annotations/README.md b/Sources/API/vendor/doctrine/annotations/README.md new file mode 100644 index 0000000..6b8c035 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/README.md @@ -0,0 +1,24 @@ +⚠️ PHP 8 introduced +[attributes](https://www.php.net/manual/en/language.attributes.overview.php), +which are a native replacement for annotations. As such, this library is +considered feature complete, and should receive exclusively bugfixes and +security fixes. + +# Doctrine Annotations + +[![Build Status](https://github.com/doctrine/annotations/workflows/Continuous%20Integration/badge.svg?label=build)](https://github.com/doctrine/persistence/actions) +[![Dependency Status](https://www.versioneye.com/package/php--doctrine--annotations/badge.png)](https://www.versioneye.com/package/php--doctrine--annotations) +[![Reference Status](https://www.versioneye.com/php/doctrine:annotations/reference_badge.svg)](https://www.versioneye.com/php/doctrine:annotations/references) +[![Total Downloads](https://poser.pugx.org/doctrine/annotations/downloads.png)](https://packagist.org/packages/doctrine/annotations) +[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/annotations.svg?label=stable)](https://packagist.org/packages/doctrine/annotations) + +Docblock Annotations Parser library (extracted from [Doctrine Common](https://github.com/doctrine/common)). + +## Documentation + +See the [doctrine-project website](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +## Contributing + +When making a pull request, make sure your changes follow the +[Coding Standard Guidelines](https://www.doctrine-project.org/projects/doctrine-coding-standard/en/current/reference/index.html#introduction). diff --git a/Sources/API/vendor/doctrine/annotations/composer.json b/Sources/API/vendor/doctrine/annotations/composer.json new file mode 100644 index 0000000..e322d82 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/composer.json @@ -0,0 +1,72 @@ +{ + "name": "doctrine/annotations", + "description": "Docblock Annotations Parser", + "license": "MIT", + "type": "library", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "require": { + "php": "^7.1 || ^8.0", + "ext-tokenizer": "*", + "doctrine/lexer": "^1 || ^2", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "autoload-dev": { + "psr-4": { + "Doctrine\\Performance\\Common\\Annotations\\": "tests/Doctrine/Performance/Common/Annotations", + "Doctrine\\Tests\\Common\\Annotations\\": "tests/Doctrine/Tests/Common/Annotations" + }, + "files": [ + "tests/Doctrine/Tests/Common/Annotations/Fixtures/functions.php", + "tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php" + ] + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true + } +} diff --git a/Sources/API/vendor/doctrine/annotations/docs/en/annotations.rst b/Sources/API/vendor/doctrine/annotations/docs/en/annotations.rst new file mode 100644 index 0000000..2c3c428 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/docs/en/annotations.rst @@ -0,0 +1,252 @@ +Handling Annotations +==================== + +There are several different approaches to handling annotations in PHP. +Doctrine Annotations maps docblock annotations to PHP classes. Because +not all docblock annotations are used for metadata purposes a filter is +applied to ignore or skip classes that are not Doctrine annotations. + +Take a look at the following code snippet: + +.. code-block:: php + + namespace MyProject\Entities; + + use Doctrine\ORM\Mapping AS ORM; + use Symfony\Component\Validator\Constraints AS Assert; + + /** + * @author Benjamin Eberlei + * @ORM\Entity + * @MyProject\Annotations\Foobarable + */ + class User + { + /** + * @ORM\Id @ORM\Column @ORM\GeneratedValue + * @dummy + * @var int + */ + private $id; + + /** + * @ORM\Column(type="string") + * @Assert\NotEmpty + * @Assert\Email + * @var string + */ + private $email; + } + +In this snippet you can see a variety of different docblock annotations: + +- Documentation annotations such as ``@var`` and ``@author``. These + annotations are ignored and never considered for throwing an + exception due to wrongly used annotations. +- Annotations imported through use statements. The statement ``use + Doctrine\ORM\Mapping AS ORM`` makes all classes under that namespace + available as ``@ORM\ClassName``. Same goes for the import of + ``@Assert``. +- The ``@dummy`` annotation. It is not a documentation annotation and + not ignored. For Doctrine Annotations it is not entirely clear how + to handle this annotation. Depending on the configuration an exception + (unknown annotation) will be thrown when parsing this annotation. +- The fully qualified annotation ``@MyProject\Annotations\Foobarable``. + This is transformed directly into the given class name. + +How are these annotations loaded? From looking at the code you could +guess that the ORM Mapping, Assert Validation and the fully qualified +annotation can just be loaded using +the defined PHP autoloaders. This is not the case however: For error +handling reasons every check for class existence inside the +``AnnotationReader`` sets the second parameter $autoload +of ``class_exists($name, $autoload)`` to false. To work flawlessly the +``AnnotationReader`` requires silent autoloaders which many autoloaders are +not. Silent autoloading is NOT part of the `PSR-0 specification +`_ +for autoloading. + +This is why Doctrine Annotations uses its own autoloading mechanism +through a global registry. If you are wondering about the annotation +registry being global, there is no other way to solve the architectural +problems of autoloading annotation classes in a straightforward fashion. +Additionally if you think about PHP autoloading then you recognize it is +a global as well. + +To anticipate the configuration section, making the above PHP class work +with Doctrine Annotations requires this setup: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + AnnotationRegistry::registerFile("/path/to/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); + AnnotationRegistry::registerAutoloadNamespace("Symfony\Component\Validator\Constraint", "/path/to/symfony/src"); + AnnotationRegistry::registerAutoloadNamespace("MyProject\Annotations", "/path/to/myproject/src"); + + $reader = new AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('dummy'); + +The second block with the annotation registry calls registers all the +three different annotation namespaces that are used. +Doctrine Annotations saves all its annotations in a single file, that is +why ``AnnotationRegistry#registerFile`` is used in contrast to +``AnnotationRegistry#registerAutoloadNamespace`` which creates a PSR-0 +compatible loading mechanism for class to file names. + +In the third block, we create the actual ``AnnotationReader`` instance. +Note that we also add ``dummy`` to the global list of ignored +annotations for which we do not throw exceptions. Setting this is +necessary in our example case, otherwise ``@dummy`` would trigger an +exception to be thrown during the parsing of the docblock of +``MyProject\Entities\User#id``. + +Setup and Configuration +----------------------- + +To use the annotations library is simple, you just need to create a new +``AnnotationReader`` instance: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + +This creates a simple annotation reader with no caching other than in +memory (in php arrays). Since parsing docblocks can be expensive you +should cache this process by using a caching reader. + +To cache annotations, you can create a ``Doctrine\Common\Annotations\PsrCachedReader``. +This reader decorates the original reader and stores all annotations in a PSR-6 +cache: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\PsrCachedReader; + + $cache = ... // instantiate a PSR-6 Cache pool + + $reader = new PsrCachedReader( + new AnnotationReader(), + $cache, + $debug = true + ); + +The ``debug`` flag is used here as well to invalidate the cache files +when the PHP class with annotations changed and should be used during +development. + +.. warning :: + + The ``AnnotationReader`` works and caches under the + assumption that all annotations of a doc-block are processed at + once. That means that annotation classes that do not exist and + aren't loaded and cannot be autoloaded (using the + AnnotationRegistry) would never be visible and not accessible if a + cache is used unless the cache is cleared and the annotations + requested again, this time with all annotations defined. + +By default the annotation reader returns a list of annotations with +numeric indexes. If you want your annotations to be indexed by their +class name you can wrap the reader in an ``IndexedReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\IndexedReader; + + $reader = new IndexedReader(new AnnotationReader()); + +.. warning:: + + You should never wrap the indexed reader inside a cached reader, + only the other way around. This way you can re-use the cache with + indexed or numeric keys, otherwise your code may experience failures + due to caching in a numerical or indexed format. + +Registering Annotations +~~~~~~~~~~~~~~~~~~~~~~~ + +As explained in the introduction, Doctrine Annotations uses its own +autoloading mechanism to determine if a given annotation has a +corresponding PHP class that can be autoloaded. For annotation +autoloading you have to configure the +``Doctrine\Common\Annotations\AnnotationRegistry``. There are three +different mechanisms to configure annotation autoloading: + +- Calling ``AnnotationRegistry#registerFile($file)`` to register a file + that contains one or more annotation classes. +- Calling ``AnnotationRegistry#registerNamespace($namespace, $dirs = + null)`` to register that the given namespace contains annotations and + that their base directory is located at the given $dirs or in the + include path if ``NULL`` is passed. The given directories should *NOT* + be the directory where classes of the namespace are in, but the base + directory of the root namespace. The AnnotationRegistry uses a + namespace to directory separator approach to resolve the correct path. +- Calling ``AnnotationRegistry#registerLoader($callable)`` to register + an autoloader callback. The callback accepts the class as first and + only parameter and has to return ``true`` if the corresponding file + was found and included. + +.. note:: + + Loaders have to fail silently, if a class is not found even if it + matches for example the namespace prefix of that loader. Never is a + loader to throw a warning or exception if the loading failed + otherwise parsing doc block annotations will become a huge pain. + +A sample loader callback could look like: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationRegistry; + use Symfony\Component\ClassLoader\UniversalClassLoader; + + AnnotationRegistry::registerLoader(function($class) { + $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; + + if (file_exists("/my/base/path/" . $file)) { + // file_exists() makes sure that the loader fails silently + require "/my/base/path/" . $file; + } + }); + + $loader = new UniversalClassLoader(); + AnnotationRegistry::registerLoader(array($loader, "loadClass")); + + +Ignoring missing exceptions +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default an exception is thrown from the ``AnnotationReader`` if an +annotation was found that: + +- is not part of the list of ignored "documentation annotations"; +- was not imported through a use statement; +- is not a fully qualified class that exists. + +You can disable this behavior for specific names if your docblocks do +not follow strict requirements: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + AnnotationReader::addGlobalIgnoredName('foo'); + +PHP Imports +~~~~~~~~~~~ + +By default the annotation reader parses the use-statement of a php file +to gain access to the import rules and register them for the annotation +processing. Only if you are using PHP Imports can you validate the +correct usage of annotations and throw exceptions if you misspelled an +annotation. This mechanism is enabled by default. + +To ease the upgrade path, we still allow you to disable this mechanism. +Note however that we will remove this in future versions: + +.. code-block:: php + + $reader = new \Doctrine\Common\Annotations\AnnotationReader(); + $reader->setEnabledPhpImports(false); diff --git a/Sources/API/vendor/doctrine/annotations/docs/en/custom.rst b/Sources/API/vendor/doctrine/annotations/docs/en/custom.rst new file mode 100644 index 0000000..e8f79af --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/docs/en/custom.rst @@ -0,0 +1,443 @@ +Custom Annotation Classes +========================= + +If you want to define your own annotations, you just have to group them +in a namespace and register this namespace in the ``AnnotationRegistry``. +Annotation classes have to contain a class-level docblock with the text +``@Annotation``: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** @Annotation */ + class Bar + { + // some code + } + +Inject annotation values +------------------------ + +The annotation parser checks if the annotation constructor has arguments, +if so then it will pass the value array, otherwise it will try to inject +values into public properties directly: + + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * + * Some Annotation using a constructor + */ + class Bar + { + private $foo; + + public function __construct(array $values) + { + $this->foo = $values['foo']; + } + } + + /** + * @Annotation + * + * Some Annotation without a constructor + */ + class Foo + { + public $bar; + } + +Optional: Constructors with Named Parameters +-------------------------------------------- + +Starting with Annotations v1.11 a new annotation instantiation strategy +is available that aims at compatibility of Annotation classes with the PHP 8 +attribute feature. You need to declare a constructor with regular parameter +names that match the named arguments in the annotation syntax. + +To enable this feature, you can tag your annotation class with +``@NamedArgumentConstructor`` (available from v1.12) or implement the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` interface +(available from v1.11 and deprecated as of v1.12). +When using the ``@NamedArgumentConstructor`` tag, the first argument of the +constructor is considered as the default one. + + +Usage with the ``@NamedArgumentConstructor`` tag + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(string $foo) + { + $this->foo = $foo; + } + } + + /** Usable with @Bar(foo="baz") */ + /** Usable with @Bar("baz") */ + +In combination with PHP 8's constructor property promotion feature +you can simplify this to: + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @NamedArgumentConstructor + */ + class Bar implements NamedArgumentConstructorAnnotation + { + public function __construct(private string $foo) {} + } + + +Usage with the +``Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation`` +interface (v1.11, deprecated as of v1.12): +.. code-block:: php + + namespace MyCompany\Annotations; + + use Doctrine\Common\Annotations\NamedArgumentConstructorAnnotation; + + /** @Annotation */ + class Bar implements NamedArgumentConstructorAnnotation + { + private $foo; + + public function __construct(private string $foo) {} + } + + /** Usable with @Bar(foo="baz") */ + +Annotation Target +----------------- + +``@Target`` indicates the kinds of class elements to which an annotation +type is applicable. Then you could define one or more targets: + +- ``CLASS`` Allowed in class docblocks +- ``PROPERTY`` Allowed in property docblocks +- ``METHOD`` Allowed in the method docblocks +- ``FUNCTION`` Allowed in function dockblocks +- ``ALL`` Allowed in class, property, method and function docblocks +- ``ANNOTATION`` Allowed inside other annotations + +If the annotations is not allowed in the current context, an +``AnnotationException`` is thrown. + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + // some code + } + + /** + * @Annotation + * @Target("CLASS") + */ + class Foo + { + // some code + } + +Attribute types +--------------- + +The annotation parser checks the given parameters using the phpdoc +annotation ``@var``, The data type could be validated using the ``@var`` +annotation on the annotation properties or using the ``@Attributes`` and +``@Attribute`` annotations. + +If the data type does not match you get an ``AnnotationException`` + +.. code-block:: php + + namespace MyCompany\Annotations; + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + */ + class Bar + { + /** @var mixed */ + public $mixed; + + /** @var boolean */ + public $boolean; + + /** @var bool */ + public $bool; + + /** @var float */ + public $float; + + /** @var string */ + public $string; + + /** @var integer */ + public $integer; + + /** @var array */ + public $array; + + /** @var SomeAnnotationClass */ + public $annotation; + + /** @var array */ + public $arrayOfIntegers; + + /** @var array */ + public $arrayOfAnnotations; + } + + /** + * @Annotation + * @Target({"METHOD","PROPERTY"}) + * @Attributes({ + * @Attribute("stringProperty", type = "string"), + * @Attribute("annotProperty", type = "SomeAnnotationClass"), + * }) + */ + class Foo + { + public function __construct(array $values) + { + $this->stringProperty = $values['stringProperty']; + $this->annotProperty = $values['annotProperty']; + } + + // some code + } + +Annotation Required +------------------- + +``@Required`` indicates that the field must be specified when the +annotation is used. If it is not used you get an ``AnnotationException`` +stating that this value can not be null. + +Declaring a required field: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Foo + { + /** @Required */ + public $requiredField; + } + +Usage: + +.. code-block:: php + + /** @Foo(requiredField="value") */ + public $direction; // Valid + + /** @Foo */ + public $direction; // Required field missing, throws an AnnotationException + + +Enumerated values +----------------- + +- An annotation property marked with ``@Enum`` is a field that accepts a + fixed set of scalar values. +- You should use ``@Enum`` fields any time you need to represent fixed + values. +- The annotation parser checks the given value and throws an + ``AnnotationException`` if the value does not match. + + +Declaring an enumerated property: + +.. code-block:: php + + /** + * @Annotation + * @Target("ALL") + */ + class Direction + { + /** + * @Enum({"NORTH", "SOUTH", "EAST", "WEST"}) + */ + public $value; + } + +Annotation usage: + +.. code-block:: php + + /** @Direction("NORTH") */ + public $direction; // Valid value + + /** @Direction("NORTHEAST") */ + public $direction; // Invalid value, throws an AnnotationException + + +Constants +--------- + +The use of constants and class constants is available on the annotations +parser. + +The following usages are allowed: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + use MyCompany\Entity\SomeClass; + + /** + * @Foo(PHP_EOL) + * @Bar(Bar::FOO) + * @Foo({SomeClass::FOO, SomeClass::BAR}) + * @Bar({SomeClass::FOO_KEY = SomeClass::BAR_VALUE}) + */ + class User + { + } + + +Be careful with constants and the cache ! + +.. note:: + + The cached reader will not re-evaluate each time an annotation is + loaded from cache. When a constant is changed the cache must be + cleaned. + + +Usage +----- + +Using the library API is simple. Using the annotations described in the +previous section, you can now annotate other classes with your +annotations: + +.. code-block:: php + + namespace MyCompany\Entity; + + use MyCompany\Annotations\Foo; + use MyCompany\Annotations\Bar; + + /** + * @Foo(bar="foo") + * @Bar(foo="bar") + */ + class User + { + } + +Now we can write a script to get the annotations above: + +.. code-block:: php + + $reflClass = new ReflectionClass('MyCompany\Entity\User'); + $classAnnotations = $reader->getClassAnnotations($reflClass); + + foreach ($classAnnotations AS $annot) { + if ($annot instanceof \MyCompany\Annotations\Foo) { + echo $annot->bar; // prints "foo"; + } else if ($annot instanceof \MyCompany\Annotations\Bar) { + echo $annot->foo; // prints "bar"; + } + } + +You have a complete API for retrieving annotation class instances from a +class, property or method docblock: + + +Reader API +~~~~~~~~~~ + +Access all annotations of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotations(\ReflectionClass $class); + +Access one annotation of a class +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getClassAnnotation(\ReflectionClass $class, $annotationName); + +Access all annotations of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotations(\ReflectionMethod $method); + +Access one annotation of a method +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getMethodAnnotation(\ReflectionMethod $method, $annotationName); + +Access all annotations of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotations(\ReflectionProperty $property); + +Access one annotation of a property +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); + +Access all annotations of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotations(\ReflectionFunction $property); + +Access one annotation of a function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: php + + public function getFunctionAnnotation(\ReflectionFunction $property, $annotationName); diff --git a/Sources/API/vendor/doctrine/annotations/docs/en/index.rst b/Sources/API/vendor/doctrine/annotations/docs/en/index.rst new file mode 100644 index 0000000..7caffb5 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/docs/en/index.rst @@ -0,0 +1,110 @@ +Deprecation notice +================== + +PHP 8 introduced `attributes +`_, +which are a native replacement for annotations. As such, this library is +considered feature complete, and should receive exclusively bugfixes and +security fixes. + +Introduction +============ + +Doctrine Annotations allows to implement custom annotation +functionality for PHP classes and functions. + +.. code-block:: php + + class Foo + { + /** + * @MyAnnotation(myProperty="value") + */ + private $bar; + } + +Annotations aren't implemented in PHP itself which is why this component +offers a way to use the PHP doc-blocks as a place for the well known +annotation syntax using the ``@`` char. + +Annotations in Doctrine are used for the ORM configuration to build the +class mapping, but it can be used in other projects for other purposes +too. + +Installation +============ + +You can install the Annotation component with composer: + +.. code-block:: + +   $ composer require doctrine/annotations + +Create an annotation class +========================== + +An annotation class is a representation of the later used annotation +configuration in classes. The annotation class of the previous example +looks like this: + +.. code-block:: php + + /** + * @Annotation + */ + final class MyAnnotation + { + public $myProperty; + } + +The annotation class is declared as an annotation by ``@Annotation``. + +:ref:`Read more about custom annotations. ` + +Reading annotations +=================== + +The access to the annotations happens by reflection of the class or function +containing them. There are multiple reader-classes implementing the +``Doctrine\Common\Annotations\Reader`` interface, that can access the +annotations of a class. A common one is +``Doctrine\Common\Annotations\AnnotationReader``: + +.. code-block:: php + + use Doctrine\Common\Annotations\AnnotationReader; + use Doctrine\Common\Annotations\AnnotationRegistry; + + // Deprecated and will be removed in 2.0 but currently needed + AnnotationRegistry::registerLoader('class_exists'); + + $reflectionClass = new ReflectionClass(Foo::class); + $property = $reflectionClass->getProperty('bar'); + + $reader = new AnnotationReader(); + $myAnnotation = $reader->getPropertyAnnotation( + $property, + MyAnnotation::class + ); + + echo $myAnnotation->myProperty; // result: "value" + +Note that ``AnnotationRegistry::registerLoader('class_exists')`` only works +if you already have an autoloader configured (i.e. composer autoloader). +Otherwise, :ref:`please take a look to the other annotation autoload mechanisms `. + +A reader has multiple methods to access the annotations of a class or +function. + +:ref:`Read more about handling annotations. ` + +IDE Support +----------- + +Some IDEs already provide support for annotations: + +- Eclipse via the `Symfony2 Plugin `_ +- PhpStorm via the `PHP Annotations Plugin `_ or the `Symfony Plugin `_ + +.. _Read more about handling annotations.: annotations +.. _Read more about custom annotations.: custom diff --git a/Sources/API/vendor/doctrine/annotations/docs/en/sidebar.rst b/Sources/API/vendor/doctrine/annotations/docs/en/sidebar.rst new file mode 100644 index 0000000..6f5d13c --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/docs/en/sidebar.rst @@ -0,0 +1,6 @@ +.. toctree:: + :depth: 3 + + index + annotations + custom diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php new file mode 100644 index 0000000..9cae3da --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation.php @@ -0,0 +1,57 @@ + $data Key-value for properties to be defined in this class. */ + final public function __construct(array $data) + { + foreach ($data as $key => $value) { + $this->$key = $value; + } + } + + /** + * Error handler for unknown property accessor in Annotation class. + * + * @param string $name Unknown property name. + * + * @throws BadMethodCallException + */ + public function __get($name) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } + + /** + * Error handler for unknown property mutator in Annotation class. + * + * @param string $name Unknown property name. + * @param mixed $value Property value. + * + * @throws BadMethodCallException + */ + public function __set($name, $value) + { + throw new BadMethodCallException( + sprintf("Unknown property '%s' on annotation '%s'.", $name, static::class) + ); + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php new file mode 100644 index 0000000..b1f8514 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Attribute.php @@ -0,0 +1,21 @@ + */ + public $value; +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php new file mode 100644 index 0000000..6f24d9f --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Enum.php @@ -0,0 +1,69 @@ + */ + public $value; + + /** + * Literal target declaration. + * + * @var mixed[] + */ + public $literal; + + /** + * @phpstan-param array{literal?: mixed[], value: list} $values + * + * @throws InvalidArgumentException + */ + public function __construct(array $values) + { + if (! isset($values['literal'])) { + $values['literal'] = []; + } + + foreach ($values['value'] as $var) { + if (! is_scalar($var)) { + throw new InvalidArgumentException(sprintf( + '@Enum supports only scalar values "%s" given.', + is_object($var) ? get_class($var) : gettype($var) + )); + } + } + + foreach ($values['literal'] as $key => $var) { + if (! in_array($key, $values['value'])) { + throw new InvalidArgumentException(sprintf( + 'Undefined enumerator value "%s" for literal "%s".', + $key, + $var + )); + } + } + + $this->value = $values['value']; + $this->literal = $values['literal']; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php new file mode 100644 index 0000000..97a15c2 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php @@ -0,0 +1,43 @@ + */ + public $names; + + /** + * @phpstan-param array{value: string|list} $values + * + * @throws RuntimeException + */ + public function __construct(array $values) + { + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new RuntimeException(sprintf( + '@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', + json_encode($values['value']) + )); + } + + $this->names = $values['value']; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php new file mode 100644 index 0000000..1690601 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/NamedArgumentConstructor.php @@ -0,0 +1,13 @@ + */ + private static $map = [ + 'ALL' => self::TARGET_ALL, + 'CLASS' => self::TARGET_CLASS, + 'METHOD' => self::TARGET_METHOD, + 'PROPERTY' => self::TARGET_PROPERTY, + 'FUNCTION' => self::TARGET_FUNCTION, + 'ANNOTATION' => self::TARGET_ANNOTATION, + ]; + + /** @phpstan-var list */ + public $value; + + /** + * Targets as bitmask. + * + * @var int + */ + public $targets; + + /** + * Literal target declaration. + * + * @var string + */ + public $literal; + + /** + * @phpstan-param array{value?: string|list} $values + * + * @throws InvalidArgumentException + */ + public function __construct(array $values) + { + if (! isset($values['value'])) { + $values['value'] = null; + } + + if (is_string($values['value'])) { + $values['value'] = [$values['value']]; + } + + if (! is_array($values['value'])) { + throw new InvalidArgumentException( + sprintf( + '@Target expects either a string value, or an array of strings, "%s" given.', + is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) + ) + ); + } + + $bitmask = 0; + foreach ($values['value'] as $literal) { + if (! isset(self::$map[$literal])) { + throw new InvalidArgumentException( + sprintf( + 'Invalid Target "%s". Available targets: [%s]', + $literal, + implode(', ', array_keys(self::$map)) + ) + ); + } + + $bitmask |= self::$map[$literal]; + } + + $this->targets = $bitmask; + $this->value = $values['value']; + $this->literal = implode(', ', $this->value); + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php new file mode 100644 index 0000000..dcdfe4d --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php @@ -0,0 +1,167 @@ + $available + * + * @return AnnotationException + */ + public static function enumeratorError($attributeName, $annotationName, $context, $available, $given) + { + return new self(sprintf( + '[Enum Error] Attribute "%s" of @%s declared on %s accepts only [%s], but got %s.', + $attributeName, + $annotationName, + $context, + implode(', ', $available), + is_object($given) ? get_class($given) : $given + )); + } + + /** @return AnnotationException */ + public static function optimizerPlusSaveComments() + { + return new self( + 'You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1.' + ); + } + + /** @return AnnotationException */ + public static function optimizerPlusLoadComments() + { + return new self( + 'You have to enable opcache.load_comments=1 or zend_optimizerplus.load_comments=1.' + ); + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php new file mode 100644 index 0000000..1f538ee --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php @@ -0,0 +1,389 @@ + + */ + private static $globalImports = [ + 'ignoreannotation' => Annotation\IgnoreAnnotation::class, + ]; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNames = ImplicitlyIgnoredAnnotationNames::LIST; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names are case sensitive. + * + * @var array + */ + private static $globalIgnoredNamespaces = []; + + /** + * Add a new annotation to the globally ignored annotation names with regard to exception handling. + * + * @param string $name + */ + public static function addGlobalIgnoredName($name) + { + self::$globalIgnoredNames[$name] = true; + } + + /** + * Add a new annotation to the globally ignored annotation namespaces with regard to exception handling. + * + * @param string $namespace + */ + public static function addGlobalIgnoredNamespace($namespace) + { + self::$globalIgnoredNamespaces[$namespace] = true; + } + + /** + * Annotations parser. + * + * @var DocParser + */ + private $parser; + + /** + * Annotations parser used to collect parsing metadata. + * + * @var DocParser + */ + private $preParser; + + /** + * PHP parser used to collect imports. + * + * @var PhpParser + */ + private $phpParser; + + /** + * In-memory cache mechanism to store imported annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $imports = []; + + /** + * In-memory cache mechanism to store ignored annotations per class. + * + * @psalm-var array<'class'|'function', array>> + */ + private $ignoredAnnotationNames = []; + + /** + * Initializes a new AnnotationReader. + * + * @throws AnnotationException + */ + public function __construct(?DocParser $parser = null) + { + if ( + extension_loaded('Zend Optimizer+') && (ini_get('zend_optimizerplus.save_comments') === '0' || + ini_get('opcache.save_comments') === '0') + ) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + if (extension_loaded('Zend OPcache') && ini_get('opcache.save_comments') === 0) { + throw AnnotationException::optimizerPlusSaveComments(); + } + + // Make sure that the IgnoreAnnotation annotation is loaded + class_exists(IgnoreAnnotation::class); + + $this->parser = $parser ?: new DocParser(); + + $this->preParser = new DocParser(); + + $this->preParser->setImports(self::$globalImports); + $this->preParser->setIgnoreNotImportedAnnotations(true); + $this->preParser->setIgnoredAnnotationNames(self::$globalIgnoredNames); + + $this->phpParser = new PhpParser(); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $this->parser->setTarget(Target::TARGET_CLASS); + $this->parser->setImports($this->getImports($class)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $context = 'property ' . $class->getName() . '::$' . $property->getName(); + + $this->parser->setTarget(Target::TARGET_PROPERTY); + $this->parser->setImports($this->getPropertyImports($property)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($property->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; + + $this->parser->setTarget(Target::TARGET_METHOD); + $this->parser->setImports($this->getMethodImports($method)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($method->getDocComment(), $context); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Gets the annotations applied to a function. + * + * @phpstan-return list An array of Annotations. + */ + public function getFunctionAnnotations(ReflectionFunction $function): array + { + $context = 'function ' . $function->getName(); + + $this->parser->setTarget(Target::TARGET_FUNCTION); + $this->parser->setImports($this->getImports($function)); + $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($function)); + $this->parser->setIgnoredAnnotationNamespaces(self::$globalIgnoredNamespaces); + + return $this->parser->parse($function->getDocComment(), $context); + } + + /** + * Gets a function annotation. + * + * @return object|null The Annotation or NULL, if the requested annotation does not exist. + */ + public function getFunctionAnnotation(ReflectionFunction $function, string $annotationName) + { + $annotations = $this->getFunctionAnnotations($function); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Returns the ignored annotations for the given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getIgnoredAnnotationNames($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->ignoredAnnotationNames[$type][$name])) { + return $this->ignoredAnnotationNames[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->ignoredAnnotationNames[$type][$name]; + } + + /** + * Retrieves imports for a class or a function. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @return array + */ + private function getImports($reflection): array + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + if (isset($this->imports[$type][$name])) { + return $this->imports[$type][$name]; + } + + $this->collectParsingMetadata($reflection); + + return $this->imports[$type][$name]; + } + + /** + * Retrieves imports for methods. + * + * @return array + */ + private function getMethodImports(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if ( + ! $trait->hasMethod($method->getName()) + || $trait->getFileName() !== $method->getFileName() + ) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Retrieves imports for properties. + * + * @return array + */ + private function getPropertyImports(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $classImports = $this->getImports($class); + + $traitImports = []; + + foreach ($class->getTraits() as $trait) { + if (! $trait->hasProperty($property->getName())) { + continue; + } + + $traitImports = array_merge($traitImports, $this->phpParser->parseUseStatements($trait)); + } + + return array_merge($classImports, $traitImports); + } + + /** + * Collects parsing metadata for a given class or function. + * + * @param ReflectionClass|ReflectionFunction $reflection + */ + private function collectParsingMetadata($reflection): void + { + $type = $reflection instanceof ReflectionClass ? 'class' : 'function'; + $name = $reflection->getName(); + + $ignoredAnnotationNames = self::$globalIgnoredNames; + $annotations = $this->preParser->parse($reflection->getDocComment(), $type . ' ' . $name); + + foreach ($annotations as $annotation) { + if (! ($annotation instanceof IgnoreAnnotation)) { + continue; + } + + foreach ($annotation->names as $annot) { + $ignoredAnnotationNames[$annot] = true; + } + } + + $this->imports[$type][$name] = array_merge( + self::$globalImports, + $this->phpParser->parseUseStatements($reflection), + [ + '__NAMESPACE__' => $reflection->getNamespaceName(), + 'self' => $name, + ] + ); + + $this->ignoredAnnotationNames[$type][$name] = $ignoredAnnotationNames; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php new file mode 100644 index 0000000..259d497 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationRegistry.php @@ -0,0 +1,190 @@ +|null $dirs + */ + public static function registerAutoloadNamespace(string $namespace, $dirs = null): void + { + self::$autoloadNamespaces[$namespace] = $dirs; + } + + /** + * Registers multiple namespaces. + * + * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + * + * @param string[][]|string[]|null[] $namespaces indexed by namespace name + */ + public static function registerAutoloadNamespaces(array $namespaces): void + { + self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); + } + + /** + * Registers an autoloading callable for annotations, much like spl_autoload_register(). + * + * NOTE: These class loaders HAVE to be silent when a class was not found! + * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerLoader(callable $callable): void + { + // Reset our static cache now that we have a new loader to work with + self::$failedToAutoload = []; + self::$loaders[] = $callable; + } + + /** + * Registers an autoloading callable for annotations, if it is not already registered + * + * @deprecated This method is deprecated and will be removed in + * doctrine/annotations 2.0. Annotations will be autoloaded in 2.0. + */ + public static function registerUniqueLoader(callable $callable): void + { + if (in_array($callable, self::$loaders, true)) { + return; + } + + self::registerLoader($callable); + } + + /** + * Autoloads an annotation class silently. + */ + public static function loadAnnotationClass(string $class): bool + { + if (class_exists($class, false)) { + return true; + } + + if (array_key_exists($class, self::$failedToAutoload)) { + return false; + } + + foreach (self::$autoloadNamespaces as $namespace => $dirs) { + if (strpos($class, $namespace) !== 0) { + continue; + } + + $file = str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; + + if ($dirs === null) { + $path = stream_resolve_include_path($file); + if ($path) { + require $path; + + return true; + } + } else { + foreach ((array) $dirs as $dir) { + if (is_file($dir . DIRECTORY_SEPARATOR . $file)) { + require $dir . DIRECTORY_SEPARATOR . $file; + + return true; + } + } + } + } + + foreach (self::$loaders as $loader) { + if ($loader($class) === true) { + return true; + } + } + + if ( + self::$loaders === [] && + self::$autoloadNamespaces === [] && + self::$registerFileUsed === false && + class_exists($class) + ) { + return true; + } + + self::$failedToAutoload[$class] = null; + + return false; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php new file mode 100644 index 0000000..85dbefa --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/CachedReader.php @@ -0,0 +1,266 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + /** @param bool $debug */ + public function __construct(Reader $reader, Cache $cache, $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getClassAnnotations($class); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getPropertyAnnotations($property); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class); + if ($annots === false) { + $annots = $this->delegate->getMethodAnnotations($method); + $this->saveToCache($cacheKey, $annots); + } + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** + * Fetches a value from the cache. + * + * @param string $cacheKey The cache key. + * + * @return mixed The cached value or false when the value is not in cache. + */ + private function fetchFromCache($cacheKey, ReflectionClass $class) + { + $data = $this->cache->fetch($cacheKey); + if ($data !== false) { + if (! $this->debug || $this->isCacheFresh($cacheKey, $class)) { + return $data; + } + } + + return false; + } + + /** + * Saves a value to the cache. + * + * @param string $cacheKey The cache key. + * @param mixed $value The value. + * + * @return void + */ + private function saveToCache($cacheKey, $value) + { + $this->cache->save($cacheKey, $value); + if (! $this->debug) { + return; + } + + $this->cache->save('[C]' . $cacheKey, time()); + } + + /** + * Checks if the cache is fresh. + * + * @param string $cacheKey + * + * @return bool + */ + private function isCacheFresh($cacheKey, ReflectionClass $class) + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + return $this->cache->fetch('[C]' . $cacheKey) >= $lastModification; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php new file mode 100644 index 0000000..7c0284b --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php @@ -0,0 +1,139 @@ + + */ +final class DocLexer extends AbstractLexer +{ + public const T_NONE = 1; + public const T_INTEGER = 2; + public const T_STRING = 3; + public const T_FLOAT = 4; + + // All tokens that are also identifiers should be >= 100 + public const T_IDENTIFIER = 100; + public const T_AT = 101; + public const T_CLOSE_CURLY_BRACES = 102; + public const T_CLOSE_PARENTHESIS = 103; + public const T_COMMA = 104; + public const T_EQUALS = 105; + public const T_FALSE = 106; + public const T_NAMESPACE_SEPARATOR = 107; + public const T_OPEN_CURLY_BRACES = 108; + public const T_OPEN_PARENTHESIS = 109; + public const T_TRUE = 110; + public const T_NULL = 111; + public const T_COLON = 112; + public const T_MINUS = 113; + + /** @var array */ + protected $noCase = [ + '@' => self::T_AT, + ',' => self::T_COMMA, + '(' => self::T_OPEN_PARENTHESIS, + ')' => self::T_CLOSE_PARENTHESIS, + '{' => self::T_OPEN_CURLY_BRACES, + '}' => self::T_CLOSE_CURLY_BRACES, + '=' => self::T_EQUALS, + ':' => self::T_COLON, + '-' => self::T_MINUS, + '\\' => self::T_NAMESPACE_SEPARATOR, + ]; + + /** @var array */ + protected $withCase = [ + 'true' => self::T_TRUE, + 'false' => self::T_FALSE, + 'null' => self::T_NULL, + ]; + + /** + * Whether the next token starts immediately, or if there were + * non-captured symbols before that + */ + public function nextTokenIsAdjacent(): bool + { + return $this->token === null + || ($this->lookahead !== null + && ($this->lookahead['position'] - $this->token['position']) === strlen($this->token['value'])); + } + + /** + * {@inheritdoc} + */ + protected function getCatchablePatterns() + { + return [ + '[a-z_\\\][a-z0-9_\:\\\]*[a-z_][a-z0-9_]*', + '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', + '"(?:""|[^"])*+"', + ]; + } + + /** + * {@inheritdoc} + */ + protected function getNonCatchablePatterns() + { + return ['\s+', '\*+', '(.)']; + } + + /** + * {@inheritdoc} + */ + protected function getType(&$value) + { + $type = self::T_NONE; + + if ($value[0] === '"') { + $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); + + return self::T_STRING; + } + + if (isset($this->noCase[$value])) { + return $this->noCase[$value]; + } + + if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { + return self::T_IDENTIFIER; + } + + $lowerValue = strtolower($value); + + if (isset($this->withCase[$lowerValue])) { + return $this->withCase[$lowerValue]; + } + + // Checking numeric value + if (is_numeric($value)) { + return strpos($value, '.') !== false || stripos($value, 'e') !== false + ? self::T_FLOAT : self::T_INTEGER; + } + + return $type; + } + + /** @return array{value: int|string, type:self::T_*|null, position:int} */ + public function peek(): array + { + $token = parent::peek(); + + return (array) $token; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php new file mode 100644 index 0000000..4133fe5 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocParser.php @@ -0,0 +1,1485 @@ + + */ + private static $classIdentifiers = [ + DocLexer::T_IDENTIFIER, + DocLexer::T_TRUE, + DocLexer::T_FALSE, + DocLexer::T_NULL, + ]; + + /** + * The lexer. + * + * @var DocLexer + */ + private $lexer; + + /** + * Current target context. + * + * @var int + */ + private $target; + + /** + * Doc parser used to collect annotation target. + * + * @var DocParser + */ + private static $metadataParser; + + /** + * Flag to control if the current annotation is nested or not. + * + * @var bool + */ + private $isNestedAnnotation = false; + + /** + * Hashmap containing all use-statements that are to be used when parsing + * the given doc block. + * + * @var array + */ + private $imports = []; + + /** + * This hashmap is used internally to cache results of class_exists() + * look-ups. + * + * @var array + */ + private $classExists = []; + + /** + * Whether annotations that have not been imported should be ignored. + * + * @var bool + */ + private $ignoreNotImportedAnnotations = false; + + /** + * An array of default namespaces if operating in simple mode. + * + * @var string[] + */ + private $namespaces = []; + + /** + * A list with annotations that are not causing exceptions when not resolved to an annotation class. + * + * The names must be the raw names as used in the class, not the fully qualified + * + * @var bool[] indexed by annotation name + */ + private $ignoredAnnotationNames = []; + + /** + * A list with annotations in namespaced format + * that are not causing exceptions when not resolved to an annotation class. + * + * @var bool[] indexed by namespace name + */ + private $ignoredAnnotationNamespaces = []; + + /** @var string */ + private $context = ''; + + /** + * Hash-map for caching annotation metadata. + * + * @var array + */ + private static $annotationMetadata = [ + Annotation\Target::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'properties' => [], + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'attribute_types' => [ + 'value' => [ + 'required' => false, + 'type' => 'array', + 'array_type' => 'string', + 'value' => 'array', + ], + ], + ], + Annotation\Attribute::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_ANNOTATION', + 'targets' => Target::TARGET_ANNOTATION, + 'default_property' => 'name', + 'properties' => [ + 'name' => 'name', + 'type' => 'type', + 'required' => 'required', + ], + 'attribute_types' => [ + 'value' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'type' => [ + 'required' => true, + 'type' => 'string', + 'value' => 'string', + ], + 'required' => [ + 'required' => false, + 'type' => 'boolean', + 'value' => 'boolean', + ], + ], + ], + Annotation\Attributes::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + 'array_type' => Annotation\Attribute::class, + 'value' => 'array<' . Annotation\Attribute::class . '>', + ], + ], + ], + Annotation\Enum::class => [ + 'is_annotation' => true, + 'has_constructor' => true, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_PROPERTY', + 'targets' => Target::TARGET_PROPERTY, + 'default_property' => 'value', + 'properties' => ['value' => 'value'], + 'attribute_types' => [ + 'value' => [ + 'type' => 'array', + 'required' => true, + ], + 'literal' => [ + 'type' => 'array', + 'required' => false, + ], + ], + ], + Annotation\NamedArgumentConstructor::class => [ + 'is_annotation' => true, + 'has_constructor' => false, + 'has_named_argument_constructor' => false, + 'targets_literal' => 'ANNOTATION_CLASS', + 'targets' => Target::TARGET_CLASS, + 'default_property' => null, + 'properties' => [], + 'attribute_types' => [], + ], + ]; + + /** + * Hash-map for handle types declaration. + * + * @var array + */ + private static $typeMap = [ + 'float' => 'double', + 'bool' => 'boolean', + // allow uppercase Boolean in honor of George Boole + 'Boolean' => 'boolean', + 'int' => 'integer', + ]; + + /** + * Constructs a new DocParser. + */ + public function __construct() + { + $this->lexer = new DocLexer(); + } + + /** + * Sets the annotation names that are ignored during the parsing process. + * + * The names are supposed to be the raw names as used in the class, not the + * fully qualified class names. + * + * @param bool[] $names indexed by annotation name + * + * @return void + */ + public function setIgnoredAnnotationNames(array $names) + { + $this->ignoredAnnotationNames = $names; + } + + /** + * Sets the annotation namespaces that are ignored during the parsing process. + * + * @param bool[] $ignoredAnnotationNamespaces indexed by annotation namespace name + * + * @return void + */ + public function setIgnoredAnnotationNamespaces($ignoredAnnotationNamespaces) + { + $this->ignoredAnnotationNamespaces = $ignoredAnnotationNamespaces; + } + + /** + * Sets ignore on not-imported annotations. + * + * @param bool $bool + * + * @return void + */ + public function setIgnoreNotImportedAnnotations($bool) + { + $this->ignoreNotImportedAnnotations = (bool) $bool; + } + + /** + * Sets the default namespaces. + * + * @param string $namespace + * + * @return void + * + * @throws RuntimeException + */ + public function addNamespace($namespace) + { + if ($this->imports) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->namespaces[] = $namespace; + } + + /** + * Sets the imports. + * + * @param array $imports + * + * @return void + * + * @throws RuntimeException + */ + public function setImports(array $imports) + { + if ($this->namespaces) { + throw new RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); + } + + $this->imports = $imports; + } + + /** + * Sets current target context as bitmask. + * + * @param int $target + * + * @return void + */ + public function setTarget($target) + { + $this->target = $target; + } + + /** + * Parses the given docblock string for annotations. + * + * @param string $input The docblock string to parse. + * @param string $context The parsing context. + * + * @phpstan-return list Array of annotations. If no annotations are found, an empty array is returned. + * + * @throws AnnotationException + * @throws ReflectionException + */ + public function parse($input, $context = '') + { + $pos = $this->findInitialTokenPosition($input); + if ($pos === null) { + return []; + } + + $this->context = $context; + + $this->lexer->setInput(trim(substr($input, $pos), '* /')); + $this->lexer->moveNext(); + + return $this->Annotations(); + } + + /** + * Finds the first valid annotation + * + * @param string $input The docblock string to parse + */ + private function findInitialTokenPosition($input): ?int + { + $pos = 0; + + // search for first valid annotation + while (($pos = strpos($input, '@', $pos)) !== false) { + $preceding = substr($input, $pos - 1, 1); + + // if the @ is preceded by a space, a tab or * it is valid + if ($pos === 0 || $preceding === ' ' || $preceding === '*' || $preceding === "\t") { + return $pos; + } + + $pos++; + } + + return null; + } + + /** + * Attempts to match the given token with the current lookahead token. + * If they match, updates the lookahead token; otherwise raises a syntax error. + * + * @param int $token Type of token. + * + * @return bool True if tokens match; false otherwise. + * + * @throws AnnotationException + */ + private function match(int $token): bool + { + if (! $this->lexer->isNextToken($token)) { + throw $this->syntaxError($this->lexer->getLiteral($token)); + } + + return $this->lexer->moveNext(); + } + + /** + * Attempts to match the current lookahead token with any of the given tokens. + * + * If any of them matches, this method updates the lookahead token; otherwise + * a syntax error is raised. + * + * @phpstan-param list $tokens + * + * @throws AnnotationException + */ + private function matchAny(array $tokens): bool + { + if (! $this->lexer->isNextTokenAny($tokens)) { + throw $this->syntaxError(implode(' or ', array_map([$this->lexer, 'getLiteral'], $tokens))); + } + + return $this->lexer->moveNext(); + } + + /** + * Generates a new syntax error. + * + * @param string $expected Expected string. + * @param mixed[]|null $token Optional token. + */ + private function syntaxError(string $expected, ?array $token = null): AnnotationException + { + if ($token === null) { + $token = $this->lexer->lookahead; + } + + $message = sprintf('Expected %s, got ', $expected); + $message .= $this->lexer->lookahead === null + ? 'end of string' + : sprintf("'%s' at position %s", $token['value'], $token['position']); + + if (strlen($this->context)) { + $message .= ' in ' . $this->context; + } + + $message .= '.'; + + return AnnotationException::syntaxError($message); + } + + /** + * Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism + * but uses the {@link AnnotationRegistry} to load classes. + * + * @param class-string $fqcn + */ + private function classExists(string $fqcn): bool + { + if (isset($this->classExists[$fqcn])) { + return $this->classExists[$fqcn]; + } + + // first check if the class already exists, maybe loaded through another AnnotationReader + if (class_exists($fqcn, false)) { + return $this->classExists[$fqcn] = true; + } + + // final check, does this class exist? + return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); + } + + /** + * Collects parsing metadata for a given annotation class + * + * @param class-string $name The annotation name + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function collectAnnotationMetadata(string $name): void + { + if (self::$metadataParser === null) { + self::$metadataParser = new self(); + + self::$metadataParser->setIgnoreNotImportedAnnotations(true); + self::$metadataParser->setIgnoredAnnotationNames($this->ignoredAnnotationNames); + self::$metadataParser->setImports([ + 'enum' => Enum::class, + 'target' => Target::class, + 'attribute' => Attribute::class, + 'attributes' => Attributes::class, + 'namedargumentconstructor' => NamedArgumentConstructor::class, + ]); + + // Make sure that annotations from metadata are loaded + class_exists(Enum::class); + class_exists(Target::class); + class_exists(Attribute::class); + class_exists(Attributes::class); + class_exists(NamedArgumentConstructor::class); + } + + $class = new ReflectionClass($name); + $docComment = $class->getDocComment(); + + // Sets default values for annotation metadata + $constructor = $class->getConstructor(); + $metadata = [ + 'default_property' => null, + 'has_constructor' => $constructor !== null && $constructor->getNumberOfParameters() > 0, + 'constructor_args' => [], + 'properties' => [], + 'property_types' => [], + 'attribute_types' => [], + 'targets_literal' => null, + 'targets' => Target::TARGET_ALL, + 'is_annotation' => strpos($docComment, '@Annotation') !== false, + ]; + + $metadata['has_named_argument_constructor'] = $metadata['has_constructor'] + && $class->implementsInterface(NamedArgumentConstructorAnnotation::class); + + // verify that the class is really meant to be an annotation + if ($metadata['is_annotation']) { + self::$metadataParser->setTarget(Target::TARGET_CLASS); + + foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { + if ($annotation instanceof Target) { + $metadata['targets'] = $annotation->targets; + $metadata['targets_literal'] = $annotation->literal; + + continue; + } + + if ($annotation instanceof NamedArgumentConstructor) { + $metadata['has_named_argument_constructor'] = $metadata['has_constructor']; + if ($metadata['has_named_argument_constructor']) { + // choose the first argument as the default property + $metadata['default_property'] = $constructor->getParameters()[0]->getName(); + } + } + + if (! ($annotation instanceof Attributes)) { + continue; + } + + foreach ($annotation->value as $attribute) { + $this->collectAttributeTypeMetadata($metadata, $attribute); + } + } + + // if not has a constructor will inject values into public properties + if ($metadata['has_constructor'] === false) { + // collect all public properties + foreach ($class->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { + $metadata['properties'][$property->name] = $property->name; + + $propertyComment = $property->getDocComment(); + if ($propertyComment === false) { + continue; + } + + $attribute = new Attribute(); + + $attribute->required = (strpos($propertyComment, '@Required') !== false); + $attribute->name = $property->name; + $attribute->type = (strpos($propertyComment, '@var') !== false && + preg_match('/@var\s+([^\s]+)/', $propertyComment, $matches)) + ? $matches[1] + : 'mixed'; + + $this->collectAttributeTypeMetadata($metadata, $attribute); + + // checks if the property has @Enum + if (strpos($propertyComment, '@Enum') === false) { + continue; + } + + $context = 'property ' . $class->name . '::$' . $property->name; + + self::$metadataParser->setTarget(Target::TARGET_PROPERTY); + + foreach (self::$metadataParser->parse($propertyComment, $context) as $annotation) { + if (! $annotation instanceof Enum) { + continue; + } + + $metadata['enum'][$property->name]['value'] = $annotation->value; + $metadata['enum'][$property->name]['literal'] = (! empty($annotation->literal)) + ? $annotation->literal + : $annotation->value; + } + } + + // choose the first property as default property + $metadata['default_property'] = reset($metadata['properties']); + } elseif ($metadata['has_named_argument_constructor']) { + foreach ($constructor->getParameters() as $parameter) { + $metadata['constructor_args'][$parameter->getName()] = [ + 'position' => $parameter->getPosition(), + 'default' => $parameter->isOptional() ? $parameter->getDefaultValue() : null, + ]; + } + } + } + + self::$annotationMetadata[$name] = $metadata; + } + + /** + * Collects parsing metadata for a given attribute. + * + * @param mixed[] $metadata + */ + private function collectAttributeTypeMetadata(array &$metadata, Attribute $attribute): void + { + // handle internal type declaration + $type = self::$typeMap[$attribute->type] ?? $attribute->type; + + // handle the case if the property type is mixed + if ($type === 'mixed') { + return; + } + + // Evaluate type + $pos = strpos($type, '<'); + if ($pos !== false) { + // Checks if the property has array + $arrayType = substr($type, $pos + 1, -1); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } else { + // Checks if the property has type[] + $pos = strrpos($type, '['); + if ($pos !== false) { + $arrayType = substr($type, 0, $pos); + $type = 'array'; + + if (isset(self::$typeMap[$arrayType])) { + $arrayType = self::$typeMap[$arrayType]; + } + + $metadata['attribute_types'][$attribute->name]['array_type'] = $arrayType; + } + } + + $metadata['attribute_types'][$attribute->name]['type'] = $type; + $metadata['attribute_types'][$attribute->name]['value'] = $attribute->type; + $metadata['attribute_types'][$attribute->name]['required'] = $attribute->required; + } + + /** + * Annotations ::= Annotation {[ "*" ]* [Annotation]}* + * + * @phpstan-return list + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Annotations(): array + { + $annotations = []; + + while ($this->lexer->lookahead !== null) { + if ($this->lexer->lookahead['type'] !== DocLexer::T_AT) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is preceded by non-catchable pattern + if ( + $this->lexer->token !== null && + $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen( + $this->lexer->token['value'] + ) + ) { + $this->lexer->moveNext(); + continue; + } + + // make sure the @ is followed by either a namespace separator, or + // an identifier token + $peek = $this->lexer->glimpse(); + if ( + ($peek === null) + || ($peek['type'] !== DocLexer::T_NAMESPACE_SEPARATOR && ! in_array( + $peek['type'], + self::$classIdentifiers, + true + )) + || $peek['position'] !== $this->lexer->lookahead['position'] + 1 + ) { + $this->lexer->moveNext(); + continue; + } + + $this->isNestedAnnotation = false; + $annot = $this->Annotation(); + if ($annot === false) { + continue; + } + + $annotations[] = $annot; + } + + return $annotations; + } + + /** + * Annotation ::= "@" AnnotationName MethodCall + * AnnotationName ::= QualifiedName | SimpleName + * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName + * NameSpacePart ::= identifier | null | false | true + * SimpleName ::= identifier | null | false | true + * + * @return object|false False if it is not a valid annotation. + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Annotation() + { + $this->match(DocLexer::T_AT); + + // check if we have an annotation + $name = $this->Identifier(); + + if ( + $this->lexer->isNextToken(DocLexer::T_MINUS) + && $this->lexer->nextTokenIsAdjacent() + ) { + // Annotations with dashes, such as "@foo-" or "@foo-bar", are to be discarded + return false; + } + + // only process names which are not fully qualified, yet + // fully qualified names must start with a \ + $originalName = $name; + + if ($name[0] !== '\\') { + $pos = strpos($name, '\\'); + $alias = ($pos === false) ? $name : substr($name, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + if ($this->namespaces) { + foreach ($this->namespaces as $namespace) { + if ($this->classExists($namespace . '\\' . $name)) { + $name = $namespace . '\\' . $name; + $found = true; + break; + } + } + } elseif (isset($this->imports[$loweredAlias])) { + $namespace = ltrim($this->imports[$loweredAlias], '\\'); + $name = ($pos !== false) + ? $namespace . substr($name, $pos) + : $namespace; + $found = $this->classExists($name); + } elseif ( + ! isset($this->ignoredAnnotationNames[$name]) + && isset($this->imports['__NAMESPACE__']) + && $this->classExists($this->imports['__NAMESPACE__'] . '\\' . $name) + ) { + $name = $this->imports['__NAMESPACE__'] . '\\' . $name; + $found = true; + } elseif (! isset($this->ignoredAnnotationNames[$name]) && $this->classExists($name)) { + $found = true; + } + + if (! $found) { + if ($this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation? +EXCEPTION + , + $name, + $this->context + )); + } + } + + $name = ltrim($name, '\\'); + + if (! $this->classExists($name)) { + throw AnnotationException::semanticalError(sprintf( + 'The annotation "@%s" in %s does not exist, or could not be auto-loaded.', + $name, + $this->context + )); + } + + // at this point, $name contains the fully qualified class name of the + // annotation, and it is also guaranteed that this class exists, and + // that it is loaded + + // collects the metadata annotation only if there is not yet + if (! isset(self::$annotationMetadata[$name])) { + $this->collectAnnotationMetadata($name); + } + + // verify that the class is really meant to be an annotation and not just any ordinary class + if (self::$annotationMetadata[$name]['is_annotation'] === false) { + if ($this->isIgnoredAnnotation($originalName) || $this->isIgnoredAnnotation($name)) { + return false; + } + + throw AnnotationException::semanticalError(sprintf( + <<<'EXCEPTION' +The class "%s" is not annotated with @Annotation. +Are you sure this class can be used as annotation? +If so, then you need to add @Annotation to the _class_ doc comment of "%s". +If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s. +EXCEPTION + , + $name, + $name, + $originalName, + $this->context + )); + } + + //if target is nested annotation + $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; + + // Next will be nested + $this->isNestedAnnotation = true; + + //if annotation does not support current target + if ((self::$annotationMetadata[$name]['targets'] & $target) === 0 && $target) { + throw AnnotationException::semanticalError( + sprintf( + <<<'EXCEPTION' +Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s. +EXCEPTION + , + $originalName, + $this->context, + self::$annotationMetadata[$name]['targets_literal'] + ) + ); + } + + $arguments = $this->MethodCall(); + $values = $this->resolvePositionalValues($arguments, $name); + + if (isset(self::$annotationMetadata[$name]['enum'])) { + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['enum'] as $property => $enum) { + // checks if the attribute is a valid enumerator + if (isset($values[$property]) && ! in_array($values[$property], $enum['value'])) { + throw AnnotationException::enumeratorError( + $property, + $name, + $this->context, + $enum['literal'], + $values[$property] + ); + } + } + } + + // checks all declared attributes + foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { + if ( + $property === self::$annotationMetadata[$name]['default_property'] + && ! isset($values[$property]) && isset($values['value']) + ) { + $property = 'value'; + } + + // handle a not given attribute or null value + if (! isset($values[$property])) { + if ($type['required']) { + throw AnnotationException::requiredError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'] + ); + } + + continue; + } + + if ($type['type'] === 'array') { + // handle the case of a single value + if (! is_array($values[$property])) { + $values[$property] = [$values[$property]]; + } + + // checks if the attribute has array type declaration, such as "array" + if (isset($type['array_type'])) { + foreach ($values[$property] as $item) { + if (gettype($item) !== $type['array_type'] && ! $item instanceof $type['array_type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'either a(n) ' . $type['array_type'] . ', or an array of ' . $type['array_type'] . 's', + $item + ); + } + } + } + } elseif (gettype($values[$property]) !== $type['type'] && ! $values[$property] instanceof $type['type']) { + throw AnnotationException::attributeTypeError( + $property, + $originalName, + $this->context, + 'a(n) ' . $type['value'], + $values[$property] + ); + } + } + + if (self::$annotationMetadata[$name]['has_named_argument_constructor']) { + if (PHP_VERSION_ID >= 80000) { + return $this->instantiateAnnotiation($originalName, $this->context, $name, $values); + } + + $positionalValues = []; + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $positionalValues[$parameter['position']] = $parameter['default']; + } + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['constructor_args'][$property])) { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s" +that can be set through its named arguments constructor. +Available named arguments: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', array_keys(self::$annotationMetadata[$name]['constructor_args'])) + )); + } + + $positionalValues[self::$annotationMetadata[$name]['constructor_args'][$property]['position']] = $value; + } + + return $this->instantiateAnnotiation($originalName, $this->context, $name, $positionalValues); + } + + // check if the annotation expects values via the constructor, + // or directly injected into public properties + if (self::$annotationMetadata[$name]['has_constructor'] === true) { + return $this->instantiateAnnotiation($originalName, $this->context, $name, [$values]); + } + + $instance = $this->instantiateAnnotiation($originalName, $this->context, $name, []); + + foreach ($values as $property => $value) { + if (! isset(self::$annotationMetadata[$name]['properties'][$property])) { + if ($property !== 'value') { + throw AnnotationException::creationError(sprintf( + <<<'EXCEPTION' +The annotation @%s declared on %s does not have a property named "%s". +Available properties: %s +EXCEPTION + , + $originalName, + $this->context, + $property, + implode(', ', self::$annotationMetadata[$name]['properties']) + )); + } + + // handle the case if the property has no annotations + $property = self::$annotationMetadata[$name]['default_property']; + if (! $property) { + throw AnnotationException::creationError(sprintf( + 'The annotation @%s declared on %s does not accept any values, but got %s.', + $originalName, + $this->context, + json_encode($values) + )); + } + } + + $instance->{$property} = $value; + } + + return $instance; + } + + /** + * MethodCall ::= ["(" [Values] ")"] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function MethodCall(): array + { + $values = []; + + if (! $this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { + return $values; + } + + $this->match(DocLexer::T_OPEN_PARENTHESIS); + + if (! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + $values = $this->Values(); + } + + $this->match(DocLexer::T_CLOSE_PARENTHESIS); + + return $values; + } + + /** + * Values ::= Array | Value {"," Value}* [","] + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Values(): array + { + $values = [$this->Value()]; + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { + break; + } + + $token = $this->lexer->lookahead; + $value = $this->Value(); + + $values[] = $value; + } + + $namedArguments = []; + $positionalArguments = []; + foreach ($values as $k => $value) { + if (is_object($value) && $value instanceof stdClass) { + $namedArguments[$value->name] = $value->value; + } else { + $positionalArguments[$k] = $value; + } + } + + return ['named_arguments' => $namedArguments, 'positional_arguments' => $positionalArguments]; + } + + /** + * Constant ::= integer | string | float | boolean + * + * @return mixed + * + * @throws AnnotationException + */ + private function Constant() + { + $identifier = $this->Identifier(); + + if (! defined($identifier) && strpos($identifier, '::') !== false && $identifier[0] !== '\\') { + [$className, $const] = explode('::', $identifier); + + $pos = strpos($className, '\\'); + $alias = ($pos === false) ? $className : substr($className, 0, $pos); + $found = false; + $loweredAlias = strtolower($alias); + + switch (true) { + case ! empty($this->namespaces): + foreach ($this->namespaces as $ns) { + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + break; + } + } + + break; + + case isset($this->imports[$loweredAlias]): + $found = true; + $className = ($pos !== false) + ? $this->imports[$loweredAlias] . substr($className, $pos) + : $this->imports[$loweredAlias]; + break; + + default: + if (isset($this->imports['__NAMESPACE__'])) { + $ns = $this->imports['__NAMESPACE__']; + + if (class_exists($ns . '\\' . $className) || interface_exists($ns . '\\' . $className)) { + $className = $ns . '\\' . $className; + $found = true; + } + } + + break; + } + + if ($found) { + $identifier = $className . '::' . $const; + } + } + + /** + * Checks if identifier ends with ::class and remove the leading backslash if it exists. + */ + if ( + $this->identifierEndsWithClassConstant($identifier) && + ! $this->identifierStartsWithBackslash($identifier) + ) { + return substr($identifier, 0, $this->getClassConstantPositionInIdentifier($identifier)); + } + + if ($this->identifierEndsWithClassConstant($identifier) && $this->identifierStartsWithBackslash($identifier)) { + return substr($identifier, 1, $this->getClassConstantPositionInIdentifier($identifier) - 1); + } + + if (! defined($identifier)) { + throw AnnotationException::semanticalErrorConstants($identifier, $this->context); + } + + return constant($identifier); + } + + private function identifierStartsWithBackslash(string $identifier): bool + { + return $identifier[0] === '\\'; + } + + private function identifierEndsWithClassConstant(string $identifier): bool + { + return $this->getClassConstantPositionInIdentifier($identifier) === strlen($identifier) - strlen('::class'); + } + + /** @return int|false */ + private function getClassConstantPositionInIdentifier(string $identifier) + { + return stripos($identifier, '::class'); + } + + /** + * Identifier ::= string + * + * @throws AnnotationException + */ + private function Identifier(): string + { + // check if we have an annotation + if (! $this->lexer->isNextTokenAny(self::$classIdentifiers)) { + throw $this->syntaxError('namespace separator or identifier'); + } + + $this->lexer->moveNext(); + + $className = $this->lexer->token['value']; + + while ( + $this->lexer->lookahead !== null && + $this->lexer->lookahead['position'] === ($this->lexer->token['position'] + + strlen($this->lexer->token['value'])) && + $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR) + ) { + $this->match(DocLexer::T_NAMESPACE_SEPARATOR); + $this->matchAny(self::$classIdentifiers); + + $className .= '\\' . $this->lexer->token['value']; + } + + return $className; + } + + /** + * Value ::= PlainValue | FieldAssignment + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Value() + { + $peek = $this->lexer->glimpse(); + + if ($peek['type'] === DocLexer::T_EQUALS) { + return $this->FieldAssignment(); + } + + return $this->PlainValue(); + } + + /** + * PlainValue ::= integer | string | float | boolean | Array | Annotation + * + * @return mixed + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function PlainValue() + { + if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { + return $this->Arrayx(); + } + + if ($this->lexer->isNextToken(DocLexer::T_AT)) { + return $this->Annotation(); + } + + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + return $this->Constant(); + } + + switch ($this->lexer->lookahead['type']) { + case DocLexer::T_STRING: + $this->match(DocLexer::T_STRING); + + return $this->lexer->token['value']; + + case DocLexer::T_INTEGER: + $this->match(DocLexer::T_INTEGER); + + return (int) $this->lexer->token['value']; + + case DocLexer::T_FLOAT: + $this->match(DocLexer::T_FLOAT); + + return (float) $this->lexer->token['value']; + + case DocLexer::T_TRUE: + $this->match(DocLexer::T_TRUE); + + return true; + + case DocLexer::T_FALSE: + $this->match(DocLexer::T_FALSE); + + return false; + + case DocLexer::T_NULL: + $this->match(DocLexer::T_NULL); + + return null; + + default: + throw $this->syntaxError('PlainValue'); + } + } + + /** + * FieldAssignment ::= FieldName "=" PlainValue + * FieldName ::= identifier + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function FieldAssignment(): stdClass + { + $this->match(DocLexer::T_IDENTIFIER); + $fieldName = $this->lexer->token['value']; + + $this->match(DocLexer::T_EQUALS); + + $item = new stdClass(); + $item->name = $fieldName; + $item->value = $this->PlainValue(); + + return $item; + } + + /** + * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" + * + * @return mixed[] + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function Arrayx(): array + { + $array = $values = []; + + $this->match(DocLexer::T_OPEN_CURLY_BRACES); + + // If the array is empty, stop parsing and return. + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + return $array; + } + + $values[] = $this->ArrayEntry(); + + while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { + $this->match(DocLexer::T_COMMA); + + // optional trailing comma + if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { + break; + } + + $values[] = $this->ArrayEntry(); + } + + $this->match(DocLexer::T_CLOSE_CURLY_BRACES); + + foreach ($values as $value) { + [$key, $val] = $value; + + if ($key !== null) { + $array[$key] = $val; + } else { + $array[] = $val; + } + } + + return $array; + } + + /** + * ArrayEntry ::= Value | KeyValuePair + * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant + * Key ::= string | integer | Constant + * + * @phpstan-return array{mixed, mixed} + * + * @throws AnnotationException + * @throws ReflectionException + */ + private function ArrayEntry(): array + { + $peek = $this->lexer->glimpse(); + + if ( + $peek['type'] === DocLexer::T_EQUALS + || $peek['type'] === DocLexer::T_COLON + ) { + if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { + $key = $this->Constant(); + } else { + $this->matchAny([DocLexer::T_INTEGER, DocLexer::T_STRING]); + $key = $this->lexer->token['value']; + } + + $this->matchAny([DocLexer::T_EQUALS, DocLexer::T_COLON]); + + return [$key, $this->PlainValue()]; + } + + return [null, $this->Value()]; + } + + /** + * Checks whether the given $name matches any ignored annotation name or namespace + */ + private function isIgnoredAnnotation(string $name): bool + { + if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { + return true; + } + + foreach (array_keys($this->ignoredAnnotationNamespaces) as $ignoredAnnotationNamespace) { + $ignoredAnnotationNamespace = rtrim($ignoredAnnotationNamespace, '\\') . '\\'; + + if (stripos(rtrim($name, '\\') . '\\', $ignoredAnnotationNamespace) === 0) { + return true; + } + } + + return false; + } + + /** + * Resolve positional arguments (without name) to named ones + * + * @param array $arguments + * + * @return array + */ + private function resolvePositionalValues(array $arguments, string $name): array + { + $positionalArguments = $arguments['positional_arguments'] ?? []; + $values = $arguments['named_arguments'] ?? []; + + if ( + self::$annotationMetadata[$name]['has_named_argument_constructor'] + && self::$annotationMetadata[$name]['default_property'] !== null + ) { + // We must ensure that we don't have positional arguments after named ones + $positions = array_keys($positionalArguments); + $lastPosition = null; + foreach ($positions as $position) { + if ( + ($lastPosition === null && $position !== 0) || + ($lastPosition !== null && $position !== $lastPosition + 1) + ) { + throw $this->syntaxError('Positional arguments after named arguments is not allowed'); + } + + $lastPosition = $position; + } + + foreach (self::$annotationMetadata[$name]['constructor_args'] as $property => $parameter) { + $position = $parameter['position']; + if (isset($values[$property]) || ! isset($positionalArguments[$position])) { + continue; + } + + $values[$property] = $positionalArguments[$position]; + } + } else { + if (count($positionalArguments) > 0 && ! isset($values['value'])) { + if (count($positionalArguments) === 1) { + $value = array_pop($positionalArguments); + } else { + $value = array_values($positionalArguments); + } + + $values['value'] = $value; + } + } + + return $values; + } + + /** + * Try to instantiate the annotation and catch and process any exceptions related to failure + * + * @param class-string $name + * @param array $arguments + * + * @return object + * + * @throws AnnotationException + */ + private function instantiateAnnotiation(string $originalName, string $context, string $name, array $arguments) + { + try { + return new $name(...$arguments); + } catch (Throwable $exception) { + throw AnnotationException::creationError( + sprintf( + 'An error occurred while instantiating the annotation @%s declared on %s: "%s".', + $originalName, + $context, + $exception->getMessage() + ), + $exception + ); + } + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php new file mode 100644 index 0000000..6c6c22c --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/FileCacheReader.php @@ -0,0 +1,315 @@ +> */ + private $loadedAnnotations = []; + + /** @var array */ + private $classNameHashes = []; + + /** @var int */ + private $umask; + + /** + * @param string $cacheDir + * @param bool $debug + * @param int $umask + * + * @throws InvalidArgumentException + */ + public function __construct(Reader $reader, $cacheDir, $debug = false, $umask = 0002) + { + if (! is_int($umask)) { + throw new InvalidArgumentException(sprintf( + 'The parameter umask must be an integer, was: %s', + gettype($umask) + )); + } + + $this->reader = $reader; + $this->umask = $umask; + + if (! is_dir($cacheDir) && ! @mkdir($cacheDir, 0777 & (~$this->umask), true)) { + throw new InvalidArgumentException(sprintf( + 'The directory "%s" does not exist and could not be created.', + $cacheDir + )); + } + + $this->dir = rtrim($cacheDir, '\\/'); + $this->debug = $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name]; + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getClassAnnotations($class); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getPropertyAnnotations($property); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + if (! isset($this->classNameHashes[$class->name])) { + $this->classNameHashes[$class->name] = sha1($class->name); + } + + $key = $this->classNameHashes[$class->name] . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$key])) { + return $this->loadedAnnotations[$key]; + } + + $path = $this->dir . '/' . strtr($key, '\\', '-') . '.cache.php'; + if (! is_file($path)) { + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + $filename = $class->getFilename(); + if ( + $this->debug + && $filename !== false + && filemtime($path) < filemtime($filename) + ) { + @unlink($path); + + $annot = $this->reader->getMethodAnnotations($method); + $this->saveCacheFile($path, $annot); + + return $this->loadedAnnotations[$key] = $annot; + } + + return $this->loadedAnnotations[$key] = include $path; + } + + /** + * Saves the cache file. + * + * @param string $path + * @param mixed $data + * + * @return void + */ + private function saveCacheFile($path, $data) + { + if (! is_writable($this->dir)) { + throw new InvalidArgumentException(sprintf( + <<<'EXCEPTION' +The directory "%s" is not writable. Both the webserver and the console user need access. +You can manage access rights for multiple users with "chmod +a". +If your system does not support this, check out the acl package., +EXCEPTION + , + $this->dir + )); + } + + $tempfile = tempnam($this->dir, uniqid('', true)); + + if ($tempfile === false) { + throw new RuntimeException(sprintf('Unable to create tempfile in directory: %s', $this->dir)); + } + + @chmod($tempfile, 0666 & (~$this->umask)); + + $written = file_put_contents( + $tempfile, + 'umask)); + + if (rename($tempfile, $path) === false) { + @unlink($tempfile); + + throw new RuntimeException(sprintf('Unable to rename %s to %s', $tempfile, $path)); + } + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + $annotations = $this->getClassAnnotations($class); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + $annotations = $this->getMethodAnnotations($method); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + $annotations = $this->getPropertyAnnotations($property); + + foreach ($annotations as $annotation) { + if ($annotation instanceof $annotationName) { + return $annotation; + } + } + + return null; + } + + /** + * Clears loaded annotations. + * + * @return void + */ + public function clearLoadedAnnotations() + { + $this->loadedAnnotations = []; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php new file mode 100644 index 0000000..ab27f8a --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/ImplicitlyIgnoredAnnotationNames.php @@ -0,0 +1,178 @@ + true, + 'Attribute' => true, + 'Attributes' => true, + /* Can we enable this? 'Enum' => true, */ + 'Required' => true, + 'Target' => true, + 'NamedArgumentConstructor' => true, + ]; + + private const WidelyUsedNonStandard = [ + 'fix' => true, + 'fixme' => true, + 'override' => true, + ]; + + private const PhpDocumentor1 = [ + 'abstract' => true, + 'access' => true, + 'code' => true, + 'deprec' => true, + 'endcode' => true, + 'exception' => true, + 'final' => true, + 'ingroup' => true, + 'inheritdoc' => true, + 'inheritDoc' => true, + 'magic' => true, + 'name' => true, + 'private' => true, + 'static' => true, + 'staticvar' => true, + 'staticVar' => true, + 'toc' => true, + 'tutorial' => true, + 'throw' => true, + ]; + + private const PhpDocumentor2 = [ + 'api' => true, + 'author' => true, + 'category' => true, + 'copyright' => true, + 'deprecated' => true, + 'example' => true, + 'filesource' => true, + 'global' => true, + 'ignore' => true, + /* Can we enable this? 'index' => true, */ + 'internal' => true, + 'license' => true, + 'link' => true, + 'method' => true, + 'package' => true, + 'param' => true, + 'property' => true, + 'property-read' => true, + 'property-write' => true, + 'return' => true, + 'see' => true, + 'since' => true, + 'source' => true, + 'subpackage' => true, + 'throws' => true, + 'todo' => true, + 'TODO' => true, + 'usedby' => true, + 'uses' => true, + 'var' => true, + 'version' => true, + ]; + + private const PHPUnit = [ + 'author' => true, + 'after' => true, + 'afterClass' => true, + 'backupGlobals' => true, + 'backupStaticAttributes' => true, + 'before' => true, + 'beforeClass' => true, + 'codeCoverageIgnore' => true, + 'codeCoverageIgnoreStart' => true, + 'codeCoverageIgnoreEnd' => true, + 'covers' => true, + 'coversDefaultClass' => true, + 'coversNothing' => true, + 'dataProvider' => true, + 'depends' => true, + 'doesNotPerformAssertions' => true, + 'expectedException' => true, + 'expectedExceptionCode' => true, + 'expectedExceptionMessage' => true, + 'expectedExceptionMessageRegExp' => true, + 'group' => true, + 'large' => true, + 'medium' => true, + 'preserveGlobalState' => true, + 'requires' => true, + 'runTestsInSeparateProcesses' => true, + 'runInSeparateProcess' => true, + 'small' => true, + 'test' => true, + 'testdox' => true, + 'testWith' => true, + 'ticket' => true, + 'uses' => true, + ]; + + private const PhpCheckStyle = ['SuppressWarnings' => true]; + + private const PhpStorm = ['noinspection' => true]; + + private const PEAR = ['package_version' => true]; + + private const PlainUML = [ + 'startuml' => true, + 'enduml' => true, + ]; + + private const Symfony = ['experimental' => true]; + + private const PhpCodeSniffer = [ + 'codingStandardsIgnoreStart' => true, + 'codingStandardsIgnoreEnd' => true, + ]; + + private const SlevomatCodingStandard = ['phpcsSuppress' => true]; + + private const Phan = ['suppress' => true]; + + private const Rector = ['noRector' => true]; + + private const StaticAnalysis = [ + // PHPStan, Psalm + 'extends' => true, + 'implements' => true, + 'readonly' => true, + 'template' => true, + 'use' => true, + + // Psalm + 'pure' => true, + 'immutable' => true, + ]; + + public const LIST = self::Reserved + + self::WidelyUsedNonStandard + + self::PhpDocumentor1 + + self::PhpDocumentor2 + + self::PHPUnit + + self::PhpCheckStyle + + self::PhpStorm + + self::PEAR + + self::PlainUML + + self::Symfony + + self::SlevomatCodingStandard + + self::PhpCodeSniffer + + self::Phan + + self::Rector + + self::StaticAnalysis; + + private function __construct() + { + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php new file mode 100644 index 0000000..62dcf74 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/IndexedReader.php @@ -0,0 +1,100 @@ +delegate = $reader; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $annotations = []; + foreach ($this->delegate->getClassAnnotations($class) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + return $this->delegate->getClassAnnotation($class, $annotationName); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $annotations = []; + foreach ($this->delegate->getMethodAnnotations($method) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + return $this->delegate->getMethodAnnotation($method, $annotationName); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $annotations = []; + foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { + $annotations[get_class($annot)] = $annot; + } + + return $annotations; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + return $this->delegate->getPropertyAnnotation($property, $annotationName); + } + + /** + * Proxies all methods to the delegate. + * + * @param string $method + * @param mixed[] $args + * + * @return mixed + */ + public function __call($method, $args) + { + return call_user_func_array([$this->delegate, $method], $args); + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php new file mode 100644 index 0000000..8af224c --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/NamedArgumentConstructorAnnotation.php @@ -0,0 +1,14 @@ +ReflectionClass object. + * + * @return array A list with use statements in the form (Alias => FQN). + */ + public function parseClass(ReflectionClass $class) + { + return $this->parseUseStatements($class); + } + + /** + * Parse a class or function for use statements. + * + * @param ReflectionClass|ReflectionFunction $reflection + * + * @psalm-return array a list with use statements in the form (Alias => FQN). + */ + public function parseUseStatements($reflection): array + { + if (method_exists($reflection, 'getUseStatements')) { + return $reflection->getUseStatements(); + } + + $filename = $reflection->getFileName(); + + if ($filename === false) { + return []; + } + + $content = $this->getFileContent($filename, $reflection->getStartLine()); + + if ($content === null) { + return []; + } + + $namespace = preg_quote($reflection->getNamespaceName()); + $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); + $tokenizer = new TokenParser('parseUseStatements($reflection->getNamespaceName()); + } + + /** + * Gets the content of the file right up to the given line number. + * + * @param string $filename The name of the file to load. + * @param int $lineNumber The number of lines to read from file. + * + * @return string|null The content of the file or null if the file does not exist. + */ + private function getFileContent($filename, $lineNumber) + { + if (! is_file($filename)) { + return null; + } + + $content = ''; + $lineCnt = 0; + $file = new SplFileObject($filename); + while (! $file->eof()) { + if ($lineCnt++ === $lineNumber) { + break; + } + + $content .= $file->fgets(); + } + + return $content; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php new file mode 100644 index 0000000..a7099d5 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/PsrCachedReader.php @@ -0,0 +1,232 @@ +> */ + private $loadedAnnotations = []; + + /** @var int[] */ + private $loadedFilemtimes = []; + + public function __construct(Reader $reader, CacheItemPoolInterface $cache, bool $debug = false) + { + $this->delegate = $reader; + $this->cache = $cache; + $this->debug = (bool) $debug; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + $cacheKey = $class->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getClassAnnotations', $class); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + $class = $property->getDeclaringClass(); + $cacheKey = $class->getName() . '$' . $property->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getPropertyAnnotations', $property); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + $class = $method->getDeclaringClass(); + $cacheKey = $class->getName() . '#' . $method->getName(); + + if (isset($this->loadedAnnotations[$cacheKey])) { + return $this->loadedAnnotations[$cacheKey]; + } + + $annots = $this->fetchFromCache($cacheKey, $class, 'getMethodAnnotations', $method); + + return $this->loadedAnnotations[$cacheKey] = $annots; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + public function clearLoadedAnnotations(): void + { + $this->loadedAnnotations = []; + $this->loadedFilemtimes = []; + } + + /** @return mixed[] */ + private function fetchFromCache( + string $cacheKey, + ReflectionClass $class, + string $method, + Reflector $reflector + ): array { + $cacheKey = rawurlencode($cacheKey); + + $item = $this->cache->getItem($cacheKey); + if (($this->debug && ! $this->refresh($cacheKey, $class)) || ! $item->isHit()) { + $this->cache->save($item->set($this->delegate->{$method}($reflector))); + } + + return $item->get(); + } + + /** + * Used in debug mode to check if the cache is fresh. + * + * @return bool Returns true if the cache was fresh, or false if the class + * being read was modified since writing to the cache. + */ + private function refresh(string $cacheKey, ReflectionClass $class): bool + { + $lastModification = $this->getLastModification($class); + if ($lastModification === 0) { + return true; + } + + $item = $this->cache->getItem('[C]' . $cacheKey); + if ($item->isHit() && $item->get() >= $lastModification) { + return true; + } + + $this->cache->save($item->set(time())); + + return false; + } + + /** + * Returns the time the class was last modified, testing traits and parents + */ + private function getLastModification(ReflectionClass $class): int + { + $filename = $class->getFileName(); + + if (isset($this->loadedFilemtimes[$filename])) { + return $this->loadedFilemtimes[$filename]; + } + + $parent = $class->getParentClass(); + + $lastModification = max(array_merge( + [$filename ? filemtime($filename) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $class->getTraits()), + array_map(function (ReflectionClass $class): int { + return $this->getLastModification($class); + }, $class->getInterfaces()), + $parent ? [$this->getLastModification($parent)] : [] + )); + + assert($lastModification !== false); + + return $this->loadedFilemtimes[$filename] = $lastModification; + } + + private function getTraitLastModificationTime(ReflectionClass $reflectionTrait): int + { + $fileName = $reflectionTrait->getFileName(); + + if (isset($this->loadedFilemtimes[$fileName])) { + return $this->loadedFilemtimes[$fileName]; + } + + $lastModificationTime = max(array_merge( + [$fileName ? filemtime($fileName) : 0], + array_map(function (ReflectionClass $reflectionTrait): int { + return $this->getTraitLastModificationTime($reflectionTrait); + }, $reflectionTrait->getTraits()) + )); + + assert($lastModificationTime !== false); + + return $this->loadedFilemtimes[$fileName] = $lastModificationTime; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php new file mode 100644 index 0000000..0663ffd --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Reader.php @@ -0,0 +1,80 @@ + An array of Annotations. + */ + public function getClassAnnotations(ReflectionClass $class); + + /** + * Gets a class annotation. + * + * @param ReflectionClass $class The ReflectionClass of the class from which + * the class annotations should be read. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName); + + /** + * Gets the annotations applied to a method. + * + * @param ReflectionMethod $method The ReflectionMethod of the method from which + * the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getMethodAnnotations(ReflectionMethod $method); + + /** + * Gets a method annotation. + * + * @param ReflectionMethod $method The ReflectionMethod to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName); + + /** + * Gets the annotations applied to a property. + * + * @param ReflectionProperty $property The ReflectionProperty of the property + * from which the annotations should be read. + * + * @return array An array of Annotations. + */ + public function getPropertyAnnotations(ReflectionProperty $property); + + /** + * Gets a property annotation. + * + * @param ReflectionProperty $property The ReflectionProperty to read the annotations from. + * @param class-string $annotationName The name of the annotation. + * + * @return T|null The Annotation or NULL, if the requested annotation does not exist. + * + * @template T + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName); +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php new file mode 100644 index 0000000..8a78c11 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php @@ -0,0 +1,114 @@ +parser = new DocParser(); + $this->parser->setIgnoreNotImportedAnnotations(true); + } + + /** + * Adds a namespace in which we will look for annotations. + * + * @param string $namespace + * + * @return void + */ + public function addNamespace($namespace) + { + $this->parser->addNamespace($namespace); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotations(ReflectionClass $class) + { + return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotations(ReflectionMethod $method) + { + return $this->parser->parse( + $method->getDocComment(), + 'method ' . $method->getDeclaringClass()->name . '::' . $method->getName() . '()' + ); + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotations(ReflectionProperty $property) + { + return $this->parser->parse( + $property->getDocComment(), + 'property ' . $property->getDeclaringClass()->name . '::$' . $property->getName() + ); + } + + /** + * {@inheritDoc} + */ + public function getClassAnnotation(ReflectionClass $class, $annotationName) + { + foreach ($this->getClassAnnotations($class) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getMethodAnnotation(ReflectionMethod $method, $annotationName) + { + foreach ($this->getMethodAnnotations($method) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } + + /** + * {@inheritDoc} + */ + public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) + { + foreach ($this->getPropertyAnnotations($property) as $annot) { + if ($annot instanceof $annotationName) { + return $annot; + } + } + + return null; + } +} diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php new file mode 100644 index 0000000..69259fc --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/TokenParser.php @@ -0,0 +1,206 @@ + + */ + private $tokens; + + /** + * The number of tokens. + * + * @var int + */ + private $numTokens; + + /** + * The current array pointer. + * + * @var int + */ + private $pointer = 0; + + /** @param string $contents */ + public function __construct($contents) + { + $this->tokens = token_get_all($contents); + + // The PHP parser sets internal compiler globals for certain things. Annoyingly, the last docblock comment it + // saw gets stored in doc_comment. When it comes to compile the next thing to be include()d this stored + // doc_comment becomes owned by the first thing the compiler sees in the file that it considers might have a + // docblock. If the first thing in the file is a class without a doc block this would cause calls to + // getDocBlock() on said class to return our long lost doc_comment. Argh. + // To workaround, cause the parser to parse an empty docblock. Sure getDocBlock() will return this, but at least + // it's harmless to us. + token_get_all("numTokens = count($this->tokens); + } + + /** + * Gets the next non whitespace and non comment token. + * + * @param bool $docCommentIsComment If TRUE then a doc comment is considered a comment and skipped. + * If FALSE then only whitespace and normal comments are skipped. + * + * @return mixed[]|string|null The token if exists, null otherwise. + */ + public function next($docCommentIsComment = true) + { + for ($i = $this->pointer; $i < $this->numTokens; $i++) { + $this->pointer++; + if ( + $this->tokens[$i][0] === T_WHITESPACE || + $this->tokens[$i][0] === T_COMMENT || + ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT) + ) { + continue; + } + + return $this->tokens[$i]; + } + + return null; + } + + /** + * Parses a single use statement. + * + * @return array A list with all found class names for a use statement. + */ + public function parseUseStatement() + { + $groupRoot = ''; + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + while (($token = $this->next())) { + if (! $explicitAlias && $token[0] === T_STRING) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $token[0] === T_STRING) { + $alias = $token[1]; + } elseif ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + ) { + $class .= $token[1]; + + $classSplit = explode('\\', $token[1]); + $alias = $classSplit[count($classSplit) - 1]; + } elseif ($token[0] === T_NS_SEPARATOR) { + $class .= '\\'; + $alias = ''; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[strtolower($alias)] = $groupRoot . $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[strtolower($alias)] = $groupRoot . $class; + break; + } elseif ($token === '{') { + $groupRoot = $class; + $class = ''; + } elseif ($token === '}') { + continue; + } else { + break; + } + } + + return $statements; + } + + /** + * Gets all use statements. + * + * @param string $namespaceName The namespace name of the reflected class. + * + * @return array A list with all found use statements. + */ + public function parseUseStatements($namespaceName) + { + $statements = []; + while (($token = $this->next())) { + if ($token[0] === T_USE) { + $statements = array_merge($statements, $this->parseUseStatement()); + continue; + } + + if ($token[0] !== T_NAMESPACE || $this->parseNamespace() !== $namespaceName) { + continue; + } + + // Get fresh array for new namespace. This is to prevent the parser to collect the use statements + // for a previous namespace with the same name. This is the case if a namespace is defined twice + // or if a namespace with the same name is commented out. + $statements = []; + } + + return $statements; + } + + /** + * Gets the namespace. + * + * @return string The found namespace. + */ + public function parseNamespace() + { + $name = ''; + while ( + ($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR || ( + PHP_VERSION_ID >= 80000 && + ($token[0] === T_NAME_QUALIFIED || $token[0] === T_NAME_FULLY_QUALIFIED) + )) + ) { + $name .= $token[1]; + } + + return $name; + } + + /** + * Gets the class name. + * + * @return string The found class name. + */ + public function parseClass() + { + // Namespaces and class names are tokenized the same: T_STRINGs + // separated by T_NS_SEPARATOR so we can use one function to provide + // both. + return $this->parseNamespace(); + } +} diff --git a/Sources/API/vendor/doctrine/annotations/psalm.xml b/Sources/API/vendor/doctrine/annotations/psalm.xml new file mode 100644 index 0000000..e6af389 --- /dev/null +++ b/Sources/API/vendor/doctrine/annotations/psalm.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/Sources/API/vendor/doctrine/deprecations/LICENSE b/Sources/API/vendor/doctrine/deprecations/LICENSE new file mode 100644 index 0000000..156905c --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-2021 Doctrine Project + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/doctrine/deprecations/README.md b/Sources/API/vendor/doctrine/deprecations/README.md new file mode 100644 index 0000000..22f0cce --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/README.md @@ -0,0 +1,154 @@ +# Doctrine Deprecations + +A small (side-effect free by default) layer on top of +`trigger_error(E_USER_DEPRECATED)` or PSR-3 logging. + +- no side-effects by default, making it a perfect fit for libraries that don't know how the error handler works they operate under +- options to avoid having to rely on error handlers global state by using PSR-3 logging +- deduplicate deprecation messages to avoid excessive triggering and reduce overhead + +We recommend to collect Deprecations using a PSR logger instead of relying on +the global error handler. + +## Usage from consumer perspective: + +Enable Doctrine deprecations to be sent to a PSR3 logger: + +```php +\Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger); +``` + +Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)` +messages. + +```php +\Doctrine\Deprecations\Deprecation::enableWithTriggerError(); +``` + +If you only want to enable deprecation tracking, without logging or calling `trigger_error` then call: + +```php +\Doctrine\Deprecations\Deprecation::enableTrackingDeprecations(); +``` + +Tracking is enabled with all three modes and provides access to all triggered +deprecations and their individual count: + +```php +$deprecations = \Doctrine\Deprecations\Deprecation::getTriggeredDeprecations(); + +foreach ($deprecations as $identifier => $count) { + echo $identifier . " was triggered " . $count . " times\n"; +} +``` + +### Suppressing Specific Deprecations + +Disable triggering about specific deprecations: + +```php +\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier"); +``` + +Disable all deprecations from a package + +```php +\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm"); +``` + +### Other Operations + +When used within PHPUnit or other tools that could collect multiple instances of the same deprecations +the deduplication can be disabled: + +```php +\Doctrine\Deprecations\Deprecation::withoutDeduplication(); +``` + +Disable deprecation tracking again: + +```php +\Doctrine\Deprecations\Deprecation::disable(); +``` + +## Usage from a library/producer perspective: + +When you want to unconditionally trigger a deprecation even when called +from the library itself then the `trigger` method is the way to go: + +```php +\Doctrine\Deprecations\Deprecation::trigger( + "doctrine/orm", + "https://link/to/deprecations-description", + "message" +); +``` + +If variable arguments are provided at the end, they are used with `sprintf` on +the message. + +```php +\Doctrine\Deprecations\Deprecation::trigger( + "doctrine/orm", + "https://github.com/doctrine/orm/issue/1234", + "message %s %d", + "foo", + 1234 +); +``` + +When you want to trigger a deprecation only when it is called by a function +outside of the current package, but not trigger when the package itself is the cause, +then use: + +```php +\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside( + "doctrine/orm", + "https://link/to/deprecations-description", + "message" +); +``` + +Based on the issue link each deprecation message is only triggered once per +request. + +A limited stacktrace is included in the deprecation message to find the +offending location. + +Note: A producer/library should never call `Deprecation::enableWith` methods +and leave the decision how to handle deprecations to application and +frameworks. + +## Usage in PHPUnit tests + +There is a `VerifyDeprecations` trait that you can use to make assertions on +the occurrence of deprecations within a test. + +```php +use Doctrine\Deprecations\PHPUnit\VerifyDeprecations; + +class MyTest extends TestCase +{ + use VerifyDeprecations; + + public function testSomethingDeprecation() + { + $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); + + triggerTheCodeWithDeprecation(); + } + + public function testSomethingDeprecationFixed() + { + $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); + + triggerTheCodeWithoutDeprecation(); + } +} +``` + +## What is a deprecation identifier? + +An identifier for deprecations is just a link to any resource, most often a +Github Issue or Pull Request explaining the deprecation and potentially its +alternative. diff --git a/Sources/API/vendor/doctrine/deprecations/composer.json b/Sources/API/vendor/doctrine/deprecations/composer.json new file mode 100644 index 0000000..c79e38c --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/composer.json @@ -0,0 +1,32 @@ +{ + "name": "doctrine/deprecations", + "type": "library", + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "license": "MIT", + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3", + "doctrine/coding-standard": "^9" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "autoload": { + "psr-4": {"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"} + }, + "autoload-dev": { + "psr-4": { + "DeprecationTests\\": "test_fixtures/src", + "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo" + } + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + } +} diff --git a/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php new file mode 100644 index 0000000..1029372 --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php @@ -0,0 +1,266 @@ + */ + private static $ignoredPackages = []; + + /** @var array */ + private static $ignoredLinks = []; + + /** @var bool */ + private static $deduplication = true; + + /** + * Trigger a deprecation for the given package and identfier. + * + * The link should point to a Github issue or Wiki entry detailing the + * deprecation. It is additionally used to de-duplicate the trigger of the + * same deprecation during a request. + * + * @param mixed $args + */ + public static function trigger(string $package, string $link, string $message, ...$args): void + { + if (self::$type === self::TYPE_NONE) { + return; + } + + if (array_key_exists($link, self::$ignoredLinks)) { + self::$ignoredLinks[$link]++; + } else { + self::$ignoredLinks[$link] = 1; + } + + if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) { + return; + } + + if (isset(self::$ignoredPackages[$package])) { + return; + } + + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); + + $message = sprintf($message, ...$args); + + self::delegateTriggerToBackend($message, $backtrace, $link, $package); + } + + /** + * Trigger a deprecation for the given package and identifier when called from outside. + * + * "Outside" means we assume that $package is currently installed as a + * dependency and the caller is not a file in that package. When $package + * is installed as a root package then deprecations triggered from the + * tests folder are also considered "outside". + * + * This deprecation method assumes that you are using Composer to install + * the dependency and are using the default /vendor/ folder and not a + * Composer plugin to change the install location. The assumption is also + * that $package is the exact composer packge name. + * + * Compared to {@link trigger()} this method causes some overhead when + * deprecation tracking is enabled even during deduplication, because it + * needs to call {@link debug_backtrace()} + * + * @param mixed $args + */ + public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void + { + if (self::$type === self::TYPE_NONE) { + return; + } + + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); + + // first check that the caller is not from a tests folder, in which case we always let deprecations pass + if (strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) { + $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR; + + if (strpos($backtrace[0]['file'], $path) === false) { + return; + } + + if (strpos($backtrace[1]['file'], $path) !== false) { + return; + } + } + + if (array_key_exists($link, self::$ignoredLinks)) { + self::$ignoredLinks[$link]++; + } else { + self::$ignoredLinks[$link] = 1; + } + + if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) { + return; + } + + if (isset(self::$ignoredPackages[$package])) { + return; + } + + $message = sprintf($message, ...$args); + + self::delegateTriggerToBackend($message, $backtrace, $link, $package); + } + + /** + * @param array $backtrace + */ + private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void + { + if ((self::$type & self::TYPE_PSR_LOGGER) > 0) { + $context = [ + 'file' => $backtrace[0]['file'], + 'line' => $backtrace[0]['line'], + 'package' => $package, + 'link' => $link, + ]; + + self::$logger->notice($message, $context); + } + + if (! ((self::$type & self::TYPE_TRIGGER_ERROR) > 0)) { + return; + } + + $message .= sprintf( + ' (%s:%d called by %s:%d, %s, package %s)', + self::basename($backtrace[0]['file']), + $backtrace[0]['line'], + self::basename($backtrace[1]['file']), + $backtrace[1]['line'], + $link, + $package + ); + + @trigger_error($message, E_USER_DEPRECATED); + } + + /** + * A non-local-aware version of PHPs basename function. + */ + private static function basename(string $filename): string + { + $pos = strrpos($filename, DIRECTORY_SEPARATOR); + + if ($pos === false) { + return $filename; + } + + return substr($filename, $pos + 1); + } + + public static function enableTrackingDeprecations(): void + { + self::$type |= self::TYPE_TRACK_DEPRECATIONS; + } + + public static function enableWithTriggerError(): void + { + self::$type |= self::TYPE_TRIGGER_ERROR; + } + + public static function enableWithPsrLogger(LoggerInterface $logger): void + { + self::$type |= self::TYPE_PSR_LOGGER; + self::$logger = $logger; + } + + public static function withoutDeduplication(): void + { + self::$deduplication = false; + } + + public static function disable(): void + { + self::$type = self::TYPE_NONE; + self::$logger = null; + self::$deduplication = true; + + foreach (self::$ignoredLinks as $link => $count) { + self::$ignoredLinks[$link] = 0; + } + } + + public static function ignorePackage(string $packageName): void + { + self::$ignoredPackages[$packageName] = true; + } + + public static function ignoreDeprecations(string ...$links): void + { + foreach ($links as $link) { + self::$ignoredLinks[$link] = 0; + } + } + + public static function getUniqueTriggeredDeprecationsCount(): int + { + return array_reduce(self::$ignoredLinks, static function (int $carry, int $count) { + return $carry + $count; + }, 0); + } + + /** + * Returns each triggered deprecation link identifier and the amount of occurrences. + * + * @return array + */ + public static function getTriggeredDeprecations(): array + { + return self::$ignoredLinks; + } +} diff --git a/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php b/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php new file mode 100644 index 0000000..4c3366a --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php @@ -0,0 +1,66 @@ + */ + private $doctrineDeprecationsExpectations = []; + + /** @var array */ + private $doctrineNoDeprecationsExpectations = []; + + public function expectDeprecationWithIdentifier(string $identifier): void + { + $this->doctrineDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; + } + + public function expectNoDeprecationWithIdentifier(string $identifier): void + { + $this->doctrineNoDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; + } + + /** + * @before + */ + public function enableDeprecationTracking(): void + { + Deprecation::enableTrackingDeprecations(); + } + + /** + * @after + */ + public function verifyDeprecationsAreTriggered(): void + { + foreach ($this->doctrineDeprecationsExpectations as $identifier => $expectation) { + $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; + + $this->assertTrue( + $actualCount > $expectation, + sprintf( + "Expected deprecation with identifier '%s' was not triggered by code executed in test.", + $identifier + ) + ); + } + + foreach ($this->doctrineNoDeprecationsExpectations as $identifier => $expectation) { + $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; + + $this->assertTrue( + $actualCount === $expectation, + sprintf( + "Expected deprecation with identifier '%s' was triggered by code executed in test, but expected not to.", + $identifier + ) + ); + } + } +} diff --git a/Sources/API/vendor/doctrine/deprecations/phpcs.xml b/Sources/API/vendor/doctrine/deprecations/phpcs.xml new file mode 100644 index 0000000..f115e43 --- /dev/null +++ b/Sources/API/vendor/doctrine/deprecations/phpcs.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + lib + tests + + + + + + diff --git a/Sources/API/vendor/doctrine/lexer/LICENSE b/Sources/API/vendor/doctrine/lexer/LICENSE new file mode 100644 index 0000000..e8fdec4 --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2018 Doctrine Project + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/doctrine/lexer/README.md b/Sources/API/vendor/doctrine/lexer/README.md new file mode 100644 index 0000000..784f2a2 --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/README.md @@ -0,0 +1,9 @@ +# Doctrine Lexer + +[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) + +Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. + +This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). + +https://www.doctrine-project.org/projects/lexer.html diff --git a/Sources/API/vendor/doctrine/lexer/UPGRADE.md b/Sources/API/vendor/doctrine/lexer/UPGRADE.md new file mode 100644 index 0000000..42b85b3 --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/UPGRADE.md @@ -0,0 +1,14 @@ +Note about upgrading: Doctrine uses static and runtime mechanisms to raise +awareness about deprecated code. + +- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or + Static Analysis tools (like Psalm, phpstan) +- Use of our low-overhead runtime deprecation API, details: + https://github.com/doctrine/deprecations/ + +# Upgrade to 2.0.0 + +`AbstractLexer::glimpse()` and `AbstractLexer::peek()` now return +instances of `Doctrine\Common\Lexer\Token`, which is an array-like class +Using it as an array is deprecated in favor of using properties of that class. +Using `count()` on it is deprecated with no replacement. diff --git a/Sources/API/vendor/doctrine/lexer/composer.json b/Sources/API/vendor/doctrine/lexer/composer.json new file mode 100644 index 0000000..be3013c --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/composer.json @@ -0,0 +1,56 @@ +{ + "name": "doctrine/lexer", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "license": "MIT", + "type": "library", + "keywords": [ + "php", + "parser", + "lexer", + "annotations", + "docblock" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "require": { + "php": "^7.1 || ^8.0", + "doctrine/deprecations": "^1.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Doctrine\\Tests\\Common\\Lexer\\": "tests" + } + }, + "config": { + "allow-plugins": { + "composer/package-versions-deprecated": true, + "dealerdirect/phpcodesniffer-composer-installer": true + }, + "sort-packages": true + } +} diff --git a/Sources/API/vendor/doctrine/lexer/src/AbstractLexer.php b/Sources/API/vendor/doctrine/lexer/src/AbstractLexer.php new file mode 100644 index 0000000..7d33e41 --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/src/AbstractLexer.php @@ -0,0 +1,336 @@ +> + */ + private $tokens = []; + + /** + * Current lexer position in input string. + * + * @var int + */ + private $position = 0; + + /** + * Current peek of current lexer position. + * + * @var int + */ + private $peek = 0; + + /** + * The next token in the input. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $lookahead; + + /** + * The last matched/seen token. + * + * @var mixed[]|null + * @psalm-var Token|null + */ + public $token; + + /** + * Composed regex for input parsing. + * + * @var string|null + */ + private $regex; + + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = []; + + $this->reset(); + $this->scan($input); + } + + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } + + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } + + /** + * Resets the lexer position on the input to the given position. + * + * @param int $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } + + /** + * Retrieve the original lexer's input until a given position. + * + * @param int $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } + + /** + * Checks whether a given token matches the current lookahead. + * + * @param T $type + * + * @return bool + */ + public function isNextToken($type) + { + return $this->lookahead !== null && $this->lookahead->isA($type); + } + + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param list $types + * + * @return bool + */ + public function isNextTokenAny(array $types) + { + return $this->lookahead !== null && $this->lookahead->isA(...$types); + } + + /** + * Moves to the next token in the input string. + * + * @return bool + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = isset($this->tokens[$this->position]) + ? $this->tokens[$this->position++] : null; + + return $this->lookahead !== null; + } + + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param T $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && ! $this->lookahead->isA($type)) { + $this->moveNext(); + } + } + + /** + * Checks if given value is identical to the given token. + * + * @param string $value + * @param int|string $token + * + * @return bool + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } + + /** + * Moves the lookahead token forward. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } + + return null; + } + + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return mixed[]|null The next token or NULL if there are no more tokens ahead. + * @psalm-return Token|null + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + + return $peek; + } + + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + if (! isset($this->regex)) { + $this->regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } + + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($this->regex, $input, -1, $flags); + + if ($matches === false) { + // Work around https://bugs.php.net/78122 + $matches = [[$input, 0]]; + } + + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); + + $this->tokens[] = new Token( + $match[0], + $type, + $match[1] + ); + } + } + + /** + * Gets the literal for a given token. + * + * @param T $token + * + * @return int|string + */ + public function getLiteral($token) + { + if ($token instanceof UnitEnum) { + return get_class($token) . '::' . $token->name; + } + + $className = static::class; + + $reflClass = new ReflectionClass($className); + $constants = $reflClass->getConstants(); + + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } + + return $token; + } + + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'iu'; + } + + /** + * Lexical catchable patterns. + * + * @return string[] + */ + abstract protected function getCatchablePatterns(); + + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + abstract protected function getNonCatchablePatterns(); + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return T|null + */ + abstract protected function getType(&$value); +} diff --git a/Sources/API/vendor/doctrine/lexer/src/Token.php b/Sources/API/vendor/doctrine/lexer/src/Token.php new file mode 100644 index 0000000..e2e0f55 --- /dev/null +++ b/Sources/API/vendor/doctrine/lexer/src/Token.php @@ -0,0 +1,129 @@ + + */ +final class Token implements ArrayAccess +{ + /** + * The string value of the token in the input string + * + * @readonly + * @var string|int + */ + public $value; + + /** + * The type of the token (identifier, numeric, string, input parameter, none) + * + * @readonly + * @var T|null + */ + public $type; + + /** + * The position of the token in the input string + * + * @readonly + * @var int + */ + public $position; + + /** + * @param string|int $value + * @param T|null $type + */ + public function __construct($value, $type, int $position) + { + $this->value = $value; + $this->type = $type; + $this->position = $position; + } + + /** @param T ...$types */ + public function isA(...$types): bool + { + return in_array($this->type, $types, true); + } + + /** + * @deprecated Use the value, type or position property instead + * {@inheritDoc} + */ + public function offsetExists($offset): bool + { + Deprecation::trigger( + 'doctrine/lexer', + 'https://github.com/doctrine/lexer/pull/79', + 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead', + self::class + ); + + return in_array($offset, ['value', 'type', 'position'], true); + } + + /** + * @deprecated Use the value, type or position property instead + * {@inheritDoc} + * + * @param array-key $offset + * + * @return mixed + */ + #[ReturnTypeWillChange] + public function offsetGet($offset) + { + Deprecation::trigger( + 'doctrine/lexer', + 'https://github.com/doctrine/lexer/pull/79', + 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead', + self::class + ); + + return $this->$offset; + } + + /** + * @deprecated no replacement planned + * {@inheritDoc} + */ + public function offsetSet($offset, $value): void + { + Deprecation::trigger( + 'doctrine/lexer', + 'https://github.com/doctrine/lexer/pull/79', + 'Setting %s properties via ArrayAccess is deprecated', + self::class + ); + + $this->$offset = $value; + } + + /** + * @deprecated no replacement planned + * {@inheritDoc} + */ + public function offsetUnset($offset): void + { + Deprecation::trigger( + 'doctrine/lexer', + 'https://github.com/doctrine/lexer/pull/79', + 'Setting %s properties via ArrayAccess is deprecated', + self::class + ); + + $this->$offset = null; + } +} diff --git a/Sources/API/vendor/psr/cache/CHANGELOG.md b/Sources/API/vendor/psr/cache/CHANGELOG.md new file mode 100644 index 0000000..58ddab0 --- /dev/null +++ b/Sources/API/vendor/psr/cache/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.1 - 2016-08-06 + +### Fixed + +- Make spacing consistent in phpdoc annotations php-fig/cache#9 - chalasr +- Fix grammar in phpdoc annotations php-fig/cache#10 - chalasr +- Be more specific in docblocks that `getItems()` and `deleteItems()` take an array of strings (`string[]`) compared to just `array` php-fig/cache#8 - GrahamCampbell +- For `expiresAt()` and `expiresAfter()` in CacheItemInterface fix docblock to specify null as a valid parameters as well as an implementation of DateTimeInterface php-fig/cache#7 - GrahamCampbell + +## 1.0.0 - 2015-12-11 + +Initial stable release; reflects accepted PSR-6 specification diff --git a/Sources/API/vendor/psr/cache/LICENSE.txt b/Sources/API/vendor/psr/cache/LICENSE.txt new file mode 100644 index 0000000..b1c2c97 --- /dev/null +++ b/Sources/API/vendor/psr/cache/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2015 PHP Framework Interoperability Group + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/psr/cache/README.md b/Sources/API/vendor/psr/cache/README.md new file mode 100644 index 0000000..9855a31 --- /dev/null +++ b/Sources/API/vendor/psr/cache/README.md @@ -0,0 +1,12 @@ +Caching Interface +============== + +This repository holds all interfaces related to [PSR-6 (Caching Interface)][psr-url]. + +Note that this is not a Caching implementation of its own. It is merely interfaces that describe the components of a Caching mechanism. + +The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. + +[psr-url]: https://www.php-fig.org/psr/psr-6/ +[package-url]: https://packagist.org/packages/psr/cache +[implementation-url]: https://packagist.org/providers/psr/cache-implementation diff --git a/Sources/API/vendor/psr/cache/composer.json b/Sources/API/vendor/psr/cache/composer.json new file mode 100644 index 0000000..4b68797 --- /dev/null +++ b/Sources/API/vendor/psr/cache/composer.json @@ -0,0 +1,25 @@ +{ + "name": "psr/cache", + "description": "Common interface for caching libraries", + "keywords": ["psr", "psr-6", "cache"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": ">=8.0.0" + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/API/vendor/psr/cache/src/CacheException.php b/Sources/API/vendor/psr/cache/src/CacheException.php new file mode 100644 index 0000000..bb785f4 --- /dev/null +++ b/Sources/API/vendor/psr/cache/src/CacheException.php @@ -0,0 +1,10 @@ +=8.1" + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/Sources/API/vendor/symfony/deprecation-contracts/function.php b/Sources/API/vendor/symfony/deprecation-contracts/function.php new file mode 100644 index 0000000..2d56512 --- /dev/null +++ b/Sources/API/vendor/symfony/deprecation-contracts/function.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (!function_exists('trigger_deprecation')) { + /** + * Triggers a silenced deprecation notice. + * + * @param string $package The name of the Composer package that is triggering the deprecation + * @param string $version The version of the package that introduced the deprecation + * @param string $message The message of the deprecation + * @param mixed ...$args Values to insert in the message using printf() formatting + * + * @author Nicolas Grekas + */ + function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void + { + @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); + } +} diff --git a/Sources/API/vendor/symfony/finder/CHANGELOG.md b/Sources/API/vendor/symfony/finder/CHANGELOG.md new file mode 100644 index 0000000..1a12afe --- /dev/null +++ b/Sources/API/vendor/symfony/finder/CHANGELOG.md @@ -0,0 +1,98 @@ +CHANGELOG +========= + +6.2 +--- + + * Add `Finder::sortByExtension()` and `Finder::sortBySize()` + * Add `Finder::sortByCaseInsensitiveName()` to sort by name with case insensitive sorting methods + +6.0 +--- + + * Remove `Comparator::setTarget()` and `Comparator::setOperator()` + +5.4.0 +----- + + * Deprecate `Comparator::setTarget()` and `Comparator::setOperator()` + * Add a constructor to `Comparator` that allows setting target and operator + * Finder's iterator has now `Symfony\Component\Finder\SplFileInfo` inner type specified + * Add recursive .gitignore files support + +5.0.0 +----- + + * added `$useNaturalSort` argument to `Finder::sortByName()` + +4.3.0 +----- + + * added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore + +4.2.0 +----- + + * added $useNaturalSort option to Finder::sortByName() method + * the `Finder::sortByName()` method will have a new `$useNaturalSort` + argument in version 5.0, not defining it is deprecated + * added `Finder::reverseSorting()` to reverse the sorting + +4.0.0 +----- + + * removed `ExceptionInterface` + * removed `Symfony\Component\Finder\Iterator\FilterIterator` + +3.4.0 +----- + + * deprecated `Symfony\Component\Finder\Iterator\FilterIterator` + * added Finder::hasResults() method to check if any results were found + +3.3.0 +----- + + * added double-star matching to Glob::toRegex() + +3.0.0 +----- + + * removed deprecated classes + +2.8.0 +----- + + * deprecated adapters and related classes + +2.5.0 +----- + * added support for GLOB_BRACE in the paths passed to Finder::in() + +2.3.0 +----- + + * added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs()) + * unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception + +2.2.0 +----- + + * added Finder::path() and Finder::notPath() methods + * added finder adapters to improve performance on specific platforms + * added support for wildcard characters (glob patterns) in the paths passed + to Finder::in() + +2.1.0 +----- + + * added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and + Finder::sortByModifiedTime() + * added Countable to Finder + * added support for an array of directories as an argument to + Finder::exclude() + * added searching based on the file content via Finder::contains() and + Finder::notContains() + * added support for the != operator in the Comparator + * [BC BREAK] filter expressions (used for file name and content) are no more + considered as regexps but glob patterns when they are enclosed in '*' or '?' diff --git a/Sources/API/vendor/symfony/finder/Comparator/Comparator.php b/Sources/API/vendor/symfony/finder/Comparator/Comparator.php new file mode 100644 index 0000000..bd68583 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Comparator/Comparator.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * @author Fabien Potencier + */ +class Comparator +{ + private string $target; + private string $operator; + + public function __construct(string $target, string $operator = '==') + { + if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) { + throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator)); + } + + $this->target = $target; + $this->operator = $operator; + } + + /** + * Gets the target value. + */ + public function getTarget(): string + { + return $this->target; + } + + /** + * Gets the comparison operator. + */ + public function getOperator(): string + { + return $this->operator; + } + + /** + * Tests against the target. + */ + public function test(mixed $test): bool + { + return match ($this->operator) { + '>' => $test > $this->target, + '>=' => $test >= $this->target, + '<' => $test < $this->target, + '<=' => $test <= $this->target, + '!=' => $test != $this->target, + default => $test == $this->target, + }; + } +} diff --git a/Sources/API/vendor/symfony/finder/Comparator/DateComparator.php b/Sources/API/vendor/symfony/finder/Comparator/DateComparator.php new file mode 100644 index 0000000..e0c523d --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Comparator/DateComparator.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * DateCompare compiles date comparisons. + * + * @author Fabien Potencier + */ +class DateComparator extends Comparator +{ + /** + * @param string $test A comparison string + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(string $test) + { + if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test)); + } + + try { + $date = new \DateTimeImmutable($matches[2]); + $target = $date->format('U'); + } catch (\Exception) { + throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2])); + } + + $operator = $matches[1] ?? '=='; + if ('since' === $operator || 'after' === $operator) { + $operator = '>'; + } + + if ('until' === $operator || 'before' === $operator) { + $operator = '<'; + } + + parent::__construct($target, $operator); + } +} diff --git a/Sources/API/vendor/symfony/finder/Comparator/NumberComparator.php b/Sources/API/vendor/symfony/finder/Comparator/NumberComparator.php new file mode 100644 index 0000000..ff85d96 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Comparator/NumberComparator.php @@ -0,0 +1,78 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Comparator; + +/** + * NumberComparator compiles a simple comparison to an anonymous + * subroutine, which you can call with a value to be tested again. + * + * Now this would be very pointless, if NumberCompare didn't understand + * magnitudes. + * + * The target value may use magnitudes of kilobytes (k, ki), + * megabytes (m, mi), or gigabytes (g, gi). Those suffixed + * with an i use the appropriate 2**n version in accordance with the + * IEC standard: http://physics.nist.gov/cuu/Units/binary.html + * + * Based on the Perl Number::Compare module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + * + * @see http://physics.nist.gov/cuu/Units/binary.html + */ +class NumberComparator extends Comparator +{ + /** + * @param string|int $test A comparison string or an integer + * + * @throws \InvalidArgumentException If the test is not understood + */ + public function __construct(?string $test) + { + if (null === $test || !preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) { + throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test ?? 'null')); + } + + $target = $matches[2]; + if (!is_numeric($target)) { + throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target)); + } + if (isset($matches[3])) { + // magnitude + switch (strtolower($matches[3])) { + case 'k': + $target *= 1000; + break; + case 'ki': + $target *= 1024; + break; + case 'm': + $target *= 1000000; + break; + case 'mi': + $target *= 1024 * 1024; + break; + case 'g': + $target *= 1000000000; + break; + case 'gi': + $target *= 1024 * 1024 * 1024; + break; + } + } + + parent::__construct($target, $matches[1] ?: '=='); + } +} diff --git a/Sources/API/vendor/symfony/finder/Exception/AccessDeniedException.php b/Sources/API/vendor/symfony/finder/Exception/AccessDeniedException.php new file mode 100644 index 0000000..ee195ea --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Exception/AccessDeniedException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Jean-François Simon + */ +class AccessDeniedException extends \UnexpectedValueException +{ +} diff --git a/Sources/API/vendor/symfony/finder/Exception/DirectoryNotFoundException.php b/Sources/API/vendor/symfony/finder/Exception/DirectoryNotFoundException.php new file mode 100644 index 0000000..c6cc0f2 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Exception/DirectoryNotFoundException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Exception; + +/** + * @author Andreas Erhard + */ +class DirectoryNotFoundException extends \InvalidArgumentException +{ +} diff --git a/Sources/API/vendor/symfony/finder/Finder.php b/Sources/API/vendor/symfony/finder/Finder.php new file mode 100644 index 0000000..7baecdf --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Finder.php @@ -0,0 +1,846 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +use Symfony\Component\Finder\Comparator\DateComparator; +use Symfony\Component\Finder\Comparator\NumberComparator; +use Symfony\Component\Finder\Exception\DirectoryNotFoundException; +use Symfony\Component\Finder\Iterator\CustomFilterIterator; +use Symfony\Component\Finder\Iterator\DateRangeFilterIterator; +use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator; +use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator; +use Symfony\Component\Finder\Iterator\FilecontentFilterIterator; +use Symfony\Component\Finder\Iterator\FilenameFilterIterator; +use Symfony\Component\Finder\Iterator\LazyIterator; +use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator; +use Symfony\Component\Finder\Iterator\SortableIterator; + +/** + * Finder allows to build rules to find files and directories. + * + * It is a thin wrapper around several specialized iterator classes. + * + * All rules may be invoked several times. + * + * All methods return the current Finder object to allow chaining: + * + * $finder = Finder::create()->files()->name('*.php')->in(__DIR__); + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class Finder implements \IteratorAggregate, \Countable +{ + public const IGNORE_VCS_FILES = 1; + public const IGNORE_DOT_FILES = 2; + public const IGNORE_VCS_IGNORED_FILES = 4; + + private int $mode = 0; + private array $names = []; + private array $notNames = []; + private array $exclude = []; + private array $filters = []; + private array $depths = []; + private array $sizes = []; + private bool $followLinks = false; + private bool $reverseSorting = false; + private \Closure|int|false $sort = false; + private int $ignore = 0; + private array $dirs = []; + private array $dates = []; + private array $iterators = []; + private array $contains = []; + private array $notContains = []; + private array $paths = []; + private array $notPaths = []; + private bool $ignoreUnreadableDirs = false; + + private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + + public function __construct() + { + $this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES; + } + + /** + * Creates a new Finder. + */ + public static function create(): static + { + return new static(); + } + + /** + * Restricts the matching to directories only. + * + * @return $this + */ + public function directories(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; + + return $this; + } + + /** + * Restricts the matching to files only. + * + * @return $this + */ + public function files(): static + { + $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; + + return $this; + } + + /** + * Adds tests for the directory depth. + * + * Usage: + * + * $finder->depth('> 1') // the Finder will start matching at level 1. + * $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point. + * $finder->depth(['>= 1', '< 3']) + * + * @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels + * + * @return $this + * + * @see DepthRangeFilterIterator + * @see NumberComparator + */ + public function depth(string|int|array $levels): static + { + foreach ((array) $levels as $level) { + $this->depths[] = new Comparator\NumberComparator($level); + } + + return $this; + } + + /** + * Adds tests for file dates (last modified). + * + * The date must be something that strtotime() is able to parse: + * + * $finder->date('since yesterday'); + * $finder->date('until 2 days ago'); + * $finder->date('> now - 2 hours'); + * $finder->date('>= 2005-10-15'); + * $finder->date(['>= 2005-10-15', '<= 2006-05-27']); + * + * @param string|string[] $dates A date range string or an array of date ranges + * + * @return $this + * + * @see strtotime + * @see DateRangeFilterIterator + * @see DateComparator + */ + public function date(string|array $dates): static + { + foreach ((array) $dates as $date) { + $this->dates[] = new Comparator\DateComparator($date); + } + + return $this; + } + + /** + * Adds rules that files must match. + * + * You can use patterns (delimited with / sign), globs or simple strings. + * + * $finder->name('*.php') + * $finder->name('/\.php$/') // same as above + * $finder->name('test.php') + * $finder->name(['test.py', 'test.php']) + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function name(string|array $patterns): static + { + $this->names = array_merge($this->names, (array) $patterns); + + return $this; + } + + /** + * Adds rules that files must not match. + * + * @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notName(string|array $patterns): static + { + $this->notNames = array_merge($this->notNames, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must match. + * + * Strings or PCRE patterns can be used: + * + * $finder->contains('Lorem ipsum') + * $finder->contains('/Lorem ipsum/i') + * $finder->contains(['dolor', '/ipsum/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function contains(string|array $patterns): static + { + $this->contains = array_merge($this->contains, (array) $patterns); + + return $this; + } + + /** + * Adds tests that file contents must not match. + * + * Strings or PCRE patterns can be used: + * + * $finder->notContains('Lorem ipsum') + * $finder->notContains('/Lorem ipsum/i') + * $finder->notContains(['lorem', '/dolor/i']) + * + * @param string|string[] $patterns A pattern (string or regexp) or an array of patterns + * + * @return $this + * + * @see FilecontentFilterIterator + */ + public function notContains(string|array $patterns): static + { + $this->notContains = array_merge($this->notContains, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->path('some/special/dir') + * $finder->path('/some\/special\/dir/') // same as above + * $finder->path(['some dir', 'another/dir']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function path(string|array $patterns): static + { + $this->paths = array_merge($this->paths, (array) $patterns); + + return $this; + } + + /** + * Adds rules that filenames must not match. + * + * You can use patterns (delimited with / sign) or simple strings. + * + * $finder->notPath('some/special/dir') + * $finder->notPath('/some\/special\/dir/') // same as above + * $finder->notPath(['some/file.txt', 'another/file.log']) + * + * Use only / as dirname separator. + * + * @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns + * + * @return $this + * + * @see FilenameFilterIterator + */ + public function notPath(string|array $patterns): static + { + $this->notPaths = array_merge($this->notPaths, (array) $patterns); + + return $this; + } + + /** + * Adds tests for file sizes. + * + * $finder->size('> 10K'); + * $finder->size('<= 1Ki'); + * $finder->size(4); + * $finder->size(['> 10K', '< 20K']) + * + * @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges + * + * @return $this + * + * @see SizeRangeFilterIterator + * @see NumberComparator + */ + public function size(string|int|array $sizes): static + { + foreach ((array) $sizes as $size) { + $this->sizes[] = new Comparator\NumberComparator($size); + } + + return $this; + } + + /** + * Excludes directories. + * + * Directories passed as argument must be relative to the ones defined with the `in()` method. For example: + * + * $finder->in(__DIR__)->exclude('ruby'); + * + * @param string|array $dirs A directory path or an array of directories + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function exclude(string|array $dirs): static + { + $this->exclude = array_merge($this->exclude, (array) $dirs); + + return $this; + } + + /** + * Excludes "hidden" directories and files (starting with a dot). + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreDotFiles(bool $ignoreDotFiles): static + { + if ($ignoreDotFiles) { + $this->ignore |= static::IGNORE_DOT_FILES; + } else { + $this->ignore &= ~static::IGNORE_DOT_FILES; + } + + return $this; + } + + /** + * Forces the finder to ignore version control directories. + * + * This option is enabled by default. + * + * @return $this + * + * @see ExcludeDirectoryFilterIterator + */ + public function ignoreVCS(bool $ignoreVCS): static + { + if ($ignoreVCS) { + $this->ignore |= static::IGNORE_VCS_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_FILES; + } + + return $this; + } + + /** + * Forces Finder to obey .gitignore and ignore files based on rules listed there. + * + * This option is disabled by default. + * + * @return $this + */ + public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static + { + if ($ignoreVCSIgnored) { + $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; + } else { + $this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES; + } + + return $this; + } + + /** + * Adds VCS patterns. + * + * @see ignoreVCS() + * + * @param string|string[] $pattern VCS patterns to ignore + */ + public static function addVCSPattern(string|array $pattern) + { + foreach ((array) $pattern as $p) { + self::$vcsPatterns[] = $p; + } + + self::$vcsPatterns = array_unique(self::$vcsPatterns); + } + + /** + * Sorts files and directories by an anonymous function. + * + * The anonymous function receives two \SplFileInfo instances to compare. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sort(\Closure $closure): static + { + $this->sort = $closure; + + return $this; + } + + /** + * Sorts files and directories by extension. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByExtension(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_EXTENSION; + + return $this; + } + + /** + * Sorts files and directories by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByName(bool $useNaturalSort = false): static + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; + + return $this; + } + + /** + * Sorts files and directories by name case insensitive. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByCaseInsensitiveName(bool $useNaturalSort = false): static + { + $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL_CASE_INSENSITIVE : Iterator\SortableIterator::SORT_BY_NAME_CASE_INSENSITIVE; + + return $this; + } + + /** + * Sorts files and directories by size. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortBySize(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_SIZE; + + return $this; + } + + /** + * Sorts files and directories by type (directories before files), then by name. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByType(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; + + return $this; + } + + /** + * Sorts files and directories by the last accessed time. + * + * This is the time that the file was last accessed, read or written to. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByAccessedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; + + return $this; + } + + /** + * Reverses the sorting. + * + * @return $this + */ + public function reverseSorting(): static + { + $this->reverseSorting = true; + + return $this; + } + + /** + * Sorts files and directories by the last inode changed time. + * + * This is the time that the inode information was last modified (permissions, owner, group or other metadata). + * + * On Windows, since inode is not available, changed time is actually the file creation time. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByChangedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; + + return $this; + } + + /** + * Sorts files and directories by the last modified time. + * + * This is the last time the actual contents of the file were last modified. + * + * This can be slow as all the matching files and directories must be retrieved for comparison. + * + * @return $this + * + * @see SortableIterator + */ + public function sortByModifiedTime(): static + { + $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; + + return $this; + } + + /** + * Filters the iterator with an anonymous function. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @return $this + * + * @see CustomFilterIterator + */ + public function filter(\Closure $closure): static + { + $this->filters[] = $closure; + + return $this; + } + + /** + * Forces the following of symlinks. + * + * @return $this + */ + public function followLinks(): static + { + $this->followLinks = true; + + return $this; + } + + /** + * Tells finder to ignore unreadable directories. + * + * By default, scanning unreadable directories content throws an AccessDeniedException. + * + * @return $this + */ + public function ignoreUnreadableDirs(bool $ignore = true): static + { + $this->ignoreUnreadableDirs = $ignore; + + return $this; + } + + /** + * Searches files and directories which match defined rules. + * + * @param string|string[] $dirs A directory path or an array of directories + * + * @return $this + * + * @throws DirectoryNotFoundException if one of the directories does not exist + */ + public function in(string|array $dirs): static + { + $resolvedDirs = []; + + foreach ((array) $dirs as $dir) { + if (is_dir($dir)) { + $resolvedDirs[] = [$this->normalizeDir($dir)]; + } elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) { + sort($glob); + $resolvedDirs[] = array_map($this->normalizeDir(...), $glob); + } else { + throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir)); + } + } + + $this->dirs = array_merge($this->dirs, ...$resolvedDirs); + + return $this; + } + + /** + * Returns an Iterator for the current Finder configuration. + * + * This method implements the IteratorAggregate interface. + * + * @return \Iterator + * + * @throws \LogicException if the in() method has not been called + */ + public function getIterator(): \Iterator + { + if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { + throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); + } + + if (1 === \count($this->dirs) && 0 === \count($this->iterators)) { + $iterator = $this->searchInDirectory($this->dirs[0]); + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + $iterator = new \AppendIterator(); + foreach ($this->dirs as $dir) { + $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { + return $this->searchInDirectory($dir); + }))); + } + + foreach ($this->iterators as $it) { + $iterator->append($it); + } + + if ($this->sort || $this->reverseSorting) { + $iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator(); + } + + return $iterator; + } + + /** + * Appends an existing set of files/directories to the finder. + * + * The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array. + * + * @return $this + * + * @throws \InvalidArgumentException when the given argument is not iterable + */ + public function append(iterable $iterator): static + { + if ($iterator instanceof \IteratorAggregate) { + $this->iterators[] = $iterator->getIterator(); + } elseif ($iterator instanceof \Iterator) { + $this->iterators[] = $iterator; + } elseif (is_iterable($iterator)) { + $it = new \ArrayIterator(); + foreach ($iterator as $file) { + $file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file); + $it[$file->getPathname()] = $file; + } + $this->iterators[] = $it; + } else { + throw new \InvalidArgumentException('Finder::append() method wrong argument type.'); + } + + return $this; + } + + /** + * Check if any results were found. + */ + public function hasResults(): bool + { + foreach ($this->getIterator() as $_) { + return true; + } + + return false; + } + + /** + * Counts all the results collected by the iterators. + */ + public function count(): int + { + return iterator_count($this->getIterator()); + } + + private function searchInDirectory(string $dir): \Iterator + { + $exclude = $this->exclude; + $notPaths = $this->notPaths; + + if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) { + $exclude = array_merge($exclude, self::$vcsPatterns); + } + + if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) { + $notPaths[] = '#(^|/)\..+(/|$)#'; + } + + $minDepth = 0; + $maxDepth = \PHP_INT_MAX; + + foreach ($this->depths as $comparator) { + switch ($comparator->getOperator()) { + case '>': + $minDepth = $comparator->getTarget() + 1; + break; + case '>=': + $minDepth = $comparator->getTarget(); + break; + case '<': + $maxDepth = $comparator->getTarget() - 1; + break; + case '<=': + $maxDepth = $comparator->getTarget(); + break; + default: + $minDepth = $maxDepth = $comparator->getTarget(); + } + } + + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; + + if ($this->followLinks) { + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; + } + + $iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs); + + if ($exclude) { + $iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude); + } + + $iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST); + + if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) { + $iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth); + } + + if ($this->mode) { + $iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode); + } + + if ($this->names || $this->notNames) { + $iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames); + } + + if ($this->contains || $this->notContains) { + $iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains); + } + + if ($this->sizes) { + $iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes); + } + + if ($this->dates) { + $iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates); + } + + if ($this->filters) { + $iterator = new Iterator\CustomFilterIterator($iterator, $this->filters); + } + + if ($this->paths || $notPaths) { + $iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths); + } + + if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) { + $iterator = new Iterator\VcsIgnoredFilterIterator($iterator, $dir); + } + + return $iterator; + } + + /** + * Normalizes given directory names by removing trailing slashes. + * + * Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper + */ + private function normalizeDir(string $dir): string + { + if ('/' === $dir) { + return $dir; + } + + $dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR); + + if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) { + $dir .= '/'; + } + + return $dir; + } +} diff --git a/Sources/API/vendor/symfony/finder/Gitignore.php b/Sources/API/vendor/symfony/finder/Gitignore.php new file mode 100644 index 0000000..070074b --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Gitignore.php @@ -0,0 +1,93 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Gitignore matches against text. + * + * @author Michael Voříšek + * @author Ahmed Abdou + */ +class Gitignore +{ + /** + * Returns a regexp which is the equivalent of the gitignore pattern. + * + * Format specification: https://git-scm.com/docs/gitignore#_pattern_format + */ + public static function toRegex(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, false); + } + + public static function toRegexMatchingNegatedPatterns(string $gitignoreFileContent): string + { + return self::buildRegex($gitignoreFileContent, true); + } + + private static function buildRegex(string $gitignoreFileContent, bool $inverted): string + { + $gitignoreFileContent = preg_replace('~(? + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Glob matches globbing patterns against text. + * + * if match_glob("foo.*", "foo.bar") echo "matched\n"; + * + * // prints foo.bar and foo.baz + * $regex = glob_to_regex("foo.*"); + * for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t) + * { + * if (/$regex/) echo "matched: $car\n"; + * } + * + * Glob implements glob(3) style matching that can be used to match + * against text, rather than fetching names from a filesystem. + * + * Based on the Perl Text::Glob module. + * + * @author Fabien Potencier PHP port + * @author Richard Clamp Perl version + * @copyright 2004-2005 Fabien Potencier + * @copyright 2002 Richard Clamp + */ +class Glob +{ + /** + * Returns a regexp which is the equivalent of the glob pattern. + */ + public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#'): string + { + $firstByte = true; + $escaping = false; + $inCurlies = 0; + $regex = ''; + $sizeGlob = \strlen($glob); + for ($i = 0; $i < $sizeGlob; ++$i) { + $car = $glob[$i]; + if ($firstByte && $strictLeadingDot && '.' !== $car) { + $regex .= '(?=[^\.])'; + } + + $firstByte = '/' === $car; + + if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) { + $car = '[^/]++/'; + if (!isset($glob[$i + 3])) { + $car .= '?'; + } + + if ($strictLeadingDot) { + $car = '(?=[^\.])'.$car; + } + + $car = '/(?:'.$car.')*'; + $i += 2 + isset($glob[$i + 3]); + + if ('/' === $delimiter) { + $car = str_replace('/', '\\/', $car); + } + } + + if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) { + $regex .= "\\$car"; + } elseif ('*' === $car) { + $regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*'); + } elseif ('?' === $car) { + $regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.'); + } elseif ('{' === $car) { + $regex .= $escaping ? '\\{' : '('; + if (!$escaping) { + ++$inCurlies; + } + } elseif ('}' === $car && $inCurlies) { + $regex .= $escaping ? '}' : ')'; + if (!$escaping) { + --$inCurlies; + } + } elseif (',' === $car && $inCurlies) { + $regex .= $escaping ? ',' : '|'; + } elseif ('\\' === $car) { + if ($escaping) { + $regex .= '\\\\'; + $escaping = false; + } else { + $escaping = true; + } + + continue; + } else { + $regex .= $car; + } + $escaping = false; + } + + return $delimiter.'^'.$regex.'$'.$delimiter; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/CustomFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/CustomFilterIterator.php new file mode 100644 index 0000000..82ee81d --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/CustomFilterIterator.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * CustomFilterIterator filters files by applying anonymous functions. + * + * The anonymous function receives a \SplFileInfo and must return false + * to remove files. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class CustomFilterIterator extends \FilterIterator +{ + private array $filters = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param callable[] $filters An array of PHP callbacks + * + * @throws \InvalidArgumentException + */ + public function __construct(\Iterator $iterator, array $filters) + { + foreach ($filters as $filter) { + if (!\is_callable($filter)) { + throw new \InvalidArgumentException('Invalid PHP callback.'); + } + } + $this->filters = $filters; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + foreach ($this->filters as $filter) { + if (false === $filter($fileinfo)) { + return false; + } + } + + return true; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php new file mode 100644 index 0000000..718d42b --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\DateComparator; + +/** + * DateRangeFilterIterator filters out files that are not in the given date range (last modified dates). + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class DateRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param DateComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + + if (!file_exists($fileinfo->getPathname())) { + return false; + } + + $filedate = $fileinfo->getMTime(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filedate)) { + return false; + } + } + + return true; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php new file mode 100644 index 0000000..1cddb5f --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * DepthRangeFilterIterator limits the directory depth. + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +class DepthRangeFilterIterator extends \FilterIterator +{ + private int $minDepth = 0; + + /** + * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter + * @param int $minDepth The min depth + * @param int $maxDepth The max depth + */ + public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX) + { + $this->minDepth = $minDepth; + $iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth); + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->getInnerIterator()->getDepth() >= $this->minDepth; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php new file mode 100644 index 0000000..efe9364 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * ExcludeDirectoryFilterIterator filters out directories. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + * @implements \RecursiveIterator + */ +class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator +{ + /** @var \Iterator */ + private \Iterator $iterator; + private bool $isRecursive; + private array $excludedDirs = []; + private ?string $excludedPattern = null; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $directories An array of directories to exclude + */ + public function __construct(\Iterator $iterator, array $directories) + { + $this->iterator = $iterator; + $this->isRecursive = $iterator instanceof \RecursiveIterator; + $patterns = []; + foreach ($directories as $directory) { + $directory = rtrim($directory, '/'); + if (!$this->isRecursive || str_contains($directory, '/')) { + $patterns[] = preg_quote($directory, '#'); + } else { + $this->excludedDirs[$directory] = true; + } + } + if ($patterns) { + $this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#'; + } + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) { + return false; + } + + if ($this->excludedPattern) { + $path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath(); + $path = str_replace('\\', '/', $path); + + return !preg_match($this->excludedPattern, $path); + } + + return true; + } + + public function hasChildren(): bool + { + return $this->isRecursive && $this->iterator->hasChildren(); + } + + public function getChildren(): self + { + $children = new self($this->iterator->getChildren(), []); + $children->excludedDirs = $this->excludedDirs; + $children->excludedPattern = $this->excludedPattern; + + return $children; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php new file mode 100644 index 0000000..2130378 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * FileTypeFilterIterator only keeps files, directories, or both. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class FileTypeFilterIterator extends \FilterIterator +{ + public const ONLY_FILES = 1; + public const ONLY_DIRECTORIES = 2; + + private int $mode; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES) + */ + public function __construct(\Iterator $iterator, int $mode) + { + $this->mode = $mode; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + return false; + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + return false; + } + + return true; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php new file mode 100644 index 0000000..bdc71ff --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * FilecontentFilterIterator filters files by their contents using patterns (regexps or strings). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class FilecontentFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + if (!$this->matchRegexps && !$this->noMatchRegexps) { + return true; + } + + $fileinfo = $this->current(); + + if ($fileinfo->isDir() || !$fileinfo->isReadable()) { + return false; + } + + $content = $fileinfo->getContents(); + if (!$content) { + return false; + } + + return $this->isAccepted($content); + } + + /** + * Converts string to regexp if necessary. + * + * @param string $str Pattern: string or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/FilenameFilterIterator.php new file mode 100644 index 0000000..05d9535 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Glob; + +/** + * FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string). + * + * @author Fabien Potencier + * + * @extends MultiplePcreFilterIterator + */ +class FilenameFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + return $this->isAccepted($this->current()->getFilename()); + } + + /** + * Converts glob to regexp. + * + * PCRE patterns are left unchanged. + * Glob strings are transformed with Glob::toRegex(). + * + * @param string $str Pattern: glob or regexp + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : Glob::toRegex($str); + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/LazyIterator.php b/Sources/API/vendor/symfony/finder/Iterator/LazyIterator.php new file mode 100644 index 0000000..5b5806b --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/LazyIterator.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * @author Jérémy Derussé + * + * @internal + */ +class LazyIterator implements \IteratorAggregate +{ + private \Closure $iteratorFactory; + + public function __construct(callable $iteratorFactory) + { + $this->iteratorFactory = $iteratorFactory(...); + } + + public function getIterator(): \Traversable + { + yield from ($this->iteratorFactory)(); + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php new file mode 100644 index 0000000..82a9df3 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -0,0 +1,111 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings). + * + * @author Fabien Potencier + * + * @template-covariant TKey + * @template-covariant TValue + * + * @extends \FilterIterator + */ +abstract class MultiplePcreFilterIterator extends \FilterIterator +{ + protected $matchRegexps = []; + protected $noMatchRegexps = []; + + /** + * @param \Iterator $iterator The Iterator to filter + * @param string[] $matchPatterns An array of patterns that need to match + * @param string[] $noMatchPatterns An array of patterns that need to not match + */ + public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns) + { + foreach ($matchPatterns as $pattern) { + $this->matchRegexps[] = $this->toRegex($pattern); + } + + foreach ($noMatchPatterns as $pattern) { + $this->noMatchRegexps[] = $this->toRegex($pattern); + } + + parent::__construct($iterator); + } + + /** + * Checks whether the string is accepted by the regex filters. + * + * If there is no regexps defined in the class, this method will accept the string. + * Such case can be handled by child classes before calling the method if they want to + * apply a different behavior. + */ + protected function isAccepted(string $string): bool + { + // should at least not match one rule to exclude + foreach ($this->noMatchRegexps as $regex) { + if (preg_match($regex, $string)) { + return false; + } + } + + // should at least match one rule + if ($this->matchRegexps) { + foreach ($this->matchRegexps as $regex) { + if (preg_match($regex, $string)) { + return true; + } + } + + return false; + } + + // If there is no match rules, the file is accepted + return true; + } + + /** + * Checks whether the string is a regex. + */ + protected function isRegex(string $str): bool + { + $availableModifiers = 'imsxuADU'; + + if (\PHP_VERSION_ID >= 80200) { + $availableModifiers .= 'n'; + } + + if (preg_match('/^(.{3,}?)['.$availableModifiers.']*$/', $str, $m)) { + $start = substr($m[1], 0, 1); + $end = substr($m[1], -1); + + if ($start === $end) { + return !preg_match('/[*?[:alnum:] \\\\]/', $start); + } + + foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) { + if ($start === $delimiters[0] && $end === $delimiters[1]) { + return true; + } + } + } + + return false; + } + + /** + * Converts string into regexp. + */ + abstract protected function toRegex(string $str): string; +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/PathFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/PathFilterIterator.php new file mode 100644 index 0000000..c6d5813 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -0,0 +1,56 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\SplFileInfo; + +/** + * PathFilterIterator filters files by path patterns (e.g. some/special/dir). + * + * @author Fabien Potencier + * @author Włodzimierz Gajda + * + * @extends MultiplePcreFilterIterator + */ +class PathFilterIterator extends MultiplePcreFilterIterator +{ + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $filename = $this->current()->getRelativePathname(); + + if ('\\' === \DIRECTORY_SEPARATOR) { + $filename = str_replace('\\', '/', $filename); + } + + return $this->isAccepted($filename); + } + + /** + * Converts strings to regexp. + * + * PCRE patterns are left unchanged. + * + * Default conversion: + * 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/' + * + * Use only / as directory separator (on Windows also). + * + * @param string $str Pattern: regexp or dirname + */ + protected function toRegex(string $str): string + { + return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/Sources/API/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php new file mode 100644 index 0000000..c321aee --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -0,0 +1,146 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Exception\AccessDeniedException; +use Symfony\Component\Finder\SplFileInfo; + +/** + * Extends the \RecursiveDirectoryIterator to support relative paths. + * + * @author Victor Berchet + * @extends \RecursiveDirectoryIterator + */ +class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator +{ + private bool $ignoreUnreadableDirs; + private ?bool $rewindable = null; + + // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations + private string $rootPath; + private string $subPath; + private string $directorySeparator = '/'; + + /** + * @throws \RuntimeException + */ + public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false) + { + if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) { + throw new \RuntimeException('This iterator only support returning current as fileinfo.'); + } + + parent::__construct($path, $flags); + $this->ignoreUnreadableDirs = $ignoreUnreadableDirs; + $this->rootPath = $path; + if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) { + $this->directorySeparator = \DIRECTORY_SEPARATOR; + } + } + + /** + * Return an instance of SplFileInfo with support for relative paths. + */ + public function current(): SplFileInfo + { + // the logic here avoids redoing the same work in all iterations + + if (!isset($this->subPath)) { + $this->subPath = $this->getSubPath(); + } + $subPathname = $this->subPath; + if ('' !== $subPathname) { + $subPathname .= $this->directorySeparator; + } + $subPathname .= $this->getFilename(); + + if ('/' !== $basePath = $this->rootPath) { + $basePath .= $this->directorySeparator; + } + + return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); + } + + public function hasChildren(bool $allowLinks = false): bool + { + $hasChildren = parent::hasChildren($allowLinks); + + if (!$hasChildren || !$this->ignoreUnreadableDirs) { + return $hasChildren; + } + + try { + parent::getChildren(); + + return true; + } catch (\UnexpectedValueException) { + // If directory is unreadable and finder is set to ignore it, skip children + return false; + } + } + + /** + * @throws AccessDeniedException + */ + public function getChildren(): \RecursiveDirectoryIterator + { + try { + $children = parent::getChildren(); + + if ($children instanceof self) { + // parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore + $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; + + // performance optimization to avoid redoing the same work in all children + $children->rewindable = &$this->rewindable; + $children->rootPath = $this->rootPath; + } + + return $children; + } catch (\UnexpectedValueException $e) { + throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * Do nothing for non rewindable stream. + */ + public function rewind(): void + { + if (false === $this->isRewindable()) { + return; + } + + parent::rewind(); + } + + /** + * Checks if the stream is rewindable. + */ + public function isRewindable(): bool + { + if (null !== $this->rewindable) { + return $this->rewindable; + } + + if (false !== $stream = @opendir($this->getPath())) { + $infos = stream_get_meta_data($stream); + closedir($stream); + + if ($infos['seekable']) { + return $this->rewindable = true; + } + } + + return $this->rewindable = false; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php new file mode 100644 index 0000000..925830a --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Comparator\NumberComparator; + +/** + * SizeRangeFilterIterator filters out files that are not in the given size range. + * + * @author Fabien Potencier + * + * @extends \FilterIterator + */ +class SizeRangeFilterIterator extends \FilterIterator +{ + private array $comparators = []; + + /** + * @param \Iterator $iterator + * @param NumberComparator[] $comparators + */ + public function __construct(\Iterator $iterator, array $comparators) + { + $this->comparators = $comparators; + + parent::__construct($iterator); + } + + /** + * Filters the iterator values. + */ + public function accept(): bool + { + $fileinfo = $this->current(); + if (!$fileinfo->isFile()) { + return true; + } + + $filesize = $fileinfo->getSize(); + foreach ($this->comparators as $compare) { + if (!$compare->test($filesize)) { + return false; + } + } + + return true; + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/SortableIterator.php b/Sources/API/vendor/symfony/finder/Iterator/SortableIterator.php new file mode 100644 index 0000000..e8b5565 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/SortableIterator.php @@ -0,0 +1,121 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +/** + * SortableIterator applies a sort on a given Iterator. + * + * @author Fabien Potencier + * + * @implements \IteratorAggregate + */ +class SortableIterator implements \IteratorAggregate +{ + public const SORT_BY_NONE = 0; + public const SORT_BY_NAME = 1; + public const SORT_BY_TYPE = 2; + public const SORT_BY_ACCESSED_TIME = 3; + public const SORT_BY_CHANGED_TIME = 4; + public const SORT_BY_MODIFIED_TIME = 5; + public const SORT_BY_NAME_NATURAL = 6; + public const SORT_BY_NAME_CASE_INSENSITIVE = 7; + public const SORT_BY_NAME_NATURAL_CASE_INSENSITIVE = 8; + public const SORT_BY_EXTENSION = 9; + public const SORT_BY_SIZE = 10; + + /** @var \Traversable */ + private \Traversable $iterator; + private \Closure|int $sort; + + /** + * @param \Traversable $iterator + * @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback) + * + * @throws \InvalidArgumentException + */ + public function __construct(\Traversable $iterator, int|callable $sort, bool $reverseOrder = false) + { + $this->iterator = $iterator; + $order = $reverseOrder ? -1 : 1; + + if (self::SORT_BY_NAME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_CASE_INSENSITIVE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_NAME_NATURAL_CASE_INSENSITIVE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_TYPE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + if ($a->isDir() && $b->isFile()) { + return -$order; + } elseif ($a->isFile() && $b->isDir()) { + return $order; + } + + return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); + }; + } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getATime() - $b->getATime()); + }; + } elseif (self::SORT_BY_CHANGED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getCTime() - $b->getCTime()); + }; + } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getMTime() - $b->getMTime()); + }; + } elseif (self::SORT_BY_EXTENSION === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * strnatcmp($a->getExtension(), $b->getExtension()); + }; + } elseif (self::SORT_BY_SIZE === $sort) { + $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { + return $order * ($a->getSize() - $b->getSize()); + }; + } elseif (self::SORT_BY_NONE === $sort) { + $this->sort = $order; + } elseif (\is_callable($sort)) { + $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); + } else { + throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); + } + } + + public function getIterator(): \Traversable + { + if (1 === $this->sort) { + return $this->iterator; + } + + $array = iterator_to_array($this->iterator, true); + + if (-1 === $this->sort) { + $array = array_reverse($array); + } else { + uasort($array, $this->sort); + } + + return new \ArrayIterator($array); + } +} diff --git a/Sources/API/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/Sources/API/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php new file mode 100644 index 0000000..29fc2d9 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -0,0 +1,178 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder\Iterator; + +use Symfony\Component\Finder\Gitignore; + +/** + * @extends \FilterIterator + */ +final class VcsIgnoredFilterIterator extends \FilterIterator +{ + /** + * @var string + */ + private $baseDir; + + /** + * @var array + */ + private $gitignoreFilesCache = []; + + /** + * @var array + */ + private $ignoredPathsCache = []; + + /** + * @param \Iterator $iterator + */ + public function __construct(\Iterator $iterator, string $baseDir) + { + $this->baseDir = $this->normalizePath($baseDir); + + foreach ($this->parentDirectoriesUpwards($this->baseDir) as $parentDirectory) { + if (@is_dir("{$parentDirectory}/.git")) { + $this->baseDir = $parentDirectory; + break; + } + } + + parent::__construct($iterator); + } + + public function accept(): bool + { + $file = $this->current(); + + $fileRealPath = $this->normalizePath($file->getRealPath()); + + return !$this->isIgnored($fileRealPath); + } + + private function isIgnored(string $fileRealPath): bool + { + if (is_dir($fileRealPath) && !str_ends_with($fileRealPath, '/')) { + $fileRealPath .= '/'; + } + + if (isset($this->ignoredPathsCache[$fileRealPath])) { + return $this->ignoredPathsCache[$fileRealPath]; + } + + $ignored = false; + + foreach ($this->parentDirectoriesDownwards($fileRealPath) as $parentDirectory) { + if ($this->isIgnored($parentDirectory)) { + // rules in ignored directories are ignored, no need to check further. + break; + } + + $fileRelativePath = substr($fileRealPath, \strlen($parentDirectory) + 1); + + if (null === $regexps = $this->readGitignoreFile("{$parentDirectory}/.gitignore")) { + continue; + } + + [$exclusionRegex, $inclusionRegex] = $regexps; + + if (preg_match($exclusionRegex, $fileRelativePath)) { + $ignored = true; + + continue; + } + + if (preg_match($inclusionRegex, $fileRelativePath)) { + $ignored = false; + } + } + + return $this->ignoredPathsCache[$fileRealPath] = $ignored; + } + + /** + * @return list + */ + private function parentDirectoriesUpwards(string $from): array + { + $parentDirectories = []; + + $parentDirectory = $from; + + while (true) { + $newParentDirectory = \dirname($parentDirectory); + + // dirname('/') = '/' + if ($newParentDirectory === $parentDirectory) { + break; + } + + $parentDirectories[] = $parentDirectory = $newParentDirectory; + } + + return $parentDirectories; + } + + private function parentDirectoriesUpTo(string $from, string $upTo): array + { + return array_filter( + $this->parentDirectoriesUpwards($from), + static function (string $directory) use ($upTo): bool { + return str_starts_with($directory, $upTo); + } + ); + } + + /** + * @return list + */ + private function parentDirectoriesDownwards(string $fileRealPath): array + { + return array_reverse( + $this->parentDirectoriesUpTo($fileRealPath, $this->baseDir) + ); + } + + /** + * @return array{0: string, 1: string}|null + */ + private function readGitignoreFile(string $path): ?array + { + if (\array_key_exists($path, $this->gitignoreFilesCache)) { + return $this->gitignoreFilesCache[$path]; + } + + if (!file_exists($path)) { + return $this->gitignoreFilesCache[$path] = null; + } + + if (!is_file($path) || !is_readable($path)) { + throw new \RuntimeException("The \"ignoreVCSIgnored\" option cannot be used by the Finder as the \"{$path}\" file is not readable."); + } + + $gitignoreFileContent = file_get_contents($path); + + return $this->gitignoreFilesCache[$path] = [ + Gitignore::toRegex($gitignoreFileContent), + Gitignore::toRegexMatchingNegatedPatterns($gitignoreFileContent), + ]; + } + + private function normalizePath(string $path): string + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return str_replace('\\', '/', $path); + } + + return $path; + } +} diff --git a/Sources/API/vendor/symfony/finder/LICENSE b/Sources/API/vendor/symfony/finder/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/Sources/API/vendor/symfony/finder/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/symfony/finder/README.md b/Sources/API/vendor/symfony/finder/README.md new file mode 100644 index 0000000..22bdeb9 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/README.md @@ -0,0 +1,14 @@ +Finder Component +================ + +The Finder component finds files and directories via an intuitive fluent +interface. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/finder.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/Sources/API/vendor/symfony/finder/SplFileInfo.php b/Sources/API/vendor/symfony/finder/SplFileInfo.php new file mode 100644 index 0000000..867e8e8 --- /dev/null +++ b/Sources/API/vendor/symfony/finder/SplFileInfo.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Finder; + +/** + * Extends \SplFileInfo to support relative paths. + * + * @author Fabien Potencier + */ +class SplFileInfo extends \SplFileInfo +{ + private string $relativePath; + private string $relativePathname; + + /** + * @param string $file The file name + * @param string $relativePath The relative path + * @param string $relativePathname The relative path name + */ + public function __construct(string $file, string $relativePath, string $relativePathname) + { + parent::__construct($file); + $this->relativePath = $relativePath; + $this->relativePathname = $relativePathname; + } + + /** + * Returns the relative path. + * + * This path does not contain the file name. + */ + public function getRelativePath(): string + { + return $this->relativePath; + } + + /** + * Returns the relative path name. + * + * This path contains the file name. + */ + public function getRelativePathname(): string + { + return $this->relativePathname; + } + + public function getFilenameWithoutExtension(): string + { + $filename = $this->getFilename(); + + return pathinfo($filename, \PATHINFO_FILENAME); + } + + /** + * Returns the contents of the file. + * + * @throws \RuntimeException + */ + public function getContents(): string + { + set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); + try { + $content = file_get_contents($this->getPathname()); + } finally { + restore_error_handler(); + } + if (false === $content) { + throw new \RuntimeException($error); + } + + return $content; + } +} diff --git a/Sources/API/vendor/symfony/finder/composer.json b/Sources/API/vendor/symfony/finder/composer.json new file mode 100644 index 0000000..06d129c --- /dev/null +++ b/Sources/API/vendor/symfony/finder/composer.json @@ -0,0 +1,31 @@ +{ + "name": "symfony/finder", + "type": "library", + "description": "Finds files and directories via an intuitive fluent interface", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Finder\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/Sources/API/vendor/symfony/polyfill-ctype/Ctype.php b/Sources/API/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 0000000..ba75a2c --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,232 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param mixed $int + * @param string $function + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int, $function) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/Sources/API/vendor/symfony/polyfill-ctype/LICENSE b/Sources/API/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 0000000..3f853aa --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-2019 Fabien Potencier + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/symfony/polyfill-ctype/README.md b/Sources/API/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 0000000..b144d03 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/Sources/API/vendor/symfony/polyfill-ctype/bootstrap.php b/Sources/API/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 0000000..d54524b --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print($text) { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space($text) { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/Sources/API/vendor/symfony/polyfill-ctype/bootstrap80.php b/Sources/API/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 0000000..ab2f861 --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/Sources/API/vendor/symfony/polyfill-ctype/composer.json b/Sources/API/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 0000000..1b3efff --- /dev/null +++ b/Sources/API/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/API/vendor/symfony/yaml/CHANGELOG.md b/Sources/API/vendor/symfony/yaml/CHANGELOG.md new file mode 100644 index 0000000..50852cb --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/CHANGELOG.md @@ -0,0 +1,248 @@ +CHANGELOG +========= + +6.2 +--- + + * Add support for `!php/enum` and `!php/enum *->value` + * Deprecate the `!php/const:` tag in key which will be replaced by the `!php/const` tag (without the colon) since 3.4 + +6.1 +--- + + * In cases where it will likely improve readability, strings containing single quotes will be double-quoted + +5.4 +--- + + * Add new `lint:yaml dirname --exclude=/dirname/foo.yaml --exclude=/dirname/bar.yaml` + option to exclude one or more specific files from multiple file list + * Allow negatable for the parse tags option with `--no-parse-tags` + +5.3 +--- + + * Added `github` format support & autodetection to render errors as annotations + when running the YAML linter command in a Github Action environment. + +5.1.0 +----- + + * Added support for parsing numbers prefixed with `0o` as octal numbers. + * Deprecated support for parsing numbers starting with `0` as octal numbers. They will be parsed as strings as of Symfony 6.0. Prefix numbers with `0o` + so that they are parsed as octal numbers. + + Before: + + ```yaml + Yaml::parse('072'); + ``` + + After: + + ```yaml + Yaml::parse('0o72'); + ``` + + * Added `yaml-lint` binary. + * Deprecated using the `!php/object` and `!php/const` tags without a value. + +5.0.0 +----- + + * Removed support for mappings inside multi-line strings. + * removed support for implicit STDIN usage in the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.4.0 +----- + + * Added support for parsing the inline notation spanning multiple lines. + * Added support to dump `null` as `~` by using the `Yaml::DUMP_NULL_AS_TILDE` flag. + * deprecated accepting STDIN implicitly when using the `lint:yaml` command, use `lint:yaml -` (append a dash) instead to make it explicit. + +4.3.0 +----- + + * Using a mapping inside a multi-line string is deprecated and will throw a `ParseException` in 5.0. + +4.2.0 +----- + + * added support for multiple files or directories in `LintCommand` + +4.0.0 +----- + + * The behavior of the non-specific tag `!` is changed and now forces + non-evaluating your values. + * complex mappings will throw a `ParseException` + * support for the comma as a group separator for floats has been dropped, use + the underscore instead + * support for the `!!php/object` tag has been dropped, use the `!php/object` + tag instead + * duplicate mapping keys throw a `ParseException` + * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS` + flag to cast them to strings + * `%` at the beginning of an unquoted string throw a `ParseException` + * mappings with a colon (`:`) that is not followed by a whitespace throw a + `ParseException` + * the `Dumper::setIndentation()` method has been removed + * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`, + `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of + the parser and dumper is no longer supported, pass bitmask flags instead + * the constructor arguments of the `Parser` class have been removed + * the `Inline` class is internal and no longer part of the BC promise + * removed support for the `!str` tag, use the `!!str` tag instead + * added support for tagged scalars. + + ```yml + Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS); + // returns TaggedValue('foo', 'bar'); + ``` + +3.4.0 +----- + + * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method + + * the `Dumper`, `Parser`, and `Yaml` classes are marked as final + + * Deprecated the `!php/object:` tag which will be replaced by the + `!php/object` tag (without the colon) in 4.0. + + * Deprecated the `!php/const:` tag which will be replaced by the + `!php/const` tag (without the colon) in 4.0. + + * Support for the `!str` tag is deprecated, use the `!!str` tag instead. + + * Deprecated using the non-specific tag `!` as its behavior will change in 4.0. + It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead. + +3.3.0 +----- + + * Starting an unquoted string with a question mark followed by a space is + deprecated and will throw a `ParseException` in Symfony 4.0. + + * Deprecated support for implicitly parsing non-string mapping keys as strings. + Mapping keys that are no strings will lead to a `ParseException` in Symfony + 4.0. Use quotes to opt-in for keys to be parsed as strings. + + Before: + + ```php + $yaml = << new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT); + ``` + +3.0.0 +----- + + * Yaml::parse() now throws an exception when a blackslash is not escaped + in double-quoted strings + +2.8.0 +----- + + * Deprecated usage of a colon in an unquoted mapping value + * Deprecated usage of @, \`, | and > at the beginning of an unquoted string + * When surrounding strings with double-quotes, you must now escape `\` characters. Not + escaping those characters (when surrounded by double-quotes) is deprecated. + + Before: + + ```yml + class: "Foo\Var" + ``` + + After: + + ```yml + class: "Foo\\Var" + ``` + +2.1.0 +----- + + * Yaml::parse() does not evaluate loaded files as PHP files by default + anymore (call Yaml::enablePhpParsing() to get back the old behavior) diff --git a/Sources/API/vendor/symfony/yaml/Command/LintCommand.php b/Sources/API/vendor/symfony/yaml/Command/LintCommand.php new file mode 100644 index 0000000..19a0af0 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Command/LintCommand.php @@ -0,0 +1,276 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Command; + +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\CI\GithubActionReporter; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Exception\InvalidArgumentException; +use Symfony\Component\Console\Exception\RuntimeException; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Parser; +use Symfony\Component\Yaml\Yaml; + +/** + * Validates YAML files syntax and outputs encountered errors. + * + * @author Grégoire Pineau + * @author Robin Chalas + */ +#[AsCommand(name: 'lint:yaml', description: 'Lint a YAML file and outputs encountered errors')] +class LintCommand extends Command +{ + private Parser $parser; + private ?string $format = null; + private bool $displayCorrectFiles; + private ?\Closure $directoryIteratorProvider; + private ?\Closure $isReadableProvider; + + public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null) + { + parent::__construct($name); + + $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); + $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); + } + + protected function configure() + { + $this + ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') + ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format') + ->addOption('exclude', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Path(s) to exclude') + ->addOption('parse-tags', null, InputOption::VALUE_NEGATABLE, 'Parse custom tags', null) + ->setHelp(<<%command.name% command lints a YAML file and outputs to STDOUT +the first encountered syntax error. + +You can validates YAML contents passed from STDIN: + + cat filename | php %command.full_name% - + +You can also validate the syntax of a file: + + php %command.full_name% filename + +Or of a whole directory: + + php %command.full_name% dirname + php %command.full_name% dirname --format=json + +You can also exclude one or more specific files: + + php %command.full_name% dirname --exclude="dirname/foo.yaml" --exclude="dirname/bar.yaml" + +EOF + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $filenames = (array) $input->getArgument('filename'); + $excludes = $input->getOption('exclude'); + $this->format = $input->getOption('format'); + $flags = $input->getOption('parse-tags'); + + if ('github' === $this->format && !class_exists(GithubActionReporter::class)) { + throw new \InvalidArgumentException('The "github" format is only available since "symfony/console" >= 5.3.'); + } + + if (null === $this->format) { + // Autodetect format according to CI environment + $this->format = class_exists(GithubActionReporter::class) && GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt'; + } + + $flags = $flags ? Yaml::PARSE_CUSTOM_TAGS : 0; + + $this->displayCorrectFiles = $output->isVerbose(); + + if (['-'] === $filenames) { + return $this->display($io, [$this->validate(file_get_contents('php://stdin'), $flags)]); + } + + if (!$filenames) { + throw new RuntimeException('Please provide a filename or pipe file content to STDIN.'); + } + + $filesInfo = []; + foreach ($filenames as $filename) { + if (!$this->isReadable($filename)) { + throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + } + + foreach ($this->getFiles($filename) as $file) { + if (!\in_array($file->getPathname(), $excludes, true)) { + $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file); + } + } + } + + return $this->display($io, $filesInfo); + } + + private function validate(string $content, int $flags, string $file = null) + { + $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) { + if (\E_USER_DEPRECATED === $level) { + throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1); + } + + return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; + }); + + try { + $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags); + } catch (ParseException $e) { + return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()]; + } finally { + restore_error_handler(); + } + + return ['file' => $file, 'valid' => true]; + } + + private function display(SymfonyStyle $io, array $files): int + { + return match ($this->format) { + 'txt' => $this->displayTxt($io, $files), + 'json' => $this->displayJson($io, $files), + 'github' => $this->displayTxt($io, $files, true), + default => throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format)), + }; + } + + private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int + { + $countFiles = \count($filesInfo); + $erroredFiles = 0; + $suggestTagOption = false; + + if ($errorAsGithubAnnotations) { + $githubReporter = new GithubActionReporter($io); + } + + foreach ($filesInfo as $info) { + if ($info['valid'] && $this->displayCorrectFiles) { + $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (!$info['valid']) { + ++$erroredFiles; + $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->text(sprintf(' >> %s', $info['message'])); + + if (str_contains($info['message'], 'PARSE_CUSTOM_TAGS')) { + $suggestTagOption = true; + } + + if ($errorAsGithubAnnotations) { + $githubReporter->error($info['message'], $info['file'] ?? 'php://stdin', $info['line']); + } + } + } + + if (0 === $erroredFiles) { + $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles)); + } else { + $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.%s', $countFiles - $erroredFiles, $erroredFiles, $suggestTagOption ? ' Use the --parse-tags option if you want parse custom tags.' : '')); + } + + return min($erroredFiles, 1); + } + + private function displayJson(SymfonyStyle $io, array $filesInfo): int + { + $errors = 0; + + array_walk($filesInfo, function (&$v) use (&$errors) { + $v['file'] = (string) $v['file']; + if (!$v['valid']) { + ++$errors; + } + + if (isset($v['message']) && str_contains($v['message'], 'PARSE_CUSTOM_TAGS')) { + $v['message'] .= ' Use the --parse-tags option if you want parse custom tags.'; + } + }); + + $io->writeln(json_encode($filesInfo, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES)); + + return min($errors, 1); + } + + private function getFiles(string $fileOrDirectory): iterable + { + if (is_file($fileOrDirectory)) { + yield new \SplFileInfo($fileOrDirectory); + + return; + } + + foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) { + if (!\in_array($file->getExtension(), ['yml', 'yaml'])) { + continue; + } + + yield $file; + } + } + + private function getParser(): Parser + { + return $this->parser ??= new Parser(); + } + + private function getDirectoryIterator(string $directory): iterable + { + $default = function ($directory) { + return new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS), + \RecursiveIteratorIterator::LEAVES_ONLY + ); + }; + + if (null !== $this->directoryIteratorProvider) { + return ($this->directoryIteratorProvider)($directory, $default); + } + + return $default($directory); + } + + private function isReadable(string $fileOrDirectory): bool + { + $default = function ($fileOrDirectory) { + return is_readable($fileOrDirectory); + }; + + if (null !== $this->isReadableProvider) { + return ($this->isReadableProvider)($fileOrDirectory, $default); + } + + return $default($fileOrDirectory); + } + + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ($input->mustSuggestOptionValuesFor('format')) { + $suggestions->suggestValues(['txt', 'json', 'github']); + } + } +} diff --git a/Sources/API/vendor/symfony/yaml/Dumper.php b/Sources/API/vendor/symfony/yaml/Dumper.php new file mode 100644 index 0000000..c5024ff --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Dumper.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Dumper dumps PHP variables to YAML strings. + * + * @author Fabien Potencier + * + * @final + */ +class Dumper +{ + /** + * The amount of spaces to use for indentation of nested nodes. + */ + private int $indentation; + + public function __construct(int $indentation = 4) + { + if ($indentation < 1) { + throw new \InvalidArgumentException('The indentation must be greater than zero.'); + } + + $this->indentation = $indentation; + } + + /** + * Dumps a PHP value to YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The level of indentation (used internally) + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + public function dump(mixed $input, int $inline = 0, int $indent = 0, int $flags = 0): string + { + $output = ''; + $prefix = $indent ? str_repeat(' ', $indent) : ''; + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $input); + } + + if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) { + $output .= $prefix.Inline::dump($input, $flags); + } else { + $dumpAsMap = Inline::isHash($input); + + foreach ($input as $key => $value) { + if ('' !== $output && "\n" !== $output[-1]) { + $output .= "\n"; + } + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && str_contains($value, "\n") && !str_contains($value, "\r")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value, ' ') ? (string) $this->indentation : ''; + + if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) { + $blockChompingIndicator = '+'; + } elseif ("\n" === $value[-1]) { + $blockChompingIndicator = ''; + } else { + $blockChompingIndicator = '-'; + } + + $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator); + + foreach (explode("\n", $value) as $row) { + if ('' === $row) { + $output .= "\n"; + } else { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + } + + continue; + } + + if ($value instanceof TaggedValue) { + $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag()); + + if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && str_contains($value->getValue(), "\n") && !str_contains($value->getValue(), "\r\n")) { + // If the first line starts with a space character, the spec requires a blockIndicationIndicator + // http://www.yaml.org/spec/1.2/spec.html#id2793979 + $blockIndentationIndicator = str_starts_with($value->getValue(), ' ') ? (string) $this->indentation : ''; + $output .= sprintf(' |%s', $blockIndentationIndicator); + + foreach (explode("\n", $value->getValue()) as $row) { + $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row); + } + + continue; + } + + if ($inline - 1 <= 0 || null === $value->getValue() || \is_scalar($value->getValue())) { + $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n"; + } else { + $output .= "\n"; + $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags); + } + + continue; + } + + $dumpObjectAsInlineMap = true; + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) { + $dumpObjectAsInlineMap = empty((array) $value); + } + + $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value); + + $output .= sprintf('%s%s%s%s', + $prefix, + $dumpAsMap ? Inline::dump($key, $flags).':' : '-', + $willBeInlined ? ' ' : "\n", + $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags) + ).($willBeInlined ? "\n" : ''); + } + } + + return $output; + } +} diff --git a/Sources/API/vendor/symfony/yaml/Escaper.php b/Sources/API/vendor/symfony/yaml/Escaper.php new file mode 100644 index 0000000..e8090d8 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Escaper.php @@ -0,0 +1,95 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +/** + * Escaper encapsulates escaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Escaper +{ + // Characters that would cause a dumped string to require double quoting. + public const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\x7f|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9"; + + // Mapping arrays for escaping a double quoted string. The backslash is + // first to ensure proper escaping because str_replace operates iteratively + // on the input arrays. This ordering of the characters avoids the use of strtr, + // which performs more slowly. + private const ESCAPEES = ['\\', '\\\\', '\\"', '"', + "\x00", "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", + "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", + "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", + "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", + "\x7f", + "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9", + ]; + private const ESCAPED = ['\\\\', '\\"', '\\\\', '\\"', + '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', + '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', + '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', + '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', + '\\x7f', + '\\N', '\\_', '\\L', '\\P', + ]; + + /** + * Determines if a PHP value would require double quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresDoubleQuoting(string $value): bool + { + return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value); + } + + /** + * Escapes and surrounds a PHP value with double quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithDoubleQuotes(string $value): string + { + return sprintf('"%s"', str_replace(self::ESCAPEES, self::ESCAPED, $value)); + } + + /** + * Determines if a PHP value would require single quoting in YAML. + * + * @param string $value A PHP value + */ + public static function requiresSingleQuoting(string $value): bool + { + // Determines if a PHP value is entirely composed of a value that would + // require single quoting in YAML. + if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) { + return true; + } + + // Determines if the PHP value contains any single characters that would + // cause it to require single quoting in YAML. + return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` \p{Zs}]/xu', $value); + } + + /** + * Escapes and surrounds a PHP value with single quotes. + * + * @param string $value A PHP value + */ + public static function escapeWithSingleQuotes(string $value): string + { + return sprintf("'%s'", str_replace('\'', '\'\'', $value)); + } +} diff --git a/Sources/API/vendor/symfony/yaml/Exception/DumpException.php b/Sources/API/vendor/symfony/yaml/Exception/DumpException.php new file mode 100644 index 0000000..cce972f --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Exception/DumpException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during dumping. + * + * @author Fabien Potencier + */ +class DumpException extends RuntimeException +{ +} diff --git a/Sources/API/vendor/symfony/yaml/Exception/ExceptionInterface.php b/Sources/API/vendor/symfony/yaml/Exception/ExceptionInterface.php new file mode 100644 index 0000000..9091316 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Fabien Potencier + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/Sources/API/vendor/symfony/yaml/Exception/ParseException.php b/Sources/API/vendor/symfony/yaml/Exception/ParseException.php new file mode 100644 index 0000000..07c59b9 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Exception/ParseException.php @@ -0,0 +1,126 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Fabien Potencier + */ +class ParseException extends RuntimeException +{ + private ?string $parsedFile; + private int $parsedLine; + private ?string $snippet; + private string $rawMessage; + + /** + * @param string $message The error message + * @param int $parsedLine The line where the error occurred + * @param string|null $snippet The snippet of code near the problem + * @param string|null $parsedFile The file name where the error occurred + */ + public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Throwable $previous = null) + { + $this->parsedFile = $parsedFile; + $this->parsedLine = $parsedLine; + $this->snippet = $snippet; + $this->rawMessage = $message; + + $this->updateRepr(); + + parent::__construct($this->message, 0, $previous); + } + + /** + * Gets the snippet of code near the error. + */ + public function getSnippet(): string + { + return $this->snippet; + } + + /** + * Sets the snippet of code near the error. + */ + public function setSnippet(string $snippet) + { + $this->snippet = $snippet; + + $this->updateRepr(); + } + + /** + * Gets the filename where the error occurred. + * + * This method returns null if a string is parsed. + */ + public function getParsedFile(): string + { + return $this->parsedFile; + } + + /** + * Sets the filename where the error occurred. + */ + public function setParsedFile(string $parsedFile) + { + $this->parsedFile = $parsedFile; + + $this->updateRepr(); + } + + /** + * Gets the line where the error occurred. + */ + public function getParsedLine(): int + { + return $this->parsedLine; + } + + /** + * Sets the line where the error occurred. + */ + public function setParsedLine(int $parsedLine) + { + $this->parsedLine = $parsedLine; + + $this->updateRepr(); + } + + private function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if (str_ends_with($this->message, '.')) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if (null !== $this->parsedFile) { + $this->message .= sprintf(' in %s', json_encode($this->parsedFile, \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE)); + } + + if ($this->parsedLine >= 0) { + $this->message .= sprintf(' at line %d', $this->parsedLine); + } + + if ($this->snippet) { + $this->message .= sprintf(' (near "%s")', $this->snippet); + } + + if ($dot) { + $this->message .= '.'; + } + } +} diff --git a/Sources/API/vendor/symfony/yaml/Exception/RuntimeException.php b/Sources/API/vendor/symfony/yaml/Exception/RuntimeException.php new file mode 100644 index 0000000..3f36b73 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Exception; + +/** + * Exception class thrown when an error occurs during parsing. + * + * @author Romain Neutron + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/Sources/API/vendor/symfony/yaml/Inline.php b/Sources/API/vendor/symfony/yaml/Inline.php new file mode 100644 index 0000000..02cbe8c --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Inline.php @@ -0,0 +1,816 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\DumpException; +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Inline implements a YAML parser/dumper for the YAML inline syntax. + * + * @author Fabien Potencier + * + * @internal + */ +class Inline +{ + public const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')'; + + public static int $parsedLineNumber = -1; + public static ?string $parsedFilename = null; + + private static bool $exceptionOnInvalidType = false; + private static bool $objectSupport = false; + private static bool $objectForMap = false; + private static bool $constantSupport = false; + + public static function initialize(int $flags, int $parsedLineNumber = null, string $parsedFilename = null) + { + self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags); + self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags); + self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags); + self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags); + self::$parsedFilename = $parsedFilename; + + if (null !== $parsedLineNumber) { + self::$parsedLineNumber = $parsedLineNumber; + } + } + + /** + * Converts a YAML string to a PHP value. + * + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param array $references Mapping of variable names to values + * + * @throws ParseException + */ + public static function parse(string $value = null, int $flags = 0, array &$references = []): mixed + { + self::initialize($flags); + + $value = trim($value); + + if ('' === $value) { + return ''; + } + + $i = 0; + $tag = self::parseTag($value, $i, $flags); + switch ($value[$i]) { + case '[': + $result = self::parseSequence($value, $flags, $i, $references); + ++$i; + break; + case '{': + $result = self::parseMapping($value, $flags, $i, $references); + ++$i; + break; + default: + $result = self::parseScalar($value, $flags, null, $i, true, $references); + } + + // some comments are allowed at the end + if (preg_replace('/\s*#.*$/A', '', substr($value, $i))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (null !== $tag && '' !== $tag) { + return new TaggedValue($tag, $result); + } + + return $result; + } + + /** + * Dumps a given PHP variable to a YAML string. + * + * @param mixed $value The PHP variable to convert + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + * + * @throws DumpException When trying to dump PHP resource + */ + public static function dump(mixed $value, int $flags = 0): string + { + switch (true) { + case \is_resource($value): + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value))); + } + + return self::dumpNull($flags); + case $value instanceof \DateTimeInterface: + return $value->format('c'); + case $value instanceof \UnitEnum: + return sprintf('!php/const %s::%s', $value::class, $value->name); + case \is_object($value): + if ($value instanceof TaggedValue) { + return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags); + } + + if (Yaml::DUMP_OBJECT & $flags) { + return '!php/object '.self::dump(serialize($value)); + } + + if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) { + return self::dumpHashArray($value, $flags); + } + + if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) { + throw new DumpException('Object support when dumping a YAML file has been disabled.'); + } + + return self::dumpNull($flags); + case \is_array($value): + return self::dumpArray($value, $flags); + case null === $value: + return self::dumpNull($flags); + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case \is_int($value): + return $value; + case is_numeric($value) && false === strpbrk($value, "\f\n\r\t\v"): + $locale = setlocale(\LC_NUMERIC, 0); + if (false !== $locale) { + setlocale(\LC_NUMERIC, 'C'); + } + if (\is_float($value)) { + $repr = (string) $value; + if (is_infinite($value)) { + $repr = str_ireplace('INF', '.Inf', $repr); + } elseif (floor($value) == $value && $repr == $value) { + // Preserve float data type since storing a whole number will result in integer value. + if (!str_contains($repr, 'E')) { + $repr = $repr.'.0'; + } + } + } else { + $repr = \is_string($value) ? "'$value'" : (string) $value; + } + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + + return $repr; + case '' == $value: + return "''"; + case self::isBinaryString($value): + return '!!binary '.base64_encode($value); + case Escaper::requiresDoubleQuoting($value): + return Escaper::escapeWithDoubleQuotes($value); + case Escaper::requiresSingleQuoting($value): + $singleQuoted = Escaper::escapeWithSingleQuotes($value); + if (!str_contains($value, "'")) { + return $singleQuoted; + } + // Attempt double-quoting the string instead to see if it's more efficient. + $doubleQuoted = Escaper::escapeWithDoubleQuotes($value); + + return \strlen($doubleQuoted) < \strlen($singleQuoted) ? $doubleQuoted : $singleQuoted; + case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value): + case Parser::preg_match(self::getHexRegex(), $value): + case Parser::preg_match(self::getTimestampRegex(), $value): + return Escaper::escapeWithSingleQuotes($value); + default: + return $value; + } + } + + /** + * Check if given array is hash or just normal indexed array. + */ + public static function isHash(array|\ArrayObject|\stdClass $value): bool + { + if ($value instanceof \stdClass || $value instanceof \ArrayObject) { + return true; + } + + $expectedKey = 0; + + foreach ($value as $key => $val) { + if ($key !== $expectedKey++) { + return true; + } + } + + return false; + } + + /** + * Dumps a PHP array to a YAML string. + * + * @param array $value The PHP array to dump + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + private static function dumpArray(array $value, int $flags): string + { + // array + if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) { + $output = []; + foreach ($value as $val) { + $output[] = self::dump($val, $flags); + } + + return sprintf('[%s]', implode(', ', $output)); + } + + return self::dumpHashArray($value, $flags); + } + + /** + * Dumps hash array to a YAML string. + * + * @param array|\ArrayObject|\stdClass $value The hash array to dump + * @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string + */ + private static function dumpHashArray(array|\ArrayObject|\stdClass $value, int $flags): string + { + $output = []; + foreach ($value as $key => $val) { + $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags)); + } + + return sprintf('{ %s }', implode(', ', $output)); + } + + private static function dumpNull(int $flags): string + { + if (Yaml::DUMP_NULL_AS_TILDE & $flags) { + return '~'; + } + + return 'null'; + } + + /** + * Parses a YAML scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array &$references = [], bool &$isQuoted = null): mixed + { + if (\in_array($scalar[$i], ['"', "'"], true)) { + // quoted scalar + $isQuoted = true; + $output = self::parseQuotedScalar($scalar, $i); + + if (null !== $delimiters) { + $tmp = ltrim(substr($scalar, $i), " \n"); + if ('' === $tmp) { + throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (!\in_array($tmp[0], $delimiters)) { + throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + } + } else { + // "normal" string + $isQuoted = false; + + if (!$delimiters) { + $output = substr($scalar, $i); + $i += \strlen($output); + + // remove comments + if (Parser::preg_match('/[ \t]+#/', $output, $match, \PREG_OFFSET_CAPTURE)) { + $output = substr($output, 0, $match[0][1]); + } + } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) { + $output = $match[1]; + $i += \strlen($output); + $output = trim($output); + } else { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >) + if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) { + throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename); + } + + if ($evaluate) { + $output = self::evaluateScalar($output, $flags, $references, $isQuoted); + } + } + + return $output; + } + + /** + * Parses a YAML quoted scalar. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseQuotedScalar(string $scalar, int &$i = 0): string + { + if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) { + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $output = substr($match[0], 1, -1); + + $unescaper = new Unescaper(); + if ('"' == $scalar[$i]) { + $output = $unescaper->unescapeDoubleQuotedString($output); + } else { + $output = $unescaper->unescapeSingleQuotedString($output); + } + + $i += \strlen($match[0]); + + return $output; + } + + /** + * Parses a YAML sequence. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseSequence(string $sequence, int $flags, int &$i = 0, array &$references = []): array + { + $output = []; + $len = \strlen($sequence); + ++$i; + + // [foo, bar, ...] + while ($i < $len) { + if (']' === $sequence[$i]) { + return $output; + } + if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($sequence, $i, $flags); + switch ($sequence[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($sequence, $flags, $i, $references); + break; + case '{': + // nested mapping + $value = self::parseMapping($sequence, $flags, $i, $references); + break; + default: + $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references, $isQuoted); + + // the value can be an array if a reference has been resolved to an array var + if (\is_string($value) && !$isQuoted && str_contains($value, ': ')) { + // embedded mapping? + try { + $pos = 0; + $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references); + } catch (\InvalidArgumentException) { + // no, it's not + } + } + + if (!$isQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + --$i; + } + + if (null !== $tag && '' !== $tag) { + $value = new TaggedValue($tag, $value); + } + + $output[] = $value; + + ++$i; + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Parses a YAML mapping. + * + * @throws ParseException When malformed inline YAML string is parsed + */ + private static function parseMapping(string $mapping, int $flags, int &$i = 0, array &$references = []): array|\stdClass + { + $output = []; + $len = \strlen($mapping); + ++$i; + $allowOverwrite = false; + + // {foo: bar, bar:foo, ...} + while ($i < $len) { + switch ($mapping[$i]) { + case ' ': + case ',': + case "\n": + ++$i; + continue 2; + case '}': + if (self::$objectForMap) { + return (object) $output; + } + + return $output; + } + + // key + $offsetBeforeKeyParsing = $i; + $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true); + $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false); + + if ($offsetBeforeKeyParsing === $i) { + throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping); + } + + if ('!php/const' === $key || '!php/enum' === $key) { + $key .= ' '.self::parseScalar($mapping, $flags, [':'], $i, false); + $key = self::evaluateScalar($key, $flags); + } + + if (false === $i = strpos($mapping, ':', $i)) { + break; + } + + if (!$isKeyQuoted) { + $evaluatedKey = self::evaluateScalar($key, $flags, $references); + + if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) { + throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping); + } + } + + if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}', "\n"], true))) { + throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping); + } + + if ('<<' === $key) { + $allowOverwrite = true; + } + + while ($i < $len) { + if (':' === $mapping[$i] || ' ' === $mapping[$i] || "\n" === $mapping[$i]) { + ++$i; + + continue; + } + + $tag = self::parseTag($mapping, $i, $flags); + switch ($mapping[$i]) { + case '[': + // nested sequence + $value = self::parseSequence($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + foreach ($value as $parsedValue) { + $output += $parsedValue; + } + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + case '{': + // nested mapping + $value = self::parseMapping($mapping, $flags, $i, $references); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + break; + default: + $value = self::parseScalar($mapping, $flags, [',', '}', "\n"], $i, null === $tag, $references, $isValueQuoted); + // Spec: Keys MUST be unique; first one wins. + // Parser cannot abort this mapping earlier, since lines + // are processed sequentially. + // But overwriting is allowed when a merge node is used in current block. + if ('<<' === $key) { + $output += $value; + } elseif ($allowOverwrite || !isset($output[$key])) { + if (!$isValueQuoted && \is_string($value) && '' !== $value && '&' === $value[0] && Parser::preg_match(Parser::REFERENCE_PATTERN, $value, $matches)) { + $references[$matches['ref']] = $matches['value']; + $value = $matches['value']; + } + + if (null !== $tag) { + $output[$key] = new TaggedValue($tag, $value); + } else { + $output[$key] = $value; + } + } elseif (isset($output[$key])) { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping); + } + --$i; + } + ++$i; + + continue 2; + } + } + + throw new ParseException(sprintf('Malformed inline YAML string: "%s".', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename); + } + + /** + * Evaluates scalars and replaces magic values. + * + * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved + */ + private static function evaluateScalar(string $scalar, int $flags, array &$references = [], bool &$isQuotedString = null): mixed + { + $isQuotedString = false; + $scalar = trim($scalar); + + if (str_starts_with($scalar, '*')) { + if (false !== $pos = strpos($scalar, '#')) { + $value = substr($scalar, 1, $pos - 2); + } else { + $value = substr($scalar, 1); + } + + // an unquoted * + if (false === $value || '' === $value) { + throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if (!\array_key_exists($value, $references)) { + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + return $references[$value]; + } + + $scalarLower = strtolower($scalar); + + switch (true) { + case 'null' === $scalarLower: + case '' === $scalar: + case '~' === $scalar: + return null; + case 'true' === $scalarLower: + return true; + case 'false' === $scalarLower: + return false; + case '!' === $scalar[0]: + switch (true) { + case str_starts_with($scalar, '!!str '): + $s = (string) substr($scalar, 6); + + if (\in_array($s[0] ?? '', ['"', "'"], true)) { + $isQuotedString = true; + $s = self::parseQuotedScalar($s); + } + + return $s; + case str_starts_with($scalar, '! '): + return substr($scalar, 2); + case str_starts_with($scalar, '!php/object'): + if (self::$objectSupport) { + if (!isset($scalar[12])) { + throw new ParseException('Missing value for tag "!php/object".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return unserialize(self::parseScalar(substr($scalar, 12))); + } + + if (self::$exceptionOnInvalidType) { + throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!php/const'): + if (self::$constantSupport) { + if (!isset($scalar[11])) { + throw new ParseException('Missing value for tag "!php/const".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $i = 0; + if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) { + return \constant($const); + } + + throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (self::$exceptionOnInvalidType) { + throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!php/enum'): + if (self::$constantSupport) { + if (!isset($scalar[11])) { + throw new ParseException('Missing value for tag "!php/enum".', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $i = 0; + $enum = self::parseScalar(substr($scalar, 10), 0, null, $i, false); + if ($useValue = str_ends_with($enum, '->value')) { + $enum = substr($enum, 0, -7); + } + if (!\defined($enum)) { + throw new ParseException(sprintf('The enum "%s" is not defined.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + $value = \constant($enum); + + if (!$value instanceof \UnitEnum) { + throw new ParseException(sprintf('The string "%s" is not the name of a valid enum.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + if (!$useValue) { + return $value; + } + if (!$value instanceof \BackedEnum) { + throw new ParseException(sprintf('The enum "%s" defines no value next to its name.', $enum), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return $value->value; + } + if (self::$exceptionOnInvalidType) { + throw new ParseException(sprintf('The string "%s" could not be parsed as an enum. Did you forget to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return null; + case str_starts_with($scalar, '!!float '): + return (float) substr($scalar, 8); + case str_starts_with($scalar, '!!binary '): + return self::evaluateBinaryScalar(substr($scalar, 9)); + } + + throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename); + case preg_match('/^(?:\+|-)?0o(?P[0-7_]++)$/', $scalar, $matches): + $value = str_replace('_', '', $matches['value']); + + if ('-' === $scalar[0]) { + return -octdec($value); + } + + return octdec($value); + case \in_array($scalar[0], ['+', '-', '.'], true) || is_numeric($scalar[0]): + if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) { + $scalar = str_replace('_', '', $scalar); + } + + switch (true) { + case ctype_digit($scalar): + case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): + $cast = (int) $scalar; + + return ($scalar === (string) $cast) ? $cast : $scalar; + case is_numeric($scalar): + case Parser::preg_match(self::getHexRegex(), $scalar): + $scalar = str_replace('_', '', $scalar); + + return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar; + case '.inf' === $scalarLower: + case '.nan' === $scalarLower: + return -log(0); + case '-.inf' === $scalarLower: + return log(0); + case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar): + return (float) str_replace('_', '', $scalar); + case Parser::preg_match(self::getTimestampRegex(), $scalar): + // When no timezone is provided in the parsed date, YAML spec says we must assume UTC. + $time = new \DateTimeImmutable($scalar, new \DateTimeZone('UTC')); + + if (Yaml::PARSE_DATETIME & $flags) { + return $time; + } + + try { + if (false !== $scalar = $time->getTimestamp()) { + return $scalar; + } + } catch (\ValueError) { + // no-op + } + + return $time->format('U'); + } + } + + return (string) $scalar; + } + + private static function parseTag(string $value, int &$i, int $flags): ?string + { + if ('!' !== $value[$i]) { + return null; + } + + $tagLength = strcspn($value, " \t\n[]{},", $i + 1); + $tag = substr($value, $i + 1, $tagLength); + + $nextOffset = $i + $tagLength + 1; + $nextOffset += strspn($value, ' ', $nextOffset); + + if ('' === $tag && (!isset($value[$nextOffset]) || \in_array($value[$nextOffset], [']', '}', ','], true))) { + throw new ParseException('Using the unquoted scalar value "!" is not supported. You must quote it.', self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + // Is followed by a scalar and is a built-in tag + if ('' !== $tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || \in_array($tag, ['str', 'php/const', 'php/enum', 'php/object'], true))) { + // Manage in {@link self::evaluateScalar()} + return null; + } + + $i = $nextOffset; + + // Built-in tags + if ('' !== $tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' !== $tag && !isset($value[$i])) { + throw new ParseException(sprintf('Missing value for tag "%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename); + } + + public static function evaluateBinaryScalar(string $scalar): string + { + $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar)); + + if (0 !== (\strlen($parsedBinaryData) % 4)) { + throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) { + throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename); + } + + return base64_decode($parsedBinaryData, true); + } + + private static function isBinaryString(string $value): bool + { + return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value); + } + + /** + * Gets a regex that matches a YAML date. + * + * @see http://www.yaml.org/spec/1.2/spec.html#id2761573 + */ + private static function getTimestampRegex(): string + { + return <<[0-9][0-9][0-9][0-9]) + -(?P[0-9][0-9]?) + -(?P[0-9][0-9]?) + (?:(?:[Tt]|[ \t]+) + (?P[0-9][0-9]?) + :(?P[0-9][0-9]) + :(?P[0-9][0-9]) + (?:\.(?P[0-9]*))? + (?:[ \t]*(?PZ|(?P[-+])(?P[0-9][0-9]?) + (?::(?P[0-9][0-9]))?))?)? + $~x +EOF; + } + + /** + * Gets a regex that matches a YAML number in hexadecimal notation. + */ + private static function getHexRegex(): string + { + return '~^0x[0-9a-f_]++$~i'; + } +} diff --git a/Sources/API/vendor/symfony/yaml/LICENSE b/Sources/API/vendor/symfony/yaml/LICENSE new file mode 100644 index 0000000..88bf75b --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2004-2022 Fabien Potencier + +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 NONINFRINGEMENT. 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. diff --git a/Sources/API/vendor/symfony/yaml/Parser.php b/Sources/API/vendor/symfony/yaml/Parser.php new file mode 100644 index 0000000..146a645 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Parser.php @@ -0,0 +1,1246 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; +use Symfony\Component\Yaml\Tag\TaggedValue; + +/** + * Parser parses YAML strings to convert them to PHP arrays. + * + * @author Fabien Potencier + * + * @final + */ +class Parser +{ + public const TAG_PATTERN = '(?P![\w!.\/:-]+)'; + public const BLOCK_SCALAR_HEADER_PATTERN = '(?P\||>)(?P\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P +#.*)?'; + public const REFERENCE_PATTERN = '#^&(?P[^ ]++) *+(?P.*)#u'; + + private ?string $filename = null; + private int $offset = 0; + private int $numberOfParsedLines = 0; + private ?int $totalNumberOfLines = null; + private array $lines = []; + private int $currentLineNb = -1; + private string $currentLine = ''; + private array $refs = []; + private array $skippedLineNumbers = []; + private array $locallySkippedLineNumbers = []; + private array $refsBeingParsed = []; + + /** + * Parses a YAML file into a PHP value. + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public function parseFile(string $filename, int $flags = 0): mixed + { + if (!is_file($filename)) { + throw new ParseException(sprintf('File "%s" does not exist.', $filename)); + } + + if (!is_readable($filename)) { + throw new ParseException(sprintf('File "%s" cannot be read.', $filename)); + } + + $this->filename = $filename; + + try { + return $this->parse(file_get_contents($filename), $flags); + } finally { + $this->filename = null; + } + } + + /** + * Parses a YAML string to a PHP value. + * + * @param string $value A YAML string + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public function parse(string $value, int $flags = 0): mixed + { + if (false === preg_match('//u', $value)) { + throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename); + } + + $this->refs = []; + + try { + $data = $this->doParse($value, $flags); + } finally { + $this->refsBeingParsed = []; + $this->offset = 0; + $this->lines = []; + $this->currentLine = ''; + $this->numberOfParsedLines = 0; + $this->refs = []; + $this->skippedLineNumbers = []; + $this->locallySkippedLineNumbers = []; + $this->totalNumberOfLines = null; + } + + return $data; + } + + private function doParse(string $value, int $flags) + { + $this->currentLineNb = -1; + $this->currentLine = ''; + $value = $this->cleanup($value); + $this->lines = explode("\n", $value); + $this->numberOfParsedLines = \count($this->lines); + $this->locallySkippedLineNumbers = []; + $this->totalNumberOfLines ??= $this->numberOfParsedLines; + + if (!$this->moveToNextLine()) { + return null; + } + + $data = []; + $context = null; + $allowOverwrite = false; + + while ($this->isCurrentLineEmpty()) { + if (!$this->moveToNextLine()) { + return null; + } + } + + // Resolves the tag and returns if end of the document + if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) { + return new TaggedValue($tag, ''); + } + + do { + if ($this->isCurrentLineEmpty()) { + continue; + } + + // tab? + if ("\t" === $this->currentLine[0]) { + throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename); + + $isRef = $mergeNode = false; + if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P\s+)(?P.+))?$#u', rtrim($this->currentLine), $values)) { + if ($context && 'mapping' == $context) { + throw new ParseException('You cannot define a sequence item when in a mapping.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + $context = 'sequence'; + + if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // array + if (isset($values['value']) && str_starts_with(ltrim($values['value'], ' '), '-')) { + // Inline first child + $currentLineNumber = $this->getRealCurrentLineNb(); + + $sequenceIndentation = \strlen($values['leadspaces']) + 1; + $sequenceYaml = substr($this->currentLine, $sequenceIndentation); + $sequenceYaml .= "\n".$this->getNextEmbedBlock($sequenceIndentation, true); + + $data[] = $this->parseBlock($currentLineNumber, rtrim($sequenceYaml), $flags); + } elseif (!isset($values['value']) || '' == trim($values['value'], ' ') || str_starts_with(ltrim($values['value'], ' '), '#')) { + $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags); + } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) { + $data[] = new TaggedValue( + $subTag, + $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags) + ); + } else { + if ( + isset($values['leadspaces']) + && ( + '!' === $values['value'][0] + || self::preg_match('#^(?P'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P.+?))?\s*$#u', $this->trimTag($values['value']), $matches) + ) + ) { + // this is a compact notation element, add to next block and parse + $block = $values['value']; + if ($this->isNextLineIndented()) { + $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1); + } + + $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags); + } else { + $data[] = $this->parseValue($values['value'], $flags, $context); + } + } + if ($isRef) { + $this->refs[$isRef] = end($data); + array_pop($this->refsBeingParsed); + } + } elseif ( + // @todo in 7.0 remove legacy "(?:!?!php/const:)?" + self::preg_match('#^(?P(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(( |\t)++(?P.+))?$#u', rtrim($this->currentLine), $values) + && (!str_contains($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"])) + ) { + if (str_starts_with($values['key'], '!php/const:')) { + trigger_deprecation('symfony/yaml', '6.2', 'YAML syntax for key "%s" is deprecated and replaced by "!php/const %s".', $values['key'], substr($values['key'], 11)); + } + + if ($context && 'sequence' == $context) { + throw new ParseException('You cannot define a mapping item when in a sequence.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + $context = 'mapping'; + + try { + $key = Inline::parseScalar($values['key']); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + if (!\is_string($key) && !\is_int($key)) { + throw new ParseException((is_numeric($key) ? 'Numeric' : 'Non-string').' keys are not supported. Quote your evaluable mapping keys instead.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // Convert float keys to strings, to avoid being converted to integers by PHP + if (\is_float($key)) { + $key = (string) $key; + } + + if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P[^ ]+)#u', $values['value'], $refMatches))) { + $mergeNode = true; + $allowOverwrite = true; + if (isset($values['value'][0]) && '*' === $values['value'][0]) { + $refName = substr(rtrim($values['value']), 1); + if (!\array_key_exists($refName, $this->refs)) { + if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$refName])), $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $refValue = $this->refs[$refName]; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) { + $refValue = (array) $refValue; + } + + if (!\is_array($refValue)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + $data += $refValue; // array union + } else { + if (isset($values['value']) && '' !== $values['value']) { + $value = $values['value']; + } else { + $value = $this->getNextEmbedBlock(); + } + $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags); + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) { + $parsed = (array) $parsed; + } + + if (!\is_array($parsed)) { + throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (isset($parsed[0])) { + // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes + // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier + // in the sequence override keys specified in later mapping nodes. + foreach ($parsed as $parsedItem) { + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) { + $parsedItem = (array) $parsedItem; + } + + if (!\is_array($parsedItem)) { + throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename); + } + + $data += $parsedItem; // array union + } + } else { + // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the + // current mapping, unless the key already exists in it. + $data += $parsed; // array union + } + } + } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match(self::REFERENCE_PATTERN, $values['value'], $matches)) { + $isRef = $matches['ref']; + $this->refsBeingParsed[] = $isRef; + $values['value'] = $matches['value']; + } + + $subTag = null; + if ($mergeNode) { + // Merge keys + } elseif (!isset($values['value']) || '' === $values['value'] || str_starts_with($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) { + // hash + // if next line is less indented or equal, then it means that the current value is null + if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, ''); + } else { + $data[$key] = null; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } else { + // remember the parsed line number here in case we need it to provide some contexts in error messages below + $realCurrentLineNbKey = $this->getRealCurrentLineNb(); + $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags); + if ('<<' === $key) { + $this->refs[$refMatches['ref']] = $value; + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) { + $value = (array) $value; + } + + $data += $value; + } elseif ($allowOverwrite || !isset($data[$key])) { + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if (null !== $subTag) { + $data[$key] = new TaggedValue($subTag, $value); + } else { + $data[$key] = $value; + } + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine); + } + } + } else { + $value = $this->parseValue(rtrim($values['value']), $flags, $context); + // Spec: Keys MUST be unique; first one wins. + // But overwriting is allowed when a merge node is used in current block. + if ($allowOverwrite || !isset($data[$key])) { + $data[$key] = $value; + } else { + throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + } + if ($isRef) { + $this->refs[$isRef] = $data[$key]; + array_pop($this->refsBeingParsed); + } + } elseif ('"' === $this->currentLine[0] || "'" === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + return Inline::parse($this->lexInlineQuotedString(), $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('{' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedMapping = Inline::parse($this->lexInlineMapping(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedMapping; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } elseif ('[' === $this->currentLine[0]) { + if (null !== $context) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + try { + $parsedSequence = Inline::parse($this->lexInlineSequence(), $flags, $this->refs); + + while ($this->moveToNextLine()) { + if (!$this->isCurrentLineEmpty()) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return $parsedSequence; + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } else { + // multiple documents are not supported + if ('---' === $this->currentLine) { + throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) { + throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine); + } + + // 1-liner optionally followed by newline(s) + if (\is_string($value) && $this->lines[0] === trim($value)) { + try { + $value = Inline::parse($this->lines[0], $flags, $this->refs); + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + + return $value; + } + + // try to parse the value as a multi-line string as a last resort + if (0 === $this->currentLineNb) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + $value = ''; + + foreach ($this->lines as $line) { + $trimmedLine = trim($line); + if ('#' === ($trimmedLine[0] ?? '')) { + continue; + } + // If the indentation is not consistent at offset 0, it is to be considered as a ParseError + if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) { + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if (str_contains($line, ': ')) { + throw new ParseException('Mapping values are not allowed in multi-line blocks.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + + if ('' === $trimmedLine) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + if ('' !== $trimmedLine && str_ends_with($line, '\\')) { + $value .= ltrim(substr($line, 0, -1)); + } elseif ('' !== $trimmedLine) { + $value .= $trimmedLine; + } + + if ('' === $trimmedLine) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif (str_ends_with($line, '\\')) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + } + + try { + return Inline::parse(trim($value)); + } catch (ParseException) { + // fall-through to the ParseException thrown below + } + } + + throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } while ($this->moveToNextLine()); + + if (null !== $tag) { + $data = new TaggedValue($tag, $data); + } + + if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && 'mapping' === $context && !\is_object($data)) { + $object = new \stdClass(); + + foreach ($data as $key => $value) { + $object->$key = $value; + } + + $data = $object; + } + + return empty($data) ? null : $data; + } + + private function parseBlock(int $offset, string $yaml, int $flags) + { + $skippedLineNumbers = $this->skippedLineNumbers; + + foreach ($this->locallySkippedLineNumbers as $lineNumber) { + if ($lineNumber < $offset) { + continue; + } + + $skippedLineNumbers[] = $lineNumber; + } + + $parser = new self(); + $parser->offset = $offset; + $parser->totalNumberOfLines = $this->totalNumberOfLines; + $parser->skippedLineNumbers = $skippedLineNumbers; + $parser->refs = &$this->refs; + $parser->refsBeingParsed = $this->refsBeingParsed; + + return $parser->doParse($yaml, $flags); + } + + /** + * Returns the current line number (takes the offset into account). + * + * @internal + */ + public function getRealCurrentLineNb(): int + { + $realCurrentLineNumber = $this->currentLineNb + $this->offset; + + foreach ($this->skippedLineNumbers as $skippedLineNumber) { + if ($skippedLineNumber > $realCurrentLineNumber) { + break; + } + + ++$realCurrentLineNumber; + } + + return $realCurrentLineNumber; + } + + private function getCurrentLineIndentation(): int + { + if (' ' !== ($this->currentLine[0] ?? '')) { + return 0; + } + + return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' ')); + } + + /** + * Returns the next embed block of YAML. + * + * @param int|null $indentation The indent level at which the block is to be read, or null for default + * @param bool $inSequence True if the enclosing data structure is a sequence + * + * @throws ParseException When indentation problem are detected + */ + private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): string + { + $oldLineIndentation = $this->getCurrentLineIndentation(); + + if (!$this->moveToNextLine()) { + return ''; + } + + if (null === $indentation) { + $newIndent = null; + $movements = 0; + + do { + $EOF = false; + + // empty and comment-like lines do not influence the indentation depth + if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } else { + $newIndent = $this->getCurrentLineIndentation(); + } + } while (!$EOF && null === $newIndent); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); + + if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } else { + $newIndent = $indentation; + } + + $data = []; + + if ($this->getCurrentLineIndentation() >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent ?? 0); + } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } else { + $this->moveToPreviousLine(); + + return ''; + } + + if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) { + // the previous line contained a dash but no item content, this line is a sequence item with the same indentation + // and therefore no nested list or mapping + $this->moveToPreviousLine(); + + return ''; + } + + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + + while ($this->moveToNextLine()) { + if ($isItComment && !$isItUnindentedCollection) { + $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem(); + $isItComment = $this->isCurrentLineComment(); + } + + $indent = $this->getCurrentLineIndentation(); + + if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) { + $this->moveToPreviousLine(); + break; + } + + if ($this->isCurrentLineBlank()) { + $data[] = substr($this->currentLine, $newIndent); + continue; + } + + if ($indent >= $newIndent) { + $data[] = substr($this->currentLine, $newIndent); + } elseif ($this->isCurrentLineComment()) { + $data[] = $this->currentLine; + } elseif (0 == $indent) { + $this->moveToPreviousLine(); + + break; + } else { + throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename); + } + } + + return implode("\n", $data); + } + + private function hasMoreLines(): bool + { + return (\count($this->lines) - 1) > $this->currentLineNb; + } + + /** + * Moves the parser to the next line. + */ + private function moveToNextLine(): bool + { + if ($this->currentLineNb >= $this->numberOfParsedLines - 1) { + return false; + } + + $this->currentLine = $this->lines[++$this->currentLineNb]; + + return true; + } + + /** + * Moves the parser to the previous line. + */ + private function moveToPreviousLine(): bool + { + if ($this->currentLineNb < 1) { + return false; + } + + $this->currentLine = $this->lines[--$this->currentLineNb]; + + return true; + } + + /** + * Parses a YAML value. + * + * @param string $value A YAML value + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * @param string $context The parser context (either sequence or mapping) + * + * @throws ParseException When reference does not exist + */ + private function parseValue(string $value, int $flags, string $context): mixed + { + if (str_starts_with($value, '*')) { + if (false !== $pos = strpos($value, '#')) { + $value = substr($value, 1, $pos - 2); + } else { + $value = substr($value, 1); + } + + if (!\array_key_exists($value, $this->refs)) { + if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) { + throw new ParseException(sprintf('Circular reference [%s] detected for reference "%s".', implode(', ', array_merge(\array_slice($this->refsBeingParsed, $pos), [$value])), $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename); + } + + return $this->refs[$value]; + } + + if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) { + $modifiers = $matches['modifiers'] ?? ''; + + $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), abs((int) $modifiers)); + + if ('' !== $matches['tag'] && '!' !== $matches['tag']) { + if ('!!binary' === $matches['tag']) { + return Inline::evaluateBinaryScalar($data); + } + + return new TaggedValue(substr($matches['tag'], 1), $data); + } + + return $data; + } + + try { + if ('' !== $value && '{' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineMapping($cursor), $flags, $this->refs); + } elseif ('' !== $value && '[' === $value[0]) { + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + + return Inline::parse($this->lexInlineSequence($cursor), $flags, $this->refs); + } + + switch ($value[0] ?? '') { + case '"': + case "'": + $cursor = \strlen(rtrim($this->currentLine)) - \strlen(rtrim($value)); + $parsedValue = Inline::parse($this->lexInlineQuotedString($cursor), $flags, $this->refs); + + if (isset($this->currentLine[$cursor]) && preg_replace('/\s*(#.*)?$/A', '', substr($this->currentLine, $cursor))) { + throw new ParseException(sprintf('Unexpected characters near "%s".', substr($this->currentLine, $cursor))); + } + + return $parsedValue; + default: + $lines = []; + + while ($this->moveToNextLine()) { + // unquoted strings end before the first unindented line + if (0 === $this->getCurrentLineIndentation()) { + $this->moveToPreviousLine(); + + break; + } + + $lines[] = trim($this->currentLine); + } + + for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) { + if ('' === $lines[$i]) { + $value .= "\n"; + $previousLineBlank = true; + } elseif ($previousLineBlank) { + $value .= $lines[$i]; + $previousLineBlank = false; + } else { + $value .= ' '.$lines[$i]; + $previousLineBlank = false; + } + } + + Inline::$parsedLineNumber = $this->getRealCurrentLineNb(); + + $parsedValue = Inline::parse($value, $flags, $this->refs); + + if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && str_contains($parsedValue, ': ')) { + throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + return $parsedValue; + } + } catch (ParseException $e) { + $e->setParsedLine($this->getRealCurrentLineNb() + 1); + $e->setSnippet($this->currentLine); + + throw $e; + } + } + + /** + * Parses a block scalar. + * + * @param string $style The style indicator that was used to begin this block scalar (| or >) + * @param string $chomping The chomping indicator that was used to begin this block scalar (+ or -) + * @param int $indentation The indentation indicator that was used to begin this block scalar + */ + private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string + { + $notEOF = $this->moveToNextLine(); + if (!$notEOF) { + return ''; + } + + $isCurrentLineBlank = $this->isCurrentLineBlank(); + $blockLines = []; + + // leading blank lines are consumed before determining indentation + while ($notEOF && $isCurrentLineBlank) { + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $blockLines[] = ''; + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + + // determine indentation if not specified + if (0 === $indentation) { + $currentLineLength = \strlen($this->currentLine); + + for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) { + ++$indentation; + } + } + + if ($indentation > 0) { + $pattern = sprintf('/^ {%d}(.*)$/', $indentation); + + while ( + $notEOF && ( + $isCurrentLineBlank || + self::preg_match($pattern, $this->currentLine, $matches) + ) + ) { + if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) { + $blockLines[] = substr($this->currentLine, $indentation); + } elseif ($isCurrentLineBlank) { + $blockLines[] = ''; + } else { + $blockLines[] = $matches[1]; + } + + // newline only if not EOF + if ($notEOF = $this->moveToNextLine()) { + $isCurrentLineBlank = $this->isCurrentLineBlank(); + } + } + } elseif ($notEOF) { + $blockLines[] = ''; + } + + if ($notEOF) { + $blockLines[] = ''; + $this->moveToPreviousLine(); + } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) { + $blockLines[] = ''; + } + + // folded style + if ('>' === $style) { + $text = ''; + $previousLineIndented = false; + $previousLineBlank = false; + + for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) { + if ('' === $blockLines[$i]) { + $text .= "\n"; + $previousLineIndented = false; + $previousLineBlank = true; + } elseif (' ' === $blockLines[$i][0]) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = true; + $previousLineBlank = false; + } elseif ($previousLineIndented) { + $text .= "\n".$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } elseif ($previousLineBlank || 0 === $i) { + $text .= $blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } else { + $text .= ' '.$blockLines[$i]; + $previousLineIndented = false; + $previousLineBlank = false; + } + } + } else { + $text = implode("\n", $blockLines); + } + + // deal with trailing newlines + if ('' === $chomping) { + $text = preg_replace('/\n+$/', "\n", $text); + } elseif ('-' === $chomping) { + $text = preg_replace('/\n+$/', '', $text); + } + + return $text; + } + + /** + * Returns true if the next line is indented. + */ + private function isNextLineIndented(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() > $currentIndentation; + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isCurrentLineEmpty(): bool + { + return $this->isCurrentLineBlank() || $this->isCurrentLineComment(); + } + + private function isCurrentLineBlank(): bool + { + return '' === $this->currentLine || '' === trim($this->currentLine, ' '); + } + + private function isCurrentLineComment(): bool + { + // checking explicitly the first char of the trim is faster than loops or strpos + $ltrimmedLine = '' !== $this->currentLine && ' ' === $this->currentLine[0] ? ltrim($this->currentLine, ' ') : $this->currentLine; + + return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0]; + } + + private function isCurrentLineLastLineInDocument(): bool + { + return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1); + } + + private function cleanup(string $value): string + { + $value = str_replace(["\r\n", "\r"], "\n", $value); + + // strip YAML header + $count = 0; + $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count); + $this->offset += $count; + + // remove leading comments + $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + } + + // remove start of the document marker (---) + $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count); + if (1 === $count) { + // items have been removed, update the offset + $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n"); + $value = $trimmedValue; + + // remove end of the document marker (...) + $value = preg_replace('#\.\.\.\s*$#', '', $value); + } + + return $value; + } + + private function isNextLineUnIndentedCollection(): bool + { + $currentIndentation = $this->getCurrentLineIndentation(); + $movements = 0; + + do { + $EOF = !$this->moveToNextLine(); + + if (!$EOF) { + ++$movements; + } + } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment())); + + if ($EOF) { + return false; + } + + $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); + + for ($i = 0; $i < $movements; ++$i) { + $this->moveToPreviousLine(); + } + + return $ret; + } + + private function isStringUnIndentedCollectionItem(): bool + { + return '-' === rtrim($this->currentLine) || str_starts_with($this->currentLine, '- '); + } + + /** + * A local wrapper for "preg_match" which will throw a ParseException if there + * is an internal error in the PCRE engine. + * + * This avoids us needing to check for "false" every time PCRE is used + * in the YAML engine + * + * @throws ParseException on a PCRE internal error + * + * @internal + */ + public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int + { + if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) { + throw new ParseException(preg_last_error_msg()); + } + + return $ret; + } + + /** + * Trim the tag on top of the value. + * + * Prevent values such as "!foo {quz: bar}" to be considered as + * a mapping block. + */ + private function trimTag(string $value): string + { + if ('!' === $value[0]) { + return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' '); + } + + return $value; + } + + private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string + { + if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) { + return null; + } + + if ($nextLineCheck && !$this->isNextLineIndented()) { + return null; + } + + $tag = substr($matches['tag'], 1); + + // Built-in tags + if ($tag && '!' === $tag[0]) { + throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + if (Yaml::PARSE_CUSTOM_TAGS & $flags) { + return $tag; + } + + throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename); + } + + private function lexInlineQuotedString(int &$cursor = 0): string + { + $quotation = $this->currentLine[$cursor]; + $value = $quotation; + ++$cursor; + + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + $lineNumber = 0; + + do { + if (++$lineNumber > 1) { + $cursor += strspn($this->currentLine, ' ', $cursor); + } + + if ($this->isCurrentLineBlank()) { + $value .= "\n"; + } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) { + $value .= ' '; + } + + for (; \strlen($this->currentLine) > $cursor; ++$cursor) { + switch ($this->currentLine[$cursor]) { + case '\\': + if ("'" === $quotation) { + $value .= '\\'; + } elseif (isset($this->currentLine[++$cursor])) { + $value .= '\\'.$this->currentLine[$cursor]; + } + + break; + case $quotation: + ++$cursor; + + if ("'" === $quotation && isset($this->currentLine[$cursor]) && "'" === $this->currentLine[$cursor]) { + $value .= "''"; + break; + } + + return $value.$quotation; + default: + $value .= $this->currentLine[$cursor]; + } + } + + if ($this->isCurrentLineBlank()) { + $previousLineWasNewline = true; + $previousLineWasTerminatedWithBackslash = false; + } elseif ('\\' === $this->currentLine[-1]) { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = true; + } else { + $previousLineWasNewline = false; + $previousLineWasTerminatedWithBackslash = false; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function lexUnquotedString(int &$cursor): string + { + $offset = $cursor; + $cursor += strcspn($this->currentLine, '[]{},: ', $cursor); + + if ($cursor === $offset) { + throw new ParseException('Malformed unquoted YAML string.'); + } + + return substr($this->currentLine, $offset, $cursor - $offset); + } + + private function lexInlineMapping(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, '}'); + } + + private function lexInlineSequence(int &$cursor = 0): string + { + return $this->lexInlineStructure($cursor, ']'); + } + + private function lexInlineStructure(int &$cursor, string $closingTag): string + { + $value = $this->currentLine[$cursor]; + ++$cursor; + + do { + $this->consumeWhitespaces($cursor); + + while (isset($this->currentLine[$cursor])) { + switch ($this->currentLine[$cursor]) { + case '"': + case "'": + $value .= $this->lexInlineQuotedString($cursor); + break; + case ':': + case ',': + $value .= $this->currentLine[$cursor]; + ++$cursor; + break; + case '{': + $value .= $this->lexInlineMapping($cursor); + break; + case '[': + $value .= $this->lexInlineSequence($cursor); + break; + case $closingTag: + $value .= $this->currentLine[$cursor]; + ++$cursor; + + return $value; + case '#': + break 2; + default: + $value .= $this->lexUnquotedString($cursor); + } + + if ($this->consumeWhitespaces($cursor)) { + $value .= ' '; + } + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + throw new ParseException('Malformed inline YAML string.'); + } + + private function consumeWhitespaces(int &$cursor): bool + { + $whitespacesConsumed = 0; + + do { + $whitespaceOnlyTokenLength = strspn($this->currentLine, ' ', $cursor); + $whitespacesConsumed += $whitespaceOnlyTokenLength; + $cursor += $whitespaceOnlyTokenLength; + + if (isset($this->currentLine[$cursor])) { + return 0 < $whitespacesConsumed; + } + + if ($this->hasMoreLines()) { + $cursor = 0; + } + } while ($this->moveToNextLine()); + + return 0 < $whitespacesConsumed; + } +} diff --git a/Sources/API/vendor/symfony/yaml/README.md b/Sources/API/vendor/symfony/yaml/README.md new file mode 100644 index 0000000..ac25024 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/README.md @@ -0,0 +1,13 @@ +Yaml Component +============== + +The Yaml component loads and dumps YAML files. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/yaml.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/Sources/API/vendor/symfony/yaml/Tag/TaggedValue.php b/Sources/API/vendor/symfony/yaml/Tag/TaggedValue.php new file mode 100644 index 0000000..c7946c2 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Tag/TaggedValue.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml\Tag; + +/** + * @author Nicolas Grekas + * @author Guilhem N. + */ +final class TaggedValue +{ + private string $tag; + private mixed $value; + + public function __construct(string $tag, mixed $value) + { + $this->tag = $tag; + $this->value = $value; + } + + public function getTag(): string + { + return $this->tag; + } + + public function getValue() + { + return $this->value; + } +} diff --git a/Sources/API/vendor/symfony/yaml/Unescaper.php b/Sources/API/vendor/symfony/yaml/Unescaper.php new file mode 100644 index 0000000..2238210 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Unescaper.php @@ -0,0 +1,110 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Unescaper encapsulates unescaping rules for single and double-quoted + * YAML strings. + * + * @author Matthew Lewinski + * + * @internal + */ +class Unescaper +{ + /** + * Regex fragment that matches an escaped character in a double quoted string. + */ + public const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)'; + + /** + * Unescapes a single quoted string. + * + * @param string $value A single quoted string + */ + public function unescapeSingleQuotedString(string $value): string + { + return str_replace('\'\'', '\'', $value); + } + + /** + * Unescapes a double quoted string. + * + * @param string $value A double quoted string + */ + public function unescapeDoubleQuotedString(string $value): string + { + $callback = function ($match) { + return $this->unescapeCharacter($match[0]); + }; + + // evaluate the string + return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value); + } + + /** + * Unescapes a character that was found in a double-quoted string. + * + * @param string $value An escaped character + */ + private function unescapeCharacter(string $value): string + { + return match ($value[1]) { + '0' => "\x0", + 'a' => "\x7", + 'b' => "\x8", + 't' => "\t", + "\t" => "\t", + 'n' => "\n", + 'v' => "\xB", + 'f' => "\xC", + 'r' => "\r", + 'e' => "\x1B", + ' ' => ' ', + '"' => '"', + '/' => '/', + '\\' => '\\', + // U+0085 NEXT LINE + 'N' => "\xC2\x85", + // U+00A0 NO-BREAK SPACE + '_' => "\xC2\xA0", + // U+2028 LINE SEPARATOR + 'L' => "\xE2\x80\xA8", + // U+2029 PARAGRAPH SEPARATOR + 'P' => "\xE2\x80\xA9", + 'x' => self::utf8chr(hexdec(substr($value, 2, 2))), + 'u' => self::utf8chr(hexdec(substr($value, 2, 4))), + 'U' => self::utf8chr(hexdec(substr($value, 2, 8))), + default => throw new ParseException(sprintf('Found unknown escape character "%s".', $value)), + }; + } + + /** + * Get the UTF-8 character for the given code point. + */ + private static function utf8chr(int $c): string + { + if (0x80 > $c %= 0x200000) { + return \chr($c); + } + if (0x800 > $c) { + return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F); + } + if (0x10000 > $c) { + return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } + + return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F); + } +} diff --git a/Sources/API/vendor/symfony/yaml/Yaml.php b/Sources/API/vendor/symfony/yaml/Yaml.php new file mode 100644 index 0000000..4978421 --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/Yaml.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Yaml; + +use Symfony\Component\Yaml\Exception\ParseException; + +/** + * Yaml offers convenience methods to load and dump YAML. + * + * @author Fabien Potencier + * + * @final + */ +class Yaml +{ + public const DUMP_OBJECT = 1; + public const PARSE_EXCEPTION_ON_INVALID_TYPE = 2; + public const PARSE_OBJECT = 4; + public const PARSE_OBJECT_FOR_MAP = 8; + public const DUMP_EXCEPTION_ON_INVALID_TYPE = 16; + public const PARSE_DATETIME = 32; + public const DUMP_OBJECT_AS_MAP = 64; + public const DUMP_MULTI_LINE_LITERAL_BLOCK = 128; + public const PARSE_CONSTANT = 256; + public const PARSE_CUSTOM_TAGS = 512; + public const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024; + public const DUMP_NULL_AS_TILDE = 2048; + + /** + * Parses a YAML file into a PHP value. + * + * Usage: + * + * $array = Yaml::parseFile('config.yml'); + * print_r($array); + * + * @param string $filename The path to the YAML file to be parsed + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the file could not be read or the YAML is not valid + */ + public static function parseFile(string $filename, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parseFile($filename, $flags); + } + + /** + * Parses YAML into a PHP value. + * + * Usage: + * + * $array = Yaml::parse(file_get_contents('config.yml')); + * print_r($array); + * + * + * @param string $input A string containing YAML + * @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior + * + * @throws ParseException If the YAML is not valid + */ + public static function parse(string $input, int $flags = 0): mixed + { + $yaml = new Parser(); + + return $yaml->parse($input, $flags); + } + + /** + * Dumps a PHP value to a YAML string. + * + * The dump method, when supplied with an array, will do its best + * to convert the array into friendly YAML. + * + * @param mixed $input The PHP value + * @param int $inline The level where you switch to inline YAML + * @param int $indent The amount of spaces to use for indentation of nested nodes + * @param int $flags A bit field of DUMP_* constants to customize the dumped YAML string + */ + public static function dump(mixed $input, int $inline = 2, int $indent = 4, int $flags = 0): string + { + $yaml = new Dumper($indent); + + return $yaml->dump($input, $inline, 0, $flags); + } +} diff --git a/Sources/API/vendor/symfony/yaml/composer.json b/Sources/API/vendor/symfony/yaml/composer.json new file mode 100644 index 0000000..839314b --- /dev/null +++ b/Sources/API/vendor/symfony/yaml/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/yaml", + "type": "library", + "description": "Loads and dumps YAML files", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "minimum-stability": "dev" +} diff --git a/Sources/API/vendor/zircote/swagger-php/LICENSE b/Sources/API/vendor/zircote/swagger-php/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Sources/API/vendor/zircote/swagger-php/README.md b/Sources/API/vendor/zircote/swagger-php/README.md new file mode 100644 index 0000000..dd58fba --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/README.md @@ -0,0 +1,155 @@ +[![Build Status](https://img.shields.io/github/workflow/status/zircote/swagger-php/build?style=flat-square)](https://github.com/zircote/swagger-php/actions?query=workflow:build) +[![Total Downloads](https://img.shields.io/packagist/dt/zircote/swagger-php.svg?style=flat-square)](https://packagist.org/packages/zircote/swagger-php) +[![License](https://img.shields.io/badge/license-Apache2.0-blue.svg?style=flat-square)](LICENSE) + +# swagger-php + +Generate interactive [OpenAPI](https://www.openapis.org) documentation for your RESTful API using [doctrine annotations](https://www.doctrine-project.org/projects/doctrine-annotations/en/latest/index.html). + +For a full list of supported annotations, please have look at the [`OpenApi\Annotations` namespace](src/Annotations) or the [documentation website](https://zircote.github.io/swagger-php/guide/annotations.html). + +## Features + +- Compatible with the OpenAPI **3.0** and **3.1** specification. +- Extracts information from code & existing phpdoc annotations. +- Command-line interface available. +- [Documentation site](https://zircote.github.io/swagger-php/) with a getting started guide. +- Exceptional error reporting (with hints, context) +- As of PHP 8.1 all annotations are also available as PHP attributes + +## OpenAPI version support + +`swagger-php` allows to generate specs either for **OpenAPI 3.0.0** or **OpenAPI 3.1.0**. +By default the spec will be in version `3.0.0`. The command line option `--version` may be used to change this +to `3.1.0`. + +Programmatically, the method `Generator::setVersion()` can be used to change the version. + +## Requirements + +`swagger-php` requires at least PHP 7.2 for annotations and PHP 8.1 for using attributes. + +## Installation (with [Composer](https://getcomposer.org)) + +```bash +composer require zircote/swagger-php +``` + +For cli usage from anywhere install swagger-php globally and make sure to place the `~/.composer/vendor/bin` directory in your PATH so the `openapi` executable can be located by your system. + +```bash +composer global require zircote/swagger-php +``` + +## Usage + +Add annotations to your php files. + +```php +/** + * @OA\Info(title="My First API", version="0.1") + */ + +/** + * @OA\Get( + * path="/api/resource.json", + * @OA\Response(response="200", description="An example resource") + * ) + */ +``` + +Visit the [Documentation website](https://zircote.github.io/swagger-php/) for the [Getting started guide](https://zircote.github.io/swagger-php/guide) or look at the [Examples directory](Examples/) for more examples. + +### Usage from php + +Generate always-up-to-date documentation. + +```php +toYaml(); +``` +Documentation of how to use the `Generator` class can be found in the [Generator reference](https://zircote.github.io/swagger-php/reference/generator). + +### Usage from the Command Line Interface + +The `openapi` command line interface can be used to generate the documentation to a static yaml/json file. + +```bash +./vendor/bin/openapi --help +``` +Starting with version 4 the default analyser used on the command line is the new `ReflectionAnalyser`. + +Using the `--legacy` flag (`-l`) the legacy `TokenAnalyser` can still be used. + +### Usage from the Deserializer + +Generate the OpenApi annotation object from a json string, which makes it easier to manipulate objects programmatically. + +```php +deserialize($jsonString, 'OpenApi\Annotations\OpenApi'); +echo $openapi->toJson(); +``` + +### Usage from [docker](https://docker.com) + +Generate the swagger documentation to a static json file. + +``` +docker run -v "$PWD":/app -it tico/swagger-php --help +``` + +## More on OpenApi & Swagger + +- https://swagger.io +- https://www.openapis.org +- [OpenApi Documentation](https://swagger.io/docs/) +- [OpenApi Specification](http://swagger.io/specification/) +- [Related projects](docs/related-projects.md) + +## Contributing + +Feel free to submit [Github Issues](https://github.com/zircote/swagger-php/issues) +or pull requests. + +The documentation website is build from the [docs](docs/) folder with [vitepress](https://vitepress.vuejs.org). + +Make sure pull requests pass [PHPUnit](https://phpunit.de/) +and [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (PSR-2) tests. + +### To run both unit tests and linting execute: +```bash +composer test +``` + +### To run static-analysis execute: +```bash +composer analyse +``` + +### Running unit tests only: +```bash +./bin/phpunit +``` + +### Regenerate reference markup docs +```bash +composer docs:gen +``` + +### Running linting only: +```bash +composer lint +``` + +### To make `php-cs-fixer` fix linting errors: +```bash +composer cs +``` diff --git a/Sources/API/vendor/zircote/swagger-php/composer.json b/Sources/API/vendor/zircote/swagger-php/composer.json new file mode 100644 index 0000000..a68b5f4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/composer.json @@ -0,0 +1,118 @@ +{ + "name": "zircote/swagger-php", + "type": "library", + "license": "Apache-2.0", + "bin": [ + "bin/openapi" + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "keywords": [ + "json", + "rest", + "api", + "service discovery" + ], + "homepage": "https://github.com/zircote/swagger-php/", + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "config": { + "bin-dir": "bin", + "optimize-autoloader": true, + "sort-packages": true, + "allow-plugins": { + "composer/package-versions-deprecated": true + } + }, + "minimum-stability": "stable", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "require": { + "php": ">=7.2", + "ext-json": "*", + "doctrine/annotations": "^1.7", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.0", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "autoload-dev": { + "exclude-from-classmap": [ + "/tests/Fixtures" + ], + "psr-4": { + "OpenApi\\Tools\\": "tools/src/", + "OpenApi\\Tests\\": "tests/", + "AnotherNamespace\\": "tests/Fixtures/AnotherNamespace" + } + }, + "scripts-descriptions": { + "cs": "Fix all codestyle issues", + "lint": "Test codestyle", + "test": "Run all non-legacy and codestyle tests", + "testlegacy": "Run tests using the legacy TokenAnalyser", + "testall": "Run all tests (test + testlegacy)", + "analyse": "Run static analysis (phpstan/psalm)", + "spectral": "Run spectral lint over all .yaml files in the Examples folder", + "docs:refgen": "Rebuild the annotations/attributes reference markup files", + "docs:dev": "Run dev server for local development of gh-pages", + "docs:build": "Re-build static gh-pages" + }, + "scripts": { + "cs": "export XDEBUG_MODE=off && php-cs-fixer fix --allow-risky=yes", + "lint": "@cs --dry-run", + "test": [ + "export XDEBUG_MODE=off && phpunit", + "@lint" + ], + "testlegacy": "export XDEBUG_MODE=off && export PHPUNIT_ANALYSER=legacy && phpunit", + "testall": [ + "@test", + "@testlegacy" + ], + "analyse": [ + "export XDEBUG_MODE=off && phpstan analyse --memory-limit=2G", + "export XDEBUG_MODE=off && psalm" + ], + "spectral": "for ff in `find Examples -name '*.yaml'`; do spectral lint $ff; done", + "docs:refgen": "php tools/refgen.php", + "docs:procgen": "php tools/procgen.php", + "docs:gen": [ + "@docs:refgen", + "@docs:procgen" + ], + "docs:dev": "cd docs && npm run dev", + "docs:build": [ + "@docs:gen", + "cd docs && npm run build" + ] + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php new file mode 100644 index 0000000..864d226 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/AnalyserInterface.php @@ -0,0 +1,18 @@ + top level annotations + */ + public function build(\Reflector $reflector, Context $context): array; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php new file mode 100644 index 0000000..a8a1d84 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/AttributeAnnotationFactory.php @@ -0,0 +1,142 @@ +generator = $generator; + } + + public function build(\Reflector $reflector, Context $context): array + { + if (\PHP_VERSION_ID < 80100 || !method_exists($reflector, 'getAttributes')) { + return []; + } + + if ($reflector instanceof \ReflectionProperty && method_exists($reflector, 'isPromoted') && $reflector->isPromoted()) { + // handled via __construct() parameter + return []; + } + + // no proper way to inject + Generator::$context = $context; + + /** @var OA\AbstractAnnotation[] $annotations */ + $annotations = []; + try { + foreach ($reflector->getAttributes() as $attribute) { + try { + $instance = $attribute->newInstance(); + if ($instance instanceof OA\AbstractAnnotation) { + $annotations[] = $instance; + } + } catch (\Error $e) { + $context->logger->debug('Could not instantiate attribute: ' . $e->getMessage(), ['exception' => $e]); + } + } + + if ($reflector instanceof \ReflectionMethod) { + // also look at parameter attributes + foreach ($reflector->getParameters() as $rp) { + foreach ([OAT\Property::class, OAT\Parameter::class, OAT\PathParameter::class] as $attributeName) { + foreach ($rp->getAttributes($attributeName) as $attribute) { + $instance = $attribute->newInstance(); + $type = (($rnt = $rp->getType()) && $rnt instanceof \ReflectionNamedType) ? $rnt->getName() : Generator::UNDEFINED; + $nullable = $rnt ? $rnt->allowsNull() : true; + + if ($instance instanceof OAT\Property) { + $instance->property = $rp->getName(); + if (Generator::isDefault($instance->type)) { + $instance->type = $type; + } + $instance->nullable = $nullable; + } else { + $instance->name = $rp->getName(); + $instance->required = !$nullable; + $context = new Context(['nested' => $this], $context); + $context->comment = null; + $instance->merge([new OA\Schema(['type' => $type, '_context' => $context])]); + } + $annotations[] = $instance; + } + } + } + + if (($rrt = $reflector->getReturnType()) && $rrt instanceof \ReflectionNamedType) { + foreach ($annotations as $annotation) { + if ($annotation instanceof OAT\Property && Generator::isDefault($annotation->type)) { + // pick up simple return types + $annotation->type = $rrt->getName(); + } + } + } + } + } finally { + Generator::$context = null; + } + + $annotations = array_values(array_filter($annotations, function ($a) { + return $a !== null && $a instanceof OA\AbstractAnnotation; + })); + + // merge backwards into parents... + $isParent = function (OA\AbstractAnnotation $annotation, OA\AbstractAnnotation $possibleParent): bool { + // regular annotation hierarchy + $explicitParent = null !== $possibleParent::matchNested(get_class($annotation)); + + $isParentAllowed = false; + // support Attachable subclasses + if ($isAttachable = $annotation instanceof OAT\Attachable) { + if (!$isParentAllowed = (null === $annotation->allowedParents())) { + // check for allowed parents + foreach ($annotation->allowedParents() as $allowedParent) { + if ($possibleParent instanceof $allowedParent) { + $isParentAllowed = true; + break; + } + } + } + } + + // Property can be nested... + return get_class($annotation) != get_class($possibleParent) + && ($explicitParent || ($isAttachable && $isParentAllowed)); + }; + + $annotationsWithoutParent = []; + foreach ($annotations as $index => $annotation) { + $mergedIntoParent = false; + + for ($ii = 0; $ii < count($annotations); ++$ii) { + if ($ii === $index) { + continue; + } + $possibleParent = $annotations[$ii]; + if ($isParent($annotation, $possibleParent)) { + $mergedIntoParent = true; // + $possibleParent->merge([$annotation]); + } + } + + if (!$mergedIntoParent) { + $annotationsWithoutParent[] = $annotation; + } + } + + return $annotationsWithoutParent; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php new file mode 100644 index 0000000..572c264 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/ComposerAutoloaderScanner.php @@ -0,0 +1,53 @@ + $namespaces + * + * @return array + */ + public function scan(array $namespaces): array + { + $units = []; + if ($autoloader = $this->getComposerAutoloader()) { + foreach (array_keys($autoloader->getClassMap()) as $unit) { + foreach ($namespaces as $namespace) { + if (0 === strpos($unit, $namespace)) { + $units[] = $unit; + break; + } + } + } + } + + return $units; + } + + public static function getComposerAutoloader(): ?ClassLoader + { + foreach (spl_autoload_functions() as $fkt) { + if (is_array($fkt) && $fkt[0] instanceof ClassLoader) { + return $fkt[0]; + } + } + + return null; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php new file mode 100644 index 0000000..21d1768 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockAnnotationFactory.php @@ -0,0 +1,58 @@ +docBlockParser = $docBlockParser ?: new DocBlockParser(); + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + $this->docBlockParser->setAliases($generator->getAliases()); + } + + public function build(\Reflector $reflector, Context $context): array + { + $aliases = $this->generator ? $this->generator->getAliases() : []; + + if (method_exists($reflector, 'getShortName') && method_exists($reflector, 'getName')) { + $aliases[strtolower($reflector->getShortName())] = $reflector->getName(); + } + + if ($context->with('scanned')) { + $details = $context->scanned; + foreach ($details['uses'] as $alias => $name) { + $aliasKey = strtolower($alias); + if ($name != $alias && !array_key_exists($aliasKey, $aliases)) { + // real aliases only + $aliases[strtolower($alias)] = $name; + } + } + } + $this->docBlockParser->setAliases($aliases); + + if (method_exists($reflector, 'getDocComment') && ($comment = $reflector->getDocComment())) { + return $this->docBlockParser->fromComment($comment, $context); + } + + return []; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php new file mode 100644 index 0000000..fa89047 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/DocBlockParser.php @@ -0,0 +1,83 @@ + $aliases + */ + public function __construct(array $aliases = []) + { + $docParser = new DocParser(); + $docParser->setIgnoreNotImportedAnnotations(true); + $docParser->setImports($aliases); + $this->docParser = $docParser; + } + + /** + * @param array $aliases + */ + public function setAliases(array $aliases): void + { + $this->docParser->setImports($aliases); + } + + /** + * Use doctrine to parse the comment block and return the detected annotations. + * + * @param string $comment a T_DOC_COMMENT + * @param Context $context + * + * @return array + */ + public function fromComment(string $comment, Context $context): array + { + $context->comment = $comment; + + try { + Generator::$context = $context; + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + return $this->docParser->parse($comment, $context->getDebugLocation()); + } catch (\Exception $e) { + if (preg_match('/^(.+) at position ([0-9]+) in ' . preg_quote((string) $context, '/') . '\.$/', $e->getMessage(), $matches)) { + $errorMessage = $matches[1]; + $errorPos = (int) $matches[2]; + $atPos = strpos($comment, '@'); + $context->line += substr_count($comment, "\n", 0, $atPos + $errorPos); + $lines = explode("\n", substr($comment, $atPos, $errorPos)); + $context->character = strlen(array_pop($lines)) + 1; // position starts at 0 character starts at 1 + $context->logger->error($errorMessage . ' in ' . $context, ['exception' => $e]); + } else { + $context->logger->error( + $e->getMessage() . ($context->filename ? ('; file=' . $context->filename) : ''), + ['exception' => $e] + ); + } + + return []; + } finally { + Generator::$context = null; + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php new file mode 100644 index 0000000..bcd18f1 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/ReflectionAnalyser.php @@ -0,0 +1,190 @@ + $annotationFactories + */ + public function __construct(array $annotationFactories = []) + { + $this->annotationFactories = $annotationFactories; + if (!$this->annotationFactories) { + throw new \InvalidArgumentException('Need at least one annotation factory'); + } + } + + public function setGenerator(Generator $generator): void + { + $this->generator = $generator; + + foreach ($this->annotationFactories as $annotationFactory) { + $annotationFactory->setGenerator($generator); + } + } + + public function fromFile(string $filename, Context $context): Analysis + { + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $analysis = new Analysis([], $context); + foreach ($fileDetails as $fqdn => $details) { + $this->analyzeFqdn($fqdn, $analysis, $details); + } + + return $analysis; + } + + public function fromFqdn(string $fqdn, Analysis $analysis): Analysis + { + $fqdn = ltrim($fqdn, '\\'); + + $rc = new \ReflectionClass($fqdn); + if (!$filename = $rc->getFileName()) { + return $analysis; + } + + $scanner = new TokenScanner(); + $fileDetails = $scanner->scanFile($filename); + + $this->analyzeFqdn($fqdn, $analysis, $fileDetails[$fqdn]); + + return $analysis; + } + + protected function analyzeFqdn(string $fqdn, Analysis $analysis, array $details): Analysis + { + if (!class_exists($fqdn) && !interface_exists($fqdn) && !trait_exists($fqdn) && (!function_exists('enum_exists') || !enum_exists($fqdn))) { + $analysis->context->logger->warning('Skipping unknown ' . $fqdn); + + return $analysis; + } + + $rc = new \ReflectionClass($fqdn); + $contextType = $rc->isInterface() ? 'interface' : ($rc->isTrait() ? 'trait' : ((method_exists($rc, 'isEnum') && $rc->isEnum()) ? 'enum' : 'class')); + $context = new Context([ + $contextType => $rc->getShortName(), + 'namespace' => $rc->getNamespaceName() ?: null, + 'uses' => $details['uses'], + 'comment' => $rc->getDocComment() ?: null, + 'filename' => $rc->getFileName() ?: null, + 'line' => $rc->getStartLine(), + 'annotations' => [], + 'scanned' => $details, + ], $analysis->context); + + $definition = [ + $contextType => $rc->getShortName(), + 'extends' => null, + 'implements' => [], + 'traits' => [], + 'properties' => [], + 'methods' => [], + 'context' => $context, + ]; + $normaliseClass = function (string $name): string { + return '\\' . ltrim($name, '\\'); + }; + if ($parentClass = $rc->getParentClass()) { + $definition['extends'] = $normaliseClass($parentClass->getName()); + } + $definition[$contextType == 'class' ? 'implements' : 'extends'] = array_map($normaliseClass, $details['interfaces']); + $definition['traits'] = array_map($normaliseClass, $details['traits']); + + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($rc, $context), $context); + } + + foreach ($rc->getMethods() as $method) { + if (in_array($method->name, $details['methods'])) { + $definition['methods'][$method->getName()] = $ctx = new Context([ + 'method' => $method->getName(), + 'comment' => $method->getDocComment() ?: null, + 'filename' => $method->getFileName() ?: null, + 'line' => $method->getStartLine(), + 'annotations' => [], + ], $context); + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($method, $ctx), $ctx); + } + } + } + + foreach ($rc->getProperties() as $property) { + if (in_array($property->name, $details['properties'])) { + $definition['properties'][$property->getName()] = $ctx = new Context([ + 'property' => $property->getName(), + 'comment' => $property->getDocComment() ?: null, + 'annotations' => [], + ], $context); + if ($property->isStatic()) { + $ctx->static = true; + } + if (\PHP_VERSION_ID >= 70400 && ($type = $property->getType())) { + $ctx->nullable = $type->allowsNull(); + if ($type instanceof \ReflectionNamedType) { + $ctx->type = $type->getName(); + // Context::fullyQualifiedName(...) expects this + if (class_exists($absFqn = '\\' . $ctx->type)) { + $ctx->type = $absFqn; + } + } + } + foreach ($this->annotationFactories as $annotationFactory) { + $analysis->addAnnotations($annotationFactory->build($property, $ctx), $ctx); + } + } + } + + foreach ($rc->getReflectionConstants() as $constant) { + foreach ($this->annotationFactories as $annotationFactory) { + $definition['constants'][$constant->getName()] = $ctx = new Context([ + 'constant' => $constant->getName(), + 'comment' => $constant->getDocComment() ?: null, + 'annotations' => [], + ], $context); + foreach ($annotationFactory->build($constant, $ctx) as $annotation) { + if ($annotation instanceof OA\Property) { + if (Generator::isDefault($annotation->property)) { + $annotation->property = $constant->getName(); + } + if (Generator::isDefault($annotation->const)) { + $annotation->const = $constant->getValue(); + } + $analysis->addAnnotation($annotation, $ctx); + } + } + } + } + + $addDefinition = 'add' . ucfirst($contextType) . 'Definition'; + $analysis->{$addDefinition}($definition); + + return $analysis; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php new file mode 100644 index 0000000..07e252c --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenAnalyser.php @@ -0,0 +1,639 @@ +generator = $generator; + } + + /** + * Extract and process all doc-comments from a file. + * + * @param string $filename path to a php file + */ + public function fromFile(string $filename, Context $context): Analysis + { + if (function_exists('opcache_get_status') && function_exists('opcache_get_configuration')) { + if (empty($GLOBALS['openapi_opcache_warning'])) { + $GLOBALS['openapi_opcache_warning'] = true; + $status = opcache_get_status(); + $config = opcache_get_configuration(); + if (is_array($status) && $status['opcache_enabled'] && $config['directives']['opcache.save_comments'] == false) { + $context->logger->error("php.ini \"opcache.save_comments = 0\" interferes with extracting annotations.\n[LINK] https://www.php.net/manual/en/opcache.configuration.php#ini.opcache.save-comments"); + } + } + } + $tokens = token_get_all(file_get_contents($filename)); + + return $this->fromTokens($tokens, new Context(['filename' => $filename], $context)); + } + + /** + * Extract and process all doc-comments from the contents. + * + * @param string $code PHP code. (including fromTokens($tokens, $context); + } + + /** + * Shared implementation for parseFile() & parseContents(). + * + * @param array $tokens The result of a token_get_all() + */ + protected function fromTokens(array $tokens, Context $parseContext): Analysis + { + $generator = $this->generator ?: new Generator(); + $analysis = new Analysis([], $parseContext); + $docBlockParser = new DocBlockParser($generator->getAliases()); + + reset($tokens); + $token = ''; + + $aliases = $generator->getAliases(); + + $parseContext->uses = []; + // default to parse context to start with + $schemaContext = $parseContext; + + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + $comment = false; + + $line = 0; + $lineOffset = $parseContext->line ?: 0; + + while ($token !== false) { + $previousToken = $token; + $token = $this->nextToken($tokens, $parseContext); + + if (is_array($token) === false) { + // Ignore tokens like "{", "}", etc + continue; + } + + if (defined('T_ATTRIBUTE') && $token[0] === T_ATTRIBUTE) { + // consume + $this->parseAttribute($tokens, $token, $parseContext); + continue; + } + + if ($token[0] === T_DOC_COMMENT) { + if ($comment) { + // 2 Doc-comments in succession? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + $comment = $token[1]; + $line = $token[2] + $lineOffset; + continue; + } + + if (in_array($token[0], [T_ABSTRACT, T_FINAL])) { + // skip + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token[0] === T_CLASS) { + // Doc-comment before a class? + if (is_array($previousToken) && $previousToken[0] === T_DOUBLE_COLON) { + // php 5.5 class name resolution (i.e. ClassName::class) + continue; + } + + $token = $this->nextToken($tokens, $parseContext); + + if (is_string($token) && ($token === '(' || $token === '{')) { + // php7 anonymous classes (i.e. new class() { public function foo() {} };) + continue; + } + + if (is_array($token) && ($token[1] === 'extends' || $token[1] === 'implements')) { + // php7 anonymous classes with extends (i.e. new class() extends { public function foo() {} };) + continue; + } + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $interfaceDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $schemaContext = new Context(['class' => $token[1], 'line' => $token[2]], $parseContext); + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + $classDefinition = [ + 'class' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespace($tokens, $token, $parseContext); + $classDefinition['extends'] = $schemaContext->fullyQualifiedName($schemaContext->extends); + } + + if ($token[0] === T_IMPLEMENTS) { + $schemaContext->implements = $this->parseNamespaceList($tokens, $token, $parseContext); + $classDefinition['implements'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->implements); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-class and reset $schemaContext + } + + if ($token[0] === T_INTERFACE) { // Doc-comment before an interface? + $classDefinition = false; + $traitDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['interface' => $token[1], 'line' => $token[2]], $parseContext); + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + $interfaceDefinition = [ + 'interface' => $token[1], + 'extends' => null, + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_EXTENDS) { + $schemaContext->extends = $this->parseNamespaceList($tokens, $token, $parseContext); + $interfaceDefinition['extends'] = array_map([$schemaContext, 'fullyQualifiedName'], $schemaContext->extends); + } + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-interface and reset $schemaContext + } + + if ($token[0] === T_TRAIT) { + $classDefinition = false; + $interfaceDefinition = false; + $enumDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['trait' => $token[1], 'line' => $token[2]], $parseContext); + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + $traitDefinition = [ + 'trait' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if (defined('T_ENUM') && $token[0] === T_ENUM) { + $classDefinition = false; + $interfaceDefinition = false; + $traitDefinition = false; + + $token = $this->nextToken($tokens, $parseContext); + + if (!is_array($token)) { + // PHP 8 named argument + continue; + } + + $schemaContext = new Context(['enum' => $token[1], 'line' => $token[2]], $parseContext); + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + $enumDefinition = [ + 'enum' => $token[1], + 'properties' => [], + 'methods' => [], + 'context' => $schemaContext, + ]; + + if ($comment) { + $schemaContext->line = $line; + $this->analyseComment($analysis, $docBlockParser, $comment, $schemaContext); + $comment = false; + continue; + } + + // @todo detect end-of-trait and reset $schemaContext + } + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // static property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'static' => true, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + continue; + } + } + + if (in_array($token[0], [T_PRIVATE, T_PROTECTED, T_PUBLIC, T_VAR])) { // Scope + [$type, $nullable, $token] = $this->parseTypeAndNextToken($tokens, $parseContext); + if ($token[0] === T_VARIABLE) { + // instance property + $propertyContext = new Context( + [ + 'property' => substr($token[1], 1), + 'type' => $type, + 'nullable' => $nullable, + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($traitDefinition) { + $traitDefinition['properties'][$propertyContext->property] = $propertyContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $propertyContext); + $comment = false; + } + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + continue; + } elseif ($token[0] === T_FUNCTION) { + $token = $this->nextToken($tokens, $parseContext); + if ($token[0] === T_STRING) { + $methodContext = new Context( + [ + 'method' => $token[1], + 'line' => $line, + ], + $schemaContext + ); + + if ($classDefinition) { + $classDefinition['methods'][$token[1]] = $methodContext; + } + if ($interfaceDefinition) { + $interfaceDefinition['methods'][$token[1]] = $methodContext; + } + if ($traitDefinition) { + $traitDefinition['methods'][$token[1]] = $methodContext; + } + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, $methodContext); + $comment = false; + } + } + } + + if (in_array($token[0], [T_NAMESPACE, T_USE]) === false) { + // Skip "use" & "namespace" to prevent "never imported" warnings) + if ($comment) { + // Not a doc-comment for a class, property or method? + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + $comment = false; + } + } + + if ($token[0] === T_NAMESPACE) { + $parseContext->namespace = $this->parseNamespace($tokens, $token, $parseContext); + $aliases['__NAMESPACE__'] = $parseContext->namespace; + $docBlockParser->setAliases($aliases); + continue; + } + + if ($token[0] === T_USE) { + $statements = $this->parseUseStatement($tokens, $token, $parseContext); + foreach ($statements as $alias => $target) { + if ($classDefinition) { + // class traits + $classDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } elseif ($traitDefinition) { + // trait traits + $traitDefinition['traits'][] = $schemaContext->fullyQualifiedName($target); + } else { + // not a trait use + $parseContext->uses[$alias] = $target; + + $namespaces = $generator->getNamespaces(); + if (null === $namespaces) { + $aliases[strtolower($alias)] = $target; + } else { + foreach ($namespaces as $namespace) { + if (strcasecmp(substr($target . '\\', 0, strlen($namespace)), $namespace) === 0) { + $aliases[strtolower($alias)] = $target; + break; + } + } + } + $docBlockParser->setAliases($aliases); + } + } + } + } + + // cleanup final comment and definition + if ($comment) { + $this->analyseComment($analysis, $docBlockParser, $comment, new Context(['line' => $line], $schemaContext)); + } + if ($classDefinition) { + $analysis->addClassDefinition($classDefinition); + } + if ($interfaceDefinition) { + $analysis->addInterfaceDefinition($interfaceDefinition); + } + if ($traitDefinition) { + $analysis->addTraitDefinition($traitDefinition); + } + if ($enumDefinition) { + $analysis->addEnumDefinition($enumDefinition); + } + + return $analysis; + } + + /** + * Parse comment and add annotations to analysis. + */ + private function analyseComment(Analysis $analysis, DocBlockParser $docBlockParser, string $comment, Context $context): void + { + $analysis->addAnnotations($docBlockParser->fromComment($comment, $context), $context); + } + + /** + * The next non-whitespace, non-comment token. + * + * + * @return array|string The next token (or false) + */ + private function nextToken(array &$tokens, Context $context) + { + while (true) { + $token = next($tokens); + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + continue; + } + if ($token[0] === T_COMMENT) { + $pos = strpos($token[1], '@OA\\'); + if ($pos) { + $line = $context->line ? $context->line + $token[2] : $token[2]; + $commentContext = new Context(['line' => $line], $context); + $context->logger->warning('Annotations are only parsed inside `/**` DocBlocks, skipping ' . $commentContext); + } + continue; + } + } + + return $token; + } + } + + private function parseAttribute(array &$tokens, &$token, Context $parseContext): void + { + $nesting = 1; + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!is_array($token) && '[' === $token) { + ++$nesting; + continue; + } + + if (!is_array($token) && ']' === $token) { + --$nesting; + if (!$nesting) { + break; + } + } + } + } + + /** + * @return int[] + */ + private function php8NamespaceToken(): array + { + return defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + } + + /** + * Parse namespaced string. + * + * @param array|string $token + */ + private function parseNamespace(array &$tokens, &$token, Context $parseContext): string + { + $namespace = ''; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + if (!in_array($token[0], $nsToken)) { + break; + } + $namespace .= $token[1]; + } + + return $namespace; + } + + /** + * Parse comma separated list of namespaced strings. + * + * @param array|string $token + */ + private function parseNamespaceList(array &$tokens, &$token, Context $parseContext): array + { + $namespaces = []; + while ($namespace = $this->parseNamespace($tokens, $token, $parseContext)) { + $namespaces[] = $namespace; + if ($token != ',') { + break; + } + } + + return $namespaces; + } + + /** + * Parse a use statement. + */ + private function parseUseStatement(array &$tokens, &$token, Context $parseContext): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $this->php8NamespaceToken()); + while ($token !== false) { + $token = $this->nextToken($tokens, $parseContext); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } else { + break; + } + } + + return $statements; + } + + /** + * Parse type of variable (if it exists). + */ + private function parseTypeAndNextToken(array &$tokens, Context $parseContext): array + { + $type = Generator::UNDEFINED; + $nullable = false; + $token = $this->nextToken($tokens, $parseContext); + + if ($token[0] === T_STATIC) { + $token = $this->nextToken($tokens, $parseContext); + } + + if ($token === '?') { // nullable type + $nullable = true; + $token = $this->nextToken($tokens, $parseContext); + } + + $qualifiedToken = array_merge([T_NS_SEPARATOR, T_STRING, T_ARRAY], $this->php8NamespaceToken()); + $typeToken = array_merge([T_STRING], $this->php8NamespaceToken()); + // drill down namespace segments to basename property type declaration + while (in_array($token[0], $qualifiedToken)) { + if (in_array($token[0], $typeToken)) { + $type = $token[1]; + } + $token = $this->nextToken($tokens, $parseContext); + } + + return [$type, $nullable, $token]; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php b/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php new file mode 100644 index 0000000..1df38be --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysers/TokenScanner.php @@ -0,0 +1,366 @@ +scanTokens(token_get_all(file_get_contents($filename))); + } + + /** + * Scan file for all classes, interfaces and traits. + * + * @return array> File details + */ + protected function scanTokens(array $tokens): array + { + $units = []; + $uses = []; + $isInterface = false; + $namespace = ''; + $currentName = null; + $unitLevel = 0; + $lastToken = null; + $stack = []; + + $initUnit = function ($uses): array { + return [ + 'uses' => $uses, + 'interfaces' => [], + 'traits' => [], + 'enums' => [], + 'methods' => [], + 'properties' => [], + ]; + }; + + while (false !== ($token = $this->nextToken($tokens))) { + if (!is_array($token)) { + switch ($token) { + case '{': + $stack[] = $token; + break; + case '}': + array_pop($stack); + if (count($stack) == $unitLevel) { + $currentName = null; + } + break; + } + continue; + } + + switch ($token[0]) { + case T_CURLY_OPEN: + case T_DOLLAR_OPEN_CURLY_BRACES: + $stack[] = $token[1]; + break; + + case T_NAMESPACE: + $namespace = $this->nextWord($tokens); + break; + + case T_USE: + if (!$stack) { + $uses = array_merge($uses, $this->parseFQNStatement($tokens, $token)); + } elseif ($currentName) { + $traits = $this->resolveFQN($this->parseFQNStatement($tokens, $token), $namespace, $uses); + $units[$currentName]['traits'] = array_merge($units[$currentName]['traits'], $traits); + } + break; + + case T_CLASS: + if ($currentName) { + break; + } + + if ($lastToken && is_array($lastToken) && $lastToken[0] === T_DOUBLE_COLON) { + // ::class + break; + } + + // class name + $token = $this->nextToken($tokens); + + // unless ... + if (is_string($token) && ($token === '(' || $token === '{')) { + // new class[()] { ... } + if ('{' == $token) { + prev($tokens); + } + break; + } elseif (is_array($token) && in_array($token[1], ['extends', 'implements'])) { + // new class[()] extends { ... } + break; + } + + $isInterface = false; + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_INTERFACE: + if ($currentName) { + break; + } + + $isInterface = true; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $units[$currentName] = $initUnit($uses); + break; + + case T_EXTENDS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($isInterface && $currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + if (!is_array($token) || T_IMPLEMENTS !== $token[0]) { + break; + } + // no break + case T_IMPLEMENTS: + $fqns = $this->parseFQNStatement($tokens, $token); + if ($currentName) { + $units[$currentName]['interfaces'] = $this->resolveFQN($fqns, $namespace, $uses); + } + break; + + case T_FUNCTION: + $token = $this->nextToken($tokens); + if ((!is_array($token) && '&' == $token) + || (defined('T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG') && T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG == $token[0])) { + $token = $this->nextToken($tokens); + } + + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['methods'][] = $token[1]; + if (!$isInterface) { + // more nesting + $units[$currentName]['properties'] = array_merge( + $units[$currentName]['properties'], + $this->parsePromotedProperties($tokens) + ); + $this->skipTo($tokens, '{', true); + } else { + // no function body + $this->skipTo($tokens, ';'); + } + } + break; + + case T_VARIABLE: + if (($unitLevel + 1) == count($stack) && $currentName) { + $units[$currentName]['properties'][] = substr($token[1], 1); + } + break; + default: + // handle trait here too to avoid duplication + if (T_TRAIT === $token[0] || (defined('T_ENUM') && T_ENUM === $token[0])) { + if ($currentName) { + break; + } + + $isInterface = false; + $token = $this->nextToken($tokens); + $currentName = $namespace . '\\' . $token[1]; + $unitLevel = count($stack); + $this->skipTo($tokens, '{', true); + $units[$currentName] = $initUnit($uses); + } + break; + } + $lastToken = $token; + } + + /* @phpstan-ignore-next-line */ + return $units; + } + + /** + * Get the next token that is not whitespace or comment. + * + * @return string|array + */ + protected function nextToken(array &$tokens) + { + $token = true; + while ($token) { + $token = next($tokens); + if (is_array($token)) { + if (in_array($token[0], [T_WHITESPACE, T_COMMENT])) { + continue; + } + } + + return $token; + } + + return $token; + } + + /** + * @return array + */ + protected function resolveFQN(array $names, string $namespace, array $uses): array + { + $resolve = function ($name) use ($namespace, $uses) { + if ('\\' == $name[0]) { + return substr($name, 1); + } + + if (array_key_exists($name, $uses)) { + return $uses[$name]; + } + + return $namespace . '\\' . $name; + }; + + return array_values(array_map($resolve, $names)); + } + + protected function skipTo(array &$tokens, string $char, bool $prev = false): void + { + while (false !== ($token = next($tokens))) { + if (is_string($token) && $token == $char) { + if ($prev) { + prev($tokens); + } + + break; + } + } + } + + /** + * Read next word. + * + * Skips leading whitespace. + */ + protected function nextWord(array &$tokens): string + { + $word = ''; + while (false !== ($token = next($tokens))) { + if (is_array($token)) { + if ($token[0] === T_WHITESPACE) { + if ($word) { + break; + } + continue; + } + $word .= $token[1]; + } + } + + return $word; + } + + /** + * Parse a use statement. + */ + protected function parseFQNStatement(array &$tokens, array &$token): array + { + $normalizeAlias = function ($alias): string { + $alias = ltrim($alias, '\\'); + $elements = explode('\\', $alias); + + return array_pop($elements); + }; + + $class = ''; + $alias = ''; + $statements = []; + $explicitAlias = false; + $php8NSToken = defined('T_NAME_QUALIFIED') ? [T_NAME_QUALIFIED, T_NAME_FULLY_QUALIFIED] : []; + $nsToken = array_merge([T_STRING, T_NS_SEPARATOR], $php8NSToken); + while ($token !== false) { + $token = $this->nextToken($tokens); + $isNameToken = in_array($token[0], $nsToken); + if (!$explicitAlias && $isNameToken) { + $class .= $token[1]; + $alias = $token[1]; + } elseif ($explicitAlias && $isNameToken) { + $alias .= $token[1]; + } elseif ($token[0] === T_AS) { + $explicitAlias = true; + $alias = ''; + } elseif ($token[0] === T_IMPLEMENTS) { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === ',') { + $statements[$normalizeAlias($alias)] = $class; + $class = ''; + $alias = ''; + $explicitAlias = false; + } elseif ($token === ';') { + $statements[$normalizeAlias($alias)] = $class; + break; + } elseif ($token === '{') { + $statements[$normalizeAlias($alias)] = $class; + prev($tokens); + break; + } else { + break; + } + } + + return $statements; + } + + protected function parsePromotedProperties(array &$tokens): array + { + $properties = []; + + $this->skipTo($tokens, '('); + $round = 1; + $promoted = false; + while (false !== ($token = $this->nextToken($tokens))) { + if (is_string($token)) { + switch ($token) { + case '(': + ++$round; + break; + case ')': + --$round; + if (0 == $round) { + return $properties; + } + } + } + if (is_array($token)) { + switch ($token[0]) { + case T_PUBLIC: + case T_PROTECTED: + case T_PRIVATE: + $promoted = true; + break; + case T_VARIABLE: + if ($promoted) { + $properties[] = ltrim($token[1], '$'); + $promoted = false; + } + break; + } + } + } + + /* @phpstan-ignore-next-line */ + return $properties; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Analysis.php b/Sources/API/vendor/zircote/swagger-php/src/Analysis.php new file mode 100644 index 0000000..83a62a4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Analysis.php @@ -0,0 +1,439 @@ +annotations = new \SplObjectStorage(); + $this->context = $context; + + $this->addAnnotations($annotations, $context); + } + + public function addAnnotation(object $annotation, Context $context): void + { + if ($this->annotations->contains($annotation)) { + return; + } + + if ($annotation instanceof OA\OpenApi) { + $this->openapi = $this->openapi ?: $annotation; + } else { + if ($context->is('annotations') === false) { + $context->annotations = []; + } + + if (in_array($annotation, $context->annotations, true) === false) { + $context->annotations[] = $annotation; + } + } + $this->annotations->attach($annotation, $context); + $blacklist = property_exists($annotation, '_blacklist') ? $annotation::$_blacklist : []; + foreach ($annotation as $property => $value) { + if (in_array($property, $blacklist)) { + if ($property === '_unmerged') { + foreach ($value as $item) { + $this->addAnnotation($item, $context); + } + } + } elseif (is_array($value)) { + foreach ($value as $item) { + if ($item instanceof OA\AbstractAnnotation) { + $this->addAnnotation($item, $context); + } + } + } elseif ($value instanceof OA\AbstractAnnotation) { + $this->addAnnotation($value, $context); + } + } + } + + public function addAnnotations(array $annotations, Context $context): void + { + foreach ($annotations as $annotation) { + $this->addAnnotation($annotation, $context); + } + } + + public function addClassDefinition(array $definition): void + { + $class = $definition['context']->fullyQualifiedName($definition['class']); + $this->classes[$class] = $definition; + } + + public function addInterfaceDefinition(array $definition): void + { + $interface = $definition['context']->fullyQualifiedName($definition['interface']); + $this->interfaces[$interface] = $definition; + } + + public function addTraitDefinition(array $definition): void + { + $trait = $definition['context']->fullyQualifiedName($definition['trait']); + $this->traits[$trait] = $definition; + } + + public function addEnumDefinition(array $definition): void + { + $enum = $definition['context']->fullyQualifiedName($definition['enum']); + $this->enums[$enum] = $definition; + } + + public function addAnalysis(Analysis $analysis): void + { + foreach ($analysis->annotations as $annotation) { + $this->addAnnotation($annotation, $analysis->annotations[$annotation]); + } + $this->classes = array_merge($this->classes, $analysis->classes); + $this->interfaces = array_merge($this->interfaces, $analysis->interfaces); + $this->traits = array_merge($this->traits, $analysis->traits); + $this->enums = array_merge($this->enums, $analysis->enums); + if ($this->openapi === null && $analysis->openapi !== null) { + $this->openapi = $analysis->openapi; + } + } + + /** + * Get all subclasses of the given parent class. + * + * @param string $parent the parent class + * + * @return array map of class => definition pairs of sub-classes + */ + public function getSubClasses(string $parent): array + { + $definitions = []; + foreach ($this->classes as $class => $classDefinition) { + if ($classDefinition['extends'] === $parent) { + $definitions[$class] = $classDefinition; + $definitions = array_merge($definitions, $this->getSubClasses($class)); + } + } + + return $definitions; + } + + /** + * Get a list of all super classes for the given class. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class parents + * + * @return array map of class => definition pairs of parent classes + */ + public function getSuperClasses(string $class, bool $direct = false): array + { + $classDefinition = $this->classes[$class] ?? null; + if (!$classDefinition || empty($classDefinition['extends'])) { + // unknown class, or no inheritance + return []; + } + + $extends = $classDefinition['extends']; + $extendsDefinition = $this->classes[$extends] ?? null; + if (!$extendsDefinition) { + return []; + } + + $parentDetails = [$extends => $extendsDefinition]; + + if ($direct) { + return $parentDetails; + } + + return array_merge($parentDetails, $this->getSuperClasses($extends)); + } + + /** + * Get the list of interfaces used by the given class or by classes which it extends. + * + * @param string $class the class name + * @param bool $direct flag to find only the actual class interfaces + * + * @return array map of class => definition pairs of interfaces + */ + public function getInterfacesOfClass(string $class, bool $direct = false): array + { + $classes = $direct ? [] : array_keys($this->getSuperClasses($class)); + // add self + $classes[] = $class; + + $definitions = []; + foreach ($classes as $clazz) { + if (isset($this->classes[$clazz])) { + $definition = $this->classes[$clazz]; + if (isset($definition['implements'])) { + foreach ($definition['implements'] as $interface) { + if (array_key_exists($interface, $this->interfaces)) { + $definitions[$interface] = $this->interfaces[$interface]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for interfaces extending other interfaces + $collect = function ($interfaces, $cb) use (&$definitions): void { + foreach ($interfaces as $interface) { + if (isset($this->interfaces[$interface]['extends'])) { + $cb($this->interfaces[$interface]['extends'], $cb); + foreach ($this->interfaces[$interface]['extends'] as $fqdn) { + $definitions[$fqdn] = $this->interfaces[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * Get the list of traits used by the given class/trait or by classes which it extends. + * + * @param string $source the source name + * @param bool $direct flag to find only the actual class traits + * + * @return array map of class => definition pairs of traits + */ + public function getTraitsOfClass(string $source, bool $direct = false): array + { + $sources = $direct ? [] : array_keys($this->getSuperClasses($source)); + // add self + $sources[] = $source; + + $definitions = []; + foreach ($sources as $sourze) { + if (isset($this->classes[$sourze]) || isset($this->traits[$sourze])) { + $definition = $this->classes[$sourze] ?? $this->traits[$sourze]; + if (isset($definition['traits'])) { + foreach ($definition['traits'] as $trait) { + if (array_key_exists($trait, $this->traits)) { + $definitions[$trait] = $this->traits[$trait]; + } + } + } + } + } + + if (!$direct) { + // expand recursively for traits using other traits + $collect = function ($traits, $cb) use (&$definitions): void { + foreach ($traits as $trait) { + if (isset($this->traits[$trait]['traits'])) { + $cb($this->traits[$trait]['traits'], $cb); + foreach ($this->traits[$trait]['traits'] as $fqdn) { + $definitions[$fqdn] = $this->traits[$fqdn]; + } + } + } + }; + $collect(array_keys($definitions), $collect); + } + + return $definitions; + } + + /** + * @param string|array $classes One ore more class names + * @param bool $strict in non-strict mode child classes are also detected + * + * @return OA\AbstractAnnotation[] + */ + public function getAnnotationsOfType($classes, bool $strict = false): array + { + $annotations = []; + if ($strict) { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if (get_class($annotation) === $class) { + $annotations[] = $annotation; + } + } + } + } else { + foreach ((array) $classes as $class) { + foreach ($this->annotations as $annotation) { + if ($annotation instanceof $class) { + $annotations[] = $annotation; + } + } + } + } + + return $annotations; + } + + /** + * @param string $fqdn the source class/interface/trait + */ + public function getSchemaForSource(string $fqdn): ?OA\Schema + { + $fqdn = '\\' . ltrim($fqdn, '\\'); + + foreach ([$this->classes, $this->interfaces, $this->traits, $this->enums] as $definitions) { + if (array_key_exists($fqdn, $definitions)) { + $definition = $definitions[$fqdn]; + if (is_iterable($definition['context']->annotations)) { + foreach (array_reverse($definition['context']->annotations) as $annotation) { + if (in_array(get_class($annotation), [OA\Schema::class, OAT\Schema::class]) && !$annotation->_context->is('generated')) { + return $annotation; + } + } + } + } + } + + return null; + } + + public function getContext(object $annotation): ?Context + { + if ($annotation instanceof OA\AbstractAnnotation) { + return $annotation->_context; + } + if ($this->annotations->contains($annotation) === false) { + throw new \Exception('Annotation not found'); + } + $context = $this->annotations[$annotation]; + if ($context instanceof Context) { + return $context; + } + + // Weird, did you use the addAnnotation/addAnnotations methods? + throw new \Exception('Annotation has no context'); + } + + /** + * Build an analysis with only the annotations that are merged into the OpenAPI annotation. + */ + public function merged(): Analysis + { + if ($this->openapi === null) { + throw new \Exception('No openapi target set. Run the MergeIntoOpenApi processor'); + } + $unmerged = $this->openapi->_unmerged; + $this->openapi->_unmerged = []; + $analysis = new Analysis([$this->openapi], $this->context); + $this->openapi->_unmerged = $unmerged; + + return $analysis; + } + + /** + * Analysis with only the annotations that not merged. + */ + public function unmerged(): Analysis + { + return $this->split()->unmerged; + } + + /** + * Split the annotation into two analysis. + * One with annotations that are merged and one with annotations that are not merged. + * + * @return object {merged: Analysis, unmerged: Analysis} + */ + public function split() + { + $result = new \stdClass(); + $result->merged = $this->merged(); + $result->unmerged = new Analysis([], $this->context); + foreach ($this->annotations as $annotation) { + if ($result->merged->annotations->contains($annotation) === false) { + $result->unmerged->annotations->attach($annotation, $this->annotations[$annotation]); + } + } + + return $result; + } + + /** + * Apply the processor(s). + * + * @param callable|callable[] $processors One or more processors + */ + public function process($processors = null): void + { + if (is_array($processors) === false && is_callable($processors)) { + $processors = [$processors]; + } + + foreach ($processors as $processor) { + $processor($this); + } + } + + public function validate(): bool + { + if ($this->openapi !== null) { + return $this->openapi->validate(); + } + + $this->context->logger->warning('No openapi target set. Run the MergeIntoOpenApi processor before validate()'); + + return false; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php new file mode 100644 index 0000000..de5407c --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/AbstractAnnotation.php @@ -0,0 +1,716 @@ + + */ + public $x = Generator::UNDEFINED; + + /** + * Arbitrary attachables for this annotation. + * These will be ignored but can be used for custom processing. + * + * @var array + */ + public $attachables = Generator::UNDEFINED; + + /** + * @var Context|null + */ + public $_context = null; + + /** + * Annotations that couldn't be merged by mapping or postprocessing. + * + * @var array + */ + public $_unmerged = []; + + /** + * The properties which are required by [the spec](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md). + * + * @var array + */ + public static $_required = []; + + /** + * Specify the type of the property. + * + * Examples: + * 'name' => 'string' // a string + * 'required' => 'boolean', // true or false + * 'tags' => '[string]', // array containing strings + * 'in' => ["query", "header", "path", "formData", "body"] // must be one on these + * 'oneOf' => [Schema::class] // array of schema objects. + * + * @var array> + */ + public static $_types = []; + + /** + * Declarative mapping of Annotation types to properties. + * Examples: + * Info::clas => 'info', // Set @OA\Info annotation as the info property. + * Parameter::clas => ['parameters'], // Append @OA\Parameter annotations the parameters array. + * PathItem::clas => ['paths', 'path'], // Append @OA\PathItem annotations the paths array and use path as key. + * + * @var array,string|array> + */ + public static $_nested = []; + + /** + * Reverse mapping of $_nested with the allowed parent annotations. + * + * @var array> + */ + public static $_parents = []; + + /** + * List of properties are blacklisted from the JSON output. + * + * @var array + */ + public static $_blacklist = ['_context', '_unmerged', '_analysis', 'attachables']; + + public function __construct(array $properties) + { + if (isset($properties['_context'])) { + $this->_context = $properties['_context']; + unset($properties['_context']); + } elseif (Generator::$context) { + $this->_context = Generator::$context; + } else { + $this->_context = Context::detect(1); + } + + if ($this->_context->is('annotations') === false) { + $this->_context->annotations = []; + } + + $this->_context->annotations[] = $this; + $nestedContext = new Context(['nested' => $this], $this->_context); + foreach ($properties as $property => $value) { + if (property_exists($this, $property)) { + $this->{$property} = $value; + if (is_array($value)) { + foreach ($value as $key => $annotation) { + if ($annotation instanceof AbstractAnnotation) { + $this->{$property}[$key] = $this->nested($annotation, $nestedContext); + } + } + } + } elseif ($property !== 'value') { + $this->{$property} = $value; + } elseif (is_array($value)) { + $annotations = []; + foreach ($value as $annotation) { + if ($annotation instanceof AbstractAnnotation) { + $annotations[] = $annotation; + } else { + $this->_context->logger->warning('Unexpected field in ' . $this->identity() . ' in ' . $this->_context); + } + } + $this->merge($annotations); + } elseif (is_object($value)) { + $this->merge([$value]); + } else { + if ($value !== Generator::UNDEFINED) { + $this->_context->logger->warning('Unexpected parameter "' . $property . '" in ' . $this->identity()); + } + } + } + + if ($this instanceof OpenApi) { + if ($this->_context->root()->version) { + // override via `Generator::setVersion()` + $this->openapi = $this->_context->root()->version; + } else { + $this->_context->root()->version = $this->openapi; + } + } + } + + public function __get(string $property) + { + $properties = get_object_vars($this); + $this->_context->logger->warning('Property "' . $property . '" doesn\'t exist in a ' . $this->identity() . ', existing properties: "' . implode('", "', array_keys($properties)) . '" in ' . $this->_context); + } + + /** + * @param mixed $value + */ + public function __set(string $property, $value): void + { + $fields = get_object_vars($this); + foreach (static::$_blacklist as $_property) { + unset($fields[$_property]); + } + $this->_context->logger->warning('Unexpected field "' . $property . '" for ' . $this->identity() . ', expecting "' . implode('", "', array_keys($fields)) . '" in ' . $this->_context); + $this->{$property} = $value; + } + + /** + * Merge given annotations to their mapped properties configured in static::$_nested. + * + * Annotations that couldn't be merged are added to the _unmerged array. + * + * @param AbstractAnnotation[] $annotations + * @param bool $ignore Ignore unmerged annotations + * + * @return AbstractAnnotation[] The unmerged annotations + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = []; + $nestedContext = new Context(['nested' => $this], $this->_context); + + foreach ($annotations as $annotation) { + $mapped = false; + if ($details = static::matchNested(get_class($annotation))) { + $property = $details->value; + if (is_array($property)) { + $property = $property[0]; + if (Generator::isDefault($this->{$property})) { + $this->{$property} = []; + } + $this->{$property}[] = $this->nested($annotation, $nestedContext); + $mapped = true; + } elseif (Generator::isDefault($this->{$property})) { + // ignore duplicate nested if only one expected + $this->{$property} = $this->nested($annotation, $nestedContext); + $mapped = true; + } + } + if (!$mapped) { + $unmerged[] = $annotation; + } + } + if (!$ignore) { + foreach ($unmerged as $annotation) { + $this->_unmerged[] = $this->nested($annotation, $nestedContext); + } + } + + return $unmerged; + } + + /** + * Merge the properties from the given object into this annotation. + * Prevents overwriting properties that are already configured. + * + * @param object $object + */ + public function mergeProperties($object): void + { + $defaultValues = get_class_vars(get_class($this)); + $currentValues = get_object_vars($this); + foreach ($object as $property => $value) { + if ($property === '_context') { + continue; + } + if ($currentValues[$property] === $defaultValues[$property]) { // Overwrite default values + $this->{$property} = $value; + continue; + } + if ($property === '_unmerged') { + $this->_unmerged = array_merge($this->_unmerged, $value); + continue; + } + if ($currentValues[$property] !== $value) { // New value is not the same? + if ($defaultValues[$property] === $value) { // but is the same as the default? + continue; // Keep current, no notice + } + $identity = method_exists($object, 'identity') ? $object->identity() : get_class($object); + $context1 = $this->_context; + $context2 = property_exists($object, '_context') ? $object->_context : 'unknown'; + if (is_object($this->{$property}) && $this->{$property} instanceof AbstractAnnotation) { + $context1 = $this->{$property}->_context; + } + $this->_context->logger->error('Multiple definitions for ' . $identity . '->' . $property . "\n Using: " . $context1 . "\n Skipping: " . $context2); + } + } + } + + /** + * Generate the documentation in YAML format. + */ + public function toYaml(?int $flags = null): string + { + if ($flags === null) { + $flags = Yaml::DUMP_OBJECT_AS_MAP ^ Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE; + } + + return Yaml::dump(json_decode($this->toJson(JSON_INVALID_UTF8_IGNORE)), 10, 2, $flags); + } + + /** + * Generate the documentation in JSON format. + */ + public function toJson(?int $flags = null): string + { + if ($flags === null) { + $flags = JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_IGNORE; + } + + return json_encode($this, $flags); + } + + public function __debugInfo() + { + $properties = []; + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $properties[$property] = $value; + } + } + + return $properties; + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = new \stdClass(); + + // Strip undefined values. + foreach (get_object_vars($this) as $property => $value) { + if (!Generator::isDefault($value)) { + $data->{$property} = $value; + } + } + + // Strip properties that are for internal (swagger-php) use. + foreach (static::$_blacklist as $property) { + unset($data->{$property}); + } + + // Correct empty array to empty objects. + foreach (static::$_types as $property => $type) { + if ($type === 'object' && is_array($data->{$property}) && empty($data->{$property})) { + $data->{$property} = new \stdClass(); + } + } + + // Inject vendor properties. + unset($data->x); + if (is_array($this->x)) { + foreach ($this->x as $property => $value) { + $prefixed = 'x-' . $property; + $data->{$prefixed} = $value; + } + } + + // Map nested keys + foreach (static::$_nested as $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->{$property})) { + continue; + } + $keyField = $nested[1]; + $object = new \stdClass(); + foreach ($this->{$property} as $key => $item) { + if (is_numeric($key) === false && is_array($item)) { + $object->{$key} = $item; + } else { + $key = $item->{$keyField}; + if (!Generator::isDefault($key) && empty($object->{$key})) { + if ($item instanceof \JsonSerializable) { + $object->{$key} = $item->jsonSerialize(); + } else { + $object->{$key} = $item; + } + unset($object->{$key}->{$keyField}); + } + } + } + $data->{$property} = $object; + } + + // $ref + if (isset($data->ref)) { + // Only specific https://github.com/OAI/OpenAPI-Specification/blob/3.1.0/versions/3.1.0.md#reference-object + $ref = ['$ref' => $data->ref]; + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + $defaultValues = get_class_vars(get_class($this)); + foreach (['summary', 'description'] as $prop) { + if (property_exists($this, $prop)) { + if ($this->{$prop} !== $defaultValues[$prop]) { + $ref[$prop] = $data->{$prop}; + } + } + } + } + $data = (object) $ref; + } + + if ($this->_context->version == OpenApi::VERSION_3_1_0) { + if (isset($data->nullable)) { + if (true === $data->nullable) { + $data->type = (array) $data->type; + $data->type[] = 'null'; + } + unset($data->nullable); + } + } + + return $data; + } + + /** + * Validate annotation tree, and log notices & warnings. + * + * @param array $stack the path of annotations above this annotation in the tree + * @param array $skip (prevent stack overflow, when traversing an infinite dependency graph) + * @param string $ref Current ref path? + * @param object $context a free-form context contains + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = true; + + // Report orphaned annotations + foreach ($this->_unmerged as $annotation) { + if (!is_object($annotation)) { + $this->_context->logger->warning('Unexpected type: "' . gettype($annotation) . '" in ' . $this->identity() . '->_unmerged, expecting a Annotation object'); + break; + } + + /** @var class-string $class */ + $class = get_class($annotation); + if ($details = static::matchNested($class)) { + $property = $details->value; + if (is_array($property)) { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . ' multiple found, skipped: ' . $annotation->_context); + } else { + $this->_context->logger->warning('Only one ' . Util::shorten(get_class($annotation)) . '() allowed for ' . $this->identity() . " multiple found in:\n Using: " . $this->{$property}->_context . "\n Skipped: " . $annotation->_context); + } + } elseif ($annotation instanceof AbstractAnnotation) { + $message = 'Unexpected ' . $annotation->identity(); + if ($class::$_parents) { + $message .= ', expected to be inside ' . implode(', ', Util::shorten($class::$_parents)); + } + $this->_context->logger->warning($message . ' in ' . $annotation->_context); + } + $valid = false; + } + + // Report conflicting key + foreach (static::$_nested as $annotationClass => $nested) { + if (is_string($nested) || count($nested) === 1) { + continue; + } + $property = $nested[0]; + if (Generator::isDefault($this->{$property})) { + continue; + } + $keys = []; + $keyField = $nested[1]; + foreach ($this->{$property} as $key => $item) { + if (is_array($item) && is_numeric($key) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' is an object literal, use nested ' . Util::shorten($annotationClass) . '() annotation(s) in ' . $this->_context); + $keys[$key] = $item; + } elseif (Generator::isDefault($item->{$keyField})) { + $this->_context->logger->error($item->identity() . ' is missing key-field: "' . $keyField . '" in ' . $item->_context); + } elseif (isset($keys[$item->{$keyField}])) { + $this->_context->logger->error('Multiple ' . $item->_identity([]) . ' with the same ' . $keyField . '="' . $item->{$keyField} . "\":\n " . $item->_context . "\n " . $keys[$item->{$keyField}]->_context); + } else { + $keys[$item->{$keyField}] = $item; + } + } + } + + if (property_exists($this, 'ref') && !Generator::isDefault($this->ref) && is_string($this->ref)) { + if (substr($this->ref, 0, 2) === '#/' && count($stack) > 0 && $stack[0] instanceof OpenApi) { + // Internal reference + try { + $stack[0]->ref($this->ref); + } catch (\Exception $e) { + $this->_context->logger->warning($e->getMessage() . ' for ' . $this->identity() . ' in ' . $this->_context, ['exception' => $e]); + } + } + } else { + // Report missing required fields (when not a $ref) + foreach (static::$_required as $property) { + if (Generator::isDefault($this->{$property})) { + $message = 'Missing required field "' . $property . '" for ' . $this->identity() . ' in ' . $this->_context; + foreach (static::$_nested as $class => $nested) { + $nestedProperty = is_array($nested) ? $nested[0] : $nested; + if ($property === $nestedProperty) { + if ($this instanceof OpenApi) { + $message = 'Required ' . Util::shorten($class) . '() not found'; + } elseif (is_array($nested)) { + $message = $this->identity() . ' requires at least one ' . Util::shorten($class) . '() in ' . $this->_context; + } else { + $message = $this->identity() . ' requires a ' . Util::shorten($class) . '() in ' . $this->_context; + } + break; + } + } + $this->_context->logger->warning($message); + } + } + } + + // Report invalid types + foreach (static::$_types as $property => $type) { + $value = $this->{$property}; + if (Generator::isDefault($value) || $value === null) { + continue; + } + if (is_string($type)) { + if ($this->validateType($type, $value) === false) { + $valid = false; + $this->_context->logger->warning($this->identity() . '->' . $property . ' is a "' . gettype($value) . '", expecting a "' . $type . '" in ' . $this->_context); + } + } elseif (is_array($type)) { // enum? + if (in_array($value, $type) === false) { + $this->_context->logger->warning($this->identity() . '->' . $property . ' "' . $value . '" is invalid, expecting "' . implode('", "', $type) . '" in ' . $this->_context); + } + } else { + throw new \Exception('Invalid ' . get_class($this) . '::$_types[' . $property . ']'); + } + } + $stack[] = $this; + + return self::_validate($this, $stack, $skip, $ref, $context) ? $valid : false; + } + + /** + * Recursively validate all annotation properties. + * + * @param array|object $fields + */ + private static function _validate($fields, array $stack, array $skip, string $baseRef, ?object $context): bool + { + $valid = true; + $blacklist = []; + if (is_object($fields)) { + if (in_array($fields, $skip, true)) { + return true; + } + $skip[] = $fields; + $blacklist = property_exists($fields, '_blacklist') ? $fields::$_blacklist : []; + } + + foreach ($fields as $field => $value) { + if ($value === null || is_scalar($value) || in_array($field, $blacklist)) { + continue; + } + $ref = $baseRef !== '' ? $baseRef . '/' . urlencode((string) $field) : urlencode((string) $field); + if (is_object($value)) { + if (method_exists($value, 'validate')) { + if (!$value->validate($stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (!self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } elseif (is_array($value) && !self::_validate($value, $stack, $skip, $ref, $context)) { + $valid = false; + } + } + + return $valid; + } + + /** + * Return a identity for easy debugging. + * Example: "@OA\Get(path="/pets")". + */ + public function identity(): string + { + $class = get_class($this); + $properties = []; + /** @var class-string $parent */ + foreach (static::$_parents as $parent) { + foreach ($parent::$_nested as $annotationClass => $entry) { + if ($annotationClass === $class && is_array($entry) && !Generator::isDefault($this->{$entry[1]})) { + $properties[] = $entry[1]; + break 2; + } + } + } + + return $this->_identity($properties); + } + + /** + * Find matching nested details. + * + * @param string $class the class to match + * + * @return null|object key/value object or `null` + */ + public static function matchNested(string $class) + { + if (array_key_exists($class, static::$_nested)) { + return (object) ['key' => $class, 'value' => static::$_nested[$class]]; + } + + $parent = $class; + // only consider the immediate OpenApi parent + while (0 !== strpos($parent, 'OpenApi\\Annotations\\') && $parent = get_parent_class($parent)) { + if ($kvp = static::matchNested($parent)) { + return $kvp; + } + } + + return null; + } + + /** + * Helper for generating the identity(). + */ + protected function _identity(array $properties): string + { + $fields = []; + foreach ($properties as $property) { + $value = $this->{$property}; + if ($value !== null && !Generator::isDefault($value)) { + $fields[] = $property . '=' . (is_string($value) ? '"' . $value . '"' : $value); + } + } + + return Util::shorten(get_class($this)) . '(' . implode(',', $fields) . ')'; + } + + /** + * Validates the matching of the property value to a annotation type. + * + * @param string $type The annotations property type + * @param mixed $value The property value + */ + private function validateType(string $type, $value): bool + { + if (substr($type, 0, 1) === '[' && substr($type, -1) === ']') { // Array of a specified type? + if ($this->validateType('array', $value) === false) { + return false; + } + $itemType = substr($type, 1, -1); + foreach ($value as $i => $item) { + if ($this->validateType($itemType, $item) === false) { + return false; + } + } + + return true; + } + + if (is_subclass_of($type, AbstractAnnotation::class)) { + $type = 'object'; + } + + return $this->validateDefaultTypes($type, $value); + } + + /** + * Validates default Open Api types. + * + * @param string $type The property type + * @param mixed $value The value to validate + */ + private function validateDefaultTypes(string $type, $value): bool + { + switch ($type) { + case 'string': + return is_string($value); + case 'boolean': + return is_bool($value); + case 'integer': + return is_int($value); + case 'number': + return is_numeric($value); + case 'object': + return is_object($value); + case 'array': + return $this->validateArrayType($value); + case 'scheme': + return in_array($value, ['http', 'https', 'ws', 'wss'], true); + default: + throw new \Exception('Invalid type "' . $type . '"'); + } + } + + /** + * Validate array type. + * + * @param mixed $value + */ + private function validateArrayType($value): bool + { + if (is_array($value) === false) { + return false; + } + $count = 0; + foreach ($value as $i => $item) { + // not a array, but a hash/map + if ($count !== $i) { + return false; + } + $count++; + } + + return true; + } + + /** + * Wrap the context with a reference to the annotation it is nested in. + * + * @param AbstractAnnotation $annotation + * + * @return AbstractAnnotation + */ + protected function nested(AbstractAnnotation $annotation, Context $nestedContext) + { + if (property_exists($annotation, '_context') && $annotation->_context === $this->_context) { + $annotation->_context = $nestedContext; + } + + return $annotation; + } + + protected function combine(...$args): array + { + $combined = []; + foreach ($args as $arg) { + if (is_array($arg)) { + $combined = array_merge($combined, $arg); + } else { + $combined[] = $arg; + } + } + + return array_filter($combined, function ($value) { + return !Generator::isDefault($value) && $value !== null; + }); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php new file mode 100644 index 0000000..0cdf211 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/AdditionalProperties.php @@ -0,0 +1,38 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Attachable.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Attachable.php new file mode 100644 index 0000000..7a7ab99 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Attachable.php @@ -0,0 +1,73 @@ +|null List of valid parent annotation classes. If `null`, the default nesting rules apply. + */ + public function allowedParents(): ?array + { + return null; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Components.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Components.php new file mode 100644 index 0000000..e09a3d4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Components.php @@ -0,0 +1,146 @@ + + */ + public $schemas = Generator::UNDEFINED; + + /** + * Reusable Responses. + * + * @var Response[] + */ + public $responses = Generator::UNDEFINED; + + /** + * Reusable Parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * Reusable Examples. + * + * @var Examples[] + */ + public $examples = Generator::UNDEFINED; + + /** + * Reusable Request Bodies. + * + * @var RequestBody[] + */ + public $requestBodies = Generator::UNDEFINED; + + /** + * Reusable Headers. + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * Reusable Security Schemes. + * + * @var SecurityScheme[] + */ + public $securitySchemes = Generator::UNDEFINED; + + /** + * Reusable Links. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * Reusable Callbacks. + * + * @var array + */ + public $callbacks = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Response::class => ['responses', 'response'], + Parameter::class => ['parameters', 'parameter'], + PathParameter::class => ['parameters', 'parameter'], + RequestBody::class => ['requestBodies', 'request'], + Examples::class => ['examples', 'example'], + Header::class => ['headers', 'header'], + SecurityScheme::class => ['securitySchemes', 'securityScheme'], + Link::class => ['links', 'link'], + Schema::class => ['schemas', 'schema'], + Attachable::class => ['attachables'], + ]; + + /** + * Generate a `#/components/...` reference for the given annotation. + * + * A `string` component value always assumes type `Schema`. + * + * @param AbstractAnnotation|string $component + */ + public static function ref($component, bool $encode = true): string + { + if ($component instanceof AbstractAnnotation) { + foreach (Components::$_nested as $type => $nested) { + // exclude attachables + if (2 == count($nested)) { + if ($component instanceof $type) { + $type = $nested[0]; + $name = $component->{$nested[1]}; + break; + } + } + } + } else { + $type = 'schemas'; + $name = $component; + } + + return self::COMPONENTS_PREFIX . $type . '/' . ($encode ? Util::refEncode((string) $name) : $name); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Contact.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Contact.php new file mode 100644 index 0000000..1075627 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Contact.php @@ -0,0 +1,63 @@ + 'string', + 'url' => 'string', + 'email' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Delete.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Delete.php new file mode 100644 index 0000000..8c3a54f --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Delete.php @@ -0,0 +1,25 @@ + 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Schema::class, + Property::class, + AdditionalProperties::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Examples.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Examples.php new file mode 100644 index 0000000..c38a24b --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Examples.php @@ -0,0 +1,96 @@ + 'string', + 'description' => 'string', + 'externalValue' => 'string', + ]; + + public static $_required = ['summary']; + + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php new file mode 100644 index 0000000..81bff45 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/ExternalDocumentation.php @@ -0,0 +1,76 @@ + 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + Tag::class, + Schema::class, + AdditionalProperties::class, + Property::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + Items::class, + JsonContent::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Flow.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Flow.php new file mode 100644 index 0000000..5409206 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Flow.php @@ -0,0 +1,106 @@ + ['implicit', 'password', 'authorizationCode', 'clientCredentials'], + 'refreshUrl' => 'string', + 'authorizationUrl' => 'string', + 'tokenUrl' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + SecurityScheme::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + if (is_array($this->scopes) && empty($this->scopes)) { + $this->scopes = new \stdClass(); + } + + return parent::jsonSerialize(); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Get.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Get.php new file mode 100644 index 0000000..c0ff442 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Get.php @@ -0,0 +1,25 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Info.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Info.php new file mode 100644 index 0000000..db535b3 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Info.php @@ -0,0 +1,98 @@ + 'string', + 'version' => 'string', + 'description' => 'string', + 'termsOfService' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Contact::class => 'contact', + License::class => 'license', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Items.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Items.php new file mode 100644 index 0000000..c46ec94 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Items.php @@ -0,0 +1,62 @@ + 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Property::class, + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + $parent = end($stack); + if ($parent instanceof Schema && $parent->type !== 'array') { + $this->_context->logger->warning('@OA\\Items() parent type must be "array" in ' . $this->_context); + $valid = false; + } + + // @todo Additional validation when used inside a Header or Parameter context. + + return $valid; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/JsonContent.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/JsonContent.php new file mode 100644 index 0000000..348f8d6 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/JsonContent.php @@ -0,0 +1,42 @@ +`'application/json'` will be generated. + * + * @Annotation + */ +class JsonContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/License.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/License.php new file mode 100644 index 0000000..ac04bc6 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/License.php @@ -0,0 +1,102 @@ + 'string', + 'identifier' => 'string', + 'url' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_required = ['name']; + + /** + * @inheritdoc + */ + public static $_parents = [ + Info::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + unset($data->identifier); + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if ($this->_context->isVersion(OpenApi::VERSION_3_1_0)) { + if (!Generator::isDefault($this->url) && $this->identifier !== Generator::UNDEFINED) { + $this->_context->logger->warning($this->identity() . ' url and identifier are mutually exclusive'); + $valid = false; + } + } + + return $valid; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Link.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Link.php new file mode 100644 index 0000000..b224a55 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Link.php @@ -0,0 +1,114 @@ +links array. + * + * @var string + */ + public $link = Generator::UNDEFINED; + + /** + * A relative or absolute reference to an OA operation. + * + * This field is mutually exclusive of the operationId field, and must point to an Operation object. + * + * Relative values may be used to locate an existing Operation object in the OpenAPI definition. + * + * @var string + */ + public $operationRef = Generator::UNDEFINED; + + /** + * The name of an existing, resolvable OA operation, as defined with a unique operationId. + * + * This field is mutually exclusive of the operationRef field. + * + * @var string + */ + public $operationId = Generator::UNDEFINED; + + /** + * A map representing parameters to pass to an operation as specified with operationId or identified via + * operationRef. + * + * The key is the parameter name to be used, whereas the value can be a constant or an expression to + * be evaluated and passed to the linked operation. + * The parameter name can be qualified using the parameter location [{in}.]{name} for operations + * that use the same parameter name in different locations (e.g. path.id). + * + * @var array + */ + public $parameters = Generator::UNDEFINED; + + /** + * A literal value or {expression} to use as a request body when calling the target operation. + * + * @var mixed + */ + public $requestBody = Generator::UNDEFINED; + + /** + * A description of the link. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * A server object to be used by the target operation. + * + * @var Server + */ + public $server = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Server::class => 'server', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Response::class, + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/MediaType.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/MediaType.php new file mode 100644 index 0000000..624fe69 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/MediaType.php @@ -0,0 +1,88 @@ +content array. + * + * @var string + */ + public $mediaType = Generator::UNDEFINED; + + /** + * The schema defining the type used for the request body. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example object should be in the correct format as specified by the media type. + * The example object is mutually exclusive of the examples object. + * + * Furthermore, if referencing a schema which contains an example, + * the example value shall override the example provided by the schema. + * + * @var mixed + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example object should match the media type and specified schema if present. + * The examples object is mutually exclusive of the example object. + * + * Furthermore, if referencing a schema which contains an example, + * the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map between a property name and its encoding information. + * + * The key, being the property name, must exist in the schema as a property. + * + * The encoding object shall only apply to requestBody objects when the media type is multipart or + * application/x-www-form-urlencoded. + * + * @var array + */ + public $encoding = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Response::class, + RequestBody::class, + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/OpenApi.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/OpenApi.php new file mode 100644 index 0000000..7477527 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/OpenApi.php @@ -0,0 +1,233 @@ +@Server objects, which provide connectivity information to a target server. + * + * If not provided, or is an empty array, the default value would be a Server Object with an url value of /. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * The available paths and operations for the API. + * + * @var PathItem[] + */ + public $paths = Generator::UNDEFINED; + + /** + * An element to hold various components for the specification. + * + * @var Components + */ + public $components = Generator::UNDEFINED; + + /** + * A declaration of which security mechanisms can be used across the API. + * + * The list of values includes alternative security requirement objects that can be used. + * Only one of the security requirement objects need to be satisfied to authorize a request. + * Individual operations can override this definition. + * To make security optional, an empty security requirement `({})` can be included in the array. + * + * @var array + */ + public $security = Generator::UNDEFINED; + + /** + * A list of tags used by the specification with additional metadata. + * + * The order of the tags can be used to reflect on their order by the parsing tools. + * Not all tags that are used by the Operation Object must be declared. + * The tags that are not declared may be organized randomly or based on the tools' logic. + * Each tag name in the list must be unique. + * + * @var Tag[] + */ + public $tags = Generator::UNDEFINED; + + /** + * Additional external documentation. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * @var Analysis + */ + public $_analysis = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['openapi', 'info', 'paths']; + + /** + * @inheritdoc + */ + public static $_nested = [ + Info::class => 'info', + Server::class => ['servers'], + PathItem::class => ['paths', 'path'], + Components::class => 'components', + Tag::class => ['tags'], + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_types = []; + + /** + * @inheritdoc + */ + public function validate(array $stack = null, array $skip = null, string $ref = '', $context = null): bool + { + if ($stack !== null || $skip !== null || $ref !== '') { + $this->_context->logger->warning('Nested validation for ' . $this->identity() . ' not allowed'); + + return false; + } + + if (!in_array($this->openapi, self::SUPPORTED_VERSIONS)) { + $this->_context->logger->warning('Unsupported OpenAPI version "' . $this->openapi . '". Allowed versions are: ' . implode(', ', self::SUPPORTED_VERSIONS)); + + return false; + } + + return parent::validate([], [], '#', new \stdClass()); + } + + /** + * Save the OpenAPI documentation to a file. + */ + public function saveAs(string $filename, string $format = 'auto'): void + { + if ($format === 'auto') { + $format = strtolower(substr($filename, -5)) === '.json' ? 'json' : 'yaml'; + } + + if (strtolower($format) === 'json') { + $content = $this->toJson(); + } else { + $content = $this->toYaml(); + } + + if (file_put_contents($filename, $content) === false) { + throw new \Exception('Failed to saveAs("' . $filename . '", "' . $format . '")'); + } + } + + /** + * Look up an annotation with a $ref url. + * + * @param string $ref The $ref value, for example: "#/components/schemas/Product" + */ + public function ref(string $ref) + { + if (substr($ref, 0, 2) !== '#/') { + // @todo Add support for external (http) refs? + throw new \Exception('Unsupported $ref "' . $ref . '", it should start with "#/"'); + } + + return $this->resolveRef($ref, '#/', $this, []); + } + + /** + * Recursive helper for ref(). + * + * @param array|AbstractAnnotation $container + */ + private static function resolveRef(string $ref, string $resolved, $container, array $mapping) + { + if ($ref === $resolved) { + return $container; + } + $path = substr($ref, strlen($resolved)); + $slash = strpos($path, '/'); + + $subpath = $slash === false ? $path : substr($path, 0, $slash); + $property = Util::refDecode($subpath); + $unresolved = $slash === false ? $resolved . $subpath : $resolved . $subpath . '/'; + + if (is_object($container)) { + if (property_exists($container, $property) === false) { + throw new \Exception('$ref "' . $ref . '" not found'); + } + if ($slash === false) { + return $container->{$property}; + } + $mapping = []; + if ($container instanceof AbstractAnnotation) { + foreach ($container::$_nested as $nestedClass => $nested) { + if (is_string($nested) === false && count($nested) === 2 && $nested[0] === $property) { + $mapping[$nestedClass] = $nested[1]; + } + } + } + + return self::resolveRef($ref, $unresolved, $container->{$property}, $mapping); + } elseif (is_array($container)) { + if (array_key_exists($property, $container)) { + return self::resolveRef($ref, $unresolved, $container[$property], []); + } + foreach ($mapping as $nestedClass => $keyField) { + foreach ($container as $key => $item) { + if (is_numeric($key) && is_object($item) && $item instanceof $nestedClass && (string) $item->{$keyField} === $property) { + return self::resolveRef($ref, $unresolved, $item, []); + } + } + } + } + + throw new \Exception('$ref "' . $unresolved . '" not found'); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Operation.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Operation.php new file mode 100644 index 0000000..e4d1e9a --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Operation.php @@ -0,0 +1,248 @@ + 'string', + 'method' => 'string', + 'tags' => '[string]', + 'summary' => 'string', + 'description' => 'string', + 'deprecated' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Response::class => ['responses', 'response'], + ExternalDocumentation::class => 'externalDocs', + Server::class => ['servers'], + RequestBody::class => 'requestBody', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + unset($data->method); + unset($data->path); + + // ensure security elements are object + if (isset($data->security) && is_array($data->security)) { + foreach ($data->security as $key => $scheme) { + $data->security[$key] = (object) $scheme; + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (!Generator::isDefault($this->responses)) { + foreach ($this->responses as $response) { + if (!Generator::isDefault($response->response) && $response->response !== 'default' && preg_match('/^([12345]{1}[0-9]{2})|([12345]{1}XX)$/', (string) $response->response) === 0) { + $this->_context->logger->warning('Invalid value "' . $response->response . '" for ' . $response->_identity([]) . '->response, expecting "default", a HTTP Status Code or HTTP Status Code range definition in ' . $response->_context); + $valid = false; + } + } + } + + if (is_object($context) && !Generator::isDefault($this->operationId)) { + if (!property_exists($context, 'operationIds')) { + $context->operationIds = []; + } + + if (in_array($this->operationId, $context->operationIds)) { + $this->_context->logger->warning('operationId must be unique. Duplicate value found: "' . $this->operationId . '"'); + $valid = false; + } + + $context->operationIds[] = $this->operationId; + } + + return $valid; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Options.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Options.php new file mode 100644 index 0000000..312505e --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Options.php @@ -0,0 +1,25 @@ +Components::parameters or PathItem::parameters array. + * + * @var string + */ + public $parameter = Generator::UNDEFINED; + + /** + * The (case-sensitive) name of the parameter. + * + * If in is "path", the name field must correspond to the associated path segment from the path field in the Paths Object. + * + * If in is "header" and the name field is "Accept", "Content-Type" or "Authorization", the parameter definition shall be ignored. + * For all other cases, the name corresponds to the parameter name used by the in property. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The location of the parameter. + * + * Possible values are "query", "header", "path" or "cookie". + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * A brief description of the parameter. + * + * This could contain examples of use. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Determines whether this parameter is mandatory. + * + * If the parameter location is "path", this property is required and its value must be true. + * Otherwise, the property may be included and its default value is false. + * + * @var bool + */ + public $required = Generator::UNDEFINED; + + /** + * Specifies that a parameter is deprecated and should be transitioned out of usage. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * Sets the ability to pass empty-valued parameters. + * + * This is valid only for query parameters and allows sending a parameter with an empty value. + * + * Default value is false. + * + * If style is used, and if behavior is n/a (cannot be serialized), the value of allowEmptyValue shall be ignored. + * + * @var bool + */ + public $allowEmptyValue = Generator::UNDEFINED; + + /** + * Describes how the parameter value will be serialized depending on the type of the parameter value. + * + * Default values (based on value of in): for query - form; for path - simple; for header - simple; for cookie - form. + * + * @var string + */ + public $style = Generator::UNDEFINED; + + /** + * When this is true, parameter values of type array or object generate separate parameters for each value of the array or key-value pair of the map. + * + * For other types of parameters this property has no effect. + * + * When style is form, the default value is true. + * For all other styles, the default value is false. + * + * @var bool + */ + public $explode = Generator::UNDEFINED; + + /** + * Determines whether the parameter value should allow reserved characters, as defined by RFC3986 :/?#[]@!$&'()*+,;= to be included without percent-encoding. + * + * This property only applies to parameters with an in value of query. + * + * The default value is false. + * + * @var bool + */ + public $allowReserved = Generator::UNDEFINED; + + /** + * The schema defining the type used for the parameter. + * + * @var Schema + */ + public $schema = Generator::UNDEFINED; + + /** + * Example of the media type. + * + * The example should match the specified schema and encoding properties if present. + * The example object is mutually exclusive of the examples object. + * Furthermore, if referencing a schema which contains an example, the example value shall override the example provided by the schema. + * To represent examples of media types that cannot naturally be represented in JSON or YAML, a string value can contain the example with escaping where necessary. + * + * @var mixed + */ + public $example = Generator::UNDEFINED; + + /** + * Examples of the media type. + * + * Each example should contain a value in the correct format as specified in the parameter encoding. + * The examples object is mutually exclusive of the example object. + * Furthermore, if referencing a schema which contains an example, the examples value shall override the example provided by the schema. + * + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * A map containing the representations for the parameter. + * + * The key is the media type and the value describes it. + * The map must only contain one entry. + * + * @var array|JsonContent|XmlContent|Attachable + */ + public $content = Generator::UNDEFINED; + + /** + * Path-style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.7) + */ + public $matrix = Generator::UNDEFINED; + + /** + * Label style parameters defined by RFC6570. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.5) + */ + public $label = Generator::UNDEFINED; + + /** + * Form style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv (when explode is false) or multi (when explode is true) value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.8) + */ + public $form = Generator::UNDEFINED; + + /** + * Simple style parameters defined by RFC6570. + * + * This option replaces collectionFormat with a csv value from OpenAPI 2.0. + * + * @see [RFC6570](https://tools.ietf.org/html/rfc6570#section-3.2.2) + * + * @var array + */ + public $simple = Generator::UNDEFINED; + + /** + * Space separated array values. + * + * This option replaces collectionFormat equal to ssv from OpenAPI 2.0. + * + * @var array + */ + public $spaceDelimited = Generator::UNDEFINED; + + /** + * Pipe separated array values. + * + * This option replaces collectionFormat equal to pipes from OpenAPI 2.0. + * + * @var array + */ + public $pipeDelimited = Generator::UNDEFINED; + + /** + * Provides a simple way of rendering nested objects using form parameters. + */ + public $deepObject = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['name', 'in']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'in' => ['query', 'header', 'path', 'cookie'], + 'description' => 'string', + 'style' => ['matrix', 'label', 'form', 'simple', 'spaceDelimited', 'pipeDelimited', 'deepObject'], + 'required' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Schema::class => 'schema', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + PathItem::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Delete::class, + Patch::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if (in_array($this, $skip, true)) { + return true; + } + + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->ref)) { + if ($this->in === 'body') { + if (Generator::isDefault($this->schema)) { + $this->_context->logger->warning('Field "schema" is required when ' . $this->identity() . ' is in "' . $this->in . '" in ' . $this->_context); + $valid = false; + } + } + } + + return $valid; + } + + /** + * @inheritdoc + */ + public function identity(): string + { + return parent::_identity(['name', 'in']); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Patch.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Patch.php new file mode 100644 index 0000000..7972f3b --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Patch.php @@ -0,0 +1,25 @@ +paths array). + * + * @var string + */ + public $path = Generator::UNDEFINED; + + /** + * An optional, string summary, intended to apply to all operations in this path. + * + * @var string + */ + public $summary = Generator::UNDEFINED; + + /** + * A definition of a GET operation on this path. + * + * @var Get + */ + public $get = Generator::UNDEFINED; + + /** + * A definition of a PUT operation on this path. + * + * @var Put + */ + public $put = Generator::UNDEFINED; + + /** + * A definition of a POST operation on this path. + * + * @var Post + */ + public $post = Generator::UNDEFINED; + + /** + * A definition of a DELETE operation on this path. + * + * @var Delete + */ + public $delete = Generator::UNDEFINED; + + /** + * A definition of a OPTIONS operation on this path. + * + * @var Options + */ + public $options = Generator::UNDEFINED; + + /** + * A definition of a HEAD operation on this path. + * + * @var Head + */ + public $head = Generator::UNDEFINED; + + /** + * A definition of a PATCH operation on this path. + * + * @var Patch + */ + public $patch = Generator::UNDEFINED; + + /** + * A definition of a TRACE operation on this path. + * + * @var Trace + */ + public $trace = Generator::UNDEFINED; + + /** + * An alternative server array to service all operations in this path. + * + * @var Server[] + */ + public $servers = Generator::UNDEFINED; + + /** + * A list of parameters that are applicable for all the operations described under this path. + * + * These parameters can be overridden at the operation level, but cannot be removed there. + * The list must not include duplicated parameters. + * A unique parameter is defined by a combination of a name and location. + * The list can use the Reference Object to link to parameters that are defined at the OpenAPI Object's components/parameters. + * + * @var Parameter[] + */ + public $parameters = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'path' => 'string', + 'summary' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Get::class => 'get', + Post::class => 'post', + Put::class => 'put', + Delete::class => 'delete', + Patch::class => 'patch', + Trace::class => 'trace', + Head::class => 'head', + Options::class => 'options', + Parameter::class => ['parameters'], + PathParameter::class => ['parameters'], + Server::class => ['servers'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/PathParameter.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/PathParameter.php new file mode 100644 index 0000000..9e600b4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/PathParameter.php @@ -0,0 +1,25 @@ +properties array. + * + * @var string + */ + public $property = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + JsonContent::class, + XmlContent::class, + Property::class, + Items::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Put.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Put.php new file mode 100644 index 0000000..a0a0303 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Put.php @@ -0,0 +1,25 @@ +|JsonContent|XmlContent|Attachable + */ + public $content = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + 'required' => 'boolean', + 'request' => 'string', + ]; + + public static $_parents = [ + Components::class, + Delete::class, + Get::class, + Head::class, + Operation::class, + Options::class, + Patch::class, + Post::class, + Trace::class, + Put::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Response.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Response.php new file mode 100644 index 0000000..73d91bc --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Response.php @@ -0,0 +1,128 @@ +responses array. + * + * A HTTP status code or default. + * + * @var string|int + */ + public $response = Generator::UNDEFINED; + + /** + * A short description of the response. + * + * CommonMark syntax may be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * Maps a header name to its definition. + * + * RFC7230 states header names are case insensitive. + * + * If a response header is defined with the name "Content-Type", it shall be ignored. + * + * @see [RFC7230](https://tools.ietf.org/html/rfc7230#page-22) + * + * @var Header[] + */ + public $headers = Generator::UNDEFINED; + + /** + * A map containing descriptions of potential response payloads. + * + * The key is a media type or media type range and the value describes it. + * + * For responses that match multiple keys, only the most specific key is applicable; + * e.g. text/plain overrides text/*. + * + * @var MediaType|JsonContent|XmlContent|Attachable|array + */ + public $content = Generator::UNDEFINED; + + /** + * A map of operations links that can be followed from the response. + * + * The key of the map is a short name for the link, following the naming constraints of the names for Component + * Objects. + * + * @var Link[] + */ + public $links = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + MediaType::class => ['content', 'mediaType'], + Header::class => ['headers', 'header'], + Link::class => ['links', 'link'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Operation::class, + Get::class, + Post::class, + Put::class, + Patch::class, + Delete::class, + Head::class, + Options::class, + Trace::class, + ]; + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + $valid = parent::validate($stack, $skip, $ref, $context); + + if (Generator::isDefault($this->description) && Generator::isDefault($this->ref)) { + $this->_context->logger->warning($this->identity() . ' One of description or ref is required'); + $valid = false; + } + + return $valid; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Schema.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Schema.php new file mode 100644 index 0000000..fc3c908 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Schema.php @@ -0,0 +1,444 @@ +schemas array. + * + * @var string + */ + public $schema = Generator::UNDEFINED; + + /** + * Can be used to decorate a user interface with information about the data produced by this user interface. + * + * Preferably short; use description for more details. + * + * @var string + */ + public $title = Generator::UNDEFINED; + + /** + * A description will provide explanation about the purpose of the instance described by this schema. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to, the + * value of this property. + * + * @var int + */ + public $maxProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to, + * the value of this property. + * + * @var int + */ + public $minProperties = Generator::UNDEFINED; + + /** + * An object instance is valid against this property if its property set contains all elements in this property's + * array value. + * + * @var string[] + */ + public $required = Generator::UNDEFINED; + + /** + * @var Property[] + */ + public $properties = Generator::UNDEFINED; + + /** + * The type of the schema/property. The value MUST be one of "string", "number", "integer", "boolean", "array" or + * "object". + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * The extending format for the previously mentioned type. See Data Type Formats for further details. + * + * @var string + */ + public $format = Generator::UNDEFINED; + + /** + * Required if type is "array". Describes the type of items in the array. + * + * @var Items + */ + public $items = Generator::UNDEFINED; + + /** + * Determines the format of the array if type array is used. + * Possible values are: + * - csv: comma separated values foo,bar. + * - ssv: space separated values foo bar. + * - tsv: tab separated values foo\tbar. + * - pipes: pipe separated values foo|bar. + * - multi: corresponds to multiple parameter instances instead of multiple values for a single instance foo=bar&foo=baz. + * This is valid only for parameters of type query or formData. + * Default value is csv. + * + * @var string + */ + public $collectionFormat = Generator::UNDEFINED; + + /** + * Sets a default value to the parameter. The type of the value depends on the defined type. + * + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor101) + * + * @var mixed + */ + public $default = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var int|float + */ + public $maximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor17) + * + * @var bool + */ + public $exclusiveMaximum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var int|float + */ + public $minimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor21) + * + * @var bool + */ + public $exclusiveMinimum = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor26) + * + * @var int + */ + public $maxLength = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor29) + * + * @var int + */ + public $minLength = Generator::UNDEFINED; + + /** + * A string instance is considered valid if the regular expression matches the instance successfully. + * + * @var string + */ + public $pattern = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor42) + * + * @var int + */ + public $maxItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor45) + * + * @var int + */ + public $minItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor49) + * + * @var bool + */ + public $uniqueItems = Generator::UNDEFINED; + + /** + * @see [JSON schema validation](http://json-schema.org/latest/json-schema-validation.html#anchor76) + * + * @var string[]|int[]|float[]|\UnitEnum[]|class-string + */ + public $enum = Generator::UNDEFINED; + + /** + * A numeric instance is valid against "multipleOf" if the result of the division of the instance by this + * property's value is an integer. + * + * @var int|float + */ + public $multipleOf = Generator::UNDEFINED; + + /** + * Adds support for polymorphism. + * + * The discriminator is an object name that is used to differentiate between other schemas which may satisfy the + * payload description. See Composition and Inheritance for more details. + * + * @var Discriminator + */ + public $discriminator = Generator::UNDEFINED; + + /** + * Declares the property as "read only". + * + * Relevant only for Schema "properties" definitions. + * + * This means that it may be sent as part of a response but should not be sent as part of the request. + * If the property is marked as readOnly being true and is in the required list, the required will take effect on + * the response only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $readOnly = Generator::UNDEFINED; + + /** + * Declares the property as "write only". + * + * Relevant only for Schema "properties" definitions. + * Therefore, it may be sent as part of a request but should not be sent as part of the response. + * If the property is marked as writeOnly being true and is in the required list, the required will take effect on + * the request only. A property must not be marked as both readOnly and writeOnly being true. Default value is + * false. + * + * @var bool + */ + public $writeOnly = Generator::UNDEFINED; + + /** + * This may be used only on properties schemas. + * + * It has no effect on root schemas. + * Adds additional metadata to describe the XML representation of this property. + * + * @var Xml + */ + public $xml = Generator::UNDEFINED; + + /** + * Additional external documentation for this schema. + * + * @var ExternalDocumentation + */ + public $externalDocs = Generator::UNDEFINED; + + /** + * A free-form property to include an example of an instance for this schema. + * + * To represent examples that cannot naturally be represented in JSON or YAML, a string value can be used to + * contain the example with escaping where necessary. + * + * @var mixed + */ + public $example = Generator::UNDEFINED; + + /** + * Allows sending a null value for the defined schema. + * Default value is false. + * + * @var bool + */ + public $nullable = Generator::UNDEFINED; + + /** + * Specifies that a schema is deprecated and should be transitioned out of usage. + * Default value is false. + * + * @var bool + */ + public $deprecated = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against all schemas + * defined by this property's value. + * + * @var array + */ + public $allOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against at least one + * schema defined by this property's value. + * + * @var array + */ + public $anyOf = Generator::UNDEFINED; + + /** + * An instance validates successfully against this property if it validates successfully against exactly one schema + * defined by this property's value. + * + * @var array + */ + public $oneOf = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.29. + */ + public $not = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#anchor64. + * + * @var bool|AdditionalProperties + */ + public $additionalProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.10. + */ + public $additionalItems = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.14. + */ + public $contains = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.19. + */ + public $patternProperties = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.21. + */ + public $dependencies = Generator::UNDEFINED; + + /** + * http://json-schema.org/latest/json-schema-validation.html#rfc.section.6.22. + */ + public $propertyNames = Generator::UNDEFINED; + + /** + * http://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.1.3. + * + * @var mixed + */ + public $const = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'title' => 'string', + 'description' => 'string', + 'required' => '[string]', + 'format' => 'string', + 'collectionFormat' => ['csv', 'ssv', 'tsv', 'pipes', 'multi'], + 'maximum' => 'number', + 'exclusiveMaximum' => 'boolean', + 'minimum' => 'number', + 'exclusiveMinimum' => 'boolean', + 'maxLength' => 'integer', + 'minLength' => 'integer', + 'pattern' => 'string', + 'maxItems' => 'integer', + 'minItems' => 'integer', + 'uniqueItems' => 'boolean', + 'multipleOf' => 'integer', + 'allOf' => '[' . Schema::class . ']', + 'oneOf' => '[' . Schema::class . ']', + 'anyOf' => '[' . Schema::class . ']', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + Parameter::class, + PathParameter::class, + MediaType::class, + Header::class, + ]; + + /** + * @inheritdoc + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + $data = parent::jsonSerialize(); + + if (isset($data->const)) { + if ($this->_context->isVersion(OpenApi::VERSION_3_0_0)) { + $data->enum = [$data->const]; + unset($data->const); + } + } + + return $data; + } + + /** + * @inheritdoc + */ + public function validate(array $stack = [], array $skip = [], string $ref = '', $context = null): bool + { + if ($this->type === 'array' && Generator::isDefault($this->items)) { + $this->_context->logger->warning('@OA\\Items() is required when ' . $this->identity() . ' has type "array" in ' . $this->_context); + + return false; + } + + return parent::validate($stack, $skip, $ref, $context); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php new file mode 100644 index 0000000..6564e1f --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/SecurityScheme.php @@ -0,0 +1,136 @@ +security array. + * + * @var string + */ + public $securityScheme = Generator::UNDEFINED; + + /** + * The type of the security scheme. + * + * @var string + */ + public $type = Generator::UNDEFINED; + + /** + * A short description for security scheme. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * The name of the header or query parameter to be used. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * Required The location of the API key. + * + * @var string + */ + public $in = Generator::UNDEFINED; + + /** + * The flow used by the OAuth2 security scheme. + * + * @var Flow[] + */ + public $flows = Generator::UNDEFINED; + + /** + * A hint to the client to identify how the bearer token is formatted. + * + * Bearer tokens are usually generated by an authorization server, so this information is primarily for documentation purposes. + * + * @var string + */ + public $bearerFormat = Generator::UNDEFINED; + + /** + * The name of the HTTP Authorization scheme. + * + * @see [RFC7235](https://tools.ietf.org/html/rfc7235#section-5.1) + * + * @var string + */ + public $scheme = Generator::UNDEFINED; + + /** + * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of a URL. + * + * @var string + */ + public $openIdConnectUrl = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_required = ['securityScheme', 'type']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'type' => ['http', 'apiKey', 'oauth2', 'openIdConnect'], + 'description' => 'string', + 'name' => 'string', + 'bearerFormat' => 'string', + 'in' => ['query', 'header', 'cookie'], + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Flow::class => ['flows', 'flow'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + Components::class, + ]; + + /** + * @inheritdoc + */ + public function merge(array $annotations, bool $ignore = false): array + { + $unmerged = parent::merge($annotations, $ignore); + + if ($this->type === 'oauth2') { + $this->name = Generator::UNDEFINED; + } + + return $unmerged; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Server.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Server.php new file mode 100644 index 0000000..df0cb0d --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Server.php @@ -0,0 +1,87 @@ + ['variables', 'serverVariable'], + Attachable::class => ['attachables'], + ]; + + /** + * @inheritdoc + */ + public static $_required = ['url']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'url' => 'string', + 'description' => 'string', + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php new file mode 100644 index 0000000..0dade38 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/ServerVariable.php @@ -0,0 +1,87 @@ +variables array. + * + * @var string + */ + public $serverVariable = Generator::UNDEFINED; + + /** + * An enumeration of values to be used if the substitution options are from a limited set. + * + * @var string[]|int[]|float[]|\UnitEnum[]|class-string + */ + public $enum = Generator::UNDEFINED; + + /** + * The default value to use for substitution, and to send, if an alternate value is not supplied. + * + * Unlike the Schema Object's default, this value must be provided by the consumer. + * + * @var string + */ + public $default = Generator::UNDEFINED; + + /** + * A map between a variable name and its value. + * + * The value is used for substitution in the server's URL template. + * + * @var array + */ + public $variables = Generator::UNDEFINED; + + /** + * An optional description for the server variable. + * + * CommonMark syntax MAY be used for rich text representation. + * + * @var string + */ + public $description = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = [ + Server::class, + ]; + + /** + * @inheritdoc + */ + public static $_required = ['default']; + + /** + * @inheritdoc + */ + public static $_types = [ + 'default' => 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Tag.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Tag.php new file mode 100644 index 0000000..670ac87 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Tag.php @@ -0,0 +1,66 @@ + 'string', + 'description' => 'string', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + OpenApi::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + ExternalDocumentation::class => 'externalDocs', + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/Trace.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Trace.php new file mode 100644 index 0000000..aac2820 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/Trace.php @@ -0,0 +1,25 @@ +true. + * + * If wrapped is false, it will be ignored. + * + * @var string + */ + public $name = Generator::UNDEFINED; + + /** + * The URL of the namespace definition. Value SHOULD be in the form of a URL. + * + * @var string + */ + public $namespace = Generator::UNDEFINED; + + /** + * The prefix to be used for the name. + * + * @var string + */ + public $prefix = Generator::UNDEFINED; + + /** + * Declares whether the property definition translates to an attribute instead of an element. + * + * Default value is false. + * + * @var bool + */ + public $attribute = Generator::UNDEFINED; + + /** + * MAY be used only for an array definition. + * + * Signifies whether the array is wrapped (for example <books><book/><book/></books>) + * or unwrapped (<book/><book/>). + * + * Default value is false. The definition takes effect only when defined alongside type being array (outside the items). + * + * @var bool + */ + public $wrapped = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_types = [ + 'name' => 'string', + 'namespace' => 'string', + 'prefix' => 'string', + 'attribute' => 'boolean', + 'wrapped' => 'boolean', + ]; + + /** + * @inheritdoc + */ + public static $_parents = [ + AdditionalProperties::class, + Schema::class, + Property::class, + Schema::class, + Items::class, + XmlContent::class, + ]; + + /** + * @inheritdoc + */ + public static $_nested = [ + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Annotations/XmlContent.php b/Sources/API/vendor/zircote/swagger-php/src/Annotations/XmlContent.php new file mode 100644 index 0000000..59f7651 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Annotations/XmlContent.php @@ -0,0 +1,43 @@ +`'application/xml'` will be generated. + * + * @Annotation + */ +class XmlContent extends Schema +{ + /** + * @var array + */ + public $examples = Generator::UNDEFINED; + + /** + * @inheritdoc + */ + public static $_parents = []; + + /** + * @inheritdoc + */ + public static $_nested = [ + Discriminator::class => 'discriminator', + Items::class => 'items', + Property::class => ['properties', 'property'], + ExternalDocumentation::class => 'externalDocs', + Xml::class => 'xml', + AdditionalProperties::class => 'additionalProperties', + Examples::class => ['examples', 'example'], + Attachable::class => ['attachables'], + ]; +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php new file mode 100644 index 0000000..5a56dce --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/AdditionalProperties.php @@ -0,0 +1,101 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Attachable.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Attachable.php new file mode 100644 index 0000000..0fc6fa7 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Attachable.php @@ -0,0 +1,16 @@ +|null $schemas + * @param Response[]|null $responses + * @param Parameter[]|null $parameters + * @param RequestBody[]|null $requestBodies + * @param Examples[]|null $examples + * @param Header[]|null $headers + * @param SecurityScheme[]|null $securitySchemes + * @param Link[]|null $links + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $schemas = null, + ?array $responses = null, + ?array $parameters = null, + ?array $requestBodies = null, + ?array $examples = null, + ?array $headers = null, + ?array $securitySchemes = null, + ?array $links = null, + ?array $callbacks = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($schemas, $responses, $parameters, $examples, $requestBodies, $headers, $securitySchemes, $links, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Contact.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Contact.php new file mode 100644 index 0000000..332979e --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Contact.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $url = null, + ?string $email = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'email' => $email ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Delete.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Delete.php new file mode 100644 index 0000000..d2f1c73 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Delete.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $propertyName = null, + ?array $mapping = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'propertyName' => $propertyName ?? Generator::UNDEFINED, + 'mapping' => $mapping ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Examples.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Examples.php new file mode 100644 index 0000000..9e1a9a0 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Examples.php @@ -0,0 +1,42 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $example = null, + ?string $summary = null, + ?string $description = null, + int|string|array|null $value = null, + ?string $externalValue = null, + string|object|null $ref = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'example' => $example ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'value' => $value ?? Generator::UNDEFINED, + 'externalValue' => $externalValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + ]); + if ($attachables) { + $this->merge($attachables); + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php new file mode 100644 index 0000000..f9bfa94 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/ExternalDocumentation.php @@ -0,0 +1,32 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $description = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'description' => $description ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Flow.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Flow.php new file mode 100644 index 0000000..80e6ebc --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Flow.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $authorizationUrl = null, + ?string $tokenUrl = null, + ?string $refreshUrl = null, + ?string $flow = null, + ?array $scopes = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'authorizationUrl' => $authorizationUrl ?? Generator::UNDEFINED, + 'tokenUrl' => $tokenUrl ?? Generator::UNDEFINED, + 'refreshUrl' => $refreshUrl ?? Generator::UNDEFINED, + 'flow' => $flow ?? Generator::UNDEFINED, + 'scopes' => $scopes ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Get.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Get.php new file mode 100644 index 0000000..81e5ad8 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Get.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $header = null, + ?string $description = null, + ?bool $required = null, + ?Schema $schema = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + // annotation4 + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'header' => $header ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables, $schema), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Info.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Info.php new file mode 100644 index 0000000..39348f5 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Info.php @@ -0,0 +1,38 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $version = null, + ?string $description = null, + ?string $title = null, + ?string $termsOfService = null, + ?Contact $contact = null, + ?License $license = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'version' => $version ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'termsOfService' => $termsOfService ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($contact, $license, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Items.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Items.php new file mode 100644 index 0000000..1c0dc28 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Items.php @@ -0,0 +1,105 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/JsonContent.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/JsonContent.php new file mode 100644 index 0000000..d9606ef --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/JsonContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param Property[] $properties + * @param int|float $maximum + * @param int|float $minimum + * @param string[]|int[]|float[]|\UnitEnum[]|class-string $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/License.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/License.php new file mode 100644 index 0000000..b929237 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/License.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $identifier = null, + ?string $url = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'identifier' => $identifier ?? Generator::UNDEFINED, + 'url' => $url ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Link.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Link.php new file mode 100644 index 0000000..4f90659 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Link.php @@ -0,0 +1,44 @@ + $parameters + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $link = null, + ?string $operationRef = null, + string|object|null $ref = null, + ?string $operationId = null, + ?array $parameters = null, + mixed $requestBody = null, + ?string $description = null, + ?Server $server = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'link' => $link ?? Generator::UNDEFINED, + 'operationRef' => $operationRef ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'parameters' => $parameters ?? Generator::UNDEFINED, + 'requestBody' => $requestBody ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($server, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/MediaType.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/MediaType.php new file mode 100644 index 0000000..4f307d4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/MediaType.php @@ -0,0 +1,38 @@ + $examples + * @param array $encoding + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $mediaType = null, + ?Schema $schema = null, + mixed $example = Generator::UNDEFINED, + ?array $examples = null, + ?array $encoding = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'mediaType' => $mediaType ?? Generator::UNDEFINED, + 'example' => $example, + 'encoding' => $encoding ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/OpenApi.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/OpenApi.php new file mode 100644 index 0000000..ce625e2 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/OpenApi.php @@ -0,0 +1,41 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string $openapi = self::DEFAULT_VERSION, + ?Info $info = null, + ?array $servers = null, + ?array $security = null, + ?array $tags = null, + ?ExternalDocumentation $externalDocs = null, + ?array $paths = null, + ?Components $components = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'openapi' => $openapi, + 'security' => $security ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($info, $servers, $tags, $externalDocs, $paths, $components, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php new file mode 100644 index 0000000..40d26fe --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/OperationTrait.php @@ -0,0 +1,54 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $operationId = null, + ?string $description = null, + ?string $summary = null, + ?array $security = null, + ?array $servers = null, + ?RequestBody $requestBody = null, + ?array $tags = null, + ?array $parameters = null, + ?array $responses = null, + ?array $callbacks = null, + ?ExternalDocumentation $externalDocs = null, + ?bool $deprecated = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'operationId' => $operationId ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'security' => $security ?? Generator::UNDEFINED, + 'servers' => $servers ?? Generator::UNDEFINED, + 'tags' => $tags ?? Generator::UNDEFINED, + 'callbacks' => $callbacks ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($requestBody, $responses, $parameters, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Options.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Options.php new file mode 100644 index 0000000..175b962 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Options.php @@ -0,0 +1,13 @@ + $examples + * @param array|JsonContent|XmlContent|Attachable|null $content + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $parameter = null, + ?string $name = null, + ?string $description = null, + ?string $in = null, + ?bool $required = null, + ?bool $deprecated = null, + ?bool $allowEmptyValue = null, + string|object|null $ref = null, + ?Schema $schema = null, + mixed $example = Generator::UNDEFINED, + ?array $examples = null, + array|JsonContent|XmlContent|Attachable|null $content = null, + ?string $style = null, + ?bool $explode = null, + ?bool $allowReserved = null, + ?array $spaceDelimited = null, + ?array $pipeDelimited = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'parameter' => $parameter ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'in' => Generator::isDefault($this->in) ? $in : $this->in, + 'required' => $required ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allowEmptyValue' => $allowEmptyValue ?? Generator::UNDEFINED, + 'ref' => $ref ?? Generator::UNDEFINED, + 'example' => $example, + 'style' => $style ?? Generator::UNDEFINED, + 'explode' => $explode ?? Generator::UNDEFINED, + 'allowReserved' => $allowReserved ?? Generator::UNDEFINED, + 'spaceDelimited' => $spaceDelimited ?? Generator::UNDEFINED, + 'pipeDelimited' => $pipeDelimited ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($schema, $examples, $content, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Patch.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Patch.php new file mode 100644 index 0000000..1a0a3c8 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Patch.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $path = null, + ?string $summary = null, + ?array $servers = null, + ?array $parameters = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'path' => $path ?? Generator::UNDEFINED, + 'summary' => $summary ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($servers, $parameters, $attachables), + ]); + } +} + +// Missing parameters: get, put, post, delete, options, head, patch, trace, parameters diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/PathParameter.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/PathParameter.php new file mode 100644 index 0000000..70ccfd6 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/PathParameter.php @@ -0,0 +1,13 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $property = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'property' => $property ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Put.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Put.php new file mode 100644 index 0000000..2133102 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Put.php @@ -0,0 +1,13 @@ +|JsonContent|XmlContent|Attachable|null $content + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $request = null, + ?string $description = null, + ?bool $required = null, + array|JsonContent|XmlContent|Attachable|null $content = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'request' => $request ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($content, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Response.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Response.php new file mode 100644 index 0000000..996a697 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Response.php @@ -0,0 +1,41 @@ + $content + * @param Link[] $links + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + int|string $response = null, + ?string $description = null, + ?array $headers = null, + MediaType|JsonContent|XmlContent|Attachable|array|null $content = null, + ?array $links = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'response' => $response ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($headers, $content, $links, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Schema.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Schema.php new file mode 100644 index 0000000..6426f00 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Schema.php @@ -0,0 +1,106 @@ + $allOf + * @param array $anyOf + * @param array $oneOf + * @param mixed $const + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + $const = Generator::UNDEFINED, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + 'const' => $const, + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php new file mode 100644 index 0000000..f1d8bec --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/SecurityScheme.php @@ -0,0 +1,48 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + string|object|null $ref = null, + ?string $securityScheme = null, + ?string $type = null, + ?string $description = null, + ?string $name = null, + ?string $in = null, + ?string $bearerFormat = null, + ?string $scheme = null, + ?string $openIdConnectUrl = null, + ?array $flows = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'ref' => $ref ?? Generator::UNDEFINED, + 'securityScheme' => $securityScheme ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'name' => $name ?? Generator::UNDEFINED, + 'in' => $in ?? Generator::UNDEFINED, + 'bearerFormat' => $bearerFormat ?? Generator::UNDEFINED, + 'scheme' => $scheme ?? Generator::UNDEFINED, + 'openIdConnectUrl' => $openIdConnectUrl ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($flows, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Server.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Server.php new file mode 100644 index 0000000..337d595 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Server.php @@ -0,0 +1,34 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $url = null, + ?string $description = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'url' => $url ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($variables, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php new file mode 100644 index 0000000..3b096d4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/ServerVariable.php @@ -0,0 +1,39 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $serverVariable = null, + ?string $description = null, + ?string $default = null, + array|string|null $enum = null, + ?array $variables = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'serverVariable' => $serverVariable ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'default' => $default ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'variables' => $variables ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Tag.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Tag.php new file mode 100644 index 0000000..8ef0ef1 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Tag.php @@ -0,0 +1,33 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $description = null, + ?ExternalDocumentation $externalDocs = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/Trace.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Trace.php new file mode 100644 index 0000000..aff7fe7 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/Trace.php @@ -0,0 +1,13 @@ +|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?string $name = null, + ?string $namespace = null, + ?string $prefix = null, + ?bool $attribute = null, + ?bool $wrapped = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'name' => $name ?? Generator::UNDEFINED, + 'namespace' => $namespace ?? Generator::UNDEFINED, + 'prefix' => $prefix ?? Generator::UNDEFINED, + 'attribute' => $attribute ?? Generator::UNDEFINED, + 'wrapped' => $wrapped ?? Generator::UNDEFINED, + 'x' => $x ?? Generator::UNDEFINED, + 'value' => $this->combine($attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Attributes/XmlContent.php b/Sources/API/vendor/zircote/swagger-php/src/Attributes/XmlContent.php new file mode 100644 index 0000000..47a3083 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Attributes/XmlContent.php @@ -0,0 +1,108 @@ + $examples + * @param string[] $required + * @param int|float $maximum + * @param int|float $minimum + * @param Property[] $properties + * @param string[]|int[]|float[]|\UnitEnum[]|class-string $enum + * @param array $allOf + * @param array $anyOf + * @param array $oneOf + * @param array|null $x + * @param Attachable[]|null $attachables + */ + public function __construct( + ?array $examples = null, + // schema + string|object|null $ref = null, + ?string $schema = null, + ?string $title = null, + ?string $description = null, + ?array $required = null, + ?array $properties = null, + ?string $type = null, + ?string $format = null, + ?Items $items = null, + ?string $collectionFormat = null, + mixed $default = Generator::UNDEFINED, + $maximum = null, + ?bool $exclusiveMaximum = null, + $minimum = null, + ?bool $exclusiveMinimum = null, + ?int $maxLength = null, + ?int $minLength = null, + ?int $maxItems = null, + ?int $minItems = null, + ?bool $uniqueItems = null, + ?string $pattern = null, + array|string|null $enum = null, + ?Discriminator $discriminator = null, + ?bool $readOnly = null, + ?bool $writeOnly = null, + ?Xml $xml = null, + ?ExternalDocumentation $externalDocs = null, + mixed $example = Generator::UNDEFINED, + ?bool $nullable = null, + ?bool $deprecated = null, + ?array $allOf = null, + ?array $anyOf = null, + ?array $oneOf = null, + AdditionalProperties|bool|null $additionalProperties = null, + // annotation + ?array $x = null, + ?array $attachables = null + ) { + parent::__construct([ + 'examples' => $examples ?? Generator::UNDEFINED, + // schema + 'ref' => $ref ?? Generator::UNDEFINED, + 'schema' => $schema ?? Generator::UNDEFINED, + 'title' => $title ?? Generator::UNDEFINED, + 'description' => $description ?? Generator::UNDEFINED, + 'required' => $required ?? Generator::UNDEFINED, + 'properties' => $properties ?? Generator::UNDEFINED, + 'type' => $type ?? Generator::UNDEFINED, + 'format' => $format ?? Generator::UNDEFINED, + 'collectionFormat' => $collectionFormat ?? Generator::UNDEFINED, + 'default' => $default, + 'maximum' => $maximum ?? Generator::UNDEFINED, + 'exclusiveMaximum' => $exclusiveMaximum ?? Generator::UNDEFINED, + 'minimum' => $minimum ?? Generator::UNDEFINED, + 'exclusiveMinimum' => $exclusiveMinimum ?? Generator::UNDEFINED, + 'maxLength' => $maxLength ?? Generator::UNDEFINED, + 'minLength' => $minLength ?? Generator::UNDEFINED, + 'maxItems' => $maxItems ?? Generator::UNDEFINED, + 'minItems' => $minItems ?? Generator::UNDEFINED, + 'uniqueItems' => $uniqueItems ?? Generator::UNDEFINED, + 'pattern' => $pattern ?? Generator::UNDEFINED, + 'enum' => $enum ?? Generator::UNDEFINED, + 'readOnly' => $readOnly ?? Generator::UNDEFINED, + 'writeOnly' => $writeOnly ?? Generator::UNDEFINED, + 'xml' => $xml ?? Generator::UNDEFINED, + 'example' => $example, + 'nullable' => $nullable ?? Generator::UNDEFINED, + 'deprecated' => $deprecated ?? Generator::UNDEFINED, + 'allOf' => $allOf ?? Generator::UNDEFINED, + 'anyOf' => $anyOf ?? Generator::UNDEFINED, + 'oneOf' => $oneOf ?? Generator::UNDEFINED, + 'additionalProperties' => $additionalProperties ?? Generator::UNDEFINED, + // annotation + 'x' => $x ?? Generator::UNDEFINED, + 'attachables' => $attachables ?? Generator::UNDEFINED, + 'value' => $this->combine($items, $discriminator, $externalDocs, $attachables), + ]); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Context.php b/Sources/API/vendor/zircote/swagger-php/src/Context.php new file mode 100644 index 0000000..58bdb49 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Context.php @@ -0,0 +1,274 @@ +parent); + } + + public function __construct(array $properties = [], ?Context $parent = null) + { + foreach ($properties as $property => $value) { + $this->{$property} = $value; + } + $this->parent = $parent; + + $this->logger = $this->logger ?: new DefaultLogger(); + } + + /** + * Check if a property is set directly on this context and not its parent context. + * + * Example: $c->is('method') or $c->is('class') + */ + public function is(string $property): bool + { + return property_exists($this, $property); + } + + /** + * Check if a property is NOT set directly on this context and its parent context. + * + * Example: $c->not('method') or $c->not('class') + */ + public function not(string $property): bool + { + return $this->is($property) === false; + } + + /** + * Return the context containing the specified property. + */ + public function with(string $property): ?Context + { + if ($this->is($property)) { + return $this; + } + if ($this->parent !== null) { + return $this->parent->with($property); + } + + return null; + } + + /** + * Get the root context. + */ + public function root(): Context + { + if ($this->parent !== null) { + return $this->parent->root(); + } + + return $this; + } + + /** + * Check if one of the given version numbers matches the current OpenAPI version. + * + * @param string|array $versions One or more version numbers + */ + public function isVersion($versions): bool + { + if (!$this->version) { + throw new \RuntimeException('Version is only available reliably for validation and serialization'); + } + + $versions = (array) $versions; + $currentVersion = $this->version ?: OA\OpenApi::DEFAULT_VERSION; + + return in_array($currentVersion, $versions); + } + + /** + * Export location for debugging. + * + * @return string Example: "file1.php on line 12" + */ + public function getDebugLocation(): string + { + $location = ''; + if ($this->class && ($this->method || $this->property)) { + $location .= $this->fullyQualifiedName($this->class); + if ($this->method) { + $location .= ($this->static ? '::' : '->') . $this->method . '()'; + } elseif ($this->property) { + $location .= ($this->static ? '::$' : '->') . $this->property; + } + } + if ($this->filename) { + if ($location !== '') { + $location .= ' in '; + } + $location .= $this->filename; + } + if ($this->line) { + if ($location !== '') { + $location .= ' on'; + } + $location .= ' line ' . $this->line; + if ($this->character) { + $location .= ':' . $this->character; + } + } + + return $location; + } + + /** + * Traverse the context tree to get the property value. + */ + public function __get(string $property) + { + if ($this->parent !== null) { + return $this->parent->{$property}; + } + + return null; + } + + public function __toString() + { + return $this->getDebugLocation(); + } + + public function __debugInfo() + { + return ['-' => $this->getDebugLocation()]; + } + + /** + * Create a Context based on the debug_backtrace. + * + * @deprecated + */ + public static function detect(int $index = 0): Context + { + // trigger_deprecation('zircote/swagger-php', '4.0', 'Context detecting is deprecated'); + + $context = new Context(); + $backtrace = debug_backtrace(); + $position = $backtrace[$index]; + if (isset($position['file'])) { + $context->filename = $position['file']; + } + if (isset($position['line'])) { + $context->line = $position['line']; + } + $caller = $backtrace[$index + 1] ?? null; + if (isset($caller['function'])) { + $context->method = $caller['function']; + if (isset($caller['type']) && $caller['type'] === '::') { + $context->static = true; + } + } + if (isset($caller['class'])) { + $fqn = explode('\\', $caller['class']); + $context->class = array_pop($fqn); + if (count($fqn)) { + $context->namespace = implode('\\', $fqn); + } + } + + // @todo extract namespaces and use statements + return $context; + } + + /** + * Resolve the fully qualified name. + */ + public function fullyQualifiedName(?string $source): string + { + if ($source === null) { + return ''; + } + + if ($this->namespace) { + $namespace = str_replace('\\\\', '\\', '\\' . $this->namespace . '\\'); + } else { + // global namespace + $namespace = '\\'; + } + + $thisSource = $this->class ?? $this->interface ?? $this->trait; + if ($thisSource && strcasecmp($source, $thisSource) === 0) { + return $namespace . $thisSource; + } + $pos = strpos($source, '\\'); + if ($pos !== false) { + if ($pos === 0) { + // Fully qualified name (\Foo\Bar) + return $source; + } + // Qualified name (Foo\Bar) + if ($this->uses) { + foreach ($this->uses as $alias => $aliasedNamespace) { + $alias .= '\\'; + if (strcasecmp(substr($source, 0, strlen($alias)), $alias) === 0) { + // Aliased namespace (use \Long\Namespace as Foo) + return '\\' . $aliasedNamespace . substr($source, strlen($alias) - 1); + } + } + } + } elseif ($this->uses) { + // Unqualified name (Foo) + foreach ($this->uses as $alias => $aliasedNamespace) { + if (strcasecmp($alias, $source) === 0) { + return '\\' . $aliasedNamespace; + } + } + } + + return $namespace . $source; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Generator.php b/Sources/API/vendor/zircote/swagger-php/src/Generator.php new file mode 100644 index 0000000..d37116e --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Generator.php @@ -0,0 +1,475 @@ + */ + public const DEFAULT_ALIASES = ['oa' => 'OpenApi\\Annotations']; + /** @var array */ + public const DEFAULT_NAMESPACES = ['OpenApi\\Annotations\\']; + + /** @var array Map of namespace aliases to be supported by doctrine. */ + protected $aliases; + + /** @var array|null List of annotation namespaces to be autoloaded by doctrine. */ + protected $namespaces; + + /** @var AnalyserInterface|null The configured analyzer. */ + protected $analyser; + + /** @var array */ + protected $config = []; + + /** @var callable[]|null List of configured processors. */ + protected $processors = null; + + /** @var LoggerInterface|null PSR logger. */ + protected $logger = null; + + /** + * OpenApi version override. + * + * If set, it will override the version set in the `OpenApi` annotation. + * + * Due to the order of processing any conditional code using this (via `Context::$version`) + * must come only after the analysis is finished. + * + * @var string|null + */ + protected $version = null; + + private $configStack; + + public function __construct(?LoggerInterface $logger = null) + { + $this->logger = $logger; + + $this->setAliases(self::DEFAULT_ALIASES); + $this->setNamespaces(self::DEFAULT_NAMESPACES); + + // kinda config stack to stay BC... + $this->configStack = new class() { + protected $generator; + + public function push(Generator $generator): void + { + $this->generator = $generator; + if (class_exists(AnnotationRegistry::class, true)) { + // keeping track of &this->generator allows to 'disable' the loader after we are done; + // no unload, unfortunately :/ + $gref = &$this->generator; + AnnotationRegistry::registerLoader( + function (string $class) use (&$gref): bool { + if ($gref) { + foreach ($gref->getNamespaces() as $namespace) { + if (strtolower(substr($class, 0, strlen($namespace))) === strtolower($namespace)) { + $loaded = class_exists($class); + if (!$loaded && $namespace === 'OpenApi\\Annotations\\') { + if (in_array(strtolower(substr($class, 20)), ['definition', 'path'])) { + // Detected an 2.x annotation? + throw new \Exception('The annotation @SWG\\' . substr($class, 20) . '() is deprecated. Found in ' . Generator::$context . "\nFor more information read the migration guide: https://github.com/zircote/swagger-php/blob/master/docs/Migrating-to-v3.md"); + } + } + + return $loaded; + } + } + } + + return false; + } + ); + } + } + + public function pop(): void + { + $this->generator = null; + } + }; + } + + /** + * @param mixed $value + */ + public static function isDefault($value): bool + { + return $value === Generator::UNDEFINED; + } + + /** + * @return array + */ + public function getAliases(): array + { + return $this->aliases; + } + + public function addAlias(string $alias, string $namespace): Generator + { + $this->aliases[$alias] = $namespace; + + return $this; + } + + public function setAliases(array $aliases): Generator + { + $this->aliases = $aliases; + + return $this; + } + + /** + * @return array|null + */ + public function getNamespaces(): ?array + { + return $this->namespaces; + } + + public function addNamespace(string $namespace): Generator + { + $namespaces = (array) $this->getNamespaces(); + $namespaces[] = $namespace; + + return $this->setNamespaces(array_unique($namespaces)); + } + + public function setNamespaces(?array $namespaces): Generator + { + $this->namespaces = $namespaces; + + return $this; + } + + public function getAnalyser(): AnalyserInterface + { + $this->analyser = $this->analyser ?: new ReflectionAnalyser([new DocBlockAnnotationFactory(), new AttributeAnnotationFactory()]); + $this->analyser->setGenerator($this); + + return $this->analyser; + } + + public function setAnalyser(?AnalyserInterface $analyser): Generator + { + $this->analyser = $analyser; + + return $this; + } + + public function getDefaultConfig(): array + { + return [ + 'operationId' => [ + 'hash' => true, + ], + ]; + } + + public function getConfig(): array + { + return $this->config + $this->getDefaultConfig(); + } + + protected function normaliseConfig(array $config): array + { + $normalised = []; + foreach ($config as $key => $value) { + if (is_numeric($key)) { + $token = explode('=', $value); + if (2 == count($token)) { + // 'operationId.hash=false' + [$key, $value] = $token; + } + } + + if (in_array($value, ['true', 'false'])) { + $value = 'true' == $value; + } + + $token = explode('.', $key); + if (2 == count($token)) { + // 'operationId.hash' => false + $normalised[$token[0]][$token[1]] = $value; + } else { + $normalised[$key] = $value; + } + } + + return $normalised; + } + + /** + * Set generator and/or processor config. + * + * @param array $config + */ + public function setConfig(array $config): Generator + { + $this->config = $this->normaliseConfig($config) + $this->config; + + return $this; + } + + /** + * @return callable[] + */ + public function getProcessors(): array + { + if (null === $this->processors) { + $this->processors = [ + new Processors\DocBlockDescriptions(), + new Processors\MergeIntoOpenApi(), + new Processors\MergeIntoComponents(), + new Processors\ExpandClasses(), + new Processors\ExpandInterfaces(), + new Processors\ExpandTraits(), + new Processors\ExpandEnums(), + new Processors\AugmentSchemas(), + new Processors\AugmentProperties(), + new Processors\BuildPaths(), + new Processors\AugmentParameters(), + new Processors\AugmentRefs(), + new Processors\MergeJsonContent(), + new Processors\MergeXmlContent(), + new Processors\OperationId(), + new Processors\CleanUnmerged(), + ]; + } + + $config = $this->getConfig(); + foreach ($this->processors as $processor) { + $rc = new \ReflectionClass($processor); + + // apply config + $processorKey = lcfirst($rc->getShortName()); + if (array_key_exists($processorKey, $config)) { + foreach ($config[$processorKey] as $name => $value) { + $setter = 'set' . ucfirst($name); + if (method_exists($processor, $setter)) { + $processor->{$setter}($value); + } + } + } + } + + return $this->processors; + } + + /** + * @param null|callable[] $processors + */ + public function setProcessors(?array $processors): Generator + { + $this->processors = $processors; + + return $this; + } + + public function addProcessor(callable $processor): Generator + { + $processors = $this->getProcessors(); + $processors[] = $processor; + $this->setProcessors($processors); + + return $this; + } + + public function removeProcessor(callable $processor, bool $silent = false): Generator + { + $processors = $this->getProcessors(); + if (false === ($key = array_search($processor, $processors, true))) { + if ($silent) { + return $this; + } + throw new \InvalidArgumentException('Processor not found'); + } + unset($processors[$key]); + $this->setProcessors($processors); + + return $this; + } + + /** + * Update/replace an existing processor with a new one. + * + * @param callable $processor The new processor + * @param null|callable $matcher Optional matcher callable to identify the processor to replace. + * If none given, matching is based on the processors class. + */ + public function updateProcessor(callable $processor, ?callable $matcher = null): Generator + { + $matcher = $matcher ?: function ($other) use ($processor): bool { + $otherClass = get_class($other); + + return $processor instanceof $otherClass; + }; + + $processors = array_map(function ($other) use ($processor, $matcher) { + return $matcher($other) ? $processor : $other; + }, $this->getProcessors()); + $this->setProcessors($processors); + + return $this; + } + + public function getLogger(): ?LoggerInterface + { + return $this->logger ?: new DefaultLogger(); + } + + public function getVersion(): ?string + { + return $this->version; + } + + public function setVersion(?string $version): Generator + { + $this->version = $version; + + return $this; + } + + public static function scan(iterable $sources, array $options = []): ?OA\OpenApi + { + // merge with defaults + $config = $options + [ + 'aliases' => self::DEFAULT_ALIASES, + 'namespaces' => self::DEFAULT_NAMESPACES, + 'analyser' => null, + 'analysis' => null, + 'processors' => null, + 'logger' => null, + 'validate' => true, + 'version' => null, + ]; + + return (new Generator($config['logger'])) + ->setVersion($config['version']) + ->setAliases($config['aliases']) + ->setNamespaces($config['namespaces']) + ->setAnalyser($config['analyser']) + ->setProcessors($config['processors']) + ->generate($sources, $config['analysis'], $config['validate']); + } + + /** + * Run code in the context of this generator. + * + * @param callable $callable Callable in the form of + * `function(Generator $generator, Analysis $analysis, Context $context): mixed` + * + * @return mixed the result of the `callable` + */ + public function withContext(callable $callable) + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + return $callable($this, $analysis, $rootContext); + } finally { + $this->configStack->pop(); + } + } + + /** + * Generate OpenAPI spec by scanning the given source files. + * + * @param iterable $sources PHP source files to scan. + * Supported sources: + * * string - file / directory name + * * \SplFileInfo + * * \Symfony\Component\Finder\Finder + * @param null|Analysis $analysis custom analysis instance + * @param bool $validate flag to enable/disable validation of the returned spec + */ + public function generate(iterable $sources, ?Analysis $analysis = null, bool $validate = true): ?OA\OpenApi + { + $rootContext = new Context([ + 'version' => $this->getVersion(), + 'logger' => $this->getLogger(), + ]); + $analysis = $analysis ?: new Analysis([], $rootContext); + + $this->configStack->push($this); + try { + $this->scanSources($sources, $analysis, $rootContext); + + // post-processing + $analysis->process($this->getProcessors()); + + if ($analysis->openapi) { + $analysis->openapi->openapi = $this->version ?: $analysis->openapi->openapi; + $rootContext->version = $analysis->openapi->openapi; + } + + // validation + if ($validate) { + $analysis->validate(); + } + } finally { + $this->configStack->pop(); + } + + return $analysis->openapi; + } + + protected function scanSources(iterable $sources, Analysis $analysis, Context $rootContext): void + { + $analyser = $this->getAnalyser(); + + foreach ($sources as $source) { + if (is_iterable($source)) { + $this->scanSources($source, $analysis, $rootContext); + } else { + $resolvedSource = $source instanceof \SplFileInfo ? $source->getPathname() : realpath($source); + if (!$resolvedSource) { + $rootContext->logger->warning(sprintf('Skipping invalid source: %s', $source)); + continue; + } + if (is_dir($resolvedSource)) { + $this->scanSources(Util::finder($resolvedSource), $analysis, $rootContext); + } else { + $analysis->addAnalysis($analyser->fromFile($resolvedSource, $rootContext)); + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php b/Sources/API/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php new file mode 100644 index 0000000..064c251 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Loggers/ConsoleLogger.php @@ -0,0 +1,97 @@ +debug = $debug; + } + + public function loggedMessageAboveNotice(): bool + { + return $this->loggedMessageAboveNotice; + } + + /** + * @param string $level + * @param string|\Exception $message + * @param array $context additional details; supports custom `prefix` and `exception` + */ + public function log($level, $message, array $context = []): void + { + $prefix = ''; + $color = ''; + // level adjustments + switch ($level) { + case LogLevel::DEBUG: + if (!$this->debug) { + return; + } + // no break + case LogLevel::WARNING: + $prefix = $context['prefix'] ?? 'Warning: '; + $color = static::COLOR_WARNING; + break; + case LogLevel::ERROR: + $prefix = $context['prefix'] ?? 'Error: '; + $color = static::COLOR_ERROR; + break; + } + $stop = !empty($color) ? static::COLOR_STOP : ''; + + if (!in_array($level, self::LOG_LEVELS_UP_TO_NOTICE, true)) { + $this->loggedMessageAboveNotice = true; + } + + /** @var ?\Exception $exception */ + $exception = $context['exception'] ?? null; + if ($message instanceof \Exception) { + $exception = $message; + $message = $exception->getMessage(); + } + + $logLine = sprintf('%s%s%s%s', $color, $prefix, $message, $stop); + error_log($logLine); + + if ($this->debug) { + if ($exception) { + error_log($exception->getTraceAsString()); + } elseif (!empty($logLine)) { + $stack = explode(PHP_EOL, (new \Exception())->getTraceAsString()); + // self + array_shift($stack); + // AbstractLogger + array_shift($stack); + foreach ($stack as $line) { + error_log($line); + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php b/Sources/API/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php new file mode 100644 index 0000000..d4118f0 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php @@ -0,0 +1,33 @@ +getMessage(); + } + + if (in_array($level, [LogLevel::NOTICE, LogLevel::INFO])) { + $error_level = E_USER_NOTICE; + } else { + $error_level = E_USER_WARNING; + } + + trigger_error($message, $error_level); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php new file mode 100644 index 0000000..4b616b3 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentParameters.php @@ -0,0 +1,96 @@ +augmentOperationParameters = $augmentOperationParameters; + } + + public function isAugmentOperationParameters(): bool + { + return $this->augmentOperationParameters; + } + + /** + * If set to true try to find operation parameter descriptions in the operation docblock. + * + * @param bool $augmentOperationParameters + */ + public function setAugmentOperationParameters(bool $augmentOperationParameters): void + { + $this->augmentOperationParameters = $augmentOperationParameters; + } + + public function __invoke(Analysis $analysis) + { + $this->augmentSharedParameters($analysis); + if ($this->augmentOperationParameters) { + $this->augmentOperationParameters($analysis); + } + } + + /** + * Use the parameter->name as key field (parameter->parameter) when used as reusable component + * (openapi->components->parameters). + */ + protected function augmentSharedParameters(Analysis $analysis): void + { + if (!Generator::isDefault($analysis->openapi->components) && !Generator::isDefault($analysis->openapi->components->parameters)) { + $keys = []; + $parametersWithoutKey = []; + foreach ($analysis->openapi->components->parameters as $parameter) { + if (!Generator::isDefault($parameter->parameter)) { + $keys[$parameter->parameter] = $parameter; + } else { + $parametersWithoutKey[] = $parameter; + } + } + foreach ($parametersWithoutKey as $parameter) { + if (!Generator::isDefault($parameter->name) && empty($keys[$parameter->name])) { + $parameter->parameter = $parameter->name; + $keys[$parameter->parameter] = $parameter; + } + } + } + } + + protected function augmentOperationParameters(Analysis $analysis): void + { + /** @var OA\Operation[] $operations */ + $operations = $analysis->getAnnotationsOfType(OA\Operation::class); + + foreach ($operations as $operation) { + if (!Generator::isDefault($operation->parameters)) { + $tags = []; + $this->extractContent($operation->_context->comment, $tags); + if (array_key_exists('param', $tags)) { + foreach ($tags['param'] as $name => $details) { + foreach ($operation->parameters as $parameter) { + if ($parameter->name == $name) { + if (Generator::isDefault($parameter->description) && $details['description']) { + $parameter->description = $details['description']; + } + } + } + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php new file mode 100644 index 0000000..7b55104 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentProperties.php @@ -0,0 +1,191 @@ +openapi->components) && !Generator::isDefault($analysis->openapi->components->schemas)) { + foreach ($analysis->openapi->components->schemas as $schema) { + if (!Generator::isDefault($schema->schema)) { + $refKey = $this->toRefKey($schema->_context, $schema->_context->class); + $refs[$refKey] = OA\Components::ref($schema); + } + } + } + + /** @var OA\Property[] $properties */ + $properties = $analysis->getAnnotationsOfType(OA\Property::class); + + foreach ($properties as $property) { + $context = $property->_context; + + if (Generator::isDefault($property->property)) { + $property->property = $context->property; + } + + if (!Generator::isDefault($property->ref)) { + continue; + } + + $comment = str_replace("\r\n", "\n", (string) $context->comment); + preg_match('/@var\s+(?[^\s]+)([ \t])?(?.+)?$/im', $comment, $varMatches); + + if (Generator::isDefault($property->type)) { + $this->augmentType($analysis, $property, $context, $refs, $varMatches); + } else { + $this->mapNativeType($property, $property->type); + } + + if (Generator::isDefault($property->description) && isset($varMatches['description'])) { + $property->description = trim($varMatches['description']); + } + if (Generator::isDefault($property->description) && $this->isRoot($property)) { + $property->description = $this->extractContent($context->comment); + } + + if (Generator::isDefault($property->example) && preg_match('/@example\s+([ \t])?(?.+)?$/im', $comment, $varMatches)) { + $property->example = $varMatches['example']; + } + } + } + + protected function toRefKey(Context $context, ?string $name): string + { + $fqn = strtolower($context->fullyQualifiedName($name)); + + return ltrim($fqn, '\\'); + } + + protected function augmentType(Analysis $analysis, OA\Property $property, Context $context, array $refs, array $varMatches): void + { + // docblock typehints + if (isset($varMatches['type'])) { + $allTypes = strtolower(trim($varMatches['type'])); + + if ($this->isNullable($allTypes) && Generator::isDefault($property->nullable)) { + $property->nullable = true; + } + + $allTypes = $this->stripNull($allTypes); + preg_match('/^([^\[]+)(.*$)/', $allTypes, $typeMatches); + $type = $typeMatches[1]; + + // finalise property type/ref + if (!$this->mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $property->ref = $refs[$refKey]; + } + } + + // ok, so we possibly have a type or ref + if (!Generator::isDefault($property->ref) && $typeMatches[2] === '' && $property->nullable) { + $refKey = $this->toRefKey($context, $type); + $property->oneOf = [ + $schema = new OA\Schema([ + 'ref' => $refs[$refKey], + '_context' => new Context(['generated' => true], $property->_context), + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + $property->nullable = true; + } elseif ($typeMatches[2] === '[]') { + if (Generator::isDefault($property->items)) { + $property->items = $items = new OA\Items( + [ + 'type' => $property->type, + '_context' => new Context(['generated' => true], $context), + ] + ); + $analysis->addAnnotation($items, $items->_context); + if (!Generator::isDefault($property->ref)) { + $property->items->ref = $property->ref; + $property->ref = Generator::UNDEFINED; + } + $property->type = 'array'; + } + } + } + + // native typehints + if ($context->type && !Generator::isDefault($context->type)) { + if ($context->nullable === true) { + $property->nullable = true; + } + $type = strtolower($context->type); + if (!$this->mapNativeType($property, $type)) { + $refKey = $this->toRefKey($context, $type); + if (Generator::isDefault($property->ref) && array_key_exists($refKey, $refs)) { + $this->applyRef($analysis, $property, $refs[$refKey]); + } else { + if ($typeSchema = $analysis->getSchemaForSource($context->type)) { + if (Generator::isDefault($property->format)) { + $property->ref = OA\Components::ref($typeSchema); + $property->type = Generator::UNDEFINED; + } + } + } + } + } + + if (!Generator::isDefault($property->const) && Generator::isDefault($property->type)) { + if (!$this->mapNativeType($property, gettype($property->const))) { + $property->type = Generator::UNDEFINED; + } + } + } + + protected function isNullable(string $typeDescription): bool + { + return in_array('null', explode('|', strtolower($typeDescription))); + } + + protected function stripNull(string $typeDescription): string + { + if (strpos($typeDescription, '|') === false) { + return $typeDescription; + } + $types = []; + foreach (explode('|', $typeDescription) as $type) { + if (strtolower($type) === 'null') { + continue; + } + $types[] = $type; + } + + return implode('|', $types); + } + + protected function applyRef(Analysis $analysis, OA\Property $property, string $ref): void + { + if ($property->nullable === true) { + $property->oneOf = [ + $schema = new OA\Schema([ + 'ref' => $ref, + '_context' => new Context(['generated' => true], $property->_context), + ]), + ]; + $analysis->addAnnotation($schema, $schema->_context); + } else { + $property->ref = $ref; + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php new file mode 100644 index 0000000..d2bd92b --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentRefs.php @@ -0,0 +1,49 @@ +getAnnotationsOfType(OA\Schema::class); + + // ref rewriting + $updatedRefs = []; + foreach ($schemas as $schema) { + if ($schema->allOf!== Generator::UNDEFINED) { + // do we have to keep track of properties refs that need updating? + foreach ($schema->allOf as $ii => $allOfSchema) { + if ($allOfSchema->properties!== Generator::UNDEFINED) { + $updatedRefs[OA\Components::ref($schema->schema . '/properties', false)] = OA\Components::ref($schema->schema . '/allOf/' . $ii . '/properties', false); + break; + } + } + } + } + + if ($updatedRefs) { + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && $annotation->ref !== Generator::UNDEFINED && $annotation->ref !== null) { + foreach ($updatedRefs as $origRef => $updatedRef) { + if (0 === strpos($annotation->ref, $origRef)) { + $annotation->ref = str_replace($origRef, $updatedRef, $annotation->ref); + } + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php new file mode 100644 index 0000000..d126bc2 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/AugmentSchemas.php @@ -0,0 +1,112 @@ +getAnnotationsOfType(OA\Schema::class); + + // Use the class names for @OA\Schema() + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->schema)) { + if ($schema->_context->is('class')) { + $schema->schema = $schema->_context->class; + } elseif ($schema->_context->is('interface')) { + $schema->schema = $schema->_context->interface; + } elseif ($schema->_context->is('trait')) { + $schema->schema = $schema->_context->trait; + } elseif ($schema->_context->is('enum')) { + $schema->schema = $schema->_context->enum; + } + } + } + + // Merge unmerged @OA\Property annotations into the @OA\Schema of the class + $unmergedProperties = $analysis->unmerged()->getAnnotationsOfType(OA\Property::class); + foreach ($unmergedProperties as $property) { + if ($property->_context->nested) { + continue; + } + + $schemaContext = $property->_context->with('class') + ?: $property->_context->with('interface') + ?: $property->_context->with('trait') + ?: $property->_context->with('enum'); + if ($schemaContext->annotations) { + foreach ($schemaContext->annotations as $annotation) { + if ($annotation instanceof OA\Schema) { + if ($annotation->_context->nested) { + // we shouldn't merge property into nested schemas + continue; + } + + $annotation->merge([$property], true); + break; + } + } + } + } + + // set schema type based on various properties + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->type)) { + if (is_array($schema->properties) && count($schema->properties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->additionalProperties) && count($schema->additionalProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->patternProperties) && count($schema->patternProperties) > 0) { + $schema->type = 'object'; + } elseif (is_array($schema->propertyNames) && count($schema->propertyNames) > 0) { + $schema->type = 'object'; + } + } else { + if ($typeSchema = $analysis->getSchemaForSource($schema->type)) { + if (Generator::isDefault($schema->format)) { + $schema->ref = OA\Components::ref($typeSchema); + $schema->type = Generator::UNDEFINED; + } + } + } + } + + // move schema properties into allOf if both exist + foreach ($schemas as $schema) { + if (!Generator::isDefault($schema->properties) && !Generator::isDefault($schema->allOf)) { + $allOfPropertiesSchema = null; + foreach ($schema->allOf as $allOfSchema) { + if (!Generator::isDefault($allOfSchema->properties)) { + $allOfPropertiesSchema = $allOfSchema; + break; + } + } + if (!$allOfPropertiesSchema) { + $allOfPropertiesSchema = new OA\Schema([ + 'properties' => [], + '_context' => new Context(['generated' => true], $schema->_context), + ]); + $analysis->addAnnotation($allOfPropertiesSchema, $allOfPropertiesSchema->_context); + $schema->allOf[] = $allOfPropertiesSchema; + } + $allOfPropertiesSchema->properties = array_merge($allOfPropertiesSchema->properties, $schema->properties); + $schema->properties = Generator::UNDEFINED; + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/BuildPaths.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/BuildPaths.php new file mode 100644 index 0000000..84ed100 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/BuildPaths.php @@ -0,0 +1,60 @@ +paths using the detected `@OA\PathItem` and `@OA\Operation` (`@OA\Get`, `@OA\Post`, etc). + */ +class BuildPaths +{ + public function __invoke(Analysis $analysis) + { + $paths = []; + // Merge @OA\PathItems with the same path. + if (!Generator::isDefault($analysis->openapi->paths)) { + foreach ($analysis->openapi->paths as $annotation) { + if (empty($annotation->path)) { + $annotation->_context->logger->warning($annotation->identity() . ' is missing required property "path" in ' . $annotation->_context); + } elseif (isset($paths[$annotation->path])) { + $paths[$annotation->path]->mergeProperties($annotation); + $analysis->annotations->detach($annotation); + } else { + $paths[$annotation->path] = $annotation; + } + } + } + + /** @var OA\Operation[] $operations */ + $operations = $analysis->unmerged()->getAnnotationsOfType(OA\Operation::class); + + // Merge @OA\Operations into existing @OA\PathItems or create a new one. + foreach ($operations as $operation) { + if ($operation->path) { + if (empty($paths[$operation->path])) { + $paths[$operation->path] = $pathItem = new OA\PathItem( + [ + 'path' => $operation->path, + '_context' => new Context(['generated' => true], $operation->_context), + ] + ); + $analysis->addAnnotation($pathItem, $pathItem->_context); + } + if ($paths[$operation->path]->merge([$operation])) { + $operation->_context->logger->warning('Unable to merge ' . $operation->identity() . ' in ' . $operation->_context); + } + } + } + if ($paths) { + $analysis->openapi->paths = array_values($paths); + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php new file mode 100644 index 0000000..65ac526 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnmerged.php @@ -0,0 +1,35 @@ +split(); + $merged = $split->merged->annotations; + $unmerged = $split->unmerged->annotations; + + /** @var OA\AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, '_unmerged')) { + foreach ($annotation->_unmerged as $i => $item) { + if ($merged->contains($item)) { + unset($annotation->_unmerged[$i]); // Property was merged + } + } + } + } + $analysis->openapi->_unmerged = []; + foreach ($unmerged as $annotation) { + $analysis->openapi->_unmerged[] = $annotation; + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php new file mode 100644 index 0000000..25ac1ad --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/CleanUnusedComponents.php @@ -0,0 +1,96 @@ +openapi->components)) { + return; + } + + $analysis->annotations = $this->collect($analysis->annotations); + + // allow multiple runs to catch nested dependencies + for ($ii = 0; $ii < 10; ++$ii) { + if (!$this->cleanup($analysis)) { + break; + } + } + } + + protected function cleanup(Analysis $analysis): bool + { + $usedRefs = []; + foreach ($analysis->annotations as $annotation) { + if (property_exists($annotation, 'ref') && !Generator::isDefault($annotation->ref) && $annotation->ref !== null) { + $usedRefs[$annotation->ref] = $annotation->ref; + } + + foreach (['allOf', 'anyOf', 'oneOff'] as $sub) { + if (property_exists($annotation, $sub) && !Generator::isDefault($annotation->{$sub})) { + foreach ($annotation->{$sub} as $subElem) { + if (is_object($subElem) && property_exists($subElem, 'ref') && !Generator::isDefault($subElem->ref) && $subElem->ref !== null) { + $usedRefs[$subElem->ref] = $subElem->ref; + } + } + } + } + + if ($annotation instanceof OA\OpenApi || $annotation instanceof OA\Operation) { + if (!Generator::isDefault($annotation->security)) { + foreach ($annotation->security as $security) { + foreach (array_keys($security) as $securityName) { + $ref = OA\Components::COMPONENTS_PREFIX . 'securitySchemes/' . $securityName; + $usedRefs[$ref] = $ref; + } + } + } + } + } + + $unusedRefs = []; + foreach (OA\Components::$_nested as $nested) { + if (2 == count($nested)) { + // $nested[1] is the name of the property that holds the component name + [$componentType, $nameProperty] = $nested; + if (!Generator::isDefault($analysis->openapi->components->{$componentType})) { + foreach ($analysis->openapi->components->{$componentType} as $component) { + $ref = OA\Components::ref($component); + if (!in_array($ref, $usedRefs)) { + $unusedRefs[$ref] = [$ref, $nameProperty]; + } + } + } + } + } + + // remove unused + foreach ($unusedRefs as $refDetails) { + [$ref, $nameProperty] = $refDetails; + [$hash, $components, $componentType, $name] = explode('/', $ref); + foreach ($analysis->openapi->components->{$componentType} as $ii => $component) { + if ($component->{$nameProperty} == $name) { + $annotation = $analysis->openapi->components->{$componentType}[$ii]; + foreach ($this->collect([$annotation]) as $unused) { + $analysis->annotations->detach($unused); + } + unset($analysis->openapi->components->{$componentType}[$ii]); + } + } + } + + return 0 != count($unusedRefs); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/CollectorTrait.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/CollectorTrait.php new file mode 100644 index 0000000..de5f271 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/CollectorTrait.php @@ -0,0 +1,67 @@ +addAll($this->traverse($annotation)); + } + } + + return $storage; + } + + public function traverse(OA\AbstractAnnotation $annotation): \SplObjectStorage + { + $storage = new \SplObjectStorage(); + + if ($storage->contains($annotation)) { + return $storage; + } + + $storage->attach($annotation); + + foreach (array_merge($annotation::$_nested, ['allOf', 'anyOf', 'oneOff', 'callbacks']) as $properties) { + foreach ((array) $properties as $property) { + if (isset($annotation->{$property})) { + $storage->addAll($this->traverseNested($annotation->{$property})); + } + } + } + + return $storage; + } + + /** + * @param string|array|OA\AbstractAnnotation $nested + */ + protected function traverseNested($nested): \SplObjectStorage + { + $storage = new \SplObjectStorage(); + + if (is_array($nested)) { + foreach ($nested as $value) { + $storage->addAll($this->traverseNested($value)); + } + } elseif ($nested instanceof OA\AbstractAnnotation) { + $storage->addAll($this->traverse($nested)); + } + + return $storage; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/DocblockTrait.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/DocblockTrait.php new file mode 100644 index 0000000..52683e9 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/DocblockTrait.php @@ -0,0 +1,171 @@ +_context) { + return true; + } + + if (1 == count($annotation->_context->annotations)) { + return true; + } + + /** @var array $matchPriorityMap */ + $matchPriorityMap = [ + OA\OpenApi::class, + + OA\Operation::class => false, + OA\Property::class => false, + OA\Parameter::class => false, + OA\Response::class => false, + + OA\Schema::class => true, + OAT\Schema::class => true, + ]; + // try to find best root match + foreach ($matchPriorityMap as $className => $strict) { + foreach ($annotation->_context->annotations as $contextAnnotation) { + if ($strict) { + if ($className === get_class($contextAnnotation)) { + return $annotation === $contextAnnotation; + } + } else { + if ($contextAnnotation instanceof $className) { + return $annotation === $contextAnnotation; + } + } + } + } + + return false; + } + + protected function handleTag(string $line, ?array &$tags = null): void + { + if (null === $tags) { + return; + } + + // split of tag name + $token = preg_split("@[\s+ ]@u", $line, 2); + if (2 == count($token)) { + $tag = substr($token[0], 1); + $tail = $token[1]; + if (!array_key_exists($tag, $tags)) { + $tags[$tag] = []; + } + + if (false !== ($dpos = strpos($tail, '$'))) { + $type = trim(substr($tail, 0, $dpos)); + $token = preg_split("@[\s+ ]@u", substr($tail, $dpos), 2); + $name = trim(substr($token[0], 1)); + $description = 2 == count($token) ? trim($token[1]) : null; + + $tags[$tag][$name] = [ + 'type' => $type, + 'description' => $description, + ]; + } + } + } + + /** + * The text contents of the phpdoc comment (excl. tags). + */ + public function extractContent(?string $docblock, ?array &$tags = null): string + { + if (Generator::isDefault($docblock)) { + return Generator::UNDEFINED; + } + + $comment = preg_split('/(\n|\r\n)/', (string) $docblock); + $comment[0] = preg_replace('/[ \t]*\\/\*\*/', '', $comment[0]); // strip '/**' + $i = count($comment) - 1; + $comment[$i] = preg_replace('/\*\/[ \t]*$/', '', $comment[$i]); // strip '*/' + $lines = []; + $append = false; + $skip = false; + foreach ($comment as $line) { + $line = ltrim($line, "\t *"); + if (substr($line, 0, 1) === '@') { + $this->handleTag($line, $tags); + $skip = true; + } + if ($skip) { + continue; + } + if ($append) { + $i = count($lines) - 1; + $lines[$i] = substr($lines[$i], 0, -1) . $line; + } else { + $lines[] = $line; + } + $append = (substr($line, -1) === '\\'); + } + $description = trim(implode("\n", $lines)); + if ($description === '') { + return Generator::UNDEFINED; + } + + return $description; + } + + /** + * A short piece of text, usually one line, providing the basic function of the associated element. + */ + public function extractSummary(?string $docblock): string + { + if (!$content = $this->extractContent($docblock)) { + return Generator::UNDEFINED; + } + $lines = preg_split('/(\n|\r\n)/', $content); + $summary = ''; + foreach ($lines as $line) { + $summary .= $line . "\n"; + if ($line === '' || substr($line, -1) === '.') { + return trim($summary); + } + } + $summary = trim($summary); + if ($summary === '') { + return Generator::UNDEFINED; + } + + return $summary; + } + + /** + * An optional longer piece of text providing more details on the associated element’s function. + * + * This is very useful when working with a complex element. + */ + public function extractDescription(?string $docblock): string + { + $summary = $this->extractSummary($docblock); + if (!$summary) { + return Generator::UNDEFINED; + } + + $description = ''; + if (false !== ($substr = substr($this->extractContent($docblock), strlen($summary)))) { + $description = trim($substr); + } + + return $description ?: Generator::UNDEFINED; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/MergePropertiesTrait.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/MergePropertiesTrait.php new file mode 100644 index 0000000..86748d8 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/MergePropertiesTrait.php @@ -0,0 +1,65 @@ + update all $ref that might reference a property merged. + */ +trait MergePropertiesTrait +{ + protected function inheritFrom(Analysis $analysis, OA\Schema $schema, OA\Schema $from, string $refPath, Context $context): void + { + if (Generator::isDefault($schema->allOf)) { + $schema->allOf = []; + } + // merging other properties into allOf is done in the AugmentSchemas processor + $schema->allOf[] = $refSchema = new OA\Schema([ + 'ref' => OA\Components::ref($refPath), + '_context' => new Context(['generated' => true], $context), + ]); + $analysis->addAnnotation($refSchema, $refSchema->_context); + } + + protected function mergeProperties(OA\Schema $schema, array $from, array &$existing): void + { + foreach ($from['properties'] as $context) { + if (is_iterable($context->annotations)) { + foreach ($context->annotations as $annotation) { + if ($annotation instanceof OA\Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } + + protected function mergeMethods(OA\Schema $schema, array $from, array &$existing): void + { + foreach ($from['methods'] as $context) { + if (is_iterable($context->annotations)) { + foreach ($context->annotations as $annotation) { + if ($annotation instanceof OA\Property && !in_array($annotation->_context->property, $existing, true)) { + $existing[] = $annotation->_context->property; + $schema->merge([$annotation], true); + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/TypesTrait.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/TypesTrait.php new file mode 100644 index 0000000..feb6907 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/Concerns/TypesTrait.php @@ -0,0 +1,54 @@ + 'array', + 'byte' => ['string', 'byte'], + 'boolean' => 'boolean', + 'bool' => 'boolean', + 'int' => 'integer', + 'integer' => 'integer', + 'long' => ['integer', 'long'], + 'float' => ['number', 'float'], + 'double' => ['number', 'double'], + 'string' => 'string', + 'date' => ['string', 'date'], + 'datetime' => ['string', 'date-time'], + '\\datetime' => ['string', 'date-time'], + 'datetimeimmutable' => ['string', 'date-time'], + '\\datetimeimmutable' => ['string', 'date-time'], + 'datetimeinterface' => ['string', 'date-time'], + '\\datetimeinterface' => ['string', 'date-time'], + 'number' => 'number', + 'object' => 'object', + ]; + + public function mapNativeType(OA\Schema $schema, string $type): bool + { + if (!array_key_exists($type, self::$NATIVE_TYPE_MAP)) { + return false; + } + + $type = self::$NATIVE_TYPE_MAP[$type]; + if (is_array($type)) { + if (Generator::isDefault($schema->format)) { + $schema->format = $type[1]; + } + $type = $type[0]; + } + + $schema->type = $type; + + return true; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php new file mode 100644 index 0000000..974bc24 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/DocBlockDescriptions.php @@ -0,0 +1,94 @@ +annotations as $annotation) { + if (property_exists($annotation, '_context') === false) { + // only annotations with context + continue; + } + + if (!$this->isRoot($annotation)) { + // only top-level annotations + continue; + } + + $hasSummary = property_exists($annotation, 'summary'); + $hasDescription = property_exists($annotation, 'description'); + if (!$hasSummary && !$hasDescription) { + continue; + } + + if ($hasSummary && $hasDescription) { + $this->summaryAndDescription($annotation); + } elseif ($hasDescription) { + $this->description($annotation); + } + } + } + + /** + * @param OA\Operation|OA\Property|OA\Parameter|OA\Schema $annotation + */ + protected function description(OA\AbstractAnnotation $annotation): void + { + if (!Generator::isDefault($annotation->description)) { + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + } + + return; + } + + $annotation->description = $this->extractContent($annotation->_context->comment); + } + + /** + * @param OA\Operation|OA\Property|OA\Parameter|OA\Schema $annotation + */ + protected function summaryAndDescription(OA\AbstractAnnotation $annotation): void + { + $ignoreSummary = !Generator::isDefault($annotation->summary); + $ignoreDescription = !Generator::isDefault($annotation->description); + if ($annotation->summary === null) { + $ignoreSummary = true; + $annotation->summary = Generator::UNDEFINED; + } + if ($annotation->description === null) { + $annotation->description = Generator::UNDEFINED; + $ignoreDescription = true; + } + if ($ignoreSummary && $ignoreDescription) { + return; + } + if ($ignoreSummary) { + $annotation->description = $this->extractContent($annotation->_context->comment); + } elseif ($ignoreDescription) { + $annotation->summary = $this->extractContent($annotation->_context->comment); + } else { + $annotation->summary = $this->extractSummary($annotation->_context->comment); + $annotation->description = $this->extractDescription($annotation->_context->comment); + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php new file mode 100644 index 0000000..b7bea86 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandClasses.php @@ -0,0 +1,50 @@ + inherit from the ancestor if it has a schema (allOf) and stop. + * - else + * => merge ancestor properties into the schema. + */ +class ExpandClasses +{ + use Concerns\MergePropertiesTrait; + + public function __invoke(Analysis $analysis) + { + /** @var OA\Schema[] $schemas */ + $schemas = $analysis->getAnnotationsOfType([OA\Schema::class, OAT\Schema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); + $existing = []; + foreach ($ancestors as $ancestor) { + $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); + if ($ancestorSchema) { + $refPath = !Generator::isDefault($ancestorSchema->schema) ? $ancestorSchema->schema : $ancestor['class']; + $this->inheritFrom($analysis, $schema, $ancestorSchema, $refPath, $ancestor['context']); + + // one ancestor is enough + break; + } else { + $this->mergeMethods($schema, $ancestor, $existing); + $this->mergeProperties($schema, $ancestor, $existing); + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php new file mode 100644 index 0000000..d31b712 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandEnums.php @@ -0,0 +1,106 @@ +expandContextEnum($analysis); + $this->expandSchemaEnum($analysis); + } + + private function expandContextEnum(Analysis $analysis): void + { + /** @var OA\Schema[] $schemas */ + $schemas = $analysis->getAnnotationsOfType([OA\Schema::class, OAT\Schema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('enum')) { + $source = $schema->_context->enum; + $re = new \ReflectionEnum($schema->_context->fullyQualifiedName($source)); + $schema->schema = !Generator::isDefault($schema->schema) ? $schema->schema : $re->getShortName(); + $type = 'string'; + $schemaType = 'string'; + if ($re->isBacked() && ($backingType = $re->getBackingType()) && method_exists($backingType, 'getName')) { + if (Generator::isDefault($schema->type)) { + $type = $backingType->getName(); + } else { + $type = $schema->type; + $schemaType = $schema->type; + } + } + $schema->enum = array_map(function ($case) use ($re, $schemaType, $type) { + if ($re->isBacked() && $type === $schemaType) { + return $case->getBackingValue(); + } + + return $case->name; + }, $re->getCases()); + $this->mapNativeType($schema, $type); + } + } + } + + private function expandSchemaEnum(Analysis $analysis): void + { + /** @var OA\Schema[] $schemas */ + $schemas = $analysis->getAnnotationsOfType([ + OA\Schema::class, + OAT\Schema::class, + OA\ServerVariable::class, + OAT\ServerVariable::class, + ]); + + foreach ($schemas as $schema) { + if (Generator::isDefault($schema->enum)) { + continue; + } + + if (is_string($schema->enum)) { + // might be enum class + if (is_a($schema->enum, \UnitEnum::class, true)) { + $source = $schema->enum::cases(); + } else { + throw new \InvalidArgumentException("Unexpected enum value, requires specifying the Enum class string: $schema->enum"); + } + } elseif (is_array($schema->enum)) { + // might be array of enum, string, int, etc... + $source = $schema->enum; + } else { + throw new \InvalidArgumentException('Unexpected enum value, requires Enum class string or array'); + } + + $enums = []; + foreach ($source as $enum) { + if (is_a($enum, \UnitEnum::class)) { + $enums[] = $enum->value ?? $enum->name; + } else { + $enums[] = $enum; + } + } + + $schema->enum = $enums; + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php new file mode 100644 index 0000000..a4f5269 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandInterfaces.php @@ -0,0 +1,56 @@ +getAnnotationsOfType([OA\Schema::class, OAT\Schema::class], true); + + foreach ($schemas as $schema) { + if ($schema->_context->is('class')) { + $className = $schema->_context->fullyQualifiedName($schema->_context->class); + $interfaces = $analysis->getInterfacesOfClass($className, true); + + if (class_exists($className) && ($parent = get_parent_class($className)) && ($inherited = array_keys(class_implements($parent)))) { + // strip interfaces we inherit from ancestor + foreach (array_keys($interfaces) as $interface) { + if (in_array(ltrim($interface, '\\'), $inherited)) { + unset($interfaces[$interface]); + } + } + } + + $existing = []; + foreach ($interfaces as $interface) { + $interfaceName = $interface['context']->fullyQualifiedName($interface['interface']); + $interfaceSchema = $analysis->getSchemaForSource($interfaceName); + if ($interfaceSchema) { + $refPath = !Generator::isDefault($interfaceSchema->schema) ? $interfaceSchema->schema : $interface['interface']; + $this->inheritFrom($analysis, $schema, $interfaceSchema, $refPath, $interface['context']); + } else { + $this->mergeMethods($schema, $interface, $existing); + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php new file mode 100644 index 0000000..a4313a6 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/ExpandTraits.php @@ -0,0 +1,81 @@ +getAnnotationsOfType([OA\Schema::class, OAT\Schema::class], true); + + // do regular trait inheritance / merge + foreach ($schemas as $schema) { + if ($schema->_context->is('trait')) { + $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($schema->_context->trait), true); + $existing = []; + foreach ($traits as $trait) { + $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); + if ($traitSchema) { + $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; + $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); + } else { + $this->mergeMethods($schema, $trait, $existing); + $this->mergeProperties($schema, $trait, $existing); + } + } + } + } + + foreach ($schemas as $schema) { + if ($schema->_context->is('class') && !$schema->_context->is('generated')) { + // look at class traits + $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($schema->_context->class), true); + $existing = []; + foreach ($traits as $trait) { + $traitSchema = $analysis->getSchemaForSource($trait['context']->fullyQualifiedName($trait['trait'])); + if ($traitSchema) { + $refPath = !Generator::isDefault($traitSchema->schema) ? $traitSchema->schema : $trait['trait']; + $this->inheritFrom($analysis, $schema, $traitSchema, $refPath, $trait['context']); + } else { + $this->mergeMethods($schema, $trait, $existing); + $this->mergeProperties($schema, $trait, $existing); + } + } + + // also merge ancestor traits of non schema parents + $ancestors = $analysis->getSuperClasses($schema->_context->fullyQualifiedName($schema->_context->class)); + $existing = []; + foreach ($ancestors as $ancestor) { + $ancestorSchema = $analysis->getSchemaForSource($ancestor['context']->fullyQualifiedName($ancestor['class'])); + if ($ancestorSchema) { + // stop here as we inherit everything above + break; + } else { + $traits = $analysis->getTraitsOfClass($schema->_context->fullyQualifiedName($ancestor['class']), true); + foreach ($traits as $trait) { + $this->mergeMethods($schema, $trait, $existing); + $this->mergeProperties($schema, $trait, $existing); + } + } + } + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php new file mode 100644 index 0000000..cefac23 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoComponents.php @@ -0,0 +1,34 @@ +openapi->components; + if (Generator::isDefault($components)) { + $components = new OA\Components(['_context' => new Context(['generated' => true], $analysis->context)]); + } + + foreach ($analysis->annotations as $annotation) { + if (OA\Components::matchNested(get_class($annotation)) && $annotation->_context->is('nested') === false) { + // A top level annotation. + $components->merge([$annotation], true); + $analysis->openapi->components = $components; + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php new file mode 100644 index 0000000..dcf2d39 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeIntoOpenApi.php @@ -0,0 +1,55 @@ +openapi) { + $context = new Context([], $analysis->context); + $analysis->addAnnotation(new OA\OpenApi(['_context' => $context]), $context); + } + $openapi = $analysis->openapi; + $openapi->_analysis = $analysis; + + // Merge annotations into the target openapi + $merge = []; + /** @var OA\AbstractAnnotation $annotation */ + foreach ($analysis->annotations as $annotation) { + if ($annotation === $openapi) { + continue; + } + if ($annotation instanceof OA\OpenApi) { + $paths = $annotation->paths; + unset($annotation->paths); + $openapi->mergeProperties($annotation); + if (!Generator::isDefault($paths)) { + foreach ($paths as $path) { + if (Generator::isDefault($openapi->paths)) { + $openapi->paths = []; + } + $openapi->paths[] = $path; + } + } + } elseif (OA\OpenApi::matchNested(get_class($annotation)) && property_exists($annotation, '_context') && $annotation->_context->is('nested') === false) { + // A top level annotation. + $merge[] = $annotation; + } + } + $openapi->merge($merge, true); + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php new file mode 100644 index 0000000..ab8d804 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeJsonContent.php @@ -0,0 +1,56 @@ +getAnnotationsOfType(OA\JsonContent::class); + + foreach ($annotations as $jsonContent) { + $parent = $jsonContent->_context->nested; + if (!($parent instanceof OA\Response) && !($parent instanceof OA\RequestBody) && !($parent instanceof OA\Parameter)) { + if ($parent) { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $jsonContent->_context->logger->warning('Unexpected ' . $jsonContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/json'] = $mediaType = new OA\MediaType([ + 'schema' => $jsonContent, + 'example' => $jsonContent->example, + 'examples' => $jsonContent->examples, + '_context' => new Context(['generated' => true], $jsonContent->_context), + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof OA\Parameter) { + $parent->content['application/json']->mediaType = 'application/json'; + } + $jsonContent->example = Generator::UNDEFINED; + $jsonContent->examples = Generator::UNDEFINED; + + $index = array_search($jsonContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php new file mode 100644 index 0000000..45590dc --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/MergeXmlContent.php @@ -0,0 +1,56 @@ +getAnnotationsOfType(OA\XmlContent::class); + + foreach ($annotations as $xmlContent) { + $parent = $xmlContent->_context->nested; + if (!($parent instanceof OA\Response) && !($parent instanceof OA\RequestBody) && !($parent instanceof OA\Parameter)) { + if ($parent) { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' in ' . $parent->identity() . ' in ' . $parent->_context); + } else { + $xmlContent->_context->logger->warning('Unexpected ' . $xmlContent->identity() . ' must be nested'); + } + continue; + } + if (Generator::isDefault($parent->content)) { + $parent->content = []; + } + $parent->content['application/xml'] = $mediaType = new OA\MediaType([ + 'schema' => $xmlContent, + 'example' => $xmlContent->example, + 'examples' => $xmlContent->examples, + '_context' => new Context(['generated' => true], $xmlContent->_context), + ]); + $analysis->addAnnotation($mediaType, $mediaType->_context); + if (!$parent instanceof OA\Parameter) { + $parent->content['application/xml']->mediaType = 'application/xml'; + } + $xmlContent->example = Generator::UNDEFINED; + $xmlContent->examples = Generator::UNDEFINED; + + $index = array_search($xmlContent, $parent->_unmerged, true); + if ($index !== false) { + array_splice($parent->_unmerged, $index, 1); + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Processors/OperationId.php b/Sources/API/vendor/zircote/swagger-php/src/Processors/OperationId.php new file mode 100644 index 0000000..100a568 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Processors/OperationId.php @@ -0,0 +1,74 @@ +hash = $hash; + } + + public function isHash(): bool + { + return $this->hash; + } + + /** + * If set to true generate ids (md5) instead of clear text operation ids. + * + * @param bool $hash + */ + public function setHash(bool $hash): OperationId + { + $this->hash = $hash; + + return $this; + } + + public function __invoke(Analysis $analysis) + { + $allOperations = $analysis->getAnnotationsOfType(OA\Operation::class); + + /** @var OA\Operation $operation */ + foreach ($allOperations as $operation) { + if (null === $operation->operationId) { + $operation->operationId = Generator::UNDEFINED; + } + + if (!Generator::isDefault($operation->operationId)) { + continue; + } + + $context = $operation->_context; + if ($context && $context->method) { + $source = $context->class ?? $context->interface ?? $context->trait; + $operationId = null; + if ($source) { + if ($context->namespace) { + $operationId = $context->namespace . '\\' . $source . '::' . $context->method; + } else { + $operationId = $source . '::' . $context->method; + } + } else { + $operationId = $context->method; + } + $operationId = strtoupper($operation->method) . '::' . $operation->path . '::' . $operationId; + $operation->operationId = $this->hash ? md5($operationId) : $operationId; + } + } + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Serializer.php b/Sources/API/vendor/zircote/swagger-php/src/Serializer.php new file mode 100644 index 0000000..137a576 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Serializer.php @@ -0,0 +1,209 @@ +isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not defined in OpenApi PHP Annotations'); + } + + return $this->doDeserialize(json_decode($jsonString), $className, new Context(['generated' => true])); + } + + /** + * Deserialize a file. + */ + public function deserializeFile(string $filename, string $format = 'json', string $className = OA\OpenApi::class): OA\AbstractAnnotation + { + if (!$this->isValidAnnotationClass($className)) { + throw new \Exception($className . ' is not a valid OpenApi PHP Annotations'); + } + + $contents = file_get_contents($filename); + + $ext = pathinfo($filename, PATHINFO_EXTENSION); + if ('yaml' == $format || in_array($ext, ['yml', 'yaml'])) { + $contents = json_encode(Yaml::parse($contents)); + } + + return $this->doDeserialize(json_decode($contents), $className, new Context(['generated' => true])); + } + + /** + * Do deserialization. + */ + protected function doDeserialize(\stdClass $c, string $class, Context $context): OA\AbstractAnnotation + { + $annotation = new $class(['_context' => $context]); + foreach ((array) $c as $property => $value) { + if ($property === '$ref') { + $property = 'ref'; + } + + if (substr($property, 0, 2) === 'x-') { + if (Generator::isDefault($annotation->x)) { + $annotation->x = []; + } + $custom = substr($property, 2); + $annotation->x[$custom] = $value; + } else { + $annotation->{$property} = $this->doDeserializeProperty($annotation, $property, $value, $context); + } + } + + if ($annotation instanceof OA\OpenApi) { + $context->root()->version = $annotation->openapi; + } + + return $annotation; + } + + /** + * Deserialize the annotation's property. + * + * @param mixed $value + * + * @return mixed + */ + protected function doDeserializeProperty(OA\AbstractAnnotation $annotation, string $property, $value, Context $context) + { + // property is primitive type + if (array_key_exists($property, $annotation::$_types)) { + return $this->doDeserializeBaseProperty($annotation::$_types[$property], $value, $context); + } + + // property is embedded annotation + // note: this does not support custom nested annotation classes + foreach ($annotation::$_nested as $nestedClass => $declaration) { + // property is an annotation + if (is_string($declaration) && $declaration === $property) { + if (is_object($value)) { + return $this->doDeserialize($value, $nestedClass, $context); + } else { + return $value; + } + } + + // property is an annotation array + if (is_array($declaration) && count($declaration) === 1 && $declaration[0] === $property) { + $annotationArr = []; + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $nestedClass, $context); + } + + return $annotationArr; + } + + // property is an annotation hash map + if (is_array($declaration) && count($declaration) === 2 && $declaration[0] === $property) { + $key = $declaration[1]; + $annotationHash = []; + foreach ($value as $k => $v) { + $annotation = $this->doDeserialize($v, $nestedClass, $context); + $annotation->{$key} = $k; + $annotationHash[$k] = $annotation; + } + + return $annotationHash; + } + } + + return $value; + } + + /** + * Deserialize base annotation property. + * + * @param array|string $type The property type + * @param mixed $value The value to deserialization + * + * @return array|OA\AbstractAnnotation + */ + protected function doDeserializeBaseProperty($type, $value, Context $context) + { + $isAnnotationClass = is_string($type) && is_subclass_of(trim($type, '[]'), OA\AbstractAnnotation::class); + + if ($isAnnotationClass) { + $isArray = strpos($type, '[') === 0 && substr($type, -1) === ']'; + + if ($isArray) { + $annotationArr = []; + $class = trim($type, '[]'); + + foreach ($value as $v) { + $annotationArr[] = $this->doDeserialize($v, $class, $context); + } + + return $annotationArr; + } + + return $this->doDeserialize($value, $type, $context); + } + + return $value; + } +} diff --git a/Sources/API/vendor/zircote/swagger-php/src/Util.php b/Sources/API/vendor/zircote/swagger-php/src/Util.php new file mode 100644 index 0000000..be427b4 --- /dev/null +++ b/Sources/API/vendor/zircote/swagger-php/src/Util.php @@ -0,0 +1,154 @@ +files()->followLinks(); + } else { + $finder = new Finder(); + $finder->sortByName(); + } + if ($pattern === null) { + $pattern = '*.php'; + } + + $finder->files()->followLinks()->name($pattern); + if (is_string($directory)) { + if (is_file($directory)) { // Scan a single file? + $finder->append([$directory]); + } else { // Scan a directory + $finder->in($directory); + } + } elseif (is_array($directory)) { + foreach ($directory as $path) { + if (is_file($path)) { // Scan a file? + $finder->append([$path]); + } else { + $finder->in($path); + } + } + } else { + throw new \InvalidArgumentException('Unexpected $directory value:' . gettype($directory)); + } + if ($exclude !== null) { + if (is_string($exclude)) { + $finder->notPath(Util::getRelativePath($exclude, $directory)); + } elseif (is_array($exclude)) { + foreach ($exclude as $path) { + $finder->notPath(Util::getRelativePath($path, $directory)); + } + } else { + throw new \InvalidArgumentException('Unexpected $exclude value:' . gettype($exclude)); + } + } + + return $finder; + } + + /** + * Escapes the special characters "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refEncode(string $raw): string + { + return str_replace('/', '~1', str_replace('~', '~0', $raw)); + } + + /** + * Converted the escaped characters "~1" and "~" back to "/" and "~". + * + * https://swagger.io/docs/specification/using-ref/ + * https://tools.ietf.org/html/rfc6901#page-3 + */ + public static function refDecode(string $encoded): string + { + return str_replace('~1', '/', str_replace('~0', '~', $encoded)); + } + + /** + * Shorten class name(s). + * + * @param array|object|string $classes Class(es) to shorten + * + * @return string|string[] One or more shortened class names + */ + public static function shorten($classes) + { + $short = []; + foreach ((array) $classes as $class) { + $short[] = '@' . str_replace([ + 'OpenApi\\Annotations\\', + 'OpenApi\\Attributes\\', + ], 'OA\\', $class); + } + + return is_array($classes) ? $short : array_pop($short); + } +} From d5675ae886c2dd0588f232b12b9d3a02360528a2 Mon Sep 17 00:00:00 2001 From: viastolfi Date: Mon, 12 Dec 2022 16:47:27 +0100 Subject: [PATCH 09/12] =?UTF-8?q?les=20routes=20PUT=20fonctionne=20d=C3=A9?= =?UTF-8?q?sormais=20avec=20un=20body=20en=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/API/routes/Inscrit.php | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index 9562879..8ce1898 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -10,6 +10,10 @@ use Slim\Factory\AppFactory; $app = AppFactory::create(); +$app->addBodyParsingMiddleware(); +$app->addRoutingMiddleware(); +$app->addErrorMiddleware(true, true, true); + /** * @OA\Get(path="/api/Inscrit", * @OA\Response(response="200", description="Succes") @@ -29,7 +33,13 @@ $app->get('/Inscrit/', function(Request $request, Response $response){ $db = null; $response->getBody()->write(json_encode($inscrits)); return $response - ->withHeader('content-type', 'application/json') + ->withHeader('content-type', 'a Textes complets + id nom prenom mail mdp + Éditer Éditer Copier Copier Supprimer Supprimer 1 EVARD LUCAS lucasevard@gmail.com test + Éditer Éditer Copier Copier Supprimer Supprimer 2 MONCUL STEPHANE stef@gmail.com teststef + Éditer Éditer Copier Copier Supprimer Supprimer 3 MENFOUMETTOITOUTNU RENAUD renaudtoutnu@gmail.com test000 + Éditer Éditer Copier Copier Supprimer Supprimer 4 YOUVOI BENJAMIN BENJAMIN@gmail.com BENJAMIN + Éditer Éditer Copier Copier Supprimer Supprimer 5 TUBEAU RAOUL raoullacouille@gmail.com oui oui le culpplication/json') ->withStatus(200); } catch(PDOException $e){ $error = array("message" => $e->getMessage()); @@ -71,11 +81,8 @@ $app->post('/Inscrit/FromMail/', function(Request $request, Response $response,a }); $app->put('/Inscrit/UpdatePassword/', function(Request $request, Response $response, array $args){ - $mail = $request->getParsedbody(); + $mail = $request->getParsedBody()["email"]; $password = $request->getParsedBody()["password"]; - - var_dump($mail); - $query = 'UPDATE Inscrit SET mdp=:password WHERE mail=:mail'; try{ From eb90d8e4d2f0b2104b5de8c5a757fdc02ba205ed Mon Sep 17 00:00:00 2001 From: viastolfi Date: Mon, 12 Dec 2022 16:49:31 +0100 Subject: [PATCH 10/12] =?UTF-8?q?r=C3=A9solution=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sources/API/routes/Inscrit.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index 8ce1898..a475108 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -33,13 +33,7 @@ $app->get('/Inscrit/', function(Request $request, Response $response){ $db = null; $response->getBody()->write(json_encode($inscrits)); return $response - ->withHeader('content-type', 'a Textes complets - id nom prenom mail mdp - Éditer Éditer Copier Copier Supprimer Supprimer 1 EVARD LUCAS lucasevard@gmail.com test - Éditer Éditer Copier Copier Supprimer Supprimer 2 MONCUL STEPHANE stef@gmail.com teststef - Éditer Éditer Copier Copier Supprimer Supprimer 3 MENFOUMETTOITOUTNU RENAUD renaudtoutnu@gmail.com test000 - Éditer Éditer Copier Copier Supprimer Supprimer 4 YOUVOI BENJAMIN BENJAMIN@gmail.com BENJAMIN - Éditer Éditer Copier Copier Supprimer Supprimer 5 TUBEAU RAOUL raoullacouille@gmail.com oui oui le culpplication/json') + ->withHeader('content-type', 'application/json') ->withStatus(200); } catch(PDOException $e){ $error = array("message" => $e->getMessage()); From 0d6979f482a4dc4159775749125b647077c1dbcd Mon Sep 17 00:00:00 2001 From: viastolfi Date: Mon, 12 Dec 2022 17:11:37 +0100 Subject: [PATCH 11/12] test documentation --- Sources/API/routes/Inscrit.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index a475108..b255635 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -1,12 +1,12 @@ Date: Wed, 14 Dec 2022 10:54:35 +0100 Subject: [PATCH 12/12] test documentation de l'API --- Sources/API/composer.json | 3 ++- Sources/API/composer.lock | 14 +++++++------- Sources/API/documentation/api.php | 6 ------ Sources/API/routes/Inscrit.php | 2 +- Sources/API/vendor/composer/autoload_files.php | 2 +- Sources/API/vendor/composer/autoload_static.php | 2 +- Sources/API/vendor/composer/installed.json | 14 +++++++------- Sources/API/vendor/composer/installed.php | 10 +++++----- .../lib/Doctrine/Common/Annotations/DocLexer.php | 6 +++++- 9 files changed, 29 insertions(+), 30 deletions(-) delete mode 100644 Sources/API/documentation/api.php diff --git a/Sources/API/composer.json b/Sources/API/composer.json index 6addf56..dd5a46e 100644 --- a/Sources/API/composer.json +++ b/Sources/API/composer.json @@ -2,6 +2,7 @@ "require": { "slim/slim": "4.*", "slim/psr7": "^1.6", - "zircote/swagger-php": "^4.5" + "zircote/swagger-php": "^4.5", + "doctrine/annotations": "^1.14" } } diff --git a/Sources/API/composer.lock b/Sources/API/composer.lock index acf5477..e734c16 100644 --- a/Sources/API/composer.lock +++ b/Sources/API/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "07907c3d50700ee017ad7949856672cc", + "content-hash": "4ce9f1d66c47bb3eda2eab2ef793483c", "packages": [ { "name": "doctrine/annotations", - "version": "1.14.0", + "version": "1.14.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf" + "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", - "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/9e034d7a70032d422169f27d8759e8d84abb4f51", + "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51", "shasum": "" }, "require": { @@ -78,9 +78,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.0" + "source": "https://github.com/doctrine/annotations/tree/1.14.1" }, - "time": "2022-12-11T18:25:48+00:00" + "time": "2022-12-12T12:46:12+00:00" }, { "name": "doctrine/deprecations", diff --git a/Sources/API/documentation/api.php b/Sources/API/documentation/api.php deleted file mode 100644 index c2daa3d..0000000 --- a/Sources/API/documentation/api.php +++ /dev/null @@ -1,6 +0,0 @@ -toJSON(); -?> \ No newline at end of file diff --git a/Sources/API/routes/Inscrit.php b/Sources/API/routes/Inscrit.php index b255635..54ebb12 100644 --- a/Sources/API/routes/Inscrit.php +++ b/Sources/API/routes/Inscrit.php @@ -137,5 +137,5 @@ $app->post('/Inscrit/add/', function(Request $request, Response $response, array ->withHeader('content-type', 'application/json') ->withStatus(500); } -}) +}); ?> \ No newline at end of file diff --git a/Sources/API/vendor/composer/autoload_files.php b/Sources/API/vendor/composer/autoload_files.php index a9948aa..33fe5e4 100644 --- a/Sources/API/vendor/composer/autoload_files.php +++ b/Sources/API/vendor/composer/autoload_files.php @@ -7,8 +7,8 @@ $baseDir = dirname($vendorDir); return array( '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', - 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', ); diff --git a/Sources/API/vendor/composer/autoload_static.php b/Sources/API/vendor/composer/autoload_static.php index b5ab53d..c7f3e89 100644 --- a/Sources/API/vendor/composer/autoload_static.php +++ b/Sources/API/vendor/composer/autoload_static.php @@ -8,8 +8,8 @@ class ComposerStaticInita934429c0ea4f4482346c5d296943a81 { public static $files = array ( '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', - 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', ); diff --git a/Sources/API/vendor/composer/installed.json b/Sources/API/vendor/composer/installed.json index 34e0075..b8e016a 100644 --- a/Sources/API/vendor/composer/installed.json +++ b/Sources/API/vendor/composer/installed.json @@ -2,17 +2,17 @@ "packages": [ { "name": "doctrine/annotations", - "version": "1.14.0", - "version_normalized": "1.14.0.0", + "version": "1.14.1", + "version_normalized": "1.14.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf" + "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", - "reference": "3587ab58646bc515b2e03bbd3cfcd3682e8df5bf", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/9e034d7a70032d422169f27d8759e8d84abb4f51", + "reference": "9e034d7a70032d422169f27d8759e8d84abb4f51", "shasum": "" }, "require": { @@ -32,7 +32,7 @@ "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, - "time": "2022-12-11T18:25:48+00:00", + "time": "2022-12-12T12:46:12+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -75,7 +75,7 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.0" + "source": "https://github.com/doctrine/annotations/tree/1.14.1" }, "install-path": "../doctrine/annotations" }, diff --git a/Sources/API/vendor/composer/installed.php b/Sources/API/vendor/composer/installed.php index 60cf54c..d8400d0 100644 --- a/Sources/API/vendor/composer/installed.php +++ b/Sources/API/vendor/composer/installed.php @@ -5,7 +5,7 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'f8caddc10d70975a9f687fac5d007b340a7a8699', + 'reference' => '0d6979f482a4dc4159775749125b647077c1dbcd', 'name' => '__root__', 'dev' => true, ), @@ -16,16 +16,16 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), - 'reference' => 'f8caddc10d70975a9f687fac5d007b340a7a8699', + 'reference' => '0d6979f482a4dc4159775749125b647077c1dbcd', 'dev_requirement' => false, ), 'doctrine/annotations' => array( - 'pretty_version' => '1.14.0', - 'version' => '1.14.0.0', + 'pretty_version' => '1.14.1', + 'version' => '1.14.1.0', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/annotations', 'aliases' => array(), - 'reference' => '3587ab58646bc515b2e03bbd3cfcd3682e8df5bf', + 'reference' => '9e034d7a70032d422169f27d8759e8d84abb4f51', 'dev_requirement' => false, ), 'doctrine/deprecations' => array( diff --git a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php index 7c0284b..dbf60c0 100644 --- a/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php +++ b/Sources/API/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/DocLexer.php @@ -130,10 +130,14 @@ final class DocLexer extends AbstractLexer } /** @return array{value: int|string, type:self::T_*|null, position:int} */ - public function peek(): array + public function peek(): ?array { $token = parent::peek(); + if ($token === null) { + return null; + } + return (array) $token; } }