├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── .gitignore ├── LICENSE.md ├── README.md ├── composer.json ├── composer.lock ├── pint.json └── src ├── Annotations ├── Method.php └── Router.php ├── Classes └── Loader.php ├── Enums └── Methods.php ├── Facades └── Loader.php ├── Interfaces └── Loader.php ├── LaravelRouterServiceProvider.php ├── Loaders ├── ClassLoader.php └── DirectoryLoader.php └── Traits └── Loader.php /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: "Bug \U0001F41E" 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behaviour: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See the error 19 | 20 | **Expected behaviour** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Versions (please complete the following information):** 27 | - Package: 28 | - PHP: 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: Enhancement ✨ 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | /.idea -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Twirelab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Laravel Router 2 | 3 | > Attention! This package is not suitable for use in production. 4 | 5 | The router is a new way of defining routes in the Laravel framework using annotations. 6 | 7 | **Requirements** 8 | - Laravel 8 or above. 9 | - PHP 8.1 or above. 10 | 11 | ## Installation 12 | 1. Install the package via composer 13 | ```shell 14 | composer require twirelab/laravel-router 15 | ``` 16 | 17 | 2. Done! It was simple. 18 | 19 | ## Usage 20 | ### Laravel 10 and below 21 | In the place where you define routes (ex. `RouteServiceProvider`) you need to call a **Loader** class from the package. 22 | 23 | The default class: 24 | ```php 25 | by($request->user()?->id ?: $request->ip()); 53 | }); 54 | 55 | $this->routes(function () { 56 | Route::middleware('api') 57 | ->prefix('api') 58 | ->group(base_path('routes/api.php')); 59 | 60 | Route::middleware('web') 61 | ->group(base_path('routes/web.php')); 62 | }); 63 | } 64 | } 65 | ``` 66 | 67 | Change to this: 68 | ```php 69 | by($request->user()?->id ?: $request->ip()); 97 | }); 98 | 99 | $this->routes(function () { 100 | Loader::group([ 101 | 'prefix' => 'api', 102 | 'middleware' => 'api', 103 | ])->loadFromDirectories( 104 | app_path('Http/Controllers/API/**/*Controller.php'), 105 | ); 106 | 107 | Loader::group([ 108 | 'middleware' => 'web', 109 | ])->loadFromDirectories( 110 | app_path('Http/Controllers/*Controller.php'), 111 | ); 112 | }); 113 | } 114 | } 115 | 116 | ``` 117 | 118 | From now, the Loader automatically imports Controllers from selected directories. 119 | 120 | If you prefer, select controllers manually all the time. You can use the `loadControllers` method. 121 | 122 | ```php 123 | use Twirelab/LaravelRouter/Loader; 124 | 125 | Loader::group([ 126 | 'prefix' => 'api', 127 | 'middleware' => 'api', 128 | ])->loadControllers( 129 | App\Http\Controllers\FirstController::class, 130 | ); 131 | 132 | // or 133 | 134 | Loader::group([ 135 | 'prefix' => 'api', 136 | 'middleware' => 'api', 137 | ])->loadControllers( 138 | App\Http\Controllers\FirstController::class, 139 | App\Http\Controllers\SecondController::class, 140 | ); 141 | ``` 142 | 143 | If don't want to use a group function (for example: you don't need a "main" group 144 | like API or Web) you can use rest of functions directly. 145 | 146 | ```php 147 | use Twirelab/LaravelRouter/Facades/Loader; 148 | 149 | Loader::loadFromDirectories( 150 | app_path('Http/Controllers/**/*Controller.php') 151 | ); 152 | 153 | // or 154 | 155 | Loader::loadControllers( 156 | App\Http\Controllers\FirstController::class, 157 | ); 158 | 159 | ``` 160 | 161 | ### Laravel 11 and below 162 | In the place where you define routes (ex. `api.php` or `web.php`) you need to call a **Loader** class from the package. 163 | 164 | For example: 165 | ```php 166 | 'v1.', 172 | 'prefix' => 'v1', 173 | ])->loadFromDirectories( 174 | app_path('Http/Controllers/V1/**/*Controller.php') 175 | ); 176 | 177 | // or 178 | 179 | Loader::group([ 180 | 'as' => 'v1.', 181 | 'prefix' => 'v1', 182 | ])->loadControllers( 183 | App\Http\Controllers\FirstController::class, 184 | ); 185 | 186 | ``` 187 | 188 | ### Controller 189 | If you want routes to load properly, you need to add the annotate to the controller class. 190 | 191 | ```php 192 | The "route" annotation works as a group function in Laravel. 207 | 208 | **Available options for Router annotation:** 209 | - _as_ - the name of a group, 210 | - _prefix_ - the prefix of a group, 211 | - _domain_ - the domain of a group, 212 | - _middlewares_ - the list of middlewares of a group, 213 | 214 | Now, we can define the first route for the method. 215 | 216 | ```php 217 | FirstController@index` 238 | 239 | **Available options for Method annotation:** 240 | - _uri_ - the address URL for a route, 241 | - _method_ - the method of a route, 242 | - _name_ - the name of a route, 243 | - _middlewares_ - the list of middlewares of a route, 244 | - _where_ - the list of where's of a route, 245 | 246 | ## Contributing 247 | Feel free to add a new issue! Please describe in detail your problem or idea and I will check your issue and respond - Thank you! 248 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twirelab/laravel-router", 3 | "description": "The new way of routing for the Laravel", 4 | "keywords": [ 5 | "laravel", 6 | "routing", 7 | "router", 8 | "annotation", 9 | "twirelab" 10 | ], 11 | "license": "MIT", 12 | "require": { 13 | "php": "^8.1", 14 | "illuminate/support": "^8.0 | ^9.0 | ^10.0 | ^11.0", 15 | "illuminate/routing": "^8.0 | ^9.0 | ^10.0 | ^11.0" 16 | }, 17 | "require-dev": { 18 | "laravel/pint": "^1.10" 19 | }, 20 | "autoload": { 21 | "psr-4": { 22 | "Twirelab\\LaravelRouter\\": "src" 23 | } 24 | }, 25 | "extra": { 26 | "laravel": { 27 | "providers": [ 28 | "Twirelab\\LaravelRouter\\LaravelRouterServiceProvider" 29 | ] 30 | } 31 | }, 32 | "minimum-stability": "dev", 33 | "prefer-stable": true, 34 | "config": { 35 | "sort-packages": true 36 | }, 37 | "support": { 38 | "issues": "https://github.com/Twirelab/laravel-router/issues", 39 | "source": "https://github.com/Twirelab/laravel-router" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "ede11506d43eb34d1ecfb4dd2fc6c0a1", 8 | "packages": [ 9 | { 10 | "name": "carbonphp/carbon-doctrine-types", 11 | "version": "3.2.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", 15 | "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", 20 | "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^8.1" 25 | }, 26 | "conflict": { 27 | "doctrine/dbal": "<4.0.0 || >=5.0.0" 28 | }, 29 | "require-dev": { 30 | "doctrine/dbal": "^4.0.0", 31 | "nesbot/carbon": "^2.71.0 || ^3.0.0", 32 | "phpunit/phpunit": "^10.3" 33 | }, 34 | "type": "library", 35 | "autoload": { 36 | "psr-4": { 37 | "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "KyleKatarn", 47 | "email": "kylekatarnls@gmail.com" 48 | } 49 | ], 50 | "description": "Types to use Carbon in Doctrine", 51 | "keywords": [ 52 | "carbon", 53 | "date", 54 | "datetime", 55 | "doctrine", 56 | "time" 57 | ], 58 | "support": { 59 | "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", 60 | "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" 61 | }, 62 | "funding": [ 63 | { 64 | "url": "https://github.com/kylekatarnls", 65 | "type": "github" 66 | }, 67 | { 68 | "url": "https://opencollective.com/Carbon", 69 | "type": "open_collective" 70 | }, 71 | { 72 | "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", 73 | "type": "tidelift" 74 | } 75 | ], 76 | "time": "2024-02-09T16:56:22+00:00" 77 | }, 78 | { 79 | "name": "doctrine/inflector", 80 | "version": "2.0.10", 81 | "source": { 82 | "type": "git", 83 | "url": "https://github.com/doctrine/inflector.git", 84 | "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" 85 | }, 86 | "dist": { 87 | "type": "zip", 88 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", 89 | "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", 90 | "shasum": "" 91 | }, 92 | "require": { 93 | "php": "^7.2 || ^8.0" 94 | }, 95 | "require-dev": { 96 | "doctrine/coding-standard": "^11.0", 97 | "phpstan/phpstan": "^1.8", 98 | "phpstan/phpstan-phpunit": "^1.1", 99 | "phpstan/phpstan-strict-rules": "^1.3", 100 | "phpunit/phpunit": "^8.5 || ^9.5", 101 | "vimeo/psalm": "^4.25 || ^5.4" 102 | }, 103 | "type": "library", 104 | "autoload": { 105 | "psr-4": { 106 | "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" 107 | } 108 | }, 109 | "notification-url": "https://packagist.org/downloads/", 110 | "license": [ 111 | "MIT" 112 | ], 113 | "authors": [ 114 | { 115 | "name": "Guilherme Blanco", 116 | "email": "guilhermeblanco@gmail.com" 117 | }, 118 | { 119 | "name": "Roman Borschel", 120 | "email": "roman@code-factory.org" 121 | }, 122 | { 123 | "name": "Benjamin Eberlei", 124 | "email": "kontakt@beberlei.de" 125 | }, 126 | { 127 | "name": "Jonathan Wage", 128 | "email": "jonwage@gmail.com" 129 | }, 130 | { 131 | "name": "Johannes Schmitt", 132 | "email": "schmittjoh@gmail.com" 133 | } 134 | ], 135 | "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", 136 | "homepage": "https://www.doctrine-project.org/projects/inflector.html", 137 | "keywords": [ 138 | "inflection", 139 | "inflector", 140 | "lowercase", 141 | "manipulation", 142 | "php", 143 | "plural", 144 | "singular", 145 | "strings", 146 | "uppercase", 147 | "words" 148 | ], 149 | "support": { 150 | "issues": "https://github.com/doctrine/inflector/issues", 151 | "source": "https://github.com/doctrine/inflector/tree/2.0.10" 152 | }, 153 | "funding": [ 154 | { 155 | "url": "https://www.doctrine-project.org/sponsorship.html", 156 | "type": "custom" 157 | }, 158 | { 159 | "url": "https://www.patreon.com/phpdoctrine", 160 | "type": "patreon" 161 | }, 162 | { 163 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", 164 | "type": "tidelift" 165 | } 166 | ], 167 | "time": "2024-02-18T20:23:39+00:00" 168 | }, 169 | { 170 | "name": "fruitcake/php-cors", 171 | "version": "v1.3.0", 172 | "source": { 173 | "type": "git", 174 | "url": "https://github.com/fruitcake/php-cors.git", 175 | "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" 176 | }, 177 | "dist": { 178 | "type": "zip", 179 | "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", 180 | "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", 181 | "shasum": "" 182 | }, 183 | "require": { 184 | "php": "^7.4|^8.0", 185 | "symfony/http-foundation": "^4.4|^5.4|^6|^7" 186 | }, 187 | "require-dev": { 188 | "phpstan/phpstan": "^1.4", 189 | "phpunit/phpunit": "^9", 190 | "squizlabs/php_codesniffer": "^3.5" 191 | }, 192 | "type": "library", 193 | "extra": { 194 | "branch-alias": { 195 | "dev-master": "1.2-dev" 196 | } 197 | }, 198 | "autoload": { 199 | "psr-4": { 200 | "Fruitcake\\Cors\\": "src/" 201 | } 202 | }, 203 | "notification-url": "https://packagist.org/downloads/", 204 | "license": [ 205 | "MIT" 206 | ], 207 | "authors": [ 208 | { 209 | "name": "Fruitcake", 210 | "homepage": "https://fruitcake.nl" 211 | }, 212 | { 213 | "name": "Barryvdh", 214 | "email": "barryvdh@gmail.com" 215 | } 216 | ], 217 | "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", 218 | "homepage": "https://github.com/fruitcake/php-cors", 219 | "keywords": [ 220 | "cors", 221 | "laravel", 222 | "symfony" 223 | ], 224 | "support": { 225 | "issues": "https://github.com/fruitcake/php-cors/issues", 226 | "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" 227 | }, 228 | "funding": [ 229 | { 230 | "url": "https://fruitcake.nl", 231 | "type": "custom" 232 | }, 233 | { 234 | "url": "https://github.com/barryvdh", 235 | "type": "github" 236 | } 237 | ], 238 | "time": "2023-10-12T05:21:21+00:00" 239 | }, 240 | { 241 | "name": "guzzlehttp/guzzle", 242 | "version": "7.9.2", 243 | "source": { 244 | "type": "git", 245 | "url": "https://github.com/guzzle/guzzle.git", 246 | "reference": "d281ed313b989f213357e3be1a179f02196ac99b" 247 | }, 248 | "dist": { 249 | "type": "zip", 250 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", 251 | "reference": "d281ed313b989f213357e3be1a179f02196ac99b", 252 | "shasum": "" 253 | }, 254 | "require": { 255 | "ext-json": "*", 256 | "guzzlehttp/promises": "^1.5.3 || ^2.0.3", 257 | "guzzlehttp/psr7": "^2.7.0", 258 | "php": "^7.2.5 || ^8.0", 259 | "psr/http-client": "^1.0", 260 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 261 | }, 262 | "provide": { 263 | "psr/http-client-implementation": "1.0" 264 | }, 265 | "require-dev": { 266 | "bamarni/composer-bin-plugin": "^1.8.2", 267 | "ext-curl": "*", 268 | "guzzle/client-integration-tests": "3.0.2", 269 | "php-http/message-factory": "^1.1", 270 | "phpunit/phpunit": "^8.5.39 || ^9.6.20", 271 | "psr/log": "^1.1 || ^2.0 || ^3.0" 272 | }, 273 | "suggest": { 274 | "ext-curl": "Required for CURL handler support", 275 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 276 | "psr/log": "Required for using the Log middleware" 277 | }, 278 | "type": "library", 279 | "extra": { 280 | "bamarni-bin": { 281 | "bin-links": true, 282 | "forward-command": false 283 | } 284 | }, 285 | "autoload": { 286 | "files": [ 287 | "src/functions_include.php" 288 | ], 289 | "psr-4": { 290 | "GuzzleHttp\\": "src/" 291 | } 292 | }, 293 | "notification-url": "https://packagist.org/downloads/", 294 | "license": [ 295 | "MIT" 296 | ], 297 | "authors": [ 298 | { 299 | "name": "Graham Campbell", 300 | "email": "hello@gjcampbell.co.uk", 301 | "homepage": "https://github.com/GrahamCampbell" 302 | }, 303 | { 304 | "name": "Michael Dowling", 305 | "email": "mtdowling@gmail.com", 306 | "homepage": "https://github.com/mtdowling" 307 | }, 308 | { 309 | "name": "Jeremy Lindblom", 310 | "email": "jeremeamia@gmail.com", 311 | "homepage": "https://github.com/jeremeamia" 312 | }, 313 | { 314 | "name": "George Mponos", 315 | "email": "gmponos@gmail.com", 316 | "homepage": "https://github.com/gmponos" 317 | }, 318 | { 319 | "name": "Tobias Nyholm", 320 | "email": "tobias.nyholm@gmail.com", 321 | "homepage": "https://github.com/Nyholm" 322 | }, 323 | { 324 | "name": "Márk Sági-Kazár", 325 | "email": "mark.sagikazar@gmail.com", 326 | "homepage": "https://github.com/sagikazarmark" 327 | }, 328 | { 329 | "name": "Tobias Schultze", 330 | "email": "webmaster@tubo-world.de", 331 | "homepage": "https://github.com/Tobion" 332 | } 333 | ], 334 | "description": "Guzzle is a PHP HTTP client library", 335 | "keywords": [ 336 | "client", 337 | "curl", 338 | "framework", 339 | "http", 340 | "http client", 341 | "psr-18", 342 | "psr-7", 343 | "rest", 344 | "web service" 345 | ], 346 | "support": { 347 | "issues": "https://github.com/guzzle/guzzle/issues", 348 | "source": "https://github.com/guzzle/guzzle/tree/7.9.2" 349 | }, 350 | "funding": [ 351 | { 352 | "url": "https://github.com/GrahamCampbell", 353 | "type": "github" 354 | }, 355 | { 356 | "url": "https://github.com/Nyholm", 357 | "type": "github" 358 | }, 359 | { 360 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 361 | "type": "tidelift" 362 | } 363 | ], 364 | "time": "2024-07-24T11:22:20+00:00" 365 | }, 366 | { 367 | "name": "guzzlehttp/promises", 368 | "version": "2.0.4", 369 | "source": { 370 | "type": "git", 371 | "url": "https://github.com/guzzle/promises.git", 372 | "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" 373 | }, 374 | "dist": { 375 | "type": "zip", 376 | "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", 377 | "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", 378 | "shasum": "" 379 | }, 380 | "require": { 381 | "php": "^7.2.5 || ^8.0" 382 | }, 383 | "require-dev": { 384 | "bamarni/composer-bin-plugin": "^1.8.2", 385 | "phpunit/phpunit": "^8.5.39 || ^9.6.20" 386 | }, 387 | "type": "library", 388 | "extra": { 389 | "bamarni-bin": { 390 | "bin-links": true, 391 | "forward-command": false 392 | } 393 | }, 394 | "autoload": { 395 | "psr-4": { 396 | "GuzzleHttp\\Promise\\": "src/" 397 | } 398 | }, 399 | "notification-url": "https://packagist.org/downloads/", 400 | "license": [ 401 | "MIT" 402 | ], 403 | "authors": [ 404 | { 405 | "name": "Graham Campbell", 406 | "email": "hello@gjcampbell.co.uk", 407 | "homepage": "https://github.com/GrahamCampbell" 408 | }, 409 | { 410 | "name": "Michael Dowling", 411 | "email": "mtdowling@gmail.com", 412 | "homepage": "https://github.com/mtdowling" 413 | }, 414 | { 415 | "name": "Tobias Nyholm", 416 | "email": "tobias.nyholm@gmail.com", 417 | "homepage": "https://github.com/Nyholm" 418 | }, 419 | { 420 | "name": "Tobias Schultze", 421 | "email": "webmaster@tubo-world.de", 422 | "homepage": "https://github.com/Tobion" 423 | } 424 | ], 425 | "description": "Guzzle promises library", 426 | "keywords": [ 427 | "promise" 428 | ], 429 | "support": { 430 | "issues": "https://github.com/guzzle/promises/issues", 431 | "source": "https://github.com/guzzle/promises/tree/2.0.4" 432 | }, 433 | "funding": [ 434 | { 435 | "url": "https://github.com/GrahamCampbell", 436 | "type": "github" 437 | }, 438 | { 439 | "url": "https://github.com/Nyholm", 440 | "type": "github" 441 | }, 442 | { 443 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 444 | "type": "tidelift" 445 | } 446 | ], 447 | "time": "2024-10-17T10:06:22+00:00" 448 | }, 449 | { 450 | "name": "guzzlehttp/psr7", 451 | "version": "2.7.0", 452 | "source": { 453 | "type": "git", 454 | "url": "https://github.com/guzzle/psr7.git", 455 | "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" 456 | }, 457 | "dist": { 458 | "type": "zip", 459 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", 460 | "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", 461 | "shasum": "" 462 | }, 463 | "require": { 464 | "php": "^7.2.5 || ^8.0", 465 | "psr/http-factory": "^1.0", 466 | "psr/http-message": "^1.1 || ^2.0", 467 | "ralouphie/getallheaders": "^3.0" 468 | }, 469 | "provide": { 470 | "psr/http-factory-implementation": "1.0", 471 | "psr/http-message-implementation": "1.0" 472 | }, 473 | "require-dev": { 474 | "bamarni/composer-bin-plugin": "^1.8.2", 475 | "http-interop/http-factory-tests": "0.9.0", 476 | "phpunit/phpunit": "^8.5.39 || ^9.6.20" 477 | }, 478 | "suggest": { 479 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 480 | }, 481 | "type": "library", 482 | "extra": { 483 | "bamarni-bin": { 484 | "bin-links": true, 485 | "forward-command": false 486 | } 487 | }, 488 | "autoload": { 489 | "psr-4": { 490 | "GuzzleHttp\\Psr7\\": "src/" 491 | } 492 | }, 493 | "notification-url": "https://packagist.org/downloads/", 494 | "license": [ 495 | "MIT" 496 | ], 497 | "authors": [ 498 | { 499 | "name": "Graham Campbell", 500 | "email": "hello@gjcampbell.co.uk", 501 | "homepage": "https://github.com/GrahamCampbell" 502 | }, 503 | { 504 | "name": "Michael Dowling", 505 | "email": "mtdowling@gmail.com", 506 | "homepage": "https://github.com/mtdowling" 507 | }, 508 | { 509 | "name": "George Mponos", 510 | "email": "gmponos@gmail.com", 511 | "homepage": "https://github.com/gmponos" 512 | }, 513 | { 514 | "name": "Tobias Nyholm", 515 | "email": "tobias.nyholm@gmail.com", 516 | "homepage": "https://github.com/Nyholm" 517 | }, 518 | { 519 | "name": "Márk Sági-Kazár", 520 | "email": "mark.sagikazar@gmail.com", 521 | "homepage": "https://github.com/sagikazarmark" 522 | }, 523 | { 524 | "name": "Tobias Schultze", 525 | "email": "webmaster@tubo-world.de", 526 | "homepage": "https://github.com/Tobion" 527 | }, 528 | { 529 | "name": "Márk Sági-Kazár", 530 | "email": "mark.sagikazar@gmail.com", 531 | "homepage": "https://sagikazarmark.hu" 532 | } 533 | ], 534 | "description": "PSR-7 message implementation that also provides common utility methods", 535 | "keywords": [ 536 | "http", 537 | "message", 538 | "psr-7", 539 | "request", 540 | "response", 541 | "stream", 542 | "uri", 543 | "url" 544 | ], 545 | "support": { 546 | "issues": "https://github.com/guzzle/psr7/issues", 547 | "source": "https://github.com/guzzle/psr7/tree/2.7.0" 548 | }, 549 | "funding": [ 550 | { 551 | "url": "https://github.com/GrahamCampbell", 552 | "type": "github" 553 | }, 554 | { 555 | "url": "https://github.com/Nyholm", 556 | "type": "github" 557 | }, 558 | { 559 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 560 | "type": "tidelift" 561 | } 562 | ], 563 | "time": "2024-07-18T11:15:46+00:00" 564 | }, 565 | { 566 | "name": "guzzlehttp/uri-template", 567 | "version": "v1.0.3", 568 | "source": { 569 | "type": "git", 570 | "url": "https://github.com/guzzle/uri-template.git", 571 | "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" 572 | }, 573 | "dist": { 574 | "type": "zip", 575 | "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", 576 | "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", 577 | "shasum": "" 578 | }, 579 | "require": { 580 | "php": "^7.2.5 || ^8.0", 581 | "symfony/polyfill-php80": "^1.24" 582 | }, 583 | "require-dev": { 584 | "bamarni/composer-bin-plugin": "^1.8.2", 585 | "phpunit/phpunit": "^8.5.36 || ^9.6.15", 586 | "uri-template/tests": "1.0.0" 587 | }, 588 | "type": "library", 589 | "extra": { 590 | "bamarni-bin": { 591 | "bin-links": true, 592 | "forward-command": false 593 | } 594 | }, 595 | "autoload": { 596 | "psr-4": { 597 | "GuzzleHttp\\UriTemplate\\": "src" 598 | } 599 | }, 600 | "notification-url": "https://packagist.org/downloads/", 601 | "license": [ 602 | "MIT" 603 | ], 604 | "authors": [ 605 | { 606 | "name": "Graham Campbell", 607 | "email": "hello@gjcampbell.co.uk", 608 | "homepage": "https://github.com/GrahamCampbell" 609 | }, 610 | { 611 | "name": "Michael Dowling", 612 | "email": "mtdowling@gmail.com", 613 | "homepage": "https://github.com/mtdowling" 614 | }, 615 | { 616 | "name": "George Mponos", 617 | "email": "gmponos@gmail.com", 618 | "homepage": "https://github.com/gmponos" 619 | }, 620 | { 621 | "name": "Tobias Nyholm", 622 | "email": "tobias.nyholm@gmail.com", 623 | "homepage": "https://github.com/Nyholm" 624 | } 625 | ], 626 | "description": "A polyfill class for uri_template of PHP", 627 | "keywords": [ 628 | "guzzlehttp", 629 | "uri-template" 630 | ], 631 | "support": { 632 | "issues": "https://github.com/guzzle/uri-template/issues", 633 | "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" 634 | }, 635 | "funding": [ 636 | { 637 | "url": "https://github.com/GrahamCampbell", 638 | "type": "github" 639 | }, 640 | { 641 | "url": "https://github.com/Nyholm", 642 | "type": "github" 643 | }, 644 | { 645 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", 646 | "type": "tidelift" 647 | } 648 | ], 649 | "time": "2023-12-03T19:50:20+00:00" 650 | }, 651 | { 652 | "name": "illuminate/collections", 653 | "version": "v11.31.0", 654 | "source": { 655 | "type": "git", 656 | "url": "https://github.com/illuminate/collections.git", 657 | "reference": "4fdef06e35aac0239d76033a2bad0ddb921226e8" 658 | }, 659 | "dist": { 660 | "type": "zip", 661 | "url": "https://api.github.com/repos/illuminate/collections/zipball/4fdef06e35aac0239d76033a2bad0ddb921226e8", 662 | "reference": "4fdef06e35aac0239d76033a2bad0ddb921226e8", 663 | "shasum": "" 664 | }, 665 | "require": { 666 | "illuminate/conditionable": "^11.0", 667 | "illuminate/contracts": "^11.0", 668 | "illuminate/macroable": "^11.0", 669 | "php": "^8.2" 670 | }, 671 | "suggest": { 672 | "symfony/var-dumper": "Required to use the dump method (^7.0)." 673 | }, 674 | "type": "library", 675 | "extra": { 676 | "branch-alias": { 677 | "dev-master": "11.x-dev" 678 | } 679 | }, 680 | "autoload": { 681 | "files": [ 682 | "helpers.php" 683 | ], 684 | "psr-4": { 685 | "Illuminate\\Support\\": "" 686 | } 687 | }, 688 | "notification-url": "https://packagist.org/downloads/", 689 | "license": [ 690 | "MIT" 691 | ], 692 | "authors": [ 693 | { 694 | "name": "Taylor Otwell", 695 | "email": "taylor@laravel.com" 696 | } 697 | ], 698 | "description": "The Illuminate Collections package.", 699 | "homepage": "https://laravel.com", 700 | "support": { 701 | "issues": "https://github.com/laravel/framework/issues", 702 | "source": "https://github.com/laravel/framework" 703 | }, 704 | "time": "2024-11-08T03:05:25+00:00" 705 | }, 706 | { 707 | "name": "illuminate/conditionable", 708 | "version": "v11.31.0", 709 | "source": { 710 | "type": "git", 711 | "url": "https://github.com/illuminate/conditionable.git", 712 | "reference": "362dd761b9920367bca1427a902158225e9e3a23" 713 | }, 714 | "dist": { 715 | "type": "zip", 716 | "url": "https://api.github.com/repos/illuminate/conditionable/zipball/362dd761b9920367bca1427a902158225e9e3a23", 717 | "reference": "362dd761b9920367bca1427a902158225e9e3a23", 718 | "shasum": "" 719 | }, 720 | "require": { 721 | "php": "^8.0.2" 722 | }, 723 | "type": "library", 724 | "extra": { 725 | "branch-alias": { 726 | "dev-master": "11.x-dev" 727 | } 728 | }, 729 | "autoload": { 730 | "psr-4": { 731 | "Illuminate\\Support\\": "" 732 | } 733 | }, 734 | "notification-url": "https://packagist.org/downloads/", 735 | "license": [ 736 | "MIT" 737 | ], 738 | "authors": [ 739 | { 740 | "name": "Taylor Otwell", 741 | "email": "taylor@laravel.com" 742 | } 743 | ], 744 | "description": "The Illuminate Conditionable package.", 745 | "homepage": "https://laravel.com", 746 | "support": { 747 | "issues": "https://github.com/laravel/framework/issues", 748 | "source": "https://github.com/laravel/framework" 749 | }, 750 | "time": "2024-06-28T20:10:30+00:00" 751 | }, 752 | { 753 | "name": "illuminate/container", 754 | "version": "v11.31.0", 755 | "source": { 756 | "type": "git", 757 | "url": "https://github.com/illuminate/container.git", 758 | "reference": "06dfc614aff58384b28ba5ad191f6a02d6b192cb" 759 | }, 760 | "dist": { 761 | "type": "zip", 762 | "url": "https://api.github.com/repos/illuminate/container/zipball/06dfc614aff58384b28ba5ad191f6a02d6b192cb", 763 | "reference": "06dfc614aff58384b28ba5ad191f6a02d6b192cb", 764 | "shasum": "" 765 | }, 766 | "require": { 767 | "illuminate/contracts": "^11.0", 768 | "php": "^8.2", 769 | "psr/container": "^1.1.1|^2.0.1" 770 | }, 771 | "provide": { 772 | "psr/container-implementation": "1.1|2.0" 773 | }, 774 | "type": "library", 775 | "extra": { 776 | "branch-alias": { 777 | "dev-master": "11.x-dev" 778 | } 779 | }, 780 | "autoload": { 781 | "psr-4": { 782 | "Illuminate\\Container\\": "" 783 | } 784 | }, 785 | "notification-url": "https://packagist.org/downloads/", 786 | "license": [ 787 | "MIT" 788 | ], 789 | "authors": [ 790 | { 791 | "name": "Taylor Otwell", 792 | "email": "taylor@laravel.com" 793 | } 794 | ], 795 | "description": "The Illuminate Container package.", 796 | "homepage": "https://laravel.com", 797 | "support": { 798 | "issues": "https://github.com/laravel/framework/issues", 799 | "source": "https://github.com/laravel/framework" 800 | }, 801 | "time": "2024-10-11T15:30:11+00:00" 802 | }, 803 | { 804 | "name": "illuminate/contracts", 805 | "version": "v11.31.0", 806 | "source": { 807 | "type": "git", 808 | "url": "https://github.com/illuminate/contracts.git", 809 | "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8" 810 | }, 811 | "dist": { 812 | "type": "zip", 813 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/56312862af937bd6da8e6dc8bbd88188dfb478f8", 814 | "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8", 815 | "shasum": "" 816 | }, 817 | "require": { 818 | "php": "^8.2", 819 | "psr/container": "^1.1.1|^2.0.1", 820 | "psr/simple-cache": "^1.0|^2.0|^3.0" 821 | }, 822 | "type": "library", 823 | "extra": { 824 | "branch-alias": { 825 | "dev-master": "11.x-dev" 826 | } 827 | }, 828 | "autoload": { 829 | "psr-4": { 830 | "Illuminate\\Contracts\\": "" 831 | } 832 | }, 833 | "notification-url": "https://packagist.org/downloads/", 834 | "license": [ 835 | "MIT" 836 | ], 837 | "authors": [ 838 | { 839 | "name": "Taylor Otwell", 840 | "email": "taylor@laravel.com" 841 | } 842 | ], 843 | "description": "The Illuminate Contracts package.", 844 | "homepage": "https://laravel.com", 845 | "support": { 846 | "issues": "https://github.com/laravel/framework/issues", 847 | "source": "https://github.com/laravel/framework" 848 | }, 849 | "time": "2024-09-22T15:08:08+00:00" 850 | }, 851 | { 852 | "name": "illuminate/filesystem", 853 | "version": "v11.31.0", 854 | "source": { 855 | "type": "git", 856 | "url": "https://github.com/illuminate/filesystem.git", 857 | "reference": "ce7013a350fb06bc65e8a2cf15fd2015f49e476d" 858 | }, 859 | "dist": { 860 | "type": "zip", 861 | "url": "https://api.github.com/repos/illuminate/filesystem/zipball/ce7013a350fb06bc65e8a2cf15fd2015f49e476d", 862 | "reference": "ce7013a350fb06bc65e8a2cf15fd2015f49e476d", 863 | "shasum": "" 864 | }, 865 | "require": { 866 | "illuminate/collections": "^11.0", 867 | "illuminate/contracts": "^11.0", 868 | "illuminate/macroable": "^11.0", 869 | "illuminate/support": "^11.0", 870 | "php": "^8.2", 871 | "symfony/finder": "^7.0" 872 | }, 873 | "suggest": { 874 | "ext-fileinfo": "Required to use the Filesystem class.", 875 | "ext-ftp": "Required to use the Flysystem FTP driver.", 876 | "ext-hash": "Required to use the Filesystem class.", 877 | "illuminate/http": "Required for handling uploaded files (^7.0).", 878 | "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", 879 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", 880 | "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", 881 | "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", 882 | "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", 883 | "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", 884 | "symfony/mime": "Required to enable support for guessing extensions (^7.0)." 885 | }, 886 | "type": "library", 887 | "extra": { 888 | "branch-alias": { 889 | "dev-master": "11.x-dev" 890 | } 891 | }, 892 | "autoload": { 893 | "files": [ 894 | "functions.php" 895 | ], 896 | "psr-4": { 897 | "Illuminate\\Filesystem\\": "" 898 | } 899 | }, 900 | "notification-url": "https://packagist.org/downloads/", 901 | "license": [ 902 | "MIT" 903 | ], 904 | "authors": [ 905 | { 906 | "name": "Taylor Otwell", 907 | "email": "taylor@laravel.com" 908 | } 909 | ], 910 | "description": "The Illuminate Filesystem package.", 911 | "homepage": "https://laravel.com", 912 | "support": { 913 | "issues": "https://github.com/laravel/framework/issues", 914 | "source": "https://github.com/laravel/framework" 915 | }, 916 | "time": "2024-09-22T15:10:50+00:00" 917 | }, 918 | { 919 | "name": "illuminate/http", 920 | "version": "v11.31.0", 921 | "source": { 922 | "type": "git", 923 | "url": "https://github.com/illuminate/http.git", 924 | "reference": "24548e7120184ad4f4c1704845fb2bdf8a86e1bb" 925 | }, 926 | "dist": { 927 | "type": "zip", 928 | "url": "https://api.github.com/repos/illuminate/http/zipball/24548e7120184ad4f4c1704845fb2bdf8a86e1bb", 929 | "reference": "24548e7120184ad4f4c1704845fb2bdf8a86e1bb", 930 | "shasum": "" 931 | }, 932 | "require": { 933 | "ext-filter": "*", 934 | "fruitcake/php-cors": "^1.3", 935 | "guzzlehttp/guzzle": "^7.8", 936 | "guzzlehttp/uri-template": "^1.0", 937 | "illuminate/collections": "^11.0", 938 | "illuminate/macroable": "^11.0", 939 | "illuminate/session": "^11.0", 940 | "illuminate/support": "^11.0", 941 | "php": "^8.2", 942 | "symfony/http-foundation": "^7.0", 943 | "symfony/http-kernel": "^7.0", 944 | "symfony/mime": "^7.0", 945 | "symfony/polyfill-php83": "^1.28" 946 | }, 947 | "suggest": { 948 | "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image()." 949 | }, 950 | "type": "library", 951 | "extra": { 952 | "branch-alias": { 953 | "dev-master": "11.x-dev" 954 | } 955 | }, 956 | "autoload": { 957 | "psr-4": { 958 | "Illuminate\\Http\\": "" 959 | } 960 | }, 961 | "notification-url": "https://packagist.org/downloads/", 962 | "license": [ 963 | "MIT" 964 | ], 965 | "authors": [ 966 | { 967 | "name": "Taylor Otwell", 968 | "email": "taylor@laravel.com" 969 | } 970 | ], 971 | "description": "The Illuminate Http package.", 972 | "homepage": "https://laravel.com", 973 | "support": { 974 | "issues": "https://github.com/laravel/framework/issues", 975 | "source": "https://github.com/laravel/framework" 976 | }, 977 | "time": "2024-11-11T20:17:14+00:00" 978 | }, 979 | { 980 | "name": "illuminate/macroable", 981 | "version": "v11.31.0", 982 | "source": { 983 | "type": "git", 984 | "url": "https://github.com/illuminate/macroable.git", 985 | "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed" 986 | }, 987 | "dist": { 988 | "type": "zip", 989 | "url": "https://api.github.com/repos/illuminate/macroable/zipball/e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", 990 | "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", 991 | "shasum": "" 992 | }, 993 | "require": { 994 | "php": "^8.2" 995 | }, 996 | "type": "library", 997 | "extra": { 998 | "branch-alias": { 999 | "dev-master": "11.x-dev" 1000 | } 1001 | }, 1002 | "autoload": { 1003 | "psr-4": { 1004 | "Illuminate\\Support\\": "" 1005 | } 1006 | }, 1007 | "notification-url": "https://packagist.org/downloads/", 1008 | "license": [ 1009 | "MIT" 1010 | ], 1011 | "authors": [ 1012 | { 1013 | "name": "Taylor Otwell", 1014 | "email": "taylor@laravel.com" 1015 | } 1016 | ], 1017 | "description": "The Illuminate Macroable package.", 1018 | "homepage": "https://laravel.com", 1019 | "support": { 1020 | "issues": "https://github.com/laravel/framework/issues", 1021 | "source": "https://github.com/laravel/framework" 1022 | }, 1023 | "time": "2024-06-28T20:10:30+00:00" 1024 | }, 1025 | { 1026 | "name": "illuminate/pipeline", 1027 | "version": "v11.31.0", 1028 | "source": { 1029 | "type": "git", 1030 | "url": "https://github.com/illuminate/pipeline.git", 1031 | "reference": "b359be74adc3ba4a637ca01c3645a26724a4c8a0" 1032 | }, 1033 | "dist": { 1034 | "type": "zip", 1035 | "url": "https://api.github.com/repos/illuminate/pipeline/zipball/b359be74adc3ba4a637ca01c3645a26724a4c8a0", 1036 | "reference": "b359be74adc3ba4a637ca01c3645a26724a4c8a0", 1037 | "shasum": "" 1038 | }, 1039 | "require": { 1040 | "illuminate/contracts": "^11.0", 1041 | "illuminate/support": "^11.0", 1042 | "php": "^8.2" 1043 | }, 1044 | "type": "library", 1045 | "extra": { 1046 | "branch-alias": { 1047 | "dev-master": "11.x-dev" 1048 | } 1049 | }, 1050 | "autoload": { 1051 | "psr-4": { 1052 | "Illuminate\\Pipeline\\": "" 1053 | } 1054 | }, 1055 | "notification-url": "https://packagist.org/downloads/", 1056 | "license": [ 1057 | "MIT" 1058 | ], 1059 | "authors": [ 1060 | { 1061 | "name": "Taylor Otwell", 1062 | "email": "taylor@laravel.com" 1063 | } 1064 | ], 1065 | "description": "The Illuminate Pipeline package.", 1066 | "homepage": "https://laravel.com", 1067 | "support": { 1068 | "issues": "https://github.com/laravel/framework/issues", 1069 | "source": "https://github.com/laravel/framework" 1070 | }, 1071 | "time": "2024-10-18T13:11:08+00:00" 1072 | }, 1073 | { 1074 | "name": "illuminate/routing", 1075 | "version": "v11.31.0", 1076 | "source": { 1077 | "type": "git", 1078 | "url": "https://github.com/illuminate/routing.git", 1079 | "reference": "c7edd35ee99c93a1e935e7c9f6912426dc8e0e4e" 1080 | }, 1081 | "dist": { 1082 | "type": "zip", 1083 | "url": "https://api.github.com/repos/illuminate/routing/zipball/c7edd35ee99c93a1e935e7c9f6912426dc8e0e4e", 1084 | "reference": "c7edd35ee99c93a1e935e7c9f6912426dc8e0e4e", 1085 | "shasum": "" 1086 | }, 1087 | "require": { 1088 | "ext-filter": "*", 1089 | "ext-hash": "*", 1090 | "illuminate/collections": "^11.0", 1091 | "illuminate/container": "^11.0", 1092 | "illuminate/contracts": "^11.0", 1093 | "illuminate/http": "^11.0", 1094 | "illuminate/macroable": "^11.0", 1095 | "illuminate/pipeline": "^11.0", 1096 | "illuminate/session": "^11.0", 1097 | "illuminate/support": "^11.0", 1098 | "php": "^8.2", 1099 | "symfony/http-foundation": "^7.0", 1100 | "symfony/http-kernel": "^7.0", 1101 | "symfony/routing": "^7.0" 1102 | }, 1103 | "suggest": { 1104 | "illuminate/console": "Required to use the make commands (^11.0).", 1105 | "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", 1106 | "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." 1107 | }, 1108 | "type": "library", 1109 | "extra": { 1110 | "branch-alias": { 1111 | "dev-master": "11.x-dev" 1112 | } 1113 | }, 1114 | "autoload": { 1115 | "psr-4": { 1116 | "Illuminate\\Routing\\": "" 1117 | } 1118 | }, 1119 | "notification-url": "https://packagist.org/downloads/", 1120 | "license": [ 1121 | "MIT" 1122 | ], 1123 | "authors": [ 1124 | { 1125 | "name": "Taylor Otwell", 1126 | "email": "taylor@laravel.com" 1127 | } 1128 | ], 1129 | "description": "The Illuminate Routing package.", 1130 | "homepage": "https://laravel.com", 1131 | "support": { 1132 | "issues": "https://github.com/laravel/framework/issues", 1133 | "source": "https://github.com/laravel/framework" 1134 | }, 1135 | "time": "2024-11-03T21:00:34+00:00" 1136 | }, 1137 | { 1138 | "name": "illuminate/session", 1139 | "version": "v11.31.0", 1140 | "source": { 1141 | "type": "git", 1142 | "url": "https://github.com/illuminate/session.git", 1143 | "reference": "cc4be7c46678328858ef2aa692013536717f32ec" 1144 | }, 1145 | "dist": { 1146 | "type": "zip", 1147 | "url": "https://api.github.com/repos/illuminate/session/zipball/cc4be7c46678328858ef2aa692013536717f32ec", 1148 | "reference": "cc4be7c46678328858ef2aa692013536717f32ec", 1149 | "shasum": "" 1150 | }, 1151 | "require": { 1152 | "ext-ctype": "*", 1153 | "ext-session": "*", 1154 | "illuminate/collections": "^11.0", 1155 | "illuminate/contracts": "^11.0", 1156 | "illuminate/filesystem": "^11.0", 1157 | "illuminate/support": "^11.0", 1158 | "php": "^8.2", 1159 | "symfony/finder": "^7.0", 1160 | "symfony/http-foundation": "^7.0" 1161 | }, 1162 | "suggest": { 1163 | "illuminate/console": "Required to use the session:table command (^11.0)." 1164 | }, 1165 | "type": "library", 1166 | "extra": { 1167 | "branch-alias": { 1168 | "dev-master": "11.x-dev" 1169 | } 1170 | }, 1171 | "autoload": { 1172 | "psr-4": { 1173 | "Illuminate\\Session\\": "" 1174 | } 1175 | }, 1176 | "notification-url": "https://packagist.org/downloads/", 1177 | "license": [ 1178 | "MIT" 1179 | ], 1180 | "authors": [ 1181 | { 1182 | "name": "Taylor Otwell", 1183 | "email": "taylor@laravel.com" 1184 | } 1185 | ], 1186 | "description": "The Illuminate Session package.", 1187 | "homepage": "https://laravel.com", 1188 | "support": { 1189 | "issues": "https://github.com/laravel/framework/issues", 1190 | "source": "https://github.com/laravel/framework" 1191 | }, 1192 | "time": "2024-08-08T13:30:23+00:00" 1193 | }, 1194 | { 1195 | "name": "illuminate/support", 1196 | "version": "v11.31.0", 1197 | "source": { 1198 | "type": "git", 1199 | "url": "https://github.com/illuminate/support.git", 1200 | "reference": "866b8240387ecdcbbf4a7e5713c0f93b321544d5" 1201 | }, 1202 | "dist": { 1203 | "type": "zip", 1204 | "url": "https://api.github.com/repos/illuminate/support/zipball/866b8240387ecdcbbf4a7e5713c0f93b321544d5", 1205 | "reference": "866b8240387ecdcbbf4a7e5713c0f93b321544d5", 1206 | "shasum": "" 1207 | }, 1208 | "require": { 1209 | "doctrine/inflector": "^2.0", 1210 | "ext-ctype": "*", 1211 | "ext-filter": "*", 1212 | "ext-mbstring": "*", 1213 | "illuminate/collections": "^11.0", 1214 | "illuminate/conditionable": "^11.0", 1215 | "illuminate/contracts": "^11.0", 1216 | "illuminate/macroable": "^11.0", 1217 | "nesbot/carbon": "^2.72.2|^3.0", 1218 | "php": "^8.2", 1219 | "voku/portable-ascii": "^2.0" 1220 | }, 1221 | "conflict": { 1222 | "tightenco/collect": "<5.5.33" 1223 | }, 1224 | "replace": { 1225 | "spatie/once": "*" 1226 | }, 1227 | "suggest": { 1228 | "illuminate/filesystem": "Required to use the composer class (^11.0).", 1229 | "laravel/serializable-closure": "Required to use the once function (^1.3).", 1230 | "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", 1231 | "ramsey/uuid": "Required to use Str::uuid() (^4.7).", 1232 | "symfony/process": "Required to use the composer class (^7.0).", 1233 | "symfony/uid": "Required to use Str::ulid() (^7.0).", 1234 | "symfony/var-dumper": "Required to use the dd function (^7.0).", 1235 | "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." 1236 | }, 1237 | "type": "library", 1238 | "extra": { 1239 | "branch-alias": { 1240 | "dev-master": "11.x-dev" 1241 | } 1242 | }, 1243 | "autoload": { 1244 | "files": [ 1245 | "functions.php", 1246 | "helpers.php" 1247 | ], 1248 | "psr-4": { 1249 | "Illuminate\\Support\\": "" 1250 | } 1251 | }, 1252 | "notification-url": "https://packagist.org/downloads/", 1253 | "license": [ 1254 | "MIT" 1255 | ], 1256 | "authors": [ 1257 | { 1258 | "name": "Taylor Otwell", 1259 | "email": "taylor@laravel.com" 1260 | } 1261 | ], 1262 | "description": "The Illuminate Support package.", 1263 | "homepage": "https://laravel.com", 1264 | "support": { 1265 | "issues": "https://github.com/laravel/framework/issues", 1266 | "source": "https://github.com/laravel/framework" 1267 | }, 1268 | "time": "2024-11-11T20:45:02+00:00" 1269 | }, 1270 | { 1271 | "name": "nesbot/carbon", 1272 | "version": "3.8.2", 1273 | "source": { 1274 | "type": "git", 1275 | "url": "https://github.com/briannesbitt/Carbon.git", 1276 | "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" 1277 | }, 1278 | "dist": { 1279 | "type": "zip", 1280 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", 1281 | "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", 1282 | "shasum": "" 1283 | }, 1284 | "require": { 1285 | "carbonphp/carbon-doctrine-types": "<100.0", 1286 | "ext-json": "*", 1287 | "php": "^8.1", 1288 | "psr/clock": "^1.0", 1289 | "symfony/clock": "^6.3 || ^7.0", 1290 | "symfony/polyfill-mbstring": "^1.0", 1291 | "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" 1292 | }, 1293 | "provide": { 1294 | "psr/clock-implementation": "1.0" 1295 | }, 1296 | "require-dev": { 1297 | "doctrine/dbal": "^3.6.3 || ^4.0", 1298 | "doctrine/orm": "^2.15.2 || ^3.0", 1299 | "friendsofphp/php-cs-fixer": "^3.57.2", 1300 | "kylekatarnls/multi-tester": "^2.5.3", 1301 | "ondrejmirtes/better-reflection": "^6.25.0.4", 1302 | "phpmd/phpmd": "^2.15.0", 1303 | "phpstan/extension-installer": "^1.3.1", 1304 | "phpstan/phpstan": "^1.11.2", 1305 | "phpunit/phpunit": "^10.5.20", 1306 | "squizlabs/php_codesniffer": "^3.9.0" 1307 | }, 1308 | "bin": [ 1309 | "bin/carbon" 1310 | ], 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-master": "3.x-dev", 1315 | "dev-2.x": "2.x-dev" 1316 | }, 1317 | "laravel": { 1318 | "providers": [ 1319 | "Carbon\\Laravel\\ServiceProvider" 1320 | ] 1321 | }, 1322 | "phpstan": { 1323 | "includes": [ 1324 | "extension.neon" 1325 | ] 1326 | } 1327 | }, 1328 | "autoload": { 1329 | "psr-4": { 1330 | "Carbon\\": "src/Carbon/" 1331 | } 1332 | }, 1333 | "notification-url": "https://packagist.org/downloads/", 1334 | "license": [ 1335 | "MIT" 1336 | ], 1337 | "authors": [ 1338 | { 1339 | "name": "Brian Nesbitt", 1340 | "email": "brian@nesbot.com", 1341 | "homepage": "https://markido.com" 1342 | }, 1343 | { 1344 | "name": "kylekatarnls", 1345 | "homepage": "https://github.com/kylekatarnls" 1346 | } 1347 | ], 1348 | "description": "An API extension for DateTime that supports 281 different languages.", 1349 | "homepage": "https://carbon.nesbot.com", 1350 | "keywords": [ 1351 | "date", 1352 | "datetime", 1353 | "time" 1354 | ], 1355 | "support": { 1356 | "docs": "https://carbon.nesbot.com/docs", 1357 | "issues": "https://github.com/briannesbitt/Carbon/issues", 1358 | "source": "https://github.com/briannesbitt/Carbon" 1359 | }, 1360 | "funding": [ 1361 | { 1362 | "url": "https://github.com/sponsors/kylekatarnls", 1363 | "type": "github" 1364 | }, 1365 | { 1366 | "url": "https://opencollective.com/Carbon#sponsor", 1367 | "type": "opencollective" 1368 | }, 1369 | { 1370 | "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", 1371 | "type": "tidelift" 1372 | } 1373 | ], 1374 | "time": "2024-11-07T17:46:48+00:00" 1375 | }, 1376 | { 1377 | "name": "psr/clock", 1378 | "version": "1.0.0", 1379 | "source": { 1380 | "type": "git", 1381 | "url": "https://github.com/php-fig/clock.git", 1382 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" 1383 | }, 1384 | "dist": { 1385 | "type": "zip", 1386 | "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", 1387 | "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", 1388 | "shasum": "" 1389 | }, 1390 | "require": { 1391 | "php": "^7.0 || ^8.0" 1392 | }, 1393 | "type": "library", 1394 | "autoload": { 1395 | "psr-4": { 1396 | "Psr\\Clock\\": "src/" 1397 | } 1398 | }, 1399 | "notification-url": "https://packagist.org/downloads/", 1400 | "license": [ 1401 | "MIT" 1402 | ], 1403 | "authors": [ 1404 | { 1405 | "name": "PHP-FIG", 1406 | "homepage": "https://www.php-fig.org/" 1407 | } 1408 | ], 1409 | "description": "Common interface for reading the clock.", 1410 | "homepage": "https://github.com/php-fig/clock", 1411 | "keywords": [ 1412 | "clock", 1413 | "now", 1414 | "psr", 1415 | "psr-20", 1416 | "time" 1417 | ], 1418 | "support": { 1419 | "issues": "https://github.com/php-fig/clock/issues", 1420 | "source": "https://github.com/php-fig/clock/tree/1.0.0" 1421 | }, 1422 | "time": "2022-11-25T14:36:26+00:00" 1423 | }, 1424 | { 1425 | "name": "psr/container", 1426 | "version": "2.0.2", 1427 | "source": { 1428 | "type": "git", 1429 | "url": "https://github.com/php-fig/container.git", 1430 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 1431 | }, 1432 | "dist": { 1433 | "type": "zip", 1434 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1435 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1436 | "shasum": "" 1437 | }, 1438 | "require": { 1439 | "php": ">=7.4.0" 1440 | }, 1441 | "type": "library", 1442 | "extra": { 1443 | "branch-alias": { 1444 | "dev-master": "2.0.x-dev" 1445 | } 1446 | }, 1447 | "autoload": { 1448 | "psr-4": { 1449 | "Psr\\Container\\": "src/" 1450 | } 1451 | }, 1452 | "notification-url": "https://packagist.org/downloads/", 1453 | "license": [ 1454 | "MIT" 1455 | ], 1456 | "authors": [ 1457 | { 1458 | "name": "PHP-FIG", 1459 | "homepage": "https://www.php-fig.org/" 1460 | } 1461 | ], 1462 | "description": "Common Container Interface (PHP FIG PSR-11)", 1463 | "homepage": "https://github.com/php-fig/container", 1464 | "keywords": [ 1465 | "PSR-11", 1466 | "container", 1467 | "container-interface", 1468 | "container-interop", 1469 | "psr" 1470 | ], 1471 | "support": { 1472 | "issues": "https://github.com/php-fig/container/issues", 1473 | "source": "https://github.com/php-fig/container/tree/2.0.2" 1474 | }, 1475 | "time": "2021-11-05T16:47:00+00:00" 1476 | }, 1477 | { 1478 | "name": "psr/event-dispatcher", 1479 | "version": "1.0.0", 1480 | "source": { 1481 | "type": "git", 1482 | "url": "https://github.com/php-fig/event-dispatcher.git", 1483 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 1484 | }, 1485 | "dist": { 1486 | "type": "zip", 1487 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 1488 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1489 | "shasum": "" 1490 | }, 1491 | "require": { 1492 | "php": ">=7.2.0" 1493 | }, 1494 | "type": "library", 1495 | "extra": { 1496 | "branch-alias": { 1497 | "dev-master": "1.0.x-dev" 1498 | } 1499 | }, 1500 | "autoload": { 1501 | "psr-4": { 1502 | "Psr\\EventDispatcher\\": "src/" 1503 | } 1504 | }, 1505 | "notification-url": "https://packagist.org/downloads/", 1506 | "license": [ 1507 | "MIT" 1508 | ], 1509 | "authors": [ 1510 | { 1511 | "name": "PHP-FIG", 1512 | "homepage": "http://www.php-fig.org/" 1513 | } 1514 | ], 1515 | "description": "Standard interfaces for event handling.", 1516 | "keywords": [ 1517 | "events", 1518 | "psr", 1519 | "psr-14" 1520 | ], 1521 | "support": { 1522 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 1523 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 1524 | }, 1525 | "time": "2019-01-08T18:20:26+00:00" 1526 | }, 1527 | { 1528 | "name": "psr/http-client", 1529 | "version": "1.0.3", 1530 | "source": { 1531 | "type": "git", 1532 | "url": "https://github.com/php-fig/http-client.git", 1533 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" 1534 | }, 1535 | "dist": { 1536 | "type": "zip", 1537 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", 1538 | "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", 1539 | "shasum": "" 1540 | }, 1541 | "require": { 1542 | "php": "^7.0 || ^8.0", 1543 | "psr/http-message": "^1.0 || ^2.0" 1544 | }, 1545 | "type": "library", 1546 | "extra": { 1547 | "branch-alias": { 1548 | "dev-master": "1.0.x-dev" 1549 | } 1550 | }, 1551 | "autoload": { 1552 | "psr-4": { 1553 | "Psr\\Http\\Client\\": "src/" 1554 | } 1555 | }, 1556 | "notification-url": "https://packagist.org/downloads/", 1557 | "license": [ 1558 | "MIT" 1559 | ], 1560 | "authors": [ 1561 | { 1562 | "name": "PHP-FIG", 1563 | "homepage": "https://www.php-fig.org/" 1564 | } 1565 | ], 1566 | "description": "Common interface for HTTP clients", 1567 | "homepage": "https://github.com/php-fig/http-client", 1568 | "keywords": [ 1569 | "http", 1570 | "http-client", 1571 | "psr", 1572 | "psr-18" 1573 | ], 1574 | "support": { 1575 | "source": "https://github.com/php-fig/http-client" 1576 | }, 1577 | "time": "2023-09-23T14:17:50+00:00" 1578 | }, 1579 | { 1580 | "name": "psr/http-factory", 1581 | "version": "1.1.0", 1582 | "source": { 1583 | "type": "git", 1584 | "url": "https://github.com/php-fig/http-factory.git", 1585 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" 1586 | }, 1587 | "dist": { 1588 | "type": "zip", 1589 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1590 | "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", 1591 | "shasum": "" 1592 | }, 1593 | "require": { 1594 | "php": ">=7.1", 1595 | "psr/http-message": "^1.0 || ^2.0" 1596 | }, 1597 | "type": "library", 1598 | "extra": { 1599 | "branch-alias": { 1600 | "dev-master": "1.0.x-dev" 1601 | } 1602 | }, 1603 | "autoload": { 1604 | "psr-4": { 1605 | "Psr\\Http\\Message\\": "src/" 1606 | } 1607 | }, 1608 | "notification-url": "https://packagist.org/downloads/", 1609 | "license": [ 1610 | "MIT" 1611 | ], 1612 | "authors": [ 1613 | { 1614 | "name": "PHP-FIG", 1615 | "homepage": "https://www.php-fig.org/" 1616 | } 1617 | ], 1618 | "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", 1619 | "keywords": [ 1620 | "factory", 1621 | "http", 1622 | "message", 1623 | "psr", 1624 | "psr-17", 1625 | "psr-7", 1626 | "request", 1627 | "response" 1628 | ], 1629 | "support": { 1630 | "source": "https://github.com/php-fig/http-factory" 1631 | }, 1632 | "time": "2024-04-15T12:06:14+00:00" 1633 | }, 1634 | { 1635 | "name": "psr/http-message", 1636 | "version": "2.0", 1637 | "source": { 1638 | "type": "git", 1639 | "url": "https://github.com/php-fig/http-message.git", 1640 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" 1641 | }, 1642 | "dist": { 1643 | "type": "zip", 1644 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1645 | "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", 1646 | "shasum": "" 1647 | }, 1648 | "require": { 1649 | "php": "^7.2 || ^8.0" 1650 | }, 1651 | "type": "library", 1652 | "extra": { 1653 | "branch-alias": { 1654 | "dev-master": "2.0.x-dev" 1655 | } 1656 | }, 1657 | "autoload": { 1658 | "psr-4": { 1659 | "Psr\\Http\\Message\\": "src/" 1660 | } 1661 | }, 1662 | "notification-url": "https://packagist.org/downloads/", 1663 | "license": [ 1664 | "MIT" 1665 | ], 1666 | "authors": [ 1667 | { 1668 | "name": "PHP-FIG", 1669 | "homepage": "https://www.php-fig.org/" 1670 | } 1671 | ], 1672 | "description": "Common interface for HTTP messages", 1673 | "homepage": "https://github.com/php-fig/http-message", 1674 | "keywords": [ 1675 | "http", 1676 | "http-message", 1677 | "psr", 1678 | "psr-7", 1679 | "request", 1680 | "response" 1681 | ], 1682 | "support": { 1683 | "source": "https://github.com/php-fig/http-message/tree/2.0" 1684 | }, 1685 | "time": "2023-04-04T09:54:51+00:00" 1686 | }, 1687 | { 1688 | "name": "psr/log", 1689 | "version": "3.0.2", 1690 | "source": { 1691 | "type": "git", 1692 | "url": "https://github.com/php-fig/log.git", 1693 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" 1694 | }, 1695 | "dist": { 1696 | "type": "zip", 1697 | "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1698 | "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", 1699 | "shasum": "" 1700 | }, 1701 | "require": { 1702 | "php": ">=8.0.0" 1703 | }, 1704 | "type": "library", 1705 | "extra": { 1706 | "branch-alias": { 1707 | "dev-master": "3.x-dev" 1708 | } 1709 | }, 1710 | "autoload": { 1711 | "psr-4": { 1712 | "Psr\\Log\\": "src" 1713 | } 1714 | }, 1715 | "notification-url": "https://packagist.org/downloads/", 1716 | "license": [ 1717 | "MIT" 1718 | ], 1719 | "authors": [ 1720 | { 1721 | "name": "PHP-FIG", 1722 | "homepage": "https://www.php-fig.org/" 1723 | } 1724 | ], 1725 | "description": "Common interface for logging libraries", 1726 | "homepage": "https://github.com/php-fig/log", 1727 | "keywords": [ 1728 | "log", 1729 | "psr", 1730 | "psr-3" 1731 | ], 1732 | "support": { 1733 | "source": "https://github.com/php-fig/log/tree/3.0.2" 1734 | }, 1735 | "time": "2024-09-11T13:17:53+00:00" 1736 | }, 1737 | { 1738 | "name": "psr/simple-cache", 1739 | "version": "3.0.0", 1740 | "source": { 1741 | "type": "git", 1742 | "url": "https://github.com/php-fig/simple-cache.git", 1743 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" 1744 | }, 1745 | "dist": { 1746 | "type": "zip", 1747 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", 1748 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", 1749 | "shasum": "" 1750 | }, 1751 | "require": { 1752 | "php": ">=8.0.0" 1753 | }, 1754 | "type": "library", 1755 | "extra": { 1756 | "branch-alias": { 1757 | "dev-master": "3.0.x-dev" 1758 | } 1759 | }, 1760 | "autoload": { 1761 | "psr-4": { 1762 | "Psr\\SimpleCache\\": "src/" 1763 | } 1764 | }, 1765 | "notification-url": "https://packagist.org/downloads/", 1766 | "license": [ 1767 | "MIT" 1768 | ], 1769 | "authors": [ 1770 | { 1771 | "name": "PHP-FIG", 1772 | "homepage": "https://www.php-fig.org/" 1773 | } 1774 | ], 1775 | "description": "Common interfaces for simple caching", 1776 | "keywords": [ 1777 | "cache", 1778 | "caching", 1779 | "psr", 1780 | "psr-16", 1781 | "simple-cache" 1782 | ], 1783 | "support": { 1784 | "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" 1785 | }, 1786 | "time": "2021-10-29T13:26:27+00:00" 1787 | }, 1788 | { 1789 | "name": "ralouphie/getallheaders", 1790 | "version": "3.0.3", 1791 | "source": { 1792 | "type": "git", 1793 | "url": "https://github.com/ralouphie/getallheaders.git", 1794 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1795 | }, 1796 | "dist": { 1797 | "type": "zip", 1798 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1799 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1800 | "shasum": "" 1801 | }, 1802 | "require": { 1803 | "php": ">=5.6" 1804 | }, 1805 | "require-dev": { 1806 | "php-coveralls/php-coveralls": "^2.1", 1807 | "phpunit/phpunit": "^5 || ^6.5" 1808 | }, 1809 | "type": "library", 1810 | "autoload": { 1811 | "files": [ 1812 | "src/getallheaders.php" 1813 | ] 1814 | }, 1815 | "notification-url": "https://packagist.org/downloads/", 1816 | "license": [ 1817 | "MIT" 1818 | ], 1819 | "authors": [ 1820 | { 1821 | "name": "Ralph Khattar", 1822 | "email": "ralph.khattar@gmail.com" 1823 | } 1824 | ], 1825 | "description": "A polyfill for getallheaders.", 1826 | "support": { 1827 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1828 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1829 | }, 1830 | "time": "2019-03-08T08:55:37+00:00" 1831 | }, 1832 | { 1833 | "name": "symfony/clock", 1834 | "version": "v7.1.6", 1835 | "source": { 1836 | "type": "git", 1837 | "url": "https://github.com/symfony/clock.git", 1838 | "reference": "97bebc53548684c17ed696bc8af016880f0f098d" 1839 | }, 1840 | "dist": { 1841 | "type": "zip", 1842 | "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", 1843 | "reference": "97bebc53548684c17ed696bc8af016880f0f098d", 1844 | "shasum": "" 1845 | }, 1846 | "require": { 1847 | "php": ">=8.2", 1848 | "psr/clock": "^1.0", 1849 | "symfony/polyfill-php83": "^1.28" 1850 | }, 1851 | "provide": { 1852 | "psr/clock-implementation": "1.0" 1853 | }, 1854 | "type": "library", 1855 | "autoload": { 1856 | "files": [ 1857 | "Resources/now.php" 1858 | ], 1859 | "psr-4": { 1860 | "Symfony\\Component\\Clock\\": "" 1861 | }, 1862 | "exclude-from-classmap": [ 1863 | "/Tests/" 1864 | ] 1865 | }, 1866 | "notification-url": "https://packagist.org/downloads/", 1867 | "license": [ 1868 | "MIT" 1869 | ], 1870 | "authors": [ 1871 | { 1872 | "name": "Nicolas Grekas", 1873 | "email": "p@tchwork.com" 1874 | }, 1875 | { 1876 | "name": "Symfony Community", 1877 | "homepage": "https://symfony.com/contributors" 1878 | } 1879 | ], 1880 | "description": "Decouples applications from the system clock", 1881 | "homepage": "https://symfony.com", 1882 | "keywords": [ 1883 | "clock", 1884 | "psr20", 1885 | "time" 1886 | ], 1887 | "support": { 1888 | "source": "https://github.com/symfony/clock/tree/v7.1.6" 1889 | }, 1890 | "funding": [ 1891 | { 1892 | "url": "https://symfony.com/sponsor", 1893 | "type": "custom" 1894 | }, 1895 | { 1896 | "url": "https://github.com/fabpot", 1897 | "type": "github" 1898 | }, 1899 | { 1900 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1901 | "type": "tidelift" 1902 | } 1903 | ], 1904 | "time": "2024-09-25T14:20:29+00:00" 1905 | }, 1906 | { 1907 | "name": "symfony/deprecation-contracts", 1908 | "version": "v3.5.0", 1909 | "source": { 1910 | "type": "git", 1911 | "url": "https://github.com/symfony/deprecation-contracts.git", 1912 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" 1913 | }, 1914 | "dist": { 1915 | "type": "zip", 1916 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 1917 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 1918 | "shasum": "" 1919 | }, 1920 | "require": { 1921 | "php": ">=8.1" 1922 | }, 1923 | "type": "library", 1924 | "extra": { 1925 | "branch-alias": { 1926 | "dev-main": "3.5-dev" 1927 | }, 1928 | "thanks": { 1929 | "name": "symfony/contracts", 1930 | "url": "https://github.com/symfony/contracts" 1931 | } 1932 | }, 1933 | "autoload": { 1934 | "files": [ 1935 | "function.php" 1936 | ] 1937 | }, 1938 | "notification-url": "https://packagist.org/downloads/", 1939 | "license": [ 1940 | "MIT" 1941 | ], 1942 | "authors": [ 1943 | { 1944 | "name": "Nicolas Grekas", 1945 | "email": "p@tchwork.com" 1946 | }, 1947 | { 1948 | "name": "Symfony Community", 1949 | "homepage": "https://symfony.com/contributors" 1950 | } 1951 | ], 1952 | "description": "A generic function and convention to trigger deprecation notices", 1953 | "homepage": "https://symfony.com", 1954 | "support": { 1955 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" 1956 | }, 1957 | "funding": [ 1958 | { 1959 | "url": "https://symfony.com/sponsor", 1960 | "type": "custom" 1961 | }, 1962 | { 1963 | "url": "https://github.com/fabpot", 1964 | "type": "github" 1965 | }, 1966 | { 1967 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1968 | "type": "tidelift" 1969 | } 1970 | ], 1971 | "time": "2024-04-18T09:32:20+00:00" 1972 | }, 1973 | { 1974 | "name": "symfony/error-handler", 1975 | "version": "v7.1.7", 1976 | "source": { 1977 | "type": "git", 1978 | "url": "https://github.com/symfony/error-handler.git", 1979 | "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" 1980 | }, 1981 | "dist": { 1982 | "type": "zip", 1983 | "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", 1984 | "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", 1985 | "shasum": "" 1986 | }, 1987 | "require": { 1988 | "php": ">=8.2", 1989 | "psr/log": "^1|^2|^3", 1990 | "symfony/var-dumper": "^6.4|^7.0" 1991 | }, 1992 | "conflict": { 1993 | "symfony/deprecation-contracts": "<2.5", 1994 | "symfony/http-kernel": "<6.4" 1995 | }, 1996 | "require-dev": { 1997 | "symfony/deprecation-contracts": "^2.5|^3", 1998 | "symfony/http-kernel": "^6.4|^7.0", 1999 | "symfony/serializer": "^6.4|^7.0" 2000 | }, 2001 | "bin": [ 2002 | "Resources/bin/patch-type-declarations" 2003 | ], 2004 | "type": "library", 2005 | "autoload": { 2006 | "psr-4": { 2007 | "Symfony\\Component\\ErrorHandler\\": "" 2008 | }, 2009 | "exclude-from-classmap": [ 2010 | "/Tests/" 2011 | ] 2012 | }, 2013 | "notification-url": "https://packagist.org/downloads/", 2014 | "license": [ 2015 | "MIT" 2016 | ], 2017 | "authors": [ 2018 | { 2019 | "name": "Fabien Potencier", 2020 | "email": "fabien@symfony.com" 2021 | }, 2022 | { 2023 | "name": "Symfony Community", 2024 | "homepage": "https://symfony.com/contributors" 2025 | } 2026 | ], 2027 | "description": "Provides tools to manage errors and ease debugging PHP code", 2028 | "homepage": "https://symfony.com", 2029 | "support": { 2030 | "source": "https://github.com/symfony/error-handler/tree/v7.1.7" 2031 | }, 2032 | "funding": [ 2033 | { 2034 | "url": "https://symfony.com/sponsor", 2035 | "type": "custom" 2036 | }, 2037 | { 2038 | "url": "https://github.com/fabpot", 2039 | "type": "github" 2040 | }, 2041 | { 2042 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2043 | "type": "tidelift" 2044 | } 2045 | ], 2046 | "time": "2024-11-05T15:34:55+00:00" 2047 | }, 2048 | { 2049 | "name": "symfony/event-dispatcher", 2050 | "version": "v7.1.6", 2051 | "source": { 2052 | "type": "git", 2053 | "url": "https://github.com/symfony/event-dispatcher.git", 2054 | "reference": "87254c78dd50721cfd015b62277a8281c5589702" 2055 | }, 2056 | "dist": { 2057 | "type": "zip", 2058 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", 2059 | "reference": "87254c78dd50721cfd015b62277a8281c5589702", 2060 | "shasum": "" 2061 | }, 2062 | "require": { 2063 | "php": ">=8.2", 2064 | "symfony/event-dispatcher-contracts": "^2.5|^3" 2065 | }, 2066 | "conflict": { 2067 | "symfony/dependency-injection": "<6.4", 2068 | "symfony/service-contracts": "<2.5" 2069 | }, 2070 | "provide": { 2071 | "psr/event-dispatcher-implementation": "1.0", 2072 | "symfony/event-dispatcher-implementation": "2.0|3.0" 2073 | }, 2074 | "require-dev": { 2075 | "psr/log": "^1|^2|^3", 2076 | "symfony/config": "^6.4|^7.0", 2077 | "symfony/dependency-injection": "^6.4|^7.0", 2078 | "symfony/error-handler": "^6.4|^7.0", 2079 | "symfony/expression-language": "^6.4|^7.0", 2080 | "symfony/http-foundation": "^6.4|^7.0", 2081 | "symfony/service-contracts": "^2.5|^3", 2082 | "symfony/stopwatch": "^6.4|^7.0" 2083 | }, 2084 | "type": "library", 2085 | "autoload": { 2086 | "psr-4": { 2087 | "Symfony\\Component\\EventDispatcher\\": "" 2088 | }, 2089 | "exclude-from-classmap": [ 2090 | "/Tests/" 2091 | ] 2092 | }, 2093 | "notification-url": "https://packagist.org/downloads/", 2094 | "license": [ 2095 | "MIT" 2096 | ], 2097 | "authors": [ 2098 | { 2099 | "name": "Fabien Potencier", 2100 | "email": "fabien@symfony.com" 2101 | }, 2102 | { 2103 | "name": "Symfony Community", 2104 | "homepage": "https://symfony.com/contributors" 2105 | } 2106 | ], 2107 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 2108 | "homepage": "https://symfony.com", 2109 | "support": { 2110 | "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" 2111 | }, 2112 | "funding": [ 2113 | { 2114 | "url": "https://symfony.com/sponsor", 2115 | "type": "custom" 2116 | }, 2117 | { 2118 | "url": "https://github.com/fabpot", 2119 | "type": "github" 2120 | }, 2121 | { 2122 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2123 | "type": "tidelift" 2124 | } 2125 | ], 2126 | "time": "2024-09-25T14:20:29+00:00" 2127 | }, 2128 | { 2129 | "name": "symfony/event-dispatcher-contracts", 2130 | "version": "v3.5.0", 2131 | "source": { 2132 | "type": "git", 2133 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 2134 | "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" 2135 | }, 2136 | "dist": { 2137 | "type": "zip", 2138 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", 2139 | "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", 2140 | "shasum": "" 2141 | }, 2142 | "require": { 2143 | "php": ">=8.1", 2144 | "psr/event-dispatcher": "^1" 2145 | }, 2146 | "type": "library", 2147 | "extra": { 2148 | "branch-alias": { 2149 | "dev-main": "3.5-dev" 2150 | }, 2151 | "thanks": { 2152 | "name": "symfony/contracts", 2153 | "url": "https://github.com/symfony/contracts" 2154 | } 2155 | }, 2156 | "autoload": { 2157 | "psr-4": { 2158 | "Symfony\\Contracts\\EventDispatcher\\": "" 2159 | } 2160 | }, 2161 | "notification-url": "https://packagist.org/downloads/", 2162 | "license": [ 2163 | "MIT" 2164 | ], 2165 | "authors": [ 2166 | { 2167 | "name": "Nicolas Grekas", 2168 | "email": "p@tchwork.com" 2169 | }, 2170 | { 2171 | "name": "Symfony Community", 2172 | "homepage": "https://symfony.com/contributors" 2173 | } 2174 | ], 2175 | "description": "Generic abstractions related to dispatching event", 2176 | "homepage": "https://symfony.com", 2177 | "keywords": [ 2178 | "abstractions", 2179 | "contracts", 2180 | "decoupling", 2181 | "interfaces", 2182 | "interoperability", 2183 | "standards" 2184 | ], 2185 | "support": { 2186 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" 2187 | }, 2188 | "funding": [ 2189 | { 2190 | "url": "https://symfony.com/sponsor", 2191 | "type": "custom" 2192 | }, 2193 | { 2194 | "url": "https://github.com/fabpot", 2195 | "type": "github" 2196 | }, 2197 | { 2198 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2199 | "type": "tidelift" 2200 | } 2201 | ], 2202 | "time": "2024-04-18T09:32:20+00:00" 2203 | }, 2204 | { 2205 | "name": "symfony/finder", 2206 | "version": "v7.1.6", 2207 | "source": { 2208 | "type": "git", 2209 | "url": "https://github.com/symfony/finder.git", 2210 | "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" 2211 | }, 2212 | "dist": { 2213 | "type": "zip", 2214 | "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", 2215 | "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", 2216 | "shasum": "" 2217 | }, 2218 | "require": { 2219 | "php": ">=8.2" 2220 | }, 2221 | "require-dev": { 2222 | "symfony/filesystem": "^6.4|^7.0" 2223 | }, 2224 | "type": "library", 2225 | "autoload": { 2226 | "psr-4": { 2227 | "Symfony\\Component\\Finder\\": "" 2228 | }, 2229 | "exclude-from-classmap": [ 2230 | "/Tests/" 2231 | ] 2232 | }, 2233 | "notification-url": "https://packagist.org/downloads/", 2234 | "license": [ 2235 | "MIT" 2236 | ], 2237 | "authors": [ 2238 | { 2239 | "name": "Fabien Potencier", 2240 | "email": "fabien@symfony.com" 2241 | }, 2242 | { 2243 | "name": "Symfony Community", 2244 | "homepage": "https://symfony.com/contributors" 2245 | } 2246 | ], 2247 | "description": "Finds files and directories via an intuitive fluent interface", 2248 | "homepage": "https://symfony.com", 2249 | "support": { 2250 | "source": "https://github.com/symfony/finder/tree/v7.1.6" 2251 | }, 2252 | "funding": [ 2253 | { 2254 | "url": "https://symfony.com/sponsor", 2255 | "type": "custom" 2256 | }, 2257 | { 2258 | "url": "https://github.com/fabpot", 2259 | "type": "github" 2260 | }, 2261 | { 2262 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2263 | "type": "tidelift" 2264 | } 2265 | ], 2266 | "time": "2024-10-01T08:31:23+00:00" 2267 | }, 2268 | { 2269 | "name": "symfony/http-foundation", 2270 | "version": "v7.1.8", 2271 | "source": { 2272 | "type": "git", 2273 | "url": "https://github.com/symfony/http-foundation.git", 2274 | "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112" 2275 | }, 2276 | "dist": { 2277 | "type": "zip", 2278 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4419ec69ccfc3f725a4de7c20e4e57626d10112", 2279 | "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112", 2280 | "shasum": "" 2281 | }, 2282 | "require": { 2283 | "php": ">=8.2", 2284 | "symfony/polyfill-mbstring": "~1.1", 2285 | "symfony/polyfill-php83": "^1.27" 2286 | }, 2287 | "conflict": { 2288 | "doctrine/dbal": "<3.6", 2289 | "symfony/cache": "<6.4.12|>=7.0,<7.1.5" 2290 | }, 2291 | "require-dev": { 2292 | "doctrine/dbal": "^3.6|^4", 2293 | "predis/predis": "^1.1|^2.0", 2294 | "symfony/cache": "^6.4.12|^7.1.5", 2295 | "symfony/dependency-injection": "^6.4|^7.0", 2296 | "symfony/expression-language": "^6.4|^7.0", 2297 | "symfony/http-kernel": "^6.4|^7.0", 2298 | "symfony/mime": "^6.4|^7.0", 2299 | "symfony/rate-limiter": "^6.4|^7.0" 2300 | }, 2301 | "type": "library", 2302 | "autoload": { 2303 | "psr-4": { 2304 | "Symfony\\Component\\HttpFoundation\\": "" 2305 | }, 2306 | "exclude-from-classmap": [ 2307 | "/Tests/" 2308 | ] 2309 | }, 2310 | "notification-url": "https://packagist.org/downloads/", 2311 | "license": [ 2312 | "MIT" 2313 | ], 2314 | "authors": [ 2315 | { 2316 | "name": "Fabien Potencier", 2317 | "email": "fabien@symfony.com" 2318 | }, 2319 | { 2320 | "name": "Symfony Community", 2321 | "homepage": "https://symfony.com/contributors" 2322 | } 2323 | ], 2324 | "description": "Defines an object-oriented layer for the HTTP specification", 2325 | "homepage": "https://symfony.com", 2326 | "support": { 2327 | "source": "https://github.com/symfony/http-foundation/tree/v7.1.8" 2328 | }, 2329 | "funding": [ 2330 | { 2331 | "url": "https://symfony.com/sponsor", 2332 | "type": "custom" 2333 | }, 2334 | { 2335 | "url": "https://github.com/fabpot", 2336 | "type": "github" 2337 | }, 2338 | { 2339 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2340 | "type": "tidelift" 2341 | } 2342 | ], 2343 | "time": "2024-11-09T09:16:45+00:00" 2344 | }, 2345 | { 2346 | "name": "symfony/http-kernel", 2347 | "version": "v7.1.8", 2348 | "source": { 2349 | "type": "git", 2350 | "url": "https://github.com/symfony/http-kernel.git", 2351 | "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e" 2352 | }, 2353 | "dist": { 2354 | "type": "zip", 2355 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", 2356 | "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", 2357 | "shasum": "" 2358 | }, 2359 | "require": { 2360 | "php": ">=8.2", 2361 | "psr/log": "^1|^2|^3", 2362 | "symfony/deprecation-contracts": "^2.5|^3", 2363 | "symfony/error-handler": "^6.4|^7.0", 2364 | "symfony/event-dispatcher": "^6.4|^7.0", 2365 | "symfony/http-foundation": "^6.4|^7.0", 2366 | "symfony/polyfill-ctype": "^1.8" 2367 | }, 2368 | "conflict": { 2369 | "symfony/browser-kit": "<6.4", 2370 | "symfony/cache": "<6.4", 2371 | "symfony/config": "<6.4", 2372 | "symfony/console": "<6.4", 2373 | "symfony/dependency-injection": "<6.4", 2374 | "symfony/doctrine-bridge": "<6.4", 2375 | "symfony/form": "<6.4", 2376 | "symfony/http-client": "<6.4", 2377 | "symfony/http-client-contracts": "<2.5", 2378 | "symfony/mailer": "<6.4", 2379 | "symfony/messenger": "<6.4", 2380 | "symfony/translation": "<6.4", 2381 | "symfony/translation-contracts": "<2.5", 2382 | "symfony/twig-bridge": "<6.4", 2383 | "symfony/validator": "<6.4", 2384 | "symfony/var-dumper": "<6.4", 2385 | "twig/twig": "<3.0.4" 2386 | }, 2387 | "provide": { 2388 | "psr/log-implementation": "1.0|2.0|3.0" 2389 | }, 2390 | "require-dev": { 2391 | "psr/cache": "^1.0|^2.0|^3.0", 2392 | "symfony/browser-kit": "^6.4|^7.0", 2393 | "symfony/clock": "^6.4|^7.0", 2394 | "symfony/config": "^6.4|^7.0", 2395 | "symfony/console": "^6.4|^7.0", 2396 | "symfony/css-selector": "^6.4|^7.0", 2397 | "symfony/dependency-injection": "^6.4|^7.0", 2398 | "symfony/dom-crawler": "^6.4|^7.0", 2399 | "symfony/expression-language": "^6.4|^7.0", 2400 | "symfony/finder": "^6.4|^7.0", 2401 | "symfony/http-client-contracts": "^2.5|^3", 2402 | "symfony/process": "^6.4|^7.0", 2403 | "symfony/property-access": "^7.1", 2404 | "symfony/routing": "^6.4|^7.0", 2405 | "symfony/serializer": "^7.1", 2406 | "symfony/stopwatch": "^6.4|^7.0", 2407 | "symfony/translation": "^6.4|^7.0", 2408 | "symfony/translation-contracts": "^2.5|^3", 2409 | "symfony/uid": "^6.4|^7.0", 2410 | "symfony/validator": "^6.4|^7.0", 2411 | "symfony/var-dumper": "^6.4|^7.0", 2412 | "symfony/var-exporter": "^6.4|^7.0", 2413 | "twig/twig": "^3.0.4" 2414 | }, 2415 | "type": "library", 2416 | "autoload": { 2417 | "psr-4": { 2418 | "Symfony\\Component\\HttpKernel\\": "" 2419 | }, 2420 | "exclude-from-classmap": [ 2421 | "/Tests/" 2422 | ] 2423 | }, 2424 | "notification-url": "https://packagist.org/downloads/", 2425 | "license": [ 2426 | "MIT" 2427 | ], 2428 | "authors": [ 2429 | { 2430 | "name": "Fabien Potencier", 2431 | "email": "fabien@symfony.com" 2432 | }, 2433 | { 2434 | "name": "Symfony Community", 2435 | "homepage": "https://symfony.com/contributors" 2436 | } 2437 | ], 2438 | "description": "Provides a structured process for converting a Request into a Response", 2439 | "homepage": "https://symfony.com", 2440 | "support": { 2441 | "source": "https://github.com/symfony/http-kernel/tree/v7.1.8" 2442 | }, 2443 | "funding": [ 2444 | { 2445 | "url": "https://symfony.com/sponsor", 2446 | "type": "custom" 2447 | }, 2448 | { 2449 | "url": "https://github.com/fabpot", 2450 | "type": "github" 2451 | }, 2452 | { 2453 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2454 | "type": "tidelift" 2455 | } 2456 | ], 2457 | "time": "2024-11-13T14:25:32+00:00" 2458 | }, 2459 | { 2460 | "name": "symfony/mime", 2461 | "version": "v7.1.6", 2462 | "source": { 2463 | "type": "git", 2464 | "url": "https://github.com/symfony/mime.git", 2465 | "reference": "caa1e521edb2650b8470918dfe51708c237f0598" 2466 | }, 2467 | "dist": { 2468 | "type": "zip", 2469 | "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", 2470 | "reference": "caa1e521edb2650b8470918dfe51708c237f0598", 2471 | "shasum": "" 2472 | }, 2473 | "require": { 2474 | "php": ">=8.2", 2475 | "symfony/polyfill-intl-idn": "^1.10", 2476 | "symfony/polyfill-mbstring": "^1.0" 2477 | }, 2478 | "conflict": { 2479 | "egulias/email-validator": "~3.0.0", 2480 | "phpdocumentor/reflection-docblock": "<3.2.2", 2481 | "phpdocumentor/type-resolver": "<1.4.0", 2482 | "symfony/mailer": "<6.4", 2483 | "symfony/serializer": "<6.4.3|>7.0,<7.0.3" 2484 | }, 2485 | "require-dev": { 2486 | "egulias/email-validator": "^2.1.10|^3.1|^4", 2487 | "league/html-to-markdown": "^5.0", 2488 | "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", 2489 | "symfony/dependency-injection": "^6.4|^7.0", 2490 | "symfony/process": "^6.4|^7.0", 2491 | "symfony/property-access": "^6.4|^7.0", 2492 | "symfony/property-info": "^6.4|^7.0", 2493 | "symfony/serializer": "^6.4.3|^7.0.3" 2494 | }, 2495 | "type": "library", 2496 | "autoload": { 2497 | "psr-4": { 2498 | "Symfony\\Component\\Mime\\": "" 2499 | }, 2500 | "exclude-from-classmap": [ 2501 | "/Tests/" 2502 | ] 2503 | }, 2504 | "notification-url": "https://packagist.org/downloads/", 2505 | "license": [ 2506 | "MIT" 2507 | ], 2508 | "authors": [ 2509 | { 2510 | "name": "Fabien Potencier", 2511 | "email": "fabien@symfony.com" 2512 | }, 2513 | { 2514 | "name": "Symfony Community", 2515 | "homepage": "https://symfony.com/contributors" 2516 | } 2517 | ], 2518 | "description": "Allows manipulating MIME messages", 2519 | "homepage": "https://symfony.com", 2520 | "keywords": [ 2521 | "mime", 2522 | "mime-type" 2523 | ], 2524 | "support": { 2525 | "source": "https://github.com/symfony/mime/tree/v7.1.6" 2526 | }, 2527 | "funding": [ 2528 | { 2529 | "url": "https://symfony.com/sponsor", 2530 | "type": "custom" 2531 | }, 2532 | { 2533 | "url": "https://github.com/fabpot", 2534 | "type": "github" 2535 | }, 2536 | { 2537 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2538 | "type": "tidelift" 2539 | } 2540 | ], 2541 | "time": "2024-10-25T15:11:02+00:00" 2542 | }, 2543 | { 2544 | "name": "symfony/polyfill-ctype", 2545 | "version": "v1.31.0", 2546 | "source": { 2547 | "type": "git", 2548 | "url": "https://github.com/symfony/polyfill-ctype.git", 2549 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" 2550 | }, 2551 | "dist": { 2552 | "type": "zip", 2553 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", 2554 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", 2555 | "shasum": "" 2556 | }, 2557 | "require": { 2558 | "php": ">=7.2" 2559 | }, 2560 | "provide": { 2561 | "ext-ctype": "*" 2562 | }, 2563 | "suggest": { 2564 | "ext-ctype": "For best performance" 2565 | }, 2566 | "type": "library", 2567 | "extra": { 2568 | "thanks": { 2569 | "name": "symfony/polyfill", 2570 | "url": "https://github.com/symfony/polyfill" 2571 | } 2572 | }, 2573 | "autoload": { 2574 | "files": [ 2575 | "bootstrap.php" 2576 | ], 2577 | "psr-4": { 2578 | "Symfony\\Polyfill\\Ctype\\": "" 2579 | } 2580 | }, 2581 | "notification-url": "https://packagist.org/downloads/", 2582 | "license": [ 2583 | "MIT" 2584 | ], 2585 | "authors": [ 2586 | { 2587 | "name": "Gert de Pagter", 2588 | "email": "BackEndTea@gmail.com" 2589 | }, 2590 | { 2591 | "name": "Symfony Community", 2592 | "homepage": "https://symfony.com/contributors" 2593 | } 2594 | ], 2595 | "description": "Symfony polyfill for ctype functions", 2596 | "homepage": "https://symfony.com", 2597 | "keywords": [ 2598 | "compatibility", 2599 | "ctype", 2600 | "polyfill", 2601 | "portable" 2602 | ], 2603 | "support": { 2604 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" 2605 | }, 2606 | "funding": [ 2607 | { 2608 | "url": "https://symfony.com/sponsor", 2609 | "type": "custom" 2610 | }, 2611 | { 2612 | "url": "https://github.com/fabpot", 2613 | "type": "github" 2614 | }, 2615 | { 2616 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2617 | "type": "tidelift" 2618 | } 2619 | ], 2620 | "time": "2024-09-09T11:45:10+00:00" 2621 | }, 2622 | { 2623 | "name": "symfony/polyfill-intl-idn", 2624 | "version": "v1.31.0", 2625 | "source": { 2626 | "type": "git", 2627 | "url": "https://github.com/symfony/polyfill-intl-idn.git", 2628 | "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" 2629 | }, 2630 | "dist": { 2631 | "type": "zip", 2632 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", 2633 | "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", 2634 | "shasum": "" 2635 | }, 2636 | "require": { 2637 | "php": ">=7.2", 2638 | "symfony/polyfill-intl-normalizer": "^1.10" 2639 | }, 2640 | "suggest": { 2641 | "ext-intl": "For best performance" 2642 | }, 2643 | "type": "library", 2644 | "extra": { 2645 | "thanks": { 2646 | "name": "symfony/polyfill", 2647 | "url": "https://github.com/symfony/polyfill" 2648 | } 2649 | }, 2650 | "autoload": { 2651 | "files": [ 2652 | "bootstrap.php" 2653 | ], 2654 | "psr-4": { 2655 | "Symfony\\Polyfill\\Intl\\Idn\\": "" 2656 | } 2657 | }, 2658 | "notification-url": "https://packagist.org/downloads/", 2659 | "license": [ 2660 | "MIT" 2661 | ], 2662 | "authors": [ 2663 | { 2664 | "name": "Laurent Bassin", 2665 | "email": "laurent@bassin.info" 2666 | }, 2667 | { 2668 | "name": "Trevor Rowbotham", 2669 | "email": "trevor.rowbotham@pm.me" 2670 | }, 2671 | { 2672 | "name": "Symfony Community", 2673 | "homepage": "https://symfony.com/contributors" 2674 | } 2675 | ], 2676 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", 2677 | "homepage": "https://symfony.com", 2678 | "keywords": [ 2679 | "compatibility", 2680 | "idn", 2681 | "intl", 2682 | "polyfill", 2683 | "portable", 2684 | "shim" 2685 | ], 2686 | "support": { 2687 | "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" 2688 | }, 2689 | "funding": [ 2690 | { 2691 | "url": "https://symfony.com/sponsor", 2692 | "type": "custom" 2693 | }, 2694 | { 2695 | "url": "https://github.com/fabpot", 2696 | "type": "github" 2697 | }, 2698 | { 2699 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2700 | "type": "tidelift" 2701 | } 2702 | ], 2703 | "time": "2024-09-09T11:45:10+00:00" 2704 | }, 2705 | { 2706 | "name": "symfony/polyfill-intl-normalizer", 2707 | "version": "v1.31.0", 2708 | "source": { 2709 | "type": "git", 2710 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 2711 | "reference": "3833d7255cc303546435cb650316bff708a1c75c" 2712 | }, 2713 | "dist": { 2714 | "type": "zip", 2715 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", 2716 | "reference": "3833d7255cc303546435cb650316bff708a1c75c", 2717 | "shasum": "" 2718 | }, 2719 | "require": { 2720 | "php": ">=7.2" 2721 | }, 2722 | "suggest": { 2723 | "ext-intl": "For best performance" 2724 | }, 2725 | "type": "library", 2726 | "extra": { 2727 | "thanks": { 2728 | "name": "symfony/polyfill", 2729 | "url": "https://github.com/symfony/polyfill" 2730 | } 2731 | }, 2732 | "autoload": { 2733 | "files": [ 2734 | "bootstrap.php" 2735 | ], 2736 | "psr-4": { 2737 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 2738 | }, 2739 | "classmap": [ 2740 | "Resources/stubs" 2741 | ] 2742 | }, 2743 | "notification-url": "https://packagist.org/downloads/", 2744 | "license": [ 2745 | "MIT" 2746 | ], 2747 | "authors": [ 2748 | { 2749 | "name": "Nicolas Grekas", 2750 | "email": "p@tchwork.com" 2751 | }, 2752 | { 2753 | "name": "Symfony Community", 2754 | "homepage": "https://symfony.com/contributors" 2755 | } 2756 | ], 2757 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 2758 | "homepage": "https://symfony.com", 2759 | "keywords": [ 2760 | "compatibility", 2761 | "intl", 2762 | "normalizer", 2763 | "polyfill", 2764 | "portable", 2765 | "shim" 2766 | ], 2767 | "support": { 2768 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" 2769 | }, 2770 | "funding": [ 2771 | { 2772 | "url": "https://symfony.com/sponsor", 2773 | "type": "custom" 2774 | }, 2775 | { 2776 | "url": "https://github.com/fabpot", 2777 | "type": "github" 2778 | }, 2779 | { 2780 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2781 | "type": "tidelift" 2782 | } 2783 | ], 2784 | "time": "2024-09-09T11:45:10+00:00" 2785 | }, 2786 | { 2787 | "name": "symfony/polyfill-mbstring", 2788 | "version": "v1.31.0", 2789 | "source": { 2790 | "type": "git", 2791 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2792 | "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" 2793 | }, 2794 | "dist": { 2795 | "type": "zip", 2796 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", 2797 | "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", 2798 | "shasum": "" 2799 | }, 2800 | "require": { 2801 | "php": ">=7.2" 2802 | }, 2803 | "provide": { 2804 | "ext-mbstring": "*" 2805 | }, 2806 | "suggest": { 2807 | "ext-mbstring": "For best performance" 2808 | }, 2809 | "type": "library", 2810 | "extra": { 2811 | "thanks": { 2812 | "name": "symfony/polyfill", 2813 | "url": "https://github.com/symfony/polyfill" 2814 | } 2815 | }, 2816 | "autoload": { 2817 | "files": [ 2818 | "bootstrap.php" 2819 | ], 2820 | "psr-4": { 2821 | "Symfony\\Polyfill\\Mbstring\\": "" 2822 | } 2823 | }, 2824 | "notification-url": "https://packagist.org/downloads/", 2825 | "license": [ 2826 | "MIT" 2827 | ], 2828 | "authors": [ 2829 | { 2830 | "name": "Nicolas Grekas", 2831 | "email": "p@tchwork.com" 2832 | }, 2833 | { 2834 | "name": "Symfony Community", 2835 | "homepage": "https://symfony.com/contributors" 2836 | } 2837 | ], 2838 | "description": "Symfony polyfill for the Mbstring extension", 2839 | "homepage": "https://symfony.com", 2840 | "keywords": [ 2841 | "compatibility", 2842 | "mbstring", 2843 | "polyfill", 2844 | "portable", 2845 | "shim" 2846 | ], 2847 | "support": { 2848 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" 2849 | }, 2850 | "funding": [ 2851 | { 2852 | "url": "https://symfony.com/sponsor", 2853 | "type": "custom" 2854 | }, 2855 | { 2856 | "url": "https://github.com/fabpot", 2857 | "type": "github" 2858 | }, 2859 | { 2860 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2861 | "type": "tidelift" 2862 | } 2863 | ], 2864 | "time": "2024-09-09T11:45:10+00:00" 2865 | }, 2866 | { 2867 | "name": "symfony/polyfill-php80", 2868 | "version": "v1.31.0", 2869 | "source": { 2870 | "type": "git", 2871 | "url": "https://github.com/symfony/polyfill-php80.git", 2872 | "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" 2873 | }, 2874 | "dist": { 2875 | "type": "zip", 2876 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 2877 | "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", 2878 | "shasum": "" 2879 | }, 2880 | "require": { 2881 | "php": ">=7.2" 2882 | }, 2883 | "type": "library", 2884 | "extra": { 2885 | "thanks": { 2886 | "name": "symfony/polyfill", 2887 | "url": "https://github.com/symfony/polyfill" 2888 | } 2889 | }, 2890 | "autoload": { 2891 | "files": [ 2892 | "bootstrap.php" 2893 | ], 2894 | "psr-4": { 2895 | "Symfony\\Polyfill\\Php80\\": "" 2896 | }, 2897 | "classmap": [ 2898 | "Resources/stubs" 2899 | ] 2900 | }, 2901 | "notification-url": "https://packagist.org/downloads/", 2902 | "license": [ 2903 | "MIT" 2904 | ], 2905 | "authors": [ 2906 | { 2907 | "name": "Ion Bazan", 2908 | "email": "ion.bazan@gmail.com" 2909 | }, 2910 | { 2911 | "name": "Nicolas Grekas", 2912 | "email": "p@tchwork.com" 2913 | }, 2914 | { 2915 | "name": "Symfony Community", 2916 | "homepage": "https://symfony.com/contributors" 2917 | } 2918 | ], 2919 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2920 | "homepage": "https://symfony.com", 2921 | "keywords": [ 2922 | "compatibility", 2923 | "polyfill", 2924 | "portable", 2925 | "shim" 2926 | ], 2927 | "support": { 2928 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" 2929 | }, 2930 | "funding": [ 2931 | { 2932 | "url": "https://symfony.com/sponsor", 2933 | "type": "custom" 2934 | }, 2935 | { 2936 | "url": "https://github.com/fabpot", 2937 | "type": "github" 2938 | }, 2939 | { 2940 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2941 | "type": "tidelift" 2942 | } 2943 | ], 2944 | "time": "2024-09-09T11:45:10+00:00" 2945 | }, 2946 | { 2947 | "name": "symfony/polyfill-php83", 2948 | "version": "v1.31.0", 2949 | "source": { 2950 | "type": "git", 2951 | "url": "https://github.com/symfony/polyfill-php83.git", 2952 | "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" 2953 | }, 2954 | "dist": { 2955 | "type": "zip", 2956 | "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", 2957 | "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", 2958 | "shasum": "" 2959 | }, 2960 | "require": { 2961 | "php": ">=7.2" 2962 | }, 2963 | "type": "library", 2964 | "extra": { 2965 | "thanks": { 2966 | "name": "symfony/polyfill", 2967 | "url": "https://github.com/symfony/polyfill" 2968 | } 2969 | }, 2970 | "autoload": { 2971 | "files": [ 2972 | "bootstrap.php" 2973 | ], 2974 | "psr-4": { 2975 | "Symfony\\Polyfill\\Php83\\": "" 2976 | }, 2977 | "classmap": [ 2978 | "Resources/stubs" 2979 | ] 2980 | }, 2981 | "notification-url": "https://packagist.org/downloads/", 2982 | "license": [ 2983 | "MIT" 2984 | ], 2985 | "authors": [ 2986 | { 2987 | "name": "Nicolas Grekas", 2988 | "email": "p@tchwork.com" 2989 | }, 2990 | { 2991 | "name": "Symfony Community", 2992 | "homepage": "https://symfony.com/contributors" 2993 | } 2994 | ], 2995 | "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", 2996 | "homepage": "https://symfony.com", 2997 | "keywords": [ 2998 | "compatibility", 2999 | "polyfill", 3000 | "portable", 3001 | "shim" 3002 | ], 3003 | "support": { 3004 | "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" 3005 | }, 3006 | "funding": [ 3007 | { 3008 | "url": "https://symfony.com/sponsor", 3009 | "type": "custom" 3010 | }, 3011 | { 3012 | "url": "https://github.com/fabpot", 3013 | "type": "github" 3014 | }, 3015 | { 3016 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3017 | "type": "tidelift" 3018 | } 3019 | ], 3020 | "time": "2024-09-09T11:45:10+00:00" 3021 | }, 3022 | { 3023 | "name": "symfony/routing", 3024 | "version": "v7.1.6", 3025 | "source": { 3026 | "type": "git", 3027 | "url": "https://github.com/symfony/routing.git", 3028 | "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" 3029 | }, 3030 | "dist": { 3031 | "type": "zip", 3032 | "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", 3033 | "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", 3034 | "shasum": "" 3035 | }, 3036 | "require": { 3037 | "php": ">=8.2", 3038 | "symfony/deprecation-contracts": "^2.5|^3" 3039 | }, 3040 | "conflict": { 3041 | "symfony/config": "<6.4", 3042 | "symfony/dependency-injection": "<6.4", 3043 | "symfony/yaml": "<6.4" 3044 | }, 3045 | "require-dev": { 3046 | "psr/log": "^1|^2|^3", 3047 | "symfony/config": "^6.4|^7.0", 3048 | "symfony/dependency-injection": "^6.4|^7.0", 3049 | "symfony/expression-language": "^6.4|^7.0", 3050 | "symfony/http-foundation": "^6.4|^7.0", 3051 | "symfony/yaml": "^6.4|^7.0" 3052 | }, 3053 | "type": "library", 3054 | "autoload": { 3055 | "psr-4": { 3056 | "Symfony\\Component\\Routing\\": "" 3057 | }, 3058 | "exclude-from-classmap": [ 3059 | "/Tests/" 3060 | ] 3061 | }, 3062 | "notification-url": "https://packagist.org/downloads/", 3063 | "license": [ 3064 | "MIT" 3065 | ], 3066 | "authors": [ 3067 | { 3068 | "name": "Fabien Potencier", 3069 | "email": "fabien@symfony.com" 3070 | }, 3071 | { 3072 | "name": "Symfony Community", 3073 | "homepage": "https://symfony.com/contributors" 3074 | } 3075 | ], 3076 | "description": "Maps an HTTP request to a set of configuration variables", 3077 | "homepage": "https://symfony.com", 3078 | "keywords": [ 3079 | "router", 3080 | "routing", 3081 | "uri", 3082 | "url" 3083 | ], 3084 | "support": { 3085 | "source": "https://github.com/symfony/routing/tree/v7.1.6" 3086 | }, 3087 | "funding": [ 3088 | { 3089 | "url": "https://symfony.com/sponsor", 3090 | "type": "custom" 3091 | }, 3092 | { 3093 | "url": "https://github.com/fabpot", 3094 | "type": "github" 3095 | }, 3096 | { 3097 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3098 | "type": "tidelift" 3099 | } 3100 | ], 3101 | "time": "2024-10-01T08:31:23+00:00" 3102 | }, 3103 | { 3104 | "name": "symfony/translation", 3105 | "version": "v7.1.6", 3106 | "source": { 3107 | "type": "git", 3108 | "url": "https://github.com/symfony/translation.git", 3109 | "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" 3110 | }, 3111 | "dist": { 3112 | "type": "zip", 3113 | "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", 3114 | "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", 3115 | "shasum": "" 3116 | }, 3117 | "require": { 3118 | "php": ">=8.2", 3119 | "symfony/polyfill-mbstring": "~1.0", 3120 | "symfony/translation-contracts": "^2.5|^3.0" 3121 | }, 3122 | "conflict": { 3123 | "symfony/config": "<6.4", 3124 | "symfony/console": "<6.4", 3125 | "symfony/dependency-injection": "<6.4", 3126 | "symfony/http-client-contracts": "<2.5", 3127 | "symfony/http-kernel": "<6.4", 3128 | "symfony/service-contracts": "<2.5", 3129 | "symfony/twig-bundle": "<6.4", 3130 | "symfony/yaml": "<6.4" 3131 | }, 3132 | "provide": { 3133 | "symfony/translation-implementation": "2.3|3.0" 3134 | }, 3135 | "require-dev": { 3136 | "nikic/php-parser": "^4.18|^5.0", 3137 | "psr/log": "^1|^2|^3", 3138 | "symfony/config": "^6.4|^7.0", 3139 | "symfony/console": "^6.4|^7.0", 3140 | "symfony/dependency-injection": "^6.4|^7.0", 3141 | "symfony/finder": "^6.4|^7.0", 3142 | "symfony/http-client-contracts": "^2.5|^3.0", 3143 | "symfony/http-kernel": "^6.4|^7.0", 3144 | "symfony/intl": "^6.4|^7.0", 3145 | "symfony/polyfill-intl-icu": "^1.21", 3146 | "symfony/routing": "^6.4|^7.0", 3147 | "symfony/service-contracts": "^2.5|^3", 3148 | "symfony/yaml": "^6.4|^7.0" 3149 | }, 3150 | "type": "library", 3151 | "autoload": { 3152 | "files": [ 3153 | "Resources/functions.php" 3154 | ], 3155 | "psr-4": { 3156 | "Symfony\\Component\\Translation\\": "" 3157 | }, 3158 | "exclude-from-classmap": [ 3159 | "/Tests/" 3160 | ] 3161 | }, 3162 | "notification-url": "https://packagist.org/downloads/", 3163 | "license": [ 3164 | "MIT" 3165 | ], 3166 | "authors": [ 3167 | { 3168 | "name": "Fabien Potencier", 3169 | "email": "fabien@symfony.com" 3170 | }, 3171 | { 3172 | "name": "Symfony Community", 3173 | "homepage": "https://symfony.com/contributors" 3174 | } 3175 | ], 3176 | "description": "Provides tools to internationalize your application", 3177 | "homepage": "https://symfony.com", 3178 | "support": { 3179 | "source": "https://github.com/symfony/translation/tree/v7.1.6" 3180 | }, 3181 | "funding": [ 3182 | { 3183 | "url": "https://symfony.com/sponsor", 3184 | "type": "custom" 3185 | }, 3186 | { 3187 | "url": "https://github.com/fabpot", 3188 | "type": "github" 3189 | }, 3190 | { 3191 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3192 | "type": "tidelift" 3193 | } 3194 | ], 3195 | "time": "2024-09-28T12:35:13+00:00" 3196 | }, 3197 | { 3198 | "name": "symfony/translation-contracts", 3199 | "version": "v3.5.0", 3200 | "source": { 3201 | "type": "git", 3202 | "url": "https://github.com/symfony/translation-contracts.git", 3203 | "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" 3204 | }, 3205 | "dist": { 3206 | "type": "zip", 3207 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", 3208 | "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", 3209 | "shasum": "" 3210 | }, 3211 | "require": { 3212 | "php": ">=8.1" 3213 | }, 3214 | "type": "library", 3215 | "extra": { 3216 | "branch-alias": { 3217 | "dev-main": "3.5-dev" 3218 | }, 3219 | "thanks": { 3220 | "name": "symfony/contracts", 3221 | "url": "https://github.com/symfony/contracts" 3222 | } 3223 | }, 3224 | "autoload": { 3225 | "psr-4": { 3226 | "Symfony\\Contracts\\Translation\\": "" 3227 | }, 3228 | "exclude-from-classmap": [ 3229 | "/Test/" 3230 | ] 3231 | }, 3232 | "notification-url": "https://packagist.org/downloads/", 3233 | "license": [ 3234 | "MIT" 3235 | ], 3236 | "authors": [ 3237 | { 3238 | "name": "Nicolas Grekas", 3239 | "email": "p@tchwork.com" 3240 | }, 3241 | { 3242 | "name": "Symfony Community", 3243 | "homepage": "https://symfony.com/contributors" 3244 | } 3245 | ], 3246 | "description": "Generic abstractions related to translation", 3247 | "homepage": "https://symfony.com", 3248 | "keywords": [ 3249 | "abstractions", 3250 | "contracts", 3251 | "decoupling", 3252 | "interfaces", 3253 | "interoperability", 3254 | "standards" 3255 | ], 3256 | "support": { 3257 | "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" 3258 | }, 3259 | "funding": [ 3260 | { 3261 | "url": "https://symfony.com/sponsor", 3262 | "type": "custom" 3263 | }, 3264 | { 3265 | "url": "https://github.com/fabpot", 3266 | "type": "github" 3267 | }, 3268 | { 3269 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3270 | "type": "tidelift" 3271 | } 3272 | ], 3273 | "time": "2024-04-18T09:32:20+00:00" 3274 | }, 3275 | { 3276 | "name": "symfony/var-dumper", 3277 | "version": "v7.1.8", 3278 | "source": { 3279 | "type": "git", 3280 | "url": "https://github.com/symfony/var-dumper.git", 3281 | "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" 3282 | }, 3283 | "dist": { 3284 | "type": "zip", 3285 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", 3286 | "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", 3287 | "shasum": "" 3288 | }, 3289 | "require": { 3290 | "php": ">=8.2", 3291 | "symfony/polyfill-mbstring": "~1.0" 3292 | }, 3293 | "conflict": { 3294 | "symfony/console": "<6.4" 3295 | }, 3296 | "require-dev": { 3297 | "ext-iconv": "*", 3298 | "symfony/console": "^6.4|^7.0", 3299 | "symfony/http-kernel": "^6.4|^7.0", 3300 | "symfony/process": "^6.4|^7.0", 3301 | "symfony/uid": "^6.4|^7.0", 3302 | "twig/twig": "^3.0.4" 3303 | }, 3304 | "bin": [ 3305 | "Resources/bin/var-dump-server" 3306 | ], 3307 | "type": "library", 3308 | "autoload": { 3309 | "files": [ 3310 | "Resources/functions/dump.php" 3311 | ], 3312 | "psr-4": { 3313 | "Symfony\\Component\\VarDumper\\": "" 3314 | }, 3315 | "exclude-from-classmap": [ 3316 | "/Tests/" 3317 | ] 3318 | }, 3319 | "notification-url": "https://packagist.org/downloads/", 3320 | "license": [ 3321 | "MIT" 3322 | ], 3323 | "authors": [ 3324 | { 3325 | "name": "Nicolas Grekas", 3326 | "email": "p@tchwork.com" 3327 | }, 3328 | { 3329 | "name": "Symfony Community", 3330 | "homepage": "https://symfony.com/contributors" 3331 | } 3332 | ], 3333 | "description": "Provides mechanisms for walking through any arbitrary PHP variable", 3334 | "homepage": "https://symfony.com", 3335 | "keywords": [ 3336 | "debug", 3337 | "dump" 3338 | ], 3339 | "support": { 3340 | "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" 3341 | }, 3342 | "funding": [ 3343 | { 3344 | "url": "https://symfony.com/sponsor", 3345 | "type": "custom" 3346 | }, 3347 | { 3348 | "url": "https://github.com/fabpot", 3349 | "type": "github" 3350 | }, 3351 | { 3352 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3353 | "type": "tidelift" 3354 | } 3355 | ], 3356 | "time": "2024-11-08T15:46:42+00:00" 3357 | }, 3358 | { 3359 | "name": "voku/portable-ascii", 3360 | "version": "2.0.1", 3361 | "source": { 3362 | "type": "git", 3363 | "url": "https://github.com/voku/portable-ascii.git", 3364 | "reference": "b56450eed252f6801410d810c8e1727224ae0743" 3365 | }, 3366 | "dist": { 3367 | "type": "zip", 3368 | "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", 3369 | "reference": "b56450eed252f6801410d810c8e1727224ae0743", 3370 | "shasum": "" 3371 | }, 3372 | "require": { 3373 | "php": ">=7.0.0" 3374 | }, 3375 | "require-dev": { 3376 | "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" 3377 | }, 3378 | "suggest": { 3379 | "ext-intl": "Use Intl for transliterator_transliterate() support" 3380 | }, 3381 | "type": "library", 3382 | "autoload": { 3383 | "psr-4": { 3384 | "voku\\": "src/voku/" 3385 | } 3386 | }, 3387 | "notification-url": "https://packagist.org/downloads/", 3388 | "license": [ 3389 | "MIT" 3390 | ], 3391 | "authors": [ 3392 | { 3393 | "name": "Lars Moelleken", 3394 | "homepage": "http://www.moelleken.org/" 3395 | } 3396 | ], 3397 | "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", 3398 | "homepage": "https://github.com/voku/portable-ascii", 3399 | "keywords": [ 3400 | "ascii", 3401 | "clean", 3402 | "php" 3403 | ], 3404 | "support": { 3405 | "issues": "https://github.com/voku/portable-ascii/issues", 3406 | "source": "https://github.com/voku/portable-ascii/tree/2.0.1" 3407 | }, 3408 | "funding": [ 3409 | { 3410 | "url": "https://www.paypal.me/moelleken", 3411 | "type": "custom" 3412 | }, 3413 | { 3414 | "url": "https://github.com/voku", 3415 | "type": "github" 3416 | }, 3417 | { 3418 | "url": "https://opencollective.com/portable-ascii", 3419 | "type": "open_collective" 3420 | }, 3421 | { 3422 | "url": "https://www.patreon.com/voku", 3423 | "type": "patreon" 3424 | }, 3425 | { 3426 | "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", 3427 | "type": "tidelift" 3428 | } 3429 | ], 3430 | "time": "2022-03-08T17:03:00+00:00" 3431 | } 3432 | ], 3433 | "packages-dev": [ 3434 | { 3435 | "name": "laravel/pint", 3436 | "version": "v1.18.1", 3437 | "source": { 3438 | "type": "git", 3439 | "url": "https://github.com/laravel/pint.git", 3440 | "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" 3441 | }, 3442 | "dist": { 3443 | "type": "zip", 3444 | "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", 3445 | "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", 3446 | "shasum": "" 3447 | }, 3448 | "require": { 3449 | "ext-json": "*", 3450 | "ext-mbstring": "*", 3451 | "ext-tokenizer": "*", 3452 | "ext-xml": "*", 3453 | "php": "^8.1.0" 3454 | }, 3455 | "require-dev": { 3456 | "friendsofphp/php-cs-fixer": "^3.64.0", 3457 | "illuminate/view": "^10.48.20", 3458 | "larastan/larastan": "^2.9.8", 3459 | "laravel-zero/framework": "^10.4.0", 3460 | "mockery/mockery": "^1.6.12", 3461 | "nunomaduro/termwind": "^1.15.1", 3462 | "pestphp/pest": "^2.35.1" 3463 | }, 3464 | "bin": [ 3465 | "builds/pint" 3466 | ], 3467 | "type": "project", 3468 | "autoload": { 3469 | "psr-4": { 3470 | "App\\": "app/", 3471 | "Database\\Seeders\\": "database/seeders/", 3472 | "Database\\Factories\\": "database/factories/" 3473 | } 3474 | }, 3475 | "notification-url": "https://packagist.org/downloads/", 3476 | "license": [ 3477 | "MIT" 3478 | ], 3479 | "authors": [ 3480 | { 3481 | "name": "Nuno Maduro", 3482 | "email": "enunomaduro@gmail.com" 3483 | } 3484 | ], 3485 | "description": "An opinionated code formatter for PHP.", 3486 | "homepage": "https://laravel.com", 3487 | "keywords": [ 3488 | "format", 3489 | "formatter", 3490 | "lint", 3491 | "linter", 3492 | "php" 3493 | ], 3494 | "support": { 3495 | "issues": "https://github.com/laravel/pint/issues", 3496 | "source": "https://github.com/laravel/pint" 3497 | }, 3498 | "time": "2024-09-24T17:22:50+00:00" 3499 | } 3500 | ], 3501 | "aliases": [], 3502 | "minimum-stability": "dev", 3503 | "stability-flags": [], 3504 | "prefer-stable": true, 3505 | "prefer-lowest": false, 3506 | "platform": { 3507 | "php": "^8.1" 3508 | }, 3509 | "platform-dev": [], 3510 | "plugin-api-version": "2.6.0" 3511 | } 3512 | -------------------------------------------------------------------------------- /pint.json: -------------------------------------------------------------------------------- 1 | { 2 | "preset": "psr12" 3 | } -------------------------------------------------------------------------------- /src/Annotations/Method.php: -------------------------------------------------------------------------------- 1 | uri; 31 | } 32 | 33 | public function getMethod(): string 34 | { 35 | return $this->method->value; 36 | } 37 | 38 | public function getName(): ?string 39 | { 40 | return $this->name; 41 | } 42 | 43 | public function getMiddlewares(): string|array|null 44 | { 45 | return $this->middlewares; 46 | } 47 | 48 | public function getWhere(): ?array 49 | { 50 | return $this->where; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Annotations/Router.php: -------------------------------------------------------------------------------- 1 | as; 28 | } 29 | 30 | public function getPrefix(): ?string 31 | { 32 | return $this->prefix; 33 | } 34 | 35 | public function getDomain(): ?string 36 | { 37 | return $this->domain; 38 | } 39 | 40 | public function getMiddleware(): array|string|null 41 | { 42 | return $this->middlewares; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Classes/Loader.php: -------------------------------------------------------------------------------- 1 | group = $options; 27 | 28 | return $this; 29 | } 30 | 31 | /** 32 | * Load selected controllers. 33 | * 34 | * @throws Exception 35 | */ 36 | public function loadControllers(mixed $controllers): void 37 | { 38 | $this->loader(ClassLoader::class, $controllers); 39 | } 40 | 41 | /** 42 | * Load controllers from directories. 43 | * 44 | * @throws Exception 45 | */ 46 | public function loadFromDirectories(mixed $path): void 47 | { 48 | $this->loader(DirectoryLoader::class, $path); 49 | } 50 | 51 | /** 52 | * @throws Exception 53 | */ 54 | private function loader(mixed $loader, mixed $path): void 55 | { 56 | if(is_null($this->group)) { 57 | App::make($loader)->load(Arr::wrap($path)); 58 | return; 59 | } 60 | 61 | Route::group($this->group, fn () => App::make($loader)->load(Arr::wrap($path))); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/Enums/Methods.php: -------------------------------------------------------------------------------- 1 | app->bind( 16 | abstract: 'laravel-router', 17 | concrete: fn () => new Loader() 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/Loaders/ClassLoader.php: -------------------------------------------------------------------------------- 1 | loadController($controller); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Loaders/DirectoryLoader.php: -------------------------------------------------------------------------------- 1 | loadController($this->getClassFromPath($path)); 22 | } 23 | } 24 | } 25 | 26 | /** 27 | * Get a class from the path. 28 | */ 29 | private function getClassFromPath(string $path): string 30 | { 31 | return $this->getClassNamespaceFromPath($path).'\\'.$this->getClassNameFromPath($path); 32 | } 33 | 34 | /** 35 | * Get a class namespace from the path. 36 | */ 37 | private function getClassNamespaceFromPath(string $path): ?string 38 | { 39 | $tokens = token_get_all(file_get_contents($path)); 40 | $count = count($tokens); 41 | $i = 0; 42 | $namespace = null; 43 | 44 | while ($i < $count) { 45 | $token = $tokens[$i]; 46 | if (is_array($token) && $token[0] === T_NAMESPACE) { 47 | while (++$i < $count) { 48 | if ($tokens[$i] === ';') { 49 | $namespace = trim($namespace); 50 | break; 51 | } 52 | $namespace .= is_array($tokens[$i]) ? $tokens[$i][1] : $tokens[$i]; 53 | } 54 | break; 55 | } 56 | $i++; 57 | } 58 | 59 | return $namespace; 60 | } 61 | 62 | /** 63 | * Get a class name from the path. 64 | */ 65 | private function getClassNameFromPath(string $path): string 66 | { 67 | $classes = []; 68 | $tokens = token_get_all(file_get_contents($path)); 69 | 70 | for ($i = 2; $i < count($tokens); $i++) { 71 | if ($tokens[$i - 2][0] == T_CLASS 72 | && $tokens[$i - 1][0] == T_WHITESPACE 73 | && $tokens[$i][0] == T_STRING 74 | ) { 75 | 76 | $class_name = $tokens[$i][1]; 77 | $classes[] = $class_name; 78 | } 79 | } 80 | 81 | return $classes[0]; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/Traits/Loader.php: -------------------------------------------------------------------------------- 1 | isAbstract()) { 32 | throw new InvalidArgumentException( 33 | message: sprintf('Annotations from class "%s" cannot be read as it is abstract.', $class->getName()) 34 | ); 35 | } 36 | 37 | $controller = $this->getController($class); 38 | 39 | Route::group( 40 | $controller, 41 | fn (LaravelRouter $router) => $this->loadMethods( 42 | router: $router, 43 | methods: $class->getMethods(), 44 | data: $controller, 45 | class: $class 46 | ) 47 | ); 48 | } 49 | 50 | /** 51 | * Set a controller data. 52 | */ 53 | private function setControllerData( 54 | string $as = null, 55 | string $prefix = null, 56 | string $domain = null, 57 | string|array $middleware = null 58 | ): array { 59 | return compact('as', 'prefix', 'domain', 'middleware'); 60 | } 61 | 62 | /** 63 | * Get a parent controller. 64 | */ 65 | private function getController(ReflectionClass $class): array 66 | { 67 | $data = $this->setControllerData(); 68 | $annotation = null; 69 | 70 | if ($attrs = $class->getAttributes(Router::class, ReflectionAttribute::IS_INSTANCEOF)[0] ?? null) { 71 | $annotation = $attrs->newInstance(); 72 | } 73 | 74 | if ($annotation) { 75 | $data = $this->setControllerData( 76 | as: $annotation->getName(), 77 | prefix: $annotation->getPrefix(), 78 | domain: $annotation->getDomain(), 79 | middleware: $annotation->getMiddleware() 80 | ); 81 | } 82 | 83 | return $data; 84 | } 85 | 86 | /** 87 | * Load methods from a controller. 88 | */ 89 | private function loadMethods(LaravelRouter $router, array $methods, array $data, ReflectionClass $class): void 90 | { 91 | foreach ($methods as $method) { 92 | foreach ($this->loadAnnotationMethods($method) as $annotation) { 93 | $this->addRoute( 94 | router: $router, 95 | annotation: $annotation, 96 | data: $data, 97 | class: $class, 98 | method: $method 99 | ); 100 | } 101 | } 102 | } 103 | 104 | /** 105 | * Load annotations methods. 106 | */ 107 | private function loadAnnotationMethods(ReflectionClass|ReflectionMethod $reflection): iterable 108 | { 109 | foreach ($reflection->getAttributes(Method::class, ReflectionAttribute::IS_INSTANCEOF) as $attribute) { 110 | yield $attribute->newInstance(); 111 | } 112 | } 113 | 114 | /** 115 | * Add route. 116 | */ 117 | private function addRoute(LaravelRouter $router, Method $annotation, array $data, ReflectionClass $class, ReflectionMethod $method): void 118 | { 119 | $name = $annotation->getName() ?? Str::snake($method->getName()); 120 | 121 | $router 122 | ->{$annotation->getMethod()}($annotation->getUri(), [$class->getName(), $method->getName()]) 123 | ->name($name) 124 | ->middleware($annotation->getMiddlewares()); 125 | 126 | if ($annotation->getWhere()) { 127 | $router->where($annotation->getWhere()); 128 | } 129 | } 130 | } 131 | --------------------------------------------------------------------------------