From cee59af27a44f16b2289017d83ab2b26440e85d2 Mon Sep 17 00:00:00 2001 From: Andre van Zuydam Date: Sun, 30 Jun 2024 13:51:02 +0200 Subject: [PATCH] Composer updates Added ability to annotate CRUD routers Added functionality to secure and cache dynamic routes --- Tina4/Api/Swagger.php | 125 ++++++++------- Tina4/Routing/Crud.php | 69 +++++---- Tina4/Routing/Route.php | 101 +++++++++---- Tina4/Routing/RouteCore.php | 9 +- Tina4/Routing/Router.php | 10 -- composer.json | 3 +- composer.lock | 293 ++++++++++++++++-------------------- 7 files changed, 317 insertions(+), 293 deletions(-) diff --git a/Tina4/Api/Swagger.php b/Tina4/Api/Swagger.php index c74a1f31..5014b956 100644 --- a/Tina4/Api/Swagger.php +++ b/Tina4/Api/Swagger.php @@ -16,6 +16,7 @@ class Swagger implements \JsonSerializable { public $root; + public $annotation; public $subFolder; public $swagger = []; public $ormObjects = []; //define which objects should be returned in the schema @@ -39,6 +40,7 @@ public function __construct($root = null, $title = "Open API", $apiDescription = } $this->subFolder = $subFolder; + $this->annotation = new Annotation(); $paths = (object)[]; @@ -46,8 +48,6 @@ public function __construct($root = null, $title = "Open API", $apiDescription = $route["routePath"] = str_replace("//", "/", $this->subFolder . $route["routePath"]); $method = strtolower($route["method"]); - //echo $method; - if (!empty($route["class"])) { $reflectionClass = new \ReflectionClass($route["class"]); $reflection = $reflectionClass->getMethod($route["function"]); @@ -55,11 +55,29 @@ public function __construct($root = null, $title = "Open API", $apiDescription = $reflection = new \ReflectionFunction($route["function"]); } - $doc = $reflection->getDocComment(); + $annotations = $this->annotation->parseAnnotations($doc); + + if (!empty($reflection) && !empty($reflection->getClosureScopeClass()) && $reflection->getClosureScopeClass()->name === "Tina4\Crud") { + $reflectionCaller = new \ReflectionFunction($route["caller"]["args"][2]); + $crudDocumentation = $reflectionCaller->getDocComment(); + $crudAnnotations = $this->annotation->parseAnnotations($crudDocumentation, ""); + + foreach ($annotations as $annotation => $annotationValue) { + if (!empty($crudAnnotations[$annotation])) { + $annotations[$annotation][0] = str_replace("{" . $annotation . "}", $crudAnnotations[$annotation][0], $annotationValue[0]); + $annotations[$annotation][0] = str_replace("{path}", $route["caller"]["args"][0], $annotations[$annotation][0]); + } else { + if ($annotation === "example") { + $annotations[$annotation][0] = (new \ReflectionClass($route["caller"]["args"][1]))->getShortName(); + } else { + unset($annotations[$annotation]); + } + } - preg_match_all('#@(.*?)(\r\n|\n)#s', $doc, $annotations); + } + } $summary = "None"; $description = "None"; @@ -70,67 +88,64 @@ public function __construct($root = null, $title = "Open API", $apiDescription = $addParams = []; $security = []; $example = null; - foreach ($annotations[0] as $aid => $annotation) { - preg_match_all('/^(@[a-zA-Z]*)([\w\s,\W]*)$/m', $annotation, $matches, PREG_SET_ORDER, 0); - if (count($matches) > 0) { - $matches = $matches[0]; - } else { - $matches = null; - } + foreach ($annotations as $annotationName => $annotationValue) { + $annotationValue = $annotationValue[0]; - if (!empty($matches[2])) { - $matches[2] = trim($matches[2]); + if ($annotationName === "summary") { + $summary = $annotationValue; } - - if (!empty($matches)) { - if ($matches[1] === "@summary") { - $summary = $matches[2]; - } elseif ($matches[1] === "@description") { - $description = str_replace("\n", "", $matches[2]); - } elseif ($matches[1] === "@tags") { - $tags = explode(",", $matches[2]); - foreach ($tags as $tid => $tag) { - $tags[$tid] = str_replace("\n", "", $tag); - } - } elseif ($matches[1] === "@queryParams" || $matches[1] === "@params") { - $queryParams = explode(",", $matches[2]); - } elseif ($matches[1] === "@example") { - - - $this->ormObjects[] = trim(str_replace("\n", "", "\\" . $matches[2])); - $example = []; - $className = trim(str_replace("\n", "", "\\" . $matches[2])); - - - if (class_exists($className)) { - $exampleObject = (new $className); - - if (method_exists($exampleObject, "asArray")) { - $example["data"] = (object)$exampleObject->asArray(); - $fields = $exampleObject->getFieldDefinitions(); - $properties = (object)[]; - if ($fields !== null) { - foreach ($fields as $field) { - $properties->{$field->fieldName} = (object)["type" => $field->dataType]; - } + else + if ($annotationName === "description") + { + $description = str_replace("\n", "", $annotationValue); + } + else + if ($annotationName === "tags") + { + $tags = explode(",", $annotationValue); + foreach ($tags as $tid => $tag) { + $tags[$tid] = trim(str_replace("\n", "", $tag)); + } + } + else + if ($annotationName === "params" || $annotationName === "queryParams") + { + $queryParams = explode(",", $annotationValue); + } + else + if ($annotationName === "example") { + $this->ormObjects[] = trim(str_replace("\n", "", "\\" . $annotationValue)); + $example = []; + $className = trim(str_replace("\n", "", "\\" . $annotationValue)); + + if (class_exists($className)) { + $exampleObject = (new $className); + + if (method_exists($exampleObject, "asArray")) { + $example["data"] = (object)$exampleObject->asArray(); + $fields = $exampleObject->getFieldDefinitions(); + $properties = (object)[]; + if ($fields !== null) { + foreach ($fields as $field) { + $properties->{$field->fieldName} = (object)["type" => $field->dataType]; } - $example["properties"] = $properties; - } else { - $example["data"] = (object)json_decode(json_encode($exampleObject)); - $example["properties"] = (object)[]; } + $example["properties"] = $properties; } else { - $className = substr($className, 1); - $example["data"] = json_decode($className); + $example["data"] = (object)json_decode(json_encode($exampleObject)); $example["properties"] = (object)[]; } - + } else { + $className = substr($className, 1); + $example["data"] = json_decode($className); + $example["properties"] = (object)[]; } + } - if ($matches[1] === "@secure" || $method != "GET") { - $security = [(object)["bearerAuth" => []]]; - } + if ($annotationName === "@secure" || $method != "GET") { + $security = [(object)["bearerAuth" => []]]; } + } if ($summary === "None" && $description !== "None") { diff --git a/Tina4/Routing/Crud.php b/Tina4/Routing/Crud.php index 3d9e6cfd..f984dfc9 100644 --- a/Tina4/Routing/Crud.php +++ b/Tina4/Routing/Crud.php @@ -177,16 +177,17 @@ public static function getObjects(Request $request) * @param ORM $object * @param $function * @param bool $secure - * @params $secure + * @param bool $cached */ - public static function route($path, ORM $object, $function, $secure = false): void + public static function route($path, ORM $object, $function, bool $secure = false, bool $cached = false): void { + list(, $caller) = debug_backtrace(false); + //What if the path has ids in it ? /store/{id}/{hash} /** - * @description {$path} CRUD - * @tags CRUD - * @secure - * @no-cache + * @description {description} for {path} + * @summary Get all for {path} + * @tags {tags} */ Route::get( $path . "/form", @@ -195,12 +196,15 @@ function (Response $response, Request $request) use ($object, $function) { return $response($htmlResult, HTTP_OK); } - ); + ) + ->secure($secure) + ->cache($cached); /** - * @description {$path} CRUD - * @tags CRUD - * @no-cache + * @description {description} for {path} + * @summary Post for {path} + * @tags {tags} + * @example {example} */ Route::post( $path, @@ -220,13 +224,13 @@ function (Response $response, Request $request) use ($object, $function) { return $response($jsonResult, HTTP_OK); } - ); + )->secure($secure) + ->cache($cached); /** - * @description {$path} CRUD - * @tags CRUD - * @secure - * @no-cache + * @description {description} for {path} + * @summary Get for {path} + * @tags {tags} */ Route::get( $path, @@ -236,14 +240,15 @@ function (Response $response, Request $request) use ($object, $function) { return $response($jsonResult, HTTP_OK); } - ); + )->secure($secure) + ->cache($cached); /** - * @description {$path} CRUD - * @tags CRUD - * @secure - * @no-cache + * @description {description} for {path} + * @summary Get by Id for {path} + * @tags {tags} + * @example {example} */ Route::get( $path . "/{id}", @@ -257,13 +262,14 @@ function (Response $response, Request $request) use ($object, $function) { return $response($jsonResult, HTTP_OK); } - ); + )->secure($secure) + ->cache($cached); /** - * @description {$path} CRUD - * @tags CRUD - * @secure - * @no-cache + * @description {description} for {path} + * @summary Post for Id for {path} + * @tags {tags} + * @example {example} */ Route::post( $path . "/{id}", @@ -281,13 +287,13 @@ function (Response $response, Request $request) use ($object, $function) { return $response($jsonResult, HTTP_OK); } - ); + )->secure($secure) + ->cache($cached); /** - * @description {$path} CRUD - * @tags CRUD - * @secure - * @no-cache + * @description {description} for {path} + * @summary Delete by Id for {path} + * @tags {tags} */ Route::delete( $path . "/{id}", @@ -305,7 +311,8 @@ function (Response $response, Request $request) use ($object, $function) { return $response($jsonResult, HTTP_OK); } - ); + )->secure($secure) + ->cache($cached); } /** diff --git a/Tina4/Routing/Route.php b/Tina4/Routing/Route.php index e79a866e..4b7ae611 100644 --- a/Tina4/Routing/Route.php +++ b/Tina4/Routing/Route.php @@ -20,15 +20,18 @@ class Route implements RouteCore public static $method; + //These methods are used for mostly CRUD and dynamic routes not for code readability, the inline params are passed into the request + /** - * Get route - * @param string $routePath - * @param $function + * Clean URL by splitting string at "?" to get actual URL + * @param string $url URL to be cleaned that may contain "?" + * @return mixed Part of the URL before the "?" if it existed */ - public static function get(string $routePath, $function): void + public static function cleanURL(string $url): string { - self::$method = TINA4_GET; - self::add($routePath, $function, true); + $url = explode("?", $url, 2); + $url[0] = str_replace(TINA4_SUB_FOLDER, "/", $url[0]); + return str_replace("//", "/", $url[0]); } /** @@ -40,10 +43,11 @@ public static function get(string $routePath, $function): void * @param \Closure|Mixed $function An anonymous function to handle the route called, has params based on inline params and $response, $request params by default * @param bool $inlineParamsToRequest * @param bool $secure + * @param bool $cached + * @param null $caller * @return Route - * @example "api/tests.php" */ - public static function add(string $routePath, $function, bool $inlineParamsToRequest = false, bool $secure = false): Route + public static function add(string $routePath, $function, bool $inlineParamsToRequest = false, bool $secure = false, bool $cached = false, $caller=null): Route { global $arrRoutes; $originalRoute = $routePath; @@ -77,25 +81,30 @@ public static function add(string $routePath, $function, bool $inlineParamsToReq $method = $function[1]; } - $arrRoutes[] = ["routePath" => $routePathLoop, "method" => static::$method, "function" => $method, "class" => $class, "originalRoute" => $originalRoute, "inlineParamsToRequest" => $inlineParamsToRequest, "ignoreRoutes" => $ignoreRoutePaths]; + if (empty($caller)) { + list(, $caller) = debug_backtrace(false); + } + + $arrRoutes[] = ["routePath" => $routePathLoop, "method" => static::$method, "function" => $method, "class" => $class, "originalRoute" => $originalRoute, + "inlineParamsToRequest" => $inlineParamsToRequest, "ignoreRoutes" => $ignoreRoutePaths, "secure" => $secure, "cached" => $cached, + "caller" => $caller]; } } return new static; } - //These methods are used for mostly CRUD and dynamic routes not for code readability, the inline params are passed into the request - /** - * Clean URL by splitting string at "?" to get actual URL - * @param string $url URL to be cleaned that may contain "?" - * @return mixed Part of the URL before the "?" if it existed + * Get route + * @param string $routePath + * @param $function + * @return Route */ - public static function cleanURL(string $url): string + public static function get(string $routePath, $function): Route { - $url = explode("?", $url, 2); - $url[0] = str_replace(TINA4_SUB_FOLDER, "/", $url[0]); - return str_replace("//", "/", $url[0]); + self::$method = TINA4_GET; + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /** @@ -107,7 +116,8 @@ public static function cleanURL(string $url): string public static function put(string $routePath, $function): Route { self::$method = TINA4_PUT; - return self::add($routePath, $function, true); + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /** @@ -119,7 +129,8 @@ public static function put(string $routePath, $function): Route public static function post(string $routePath, $function): Route { self::$method = TINA4_POST; - return self::add($routePath, $function, true); + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /** @@ -131,7 +142,8 @@ public static function post(string $routePath, $function): Route public static function patch(string $routePath, $function): Route { self::$method = TINA4_PATCH; - return self::add($routePath, $function, true); + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /** @@ -143,7 +155,8 @@ public static function patch(string $routePath, $function): Route public static function delete(string $routePath, $function): Route { self::$method = TINA4_DELETE; - return self::add($routePath, $function, true); + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /** @@ -155,38 +168,68 @@ public static function delete(string $routePath, $function): Route public static function any(string $routePath, $function): Route { self::$method = TINA4_ANY; - return self::add($routePath, $function, true); + list(, $caller) = debug_backtrace(false); + return self::add($routePath, $function, true, false, false, $caller); } /*** * Adds a method to the global routing table for middleware to be run * @param array $functionNames - * @return void + * @return Route */ - public static function middleware(array $functionNames): void + public static function middleware(array $functionNames): Route { global $arrRoutes; $arrRoutes[sizeof($arrRoutes)-1]["middleware"] = $functionNames; + return new static; } /** * No cached route + * @param bool $default * @return void */ - public static function noCache(): void + public static function noCache(bool $default=false): Route { global $arrRoutes; - $arrRoutes[sizeof($arrRoutes)-1]["cached"] = false; + $arrRoutes[sizeof($arrRoutes)-1]["cached"] = $default; + return new static; } /** * Cache route + * @param bool $default * @return void */ - public static function cache(): void + public static function cache(bool $default=true): Route { global $arrRoutes; - $arrRoutes[sizeof($arrRoutes)-1]["cached"] = true; + $arrRoutes[sizeof($arrRoutes)-1]["cached"] = $default; + return new static; + } + + /** + * Secure route + * @param bool $default + * @return void + */ + public static function secure(bool $default=true): Route + { + global $arrRoutes; + $arrRoutes[sizeof($arrRoutes)-1]["secure"] = $default; + return new static; + } + + /** + * Add caller + */ + public static function caller($caller=null): Route + { + global $arrRoutes; + if (!empty($caller)) { + $arrRoutes[sizeof($arrRoutes) - 1]["caller"] = $caller; + } + return new static; } } diff --git a/Tina4/Routing/RouteCore.php b/Tina4/Routing/RouteCore.php index 30620106..c8f54a57 100644 --- a/Tina4/Routing/RouteCore.php +++ b/Tina4/Routing/RouteCore.php @@ -20,13 +20,16 @@ interface RouteCore * @param \Closure|Array $function can be in the form function or [Class, method] * @param false $inlineParamsToRequest * @param false $secure + * @param bool $cached + * @param null $caller + * @return Route */ - public static function add(string $routePath, $function, bool $inlineParamsToRequest = false, bool $secure = false): Route; + public static function add(string $routePath, $function, bool $inlineParamsToRequest = false, bool $secure = false, bool $cached = false, $caller = null): Route; /*** * Adds a method names to the global routing table for middleware to be run * @param array $functionNames - * @return void + * @return Route */ - public static function middleware(array $functionNames): void; + public static function middleware(array $functionNames): Route; } diff --git a/Tina4/Routing/Router.php b/Tina4/Routing/Router.php index b24cd392..01bda929 100644 --- a/Tina4/Routing/Router.php +++ b/Tina4/Routing/Router.php @@ -135,14 +135,6 @@ final public function resolveRoute(?string $method, ?string $url, ?Config $confi Debug::message("$this->GUID URL Last Resort {$method} - {$url}", TINA4_LOG_DEBUG); $parseFile = new ParseTemplate($url, "", $this->GUID); - //TRY FIND THE TINA4 DOCUMENTATION - if (TINA4_DEBUG) { - if (empty($parseFile->content) && $parseFile->httpCode === HTTP_NOT_FOUND && $url === "/index") { - $url = "documentation/index"; - $parseFile = new ParseTemplate($url, "", $this->GUID); - } - } - //Caching of templates if (defined("TINA4_CACHE_ON") && TINA4_CACHE_ON) { $this->createCacheResponse($url, $parseFile->httpCode, $parseFile->content, $this->addCORS($parseFile->headers), $parseFile->fileName, TEXT_HTML); @@ -706,8 +698,6 @@ public function matchPath($url, $routePath, $ignoreRoutes): bool if ($matching) { Debug::message("$this->GUID Matching {$url} with {$routePath}", TINA4_LOG_DEBUG); $this->params = $variables; - } else { - $matching = false; } return $matching; diff --git a/composer.json b/composer.json index 89ab8b46..a9876801 100644 --- a/composer.json +++ b/composer.json @@ -81,7 +81,6 @@ "overtrue/phplint": "^2.0", "tina4stack/tina4php-sqlite3": "^2.0", "phpmetrics/phpmetrics": "^2.8", - "tina4stack/tina4php-reports": "dev-main", - "tina4stack/tina4-documentation": "dev-main" + "tina4stack/tina4php-reports": "dev-main" } } diff --git a/composer.lock b/composer.lock index 4851f469..59a0c162 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c06ae9fffcb393f6125abb9e06c84e43", + "content-hash": "99b2a6e89dff20a56695ab103ebf86f1", "packages": [ { "name": "cesargb/php-log-rotation", @@ -568,16 +568,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "0424dff1c58f028c451efff2045f5d92410bd540" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/0424dff1c58f028c451efff2045f5d92410bd540", + "reference": "0424dff1c58f028c451efff2045f5d92410bd540", "shasum": "" }, "require": { @@ -627,7 +627,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.30.0" }, "funding": [ { @@ -643,20 +643,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -707,7 +707,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -723,20 +723,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -787,7 +787,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -803,7 +803,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "tina4stack/tina4php-core", @@ -1092,16 +1092,16 @@ }, { "name": "twig/twig", - "version": "v3.10.2", + "version": "v3.10.3", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "7aaed0b8311a557cc8c4047a71fd03153a00e755" + "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/7aaed0b8311a557cc8c4047a71fd03153a00e755", - "reference": "7aaed0b8311a557cc8c4047a71fd03153a00e755", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", + "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", "shasum": "" }, "require": { @@ -1155,7 +1155,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.2" + "source": "https://github.com/twigphp/Twig/tree/v3.10.3" }, "funding": [ { @@ -1167,7 +1167,7 @@ "type": "tidelift" } ], - "time": "2024-05-14T06:04:16+00:00" + "time": "2024-05-16T10:04:27+00:00" } ], "packages-dev": [ @@ -1243,16 +1243,16 @@ }, { "name": "mpdf/mpdf", - "version": "v8.2.3", + "version": "v8.2.4", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "6f723a96becf989a831e38caf758d28364a69939" + "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/6f723a96becf989a831e38caf758d28364a69939", - "reference": "6f723a96becf989a831e38caf758d28364a69939", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/9e3ff91606fed11cd58a130eabaaf60e56fdda88", + "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88", "shasum": "" }, "require": { @@ -1320,7 +1320,7 @@ "type": "custom" } ], - "time": "2024-03-11T12:55:53+00:00" + "time": "2024-06-14T16:06:41+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -1416,16 +1416,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", "shasum": "" }, "require": { @@ -1433,11 +1433,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -1463,7 +1464,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" }, "funding": [ { @@ -1471,7 +1472,7 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2024-06-12T14:39:25+00:00" }, { "name": "n98/junit-xml", @@ -2409,12 +2410,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "8eea9afb8060c8ef05c89f02b123329f43e9ba4e" + "reference": "27714b56f04815b654c3805502ab77207505ac19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/8eea9afb8060c8ef05c89f02b123329f43e9ba4e", - "reference": "8eea9afb8060c8ef05c89f02b123329f43e9ba4e", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/27714b56f04815b654c3805502ab77207505ac19", + "reference": "27714b56f04815b654c3805502ab77207505ac19", "shasum": "" }, "conflict": { @@ -2422,6 +2423,8 @@ "admidio/admidio": "<4.2.13", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", "aheinze/cockpit": "<2.2", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", @@ -2472,6 +2475,7 @@ "bmarshall511/wordpress_zero_spam": "<5.2.13", "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", "bottelet/flarepoint": "<2.2.1", "bref/bref": "<2.1.17", "brightlocal/phpwhois": "<=4.2.5", @@ -2487,6 +2491,7 @@ "cardgate/magento2": "<2.0.33", "cardgate/woocommerce": "<=3.1.15", "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", "causal/oidc": "<2.1", @@ -2502,7 +2507,7 @@ "codeigniter4/framework": "<4.4.7", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.27|>=2,<2.2.23|>=2.3,<2.7", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", "concrete5/concrete5": "<9.2.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -2535,11 +2540,11 @@ "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<=0.7.1", + "doctrine/doctrine-module": "<0.7.2", "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<=19", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2", @@ -2576,7 +2581,7 @@ "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", @@ -2610,7 +2615,7 @@ "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", "friendsofsymfony/oauth2-php": "<1.3", "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", "friendsofsymfony1/symfony1": ">=1.1,<1.15.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", @@ -2622,7 +2627,8 @@ "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.45", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", "getkirby/cms": "<4.1.1", "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", @@ -2635,7 +2641,7 @@ "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.7", + "grumpydictator/firefly-iii": "<6.1.17", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", @@ -2659,7 +2665,7 @@ "idno/known": "<=1.3.1", "ilicmiljan/secure-props": ">=1.2,<1.2.2", "illuminate/auth": "<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", @@ -2692,6 +2698,7 @@ "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", @@ -2711,7 +2718,7 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", "laravel/laravel": ">=5.4,<5.4.22", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=9|==10.1", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", @@ -2729,7 +2736,7 @@ "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": "<2.4.3.0-patch3|>=2.4.4,<2.4.5", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch8|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch6|==2.4.7", "magento/core": "<=1.9.4.5", "magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ee": ">=1,<1.14.4.3-dev", @@ -2762,7 +2769,7 @@ "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<=4.3.3", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "movingbytes/social-network": "<=1.2.1", @@ -2780,8 +2787,8 @@ "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", - "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", @@ -2799,12 +2806,12 @@ "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<=3.4.4", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.10.4", "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7|>=4,<4.0.2.3-dev", + "opencart/opencart": "<=3.0.3.9|>=4", "openid/php-openid": "<2.3", "openmage/magento-lts": "<20.5", "opensolutions/vimbadmin": "<=3.0.15", @@ -2857,13 +2864,13 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.3.4", + "pimcore/admin-ui-classic-bundle": "<=1.4.2", "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.1.6.5-dev|>=11.2,<11.2.3", + "pimcore/pimcore": "<11.2.4", "pixelfed/pixelfed": "<0.11.11", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", @@ -2928,7 +2935,7 @@ "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", - "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", + "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", "silverstripe/framework": "<4.13.39|>=5,<5.1.11", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", @@ -2954,8 +2961,8 @@ "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", - "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.2.2", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", @@ -2965,11 +2972,13 @@ "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.46", + "statamic/cms": "<4.46|>=5.3,<5.6.2", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<2.1.62", + "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", + "sulu/form-bundle": ">=2,<2.5.3", "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", @@ -2981,8 +2990,8 @@ "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.12.16|>=1.13.0.0-alpha1,<1.13.1", - "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", + "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2|>=1.12.0.0-alpha1,<1.12.16|>=1.13.0.0-alpha1,<1.13.1", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", "symbiote/silverstripe-versionedfiles": "<=2.0.3", @@ -3033,7 +3042,7 @@ "thorsten/phpmyfaq": "<3.2.2", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", - "tinymce/tinymce": "<7", + "tinymce/tinymce": "<7.2", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", "tobiasbg/tablepress": "<=2.0.0.0-RC1", @@ -3070,12 +3079,14 @@ "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", "wallabag/wallabag": "<2.6.7", @@ -3094,14 +3105,14 @@ "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", - "woocommerce/woocommerce": "<6.6", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", "wp-cli/wp-cli": ">=0.12,<2.5", "wp-graphql/wp-graphql": "<=1.14.5", "wp-premium/gravityforms": "<2.4.21", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", - "wwbn/avideo": "<=12.4", + "wwbn/avideo": "<14.3", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", @@ -3110,7 +3121,7 @@ "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": "<1.1.29", - "yiisoft/yii2": "<2.0.38", + "yiisoft/yii2": "<2.0.50", "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<2.0.43", @@ -3137,7 +3148,7 @@ "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", "zendframework/zend-validator": ">=2.3,<2.3.6", "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", @@ -3196,7 +3207,7 @@ "type": "tidelift" } ], - "time": "2024-05-14T22:04:50+00:00" + "time": "2024-06-26T15:05:17+00:00" }, { "name": "sebastian/cli-parser", @@ -4235,16 +4246,16 @@ }, { "name": "symfony/console", - "version": "v5.4.39", + "version": "v5.4.41", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1" + "reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f3e591c48688a0cfa1a3296205926c05e84b22b1", - "reference": "f3e591c48688a0cfa1a3296205926c05e84b22b1", + "url": "https://api.github.com/repos/symfony/console/zipball/6473d441a913cb997123b59ff2dbe3d1cf9e11ba", + "reference": "6473d441a913cb997123b59ff2dbe3d1cf9e11ba", "shasum": "" }, "require": { @@ -4314,7 +4325,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.39" + "source": "https://github.com/symfony/console/tree/v5.4.41" }, "funding": [ { @@ -4330,20 +4341,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-06-28T07:48:55+00:00" }, { "name": "symfony/finder", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a" + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/f6a96e4fcd468a25fede16ee665f50ced856bd0a", - "reference": "f6a96e4fcd468a25fede16ee665f50ced856bd0a", + "url": "https://api.github.com/repos/symfony/finder/zipball/f51cff4687547641c7d8180d74932ab40b2205ce", + "reference": "f51cff4687547641c7d8180d74932ab40b2205ce", "shasum": "" }, "require": { @@ -4377,7 +4388,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.39" + "source": "https://github.com/symfony/finder/tree/v5.4.40" }, "funding": [ { @@ -4393,20 +4404,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -4455,7 +4466,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -4471,20 +4482,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -4536,7 +4547,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -4552,20 +4563,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/ec444d3f3f6505bb28d11afa41e75faadebc10a1", + "reference": "ec444d3f3f6505bb28d11afa41e75faadebc10a1", "shasum": "" }, "require": { @@ -4612,7 +4623,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.30.0" }, "funding": [ { @@ -4628,20 +4639,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/process", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5" + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/85a554acd7c28522241faf2e97b9541247a0d3d5", - "reference": "85a554acd7c28522241faf2e97b9541247a0d3d5", + "url": "https://api.github.com/repos/symfony/process/zipball/deedcb3bb4669cae2148bc920eafd2b16dc7c046", + "reference": "deedcb3bb4669cae2148bc920eafd2b16dc7c046", "shasum": "" }, "require": { @@ -4674,7 +4685,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.39" + "source": "https://github.com/symfony/process/tree/v5.4.40" }, "funding": [ { @@ -4690,7 +4701,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T08:26:06+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "symfony/service-contracts", @@ -4777,16 +4788,16 @@ }, { "name": "symfony/string", - "version": "v6.4.7", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69" + "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ffeb9591c61f65a68d47f77d12b83fa530227a69", - "reference": "ffeb9591c61f65a68d47f77d12b83fa530227a69", + "url": "https://api.github.com/repos/symfony/string/zipball/76792dbd99690a5ebef8050d9206c60c59e681d7", + "reference": "76792dbd99690a5ebef8050d9206c60c59e681d7", "shasum": "" }, "require": { @@ -4843,7 +4854,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.7" + "source": "https://github.com/symfony/string/tree/v6.4.9" }, "funding": [ { @@ -4859,20 +4870,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:22:46+00:00" + "time": "2024-06-28T09:25:38+00:00" }, { "name": "symfony/yaml", - "version": "v5.4.39", + "version": "v5.4.40", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bc780e16879000f77a1022163c052f5323b5e640" + "reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bc780e16879000f77a1022163c052f5323b5e640", - "reference": "bc780e16879000f77a1022163c052f5323b5e640", + "url": "https://api.github.com/repos/symfony/yaml/zipball/81cad0ceab3d61fe14fe941ff18a230ac9c80f83", + "reference": "81cad0ceab3d61fe14fe941ff18a230ac9c80f83", "shasum": "" }, "require": { @@ -4918,7 +4929,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.39" + "source": "https://github.com/symfony/yaml/tree/v5.4.40" }, "funding": [ { @@ -4934,7 +4945,7 @@ "type": "tidelift" } ], - "time": "2024-04-23T11:57:27+00:00" + "time": "2024-05-31T14:33:22+00:00" }, { "name": "theseer/tokenizer", @@ -4986,49 +4997,6 @@ ], "time": "2024-03-03T12:36:25+00:00" }, - { - "name": "tina4stack/tina4-documentation", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/tina4stack/tina4-documentation.git", - "reference": "4027b421acdbef0e094553595d9cfb347f052b93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tina4stack/tina4-documentation/zipball/4027b421acdbef0e094553595d9cfb347f052b93", - "reference": "4027b421acdbef0e094553595d9cfb347f052b93", - "shasum": "" - }, - "require-dev": { - "overtrue/phplint": "^2.0", - "phpunit/phpunit": "^9", - "roave/security-advisories": "dev-latest", - "tina4stack/tina4php": "dev-master" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "loadModule.php" - ], - "psr-4": { - "Tina4\\": [ - "Tina4/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Tina4 Documentation", - "support": { - "issues": "https://github.com/tina4stack/tina4-documentation/issues", - "source": "https://github.com/tina4stack/tina4-documentation/tree/main" - }, - "time": "2024-03-26T20:28:43+00:00" - }, { "name": "tina4stack/tina4php-firebird", "version": "v2.0.5", @@ -5177,8 +5145,7 @@ "minimum-stability": "stable", "stability-flags": { "roave/security-advisories": 20, - "tina4stack/tina4php-reports": 20, - "tina4stack/tina4-documentation": 20 + "tina4stack/tina4php-reports": 20 }, "prefer-stable": false, "prefer-lowest": false,