├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── src ├── Client.php ├── Content │ ├── Attributes │ │ ├── Author.php │ │ ├── Body.php │ │ ├── Footer.php │ │ ├── Image.php │ │ └── Interfaces │ │ │ └── Attribute.php │ ├── Embed.php │ └── Rules │ │ ├── AuthorRules.php │ │ ├── BodyRules.php │ │ ├── FooterRules.php │ │ └── Interfaces │ │ └── Rule.php └── Exceptions │ └── InvalidAttributeException.php └── tests ├── EmbedTest.php └── Rules ├── AuthorRulesTest.php ├── BodyRulesTest.php └── FooterRulesTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Florian Rambur 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 all 13 | 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Discord Webhook 2 | 3 | ## Installation 4 | ``` 5 | composer require florianrambur/discord-webhook 6 | ``` 7 | 8 | ## Usage 9 | Here is a simple example 10 | ```php 11 | 'https://your-discord-webhook-url', 17 | 'author' => [ 18 | 'username' => 'Florian', 19 | 'avatar_url' => 'https://i.imgur.com/ZGPxFN2.jpg', 20 | ], 21 | ]; 22 | 23 | $client = new Client($config); 24 | 25 | $response = $client->send([ 26 | 'content' => 'This is the main content', 27 | ]); 28 | ``` 29 | ![Simple Example](https://i.ibb.co/f9ycPF9/simple-example.png) 30 | 31 | ## Work with Embed 32 | This package give you the opportunity to work with a simple `Embed` class that allow you to create an advanced message. To do that, you can pass data into the constructor or use some methods like `name($value)` 33 | ```php 34 | add(new Author([ 38 | 'name' => 'This is the author', 39 | 'url' => 'https://github.com/florianrambur/discord-webhook', 40 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 41 | ])) 42 | ->add(new Body([ 43 | 'title' => 'Webhook Title', 44 | 'description' => 'Webhook Description', 45 | 'color' => 5814783, 46 | ])) 47 | ->add(new Image([ 48 | 'images' => ['https://i.imgur.com/ZGPxFN2.jpg'], 49 | ])) 50 | ->add(new Footer([ 51 | 'text' => 'This is the footer', 52 | 'timestamp' => '2021-07-06T22:00:00.000Z', 53 | ])); 54 | ``` 55 | 56 | ```php 57 | name('This is the author') 61 | ->url('https://github.com/florianrambur/discord-webhook') 62 | ->iconUrl('https://github.com/florianrambur/discord-webhook/icon.jpg'); 63 | 64 | $body = (new Body()) 65 | ->title('Webhook Title') 66 | ->description('Webhook Description') 67 | ->color(5814783); 68 | 69 | $image = (new Image())->image('https://i.imgur.com/ZGPxFN2.jpg'); 70 | 71 | $footer = (new Footer()) 72 | ->text('This is the footer') 73 | ->timestamp('2021-07-06T22:00:00.000Z'); 74 | 75 | $embed = (new Embed())->addMany([$author, $body, $image, $footer]); 76 | ``` 77 | The `Embed` provides two methods to add an attribute class 78 | ```php 79 | add($body) 83 | ->add($footer); 84 | 85 | (new Embed())->addMany([$body, $footer]); 86 | ``` 87 | 88 | Then, pass your data and your config to the `Client` class 89 | ```php 90 | 'https://your-discord-webhook-url', 94 | 'author' => [ 95 | 'username' => 'Florian', 96 | 'avatar_url' => 'https://i.imgur.com/ZGPxFN2.jpg', 97 | ], 98 | ]; 99 | 100 | $client = new Client($config); 101 | 102 | $response = $client->send([ 103 | 'embeds' => [ 104 | $embed->toArray(), 105 | ], 106 | ]); 107 | ``` 108 | ![Embed Example](https://i.ibb.co/dkPYbKG/embed-example.png) 109 | 110 | ## What's next 111 | This package is under development and few things are missing : 112 | - some constraints on attributes are missing 113 | - few templates will be created to give you the possibility to create a message easier and faster 114 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "florianrambur/discord-webhook", 3 | "license": "MIT", 4 | "authors": [ 5 | { 6 | "name": "Florian Rambur", 7 | "email": "florianrambur@gmail.com" 8 | } 9 | ], 10 | "keywords": [ 11 | "php", 12 | "package", 13 | "discord", 14 | "webhook" 15 | ], 16 | "require": { 17 | "php": ">=7.2", 18 | "guzzlehttp/guzzle": "^7.3", 19 | "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": "*", 23 | "larapack/dd": "1.*" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "FlorianRambur\\DiscordWebhook\\": "src/" 28 | } 29 | }, 30 | "autoload-dev": { 31 | "psr-4": { 32 | "FlorianRambur\\DiscordWebhook\\Tests\\": "tests/" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /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": "55986d9ab2a86664e81cbb224f4c7de6", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "2.0.4", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", 20 | "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^7.2 || ^8.0" 25 | }, 26 | "require-dev": { 27 | "doctrine/coding-standard": "^8.2", 28 | "phpstan/phpstan": "^0.12", 29 | "phpstan/phpstan-phpunit": "^0.12", 30 | "phpstan/phpstan-strict-rules": "^0.12", 31 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", 32 | "vimeo/psalm": "^4.10" 33 | }, 34 | "type": "library", 35 | "autoload": { 36 | "psr-4": { 37 | "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Guilherme Blanco", 47 | "email": "guilhermeblanco@gmail.com" 48 | }, 49 | { 50 | "name": "Roman Borschel", 51 | "email": "roman@code-factory.org" 52 | }, 53 | { 54 | "name": "Benjamin Eberlei", 55 | "email": "kontakt@beberlei.de" 56 | }, 57 | { 58 | "name": "Jonathan Wage", 59 | "email": "jonwage@gmail.com" 60 | }, 61 | { 62 | "name": "Johannes Schmitt", 63 | "email": "schmittjoh@gmail.com" 64 | } 65 | ], 66 | "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", 67 | "homepage": "https://www.doctrine-project.org/projects/inflector.html", 68 | "keywords": [ 69 | "inflection", 70 | "inflector", 71 | "lowercase", 72 | "manipulation", 73 | "php", 74 | "plural", 75 | "singular", 76 | "strings", 77 | "uppercase", 78 | "words" 79 | ], 80 | "support": { 81 | "issues": "https://github.com/doctrine/inflector/issues", 82 | "source": "https://github.com/doctrine/inflector/tree/2.0.4" 83 | }, 84 | "funding": [ 85 | { 86 | "url": "https://www.doctrine-project.org/sponsorship.html", 87 | "type": "custom" 88 | }, 89 | { 90 | "url": "https://www.patreon.com/phpdoctrine", 91 | "type": "patreon" 92 | }, 93 | { 94 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", 95 | "type": "tidelift" 96 | } 97 | ], 98 | "time": "2021-10-22T20:16:43+00:00" 99 | }, 100 | { 101 | "name": "guzzlehttp/guzzle", 102 | "version": "7.4.1", 103 | "source": { 104 | "type": "git", 105 | "url": "https://github.com/guzzle/guzzle.git", 106 | "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79" 107 | }, 108 | "dist": { 109 | "type": "zip", 110 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/ee0a041b1760e6a53d2a39c8c34115adc2af2c79", 111 | "reference": "ee0a041b1760e6a53d2a39c8c34115adc2af2c79", 112 | "shasum": "" 113 | }, 114 | "require": { 115 | "ext-json": "*", 116 | "guzzlehttp/promises": "^1.5", 117 | "guzzlehttp/psr7": "^1.8.3 || ^2.1", 118 | "php": "^7.2.5 || ^8.0", 119 | "psr/http-client": "^1.0", 120 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 121 | }, 122 | "provide": { 123 | "psr/http-client-implementation": "1.0" 124 | }, 125 | "require-dev": { 126 | "bamarni/composer-bin-plugin": "^1.4.1", 127 | "ext-curl": "*", 128 | "php-http/client-integration-tests": "^3.0", 129 | "phpunit/phpunit": "^8.5.5 || ^9.3.5", 130 | "psr/log": "^1.1 || ^2.0 || ^3.0" 131 | }, 132 | "suggest": { 133 | "ext-curl": "Required for CURL handler support", 134 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 135 | "psr/log": "Required for using the Log middleware" 136 | }, 137 | "type": "library", 138 | "extra": { 139 | "branch-alias": { 140 | "dev-master": "7.4-dev" 141 | } 142 | }, 143 | "autoload": { 144 | "files": [ 145 | "src/functions_include.php" 146 | ], 147 | "psr-4": { 148 | "GuzzleHttp\\": "src/" 149 | } 150 | }, 151 | "notification-url": "https://packagist.org/downloads/", 152 | "license": [ 153 | "MIT" 154 | ], 155 | "authors": [ 156 | { 157 | "name": "Graham Campbell", 158 | "email": "hello@gjcampbell.co.uk", 159 | "homepage": "https://github.com/GrahamCampbell" 160 | }, 161 | { 162 | "name": "Michael Dowling", 163 | "email": "mtdowling@gmail.com", 164 | "homepage": "https://github.com/mtdowling" 165 | }, 166 | { 167 | "name": "Jeremy Lindblom", 168 | "email": "jeremeamia@gmail.com", 169 | "homepage": "https://github.com/jeremeamia" 170 | }, 171 | { 172 | "name": "George Mponos", 173 | "email": "gmponos@gmail.com", 174 | "homepage": "https://github.com/gmponos" 175 | }, 176 | { 177 | "name": "Tobias Nyholm", 178 | "email": "tobias.nyholm@gmail.com", 179 | "homepage": "https://github.com/Nyholm" 180 | }, 181 | { 182 | "name": "Márk Sági-Kazár", 183 | "email": "mark.sagikazar@gmail.com", 184 | "homepage": "https://github.com/sagikazarmark" 185 | }, 186 | { 187 | "name": "Tobias Schultze", 188 | "email": "webmaster@tubo-world.de", 189 | "homepage": "https://github.com/Tobion" 190 | } 191 | ], 192 | "description": "Guzzle is a PHP HTTP client library", 193 | "keywords": [ 194 | "client", 195 | "curl", 196 | "framework", 197 | "http", 198 | "http client", 199 | "psr-18", 200 | "psr-7", 201 | "rest", 202 | "web service" 203 | ], 204 | "support": { 205 | "issues": "https://github.com/guzzle/guzzle/issues", 206 | "source": "https://github.com/guzzle/guzzle/tree/7.4.1" 207 | }, 208 | "funding": [ 209 | { 210 | "url": "https://github.com/GrahamCampbell", 211 | "type": "github" 212 | }, 213 | { 214 | "url": "https://github.com/Nyholm", 215 | "type": "github" 216 | }, 217 | { 218 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 219 | "type": "tidelift" 220 | } 221 | ], 222 | "time": "2021-12-06T18:43:05+00:00" 223 | }, 224 | { 225 | "name": "guzzlehttp/promises", 226 | "version": "1.5.1", 227 | "source": { 228 | "type": "git", 229 | "url": "https://github.com/guzzle/promises.git", 230 | "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" 231 | }, 232 | "dist": { 233 | "type": "zip", 234 | "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", 235 | "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", 236 | "shasum": "" 237 | }, 238 | "require": { 239 | "php": ">=5.5" 240 | }, 241 | "require-dev": { 242 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 243 | }, 244 | "type": "library", 245 | "extra": { 246 | "branch-alias": { 247 | "dev-master": "1.5-dev" 248 | } 249 | }, 250 | "autoload": { 251 | "files": [ 252 | "src/functions_include.php" 253 | ], 254 | "psr-4": { 255 | "GuzzleHttp\\Promise\\": "src/" 256 | } 257 | }, 258 | "notification-url": "https://packagist.org/downloads/", 259 | "license": [ 260 | "MIT" 261 | ], 262 | "authors": [ 263 | { 264 | "name": "Graham Campbell", 265 | "email": "hello@gjcampbell.co.uk", 266 | "homepage": "https://github.com/GrahamCampbell" 267 | }, 268 | { 269 | "name": "Michael Dowling", 270 | "email": "mtdowling@gmail.com", 271 | "homepage": "https://github.com/mtdowling" 272 | }, 273 | { 274 | "name": "Tobias Nyholm", 275 | "email": "tobias.nyholm@gmail.com", 276 | "homepage": "https://github.com/Nyholm" 277 | }, 278 | { 279 | "name": "Tobias Schultze", 280 | "email": "webmaster@tubo-world.de", 281 | "homepage": "https://github.com/Tobion" 282 | } 283 | ], 284 | "description": "Guzzle promises library", 285 | "keywords": [ 286 | "promise" 287 | ], 288 | "support": { 289 | "issues": "https://github.com/guzzle/promises/issues", 290 | "source": "https://github.com/guzzle/promises/tree/1.5.1" 291 | }, 292 | "funding": [ 293 | { 294 | "url": "https://github.com/GrahamCampbell", 295 | "type": "github" 296 | }, 297 | { 298 | "url": "https://github.com/Nyholm", 299 | "type": "github" 300 | }, 301 | { 302 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 303 | "type": "tidelift" 304 | } 305 | ], 306 | "time": "2021-10-22T20:56:57+00:00" 307 | }, 308 | { 309 | "name": "guzzlehttp/psr7", 310 | "version": "2.1.0", 311 | "source": { 312 | "type": "git", 313 | "url": "https://github.com/guzzle/psr7.git", 314 | "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72" 315 | }, 316 | "dist": { 317 | "type": "zip", 318 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/089edd38f5b8abba6cb01567c2a8aaa47cec4c72", 319 | "reference": "089edd38f5b8abba6cb01567c2a8aaa47cec4c72", 320 | "shasum": "" 321 | }, 322 | "require": { 323 | "php": "^7.2.5 || ^8.0", 324 | "psr/http-factory": "^1.0", 325 | "psr/http-message": "^1.0", 326 | "ralouphie/getallheaders": "^3.0" 327 | }, 328 | "provide": { 329 | "psr/http-factory-implementation": "1.0", 330 | "psr/http-message-implementation": "1.0" 331 | }, 332 | "require-dev": { 333 | "bamarni/composer-bin-plugin": "^1.4.1", 334 | "http-interop/http-factory-tests": "^0.9", 335 | "phpunit/phpunit": "^8.5.8 || ^9.3.10" 336 | }, 337 | "suggest": { 338 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 339 | }, 340 | "type": "library", 341 | "extra": { 342 | "branch-alias": { 343 | "dev-master": "2.1-dev" 344 | } 345 | }, 346 | "autoload": { 347 | "psr-4": { 348 | "GuzzleHttp\\Psr7\\": "src/" 349 | } 350 | }, 351 | "notification-url": "https://packagist.org/downloads/", 352 | "license": [ 353 | "MIT" 354 | ], 355 | "authors": [ 356 | { 357 | "name": "Graham Campbell", 358 | "email": "hello@gjcampbell.co.uk", 359 | "homepage": "https://github.com/GrahamCampbell" 360 | }, 361 | { 362 | "name": "Michael Dowling", 363 | "email": "mtdowling@gmail.com", 364 | "homepage": "https://github.com/mtdowling" 365 | }, 366 | { 367 | "name": "George Mponos", 368 | "email": "gmponos@gmail.com", 369 | "homepage": "https://github.com/gmponos" 370 | }, 371 | { 372 | "name": "Tobias Nyholm", 373 | "email": "tobias.nyholm@gmail.com", 374 | "homepage": "https://github.com/Nyholm" 375 | }, 376 | { 377 | "name": "Márk Sági-Kazár", 378 | "email": "mark.sagikazar@gmail.com", 379 | "homepage": "https://github.com/sagikazarmark" 380 | }, 381 | { 382 | "name": "Tobias Schultze", 383 | "email": "webmaster@tubo-world.de", 384 | "homepage": "https://github.com/Tobion" 385 | }, 386 | { 387 | "name": "Márk Sági-Kazár", 388 | "email": "mark.sagikazar@gmail.com", 389 | "homepage": "https://sagikazarmark.hu" 390 | } 391 | ], 392 | "description": "PSR-7 message implementation that also provides common utility methods", 393 | "keywords": [ 394 | "http", 395 | "message", 396 | "psr-7", 397 | "request", 398 | "response", 399 | "stream", 400 | "uri", 401 | "url" 402 | ], 403 | "support": { 404 | "issues": "https://github.com/guzzle/psr7/issues", 405 | "source": "https://github.com/guzzle/psr7/tree/2.1.0" 406 | }, 407 | "funding": [ 408 | { 409 | "url": "https://github.com/GrahamCampbell", 410 | "type": "github" 411 | }, 412 | { 413 | "url": "https://github.com/Nyholm", 414 | "type": "github" 415 | }, 416 | { 417 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 418 | "type": "tidelift" 419 | } 420 | ], 421 | "time": "2021-10-06T17:43:30+00:00" 422 | }, 423 | { 424 | "name": "illuminate/collections", 425 | "version": "v9.2.0", 426 | "source": { 427 | "type": "git", 428 | "url": "https://github.com/illuminate/collections.git", 429 | "reference": "3b274e3bb842c14bc2fe3431061f884b475b51cc" 430 | }, 431 | "dist": { 432 | "type": "zip", 433 | "url": "https://api.github.com/repos/illuminate/collections/zipball/3b274e3bb842c14bc2fe3431061f884b475b51cc", 434 | "reference": "3b274e3bb842c14bc2fe3431061f884b475b51cc", 435 | "shasum": "" 436 | }, 437 | "require": { 438 | "illuminate/conditionable": "^9.0", 439 | "illuminate/contracts": "^9.0", 440 | "illuminate/macroable": "^9.0", 441 | "php": "^8.0.2" 442 | }, 443 | "suggest": { 444 | "symfony/var-dumper": "Required to use the dump method (^6.0)." 445 | }, 446 | "type": "library", 447 | "extra": { 448 | "branch-alias": { 449 | "dev-master": "9.x-dev" 450 | } 451 | }, 452 | "autoload": { 453 | "files": [ 454 | "helpers.php" 455 | ], 456 | "psr-4": { 457 | "Illuminate\\Support\\": "" 458 | } 459 | }, 460 | "notification-url": "https://packagist.org/downloads/", 461 | "license": [ 462 | "MIT" 463 | ], 464 | "authors": [ 465 | { 466 | "name": "Taylor Otwell", 467 | "email": "taylor@laravel.com" 468 | } 469 | ], 470 | "description": "The Illuminate Collections package.", 471 | "homepage": "https://laravel.com", 472 | "support": { 473 | "issues": "https://github.com/laravel/framework/issues", 474 | "source": "https://github.com/laravel/framework" 475 | }, 476 | "time": "2022-02-22T15:05:08+00:00" 477 | }, 478 | { 479 | "name": "illuminate/conditionable", 480 | "version": "v9.2.0", 481 | "source": { 482 | "type": "git", 483 | "url": "https://github.com/illuminate/conditionable.git", 484 | "reference": "238b6e16190bffcc168770ffda96c238037739b6" 485 | }, 486 | "dist": { 487 | "type": "zip", 488 | "url": "https://api.github.com/repos/illuminate/conditionable/zipball/238b6e16190bffcc168770ffda96c238037739b6", 489 | "reference": "238b6e16190bffcc168770ffda96c238037739b6", 490 | "shasum": "" 491 | }, 492 | "require": { 493 | "php": "^8.0.2" 494 | }, 495 | "type": "library", 496 | "extra": { 497 | "branch-alias": { 498 | "dev-master": "9.x-dev" 499 | } 500 | }, 501 | "autoload": { 502 | "psr-4": { 503 | "Illuminate\\Support\\": "" 504 | } 505 | }, 506 | "notification-url": "https://packagist.org/downloads/", 507 | "license": [ 508 | "MIT" 509 | ], 510 | "authors": [ 511 | { 512 | "name": "Taylor Otwell", 513 | "email": "taylor@laravel.com" 514 | } 515 | ], 516 | "description": "The Illuminate Conditionable package.", 517 | "homepage": "https://laravel.com", 518 | "support": { 519 | "issues": "https://github.com/laravel/framework/issues", 520 | "source": "https://github.com/laravel/framework" 521 | }, 522 | "time": "2022-02-18T16:33:16+00:00" 523 | }, 524 | { 525 | "name": "illuminate/contracts", 526 | "version": "v9.2.0", 527 | "source": { 528 | "type": "git", 529 | "url": "https://github.com/illuminate/contracts.git", 530 | "reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0" 531 | }, 532 | "dist": { 533 | "type": "zip", 534 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/bf4b3c254c49d28157645d01e4883b5951b1e1d0", 535 | "reference": "bf4b3c254c49d28157645d01e4883b5951b1e1d0", 536 | "shasum": "" 537 | }, 538 | "require": { 539 | "php": "^8.0.2", 540 | "psr/container": "^1.1.1|^2.0.1", 541 | "psr/simple-cache": "^1.0|^2.0|^3.0" 542 | }, 543 | "type": "library", 544 | "extra": { 545 | "branch-alias": { 546 | "dev-master": "9.x-dev" 547 | } 548 | }, 549 | "autoload": { 550 | "psr-4": { 551 | "Illuminate\\Contracts\\": "" 552 | } 553 | }, 554 | "notification-url": "https://packagist.org/downloads/", 555 | "license": [ 556 | "MIT" 557 | ], 558 | "authors": [ 559 | { 560 | "name": "Taylor Otwell", 561 | "email": "taylor@laravel.com" 562 | } 563 | ], 564 | "description": "The Illuminate Contracts package.", 565 | "homepage": "https://laravel.com", 566 | "support": { 567 | "issues": "https://github.com/laravel/framework/issues", 568 | "source": "https://github.com/laravel/framework" 569 | }, 570 | "time": "2022-02-22T14:45:39+00:00" 571 | }, 572 | { 573 | "name": "illuminate/macroable", 574 | "version": "v9.2.0", 575 | "source": { 576 | "type": "git", 577 | "url": "https://github.com/illuminate/macroable.git", 578 | "reference": "25a2c6dac2b7541ecbadef952702e84ae15f5354" 579 | }, 580 | "dist": { 581 | "type": "zip", 582 | "url": "https://api.github.com/repos/illuminate/macroable/zipball/25a2c6dac2b7541ecbadef952702e84ae15f5354", 583 | "reference": "25a2c6dac2b7541ecbadef952702e84ae15f5354", 584 | "shasum": "" 585 | }, 586 | "require": { 587 | "php": "^8.0.2" 588 | }, 589 | "type": "library", 590 | "extra": { 591 | "branch-alias": { 592 | "dev-master": "9.x-dev" 593 | } 594 | }, 595 | "autoload": { 596 | "psr-4": { 597 | "Illuminate\\Support\\": "" 598 | } 599 | }, 600 | "notification-url": "https://packagist.org/downloads/", 601 | "license": [ 602 | "MIT" 603 | ], 604 | "authors": [ 605 | { 606 | "name": "Taylor Otwell", 607 | "email": "taylor@laravel.com" 608 | } 609 | ], 610 | "description": "The Illuminate Macroable package.", 611 | "homepage": "https://laravel.com", 612 | "support": { 613 | "issues": "https://github.com/laravel/framework/issues", 614 | "source": "https://github.com/laravel/framework" 615 | }, 616 | "time": "2022-02-01T14:44:21+00:00" 617 | }, 618 | { 619 | "name": "illuminate/support", 620 | "version": "v9.2.0", 621 | "source": { 622 | "type": "git", 623 | "url": "https://github.com/illuminate/support.git", 624 | "reference": "ba4eda84d39039fffef3ae4d7ad9398b2330cf86" 625 | }, 626 | "dist": { 627 | "type": "zip", 628 | "url": "https://api.github.com/repos/illuminate/support/zipball/ba4eda84d39039fffef3ae4d7ad9398b2330cf86", 629 | "reference": "ba4eda84d39039fffef3ae4d7ad9398b2330cf86", 630 | "shasum": "" 631 | }, 632 | "require": { 633 | "doctrine/inflector": "^2.0", 634 | "ext-json": "*", 635 | "ext-mbstring": "*", 636 | "illuminate/collections": "^9.0", 637 | "illuminate/conditionable": "^9.0", 638 | "illuminate/contracts": "^9.0", 639 | "illuminate/macroable": "^9.0", 640 | "nesbot/carbon": "^2.53.1", 641 | "php": "^8.0.2", 642 | "voku/portable-ascii": "^2.0" 643 | }, 644 | "conflict": { 645 | "tightenco/collect": "<5.5.33" 646 | }, 647 | "suggest": { 648 | "illuminate/filesystem": "Required to use the composer class (^9.0).", 649 | "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", 650 | "ramsey/uuid": "Required to use Str::uuid() (^4.2.2).", 651 | "symfony/process": "Required to use the composer class (^6.0).", 652 | "symfony/var-dumper": "Required to use the dd function (^6.0).", 653 | "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." 654 | }, 655 | "type": "library", 656 | "extra": { 657 | "branch-alias": { 658 | "dev-master": "9.x-dev" 659 | } 660 | }, 661 | "autoload": { 662 | "files": [ 663 | "helpers.php" 664 | ], 665 | "psr-4": { 666 | "Illuminate\\Support\\": "" 667 | } 668 | }, 669 | "notification-url": "https://packagist.org/downloads/", 670 | "license": [ 671 | "MIT" 672 | ], 673 | "authors": [ 674 | { 675 | "name": "Taylor Otwell", 676 | "email": "taylor@laravel.com" 677 | } 678 | ], 679 | "description": "The Illuminate Support package.", 680 | "homepage": "https://laravel.com", 681 | "support": { 682 | "issues": "https://github.com/laravel/framework/issues", 683 | "source": "https://github.com/laravel/framework" 684 | }, 685 | "time": "2022-02-22T14:46:48+00:00" 686 | }, 687 | { 688 | "name": "nesbot/carbon", 689 | "version": "2.57.0", 690 | "source": { 691 | "type": "git", 692 | "url": "https://github.com/briannesbitt/Carbon.git", 693 | "reference": "4a54375c21eea4811dbd1149fe6b246517554e78" 694 | }, 695 | "dist": { 696 | "type": "zip", 697 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a54375c21eea4811dbd1149fe6b246517554e78", 698 | "reference": "4a54375c21eea4811dbd1149fe6b246517554e78", 699 | "shasum": "" 700 | }, 701 | "require": { 702 | "ext-json": "*", 703 | "php": "^7.1.8 || ^8.0", 704 | "symfony/polyfill-mbstring": "^1.0", 705 | "symfony/polyfill-php80": "^1.16", 706 | "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" 707 | }, 708 | "require-dev": { 709 | "doctrine/dbal": "^2.0 || ^3.0", 710 | "doctrine/orm": "^2.7", 711 | "friendsofphp/php-cs-fixer": "^3.0", 712 | "kylekatarnls/multi-tester": "^2.0", 713 | "phpmd/phpmd": "^2.9", 714 | "phpstan/extension-installer": "^1.0", 715 | "phpstan/phpstan": "^0.12.54 || ^1.0", 716 | "phpunit/phpunit": "^7.5.20 || ^8.5.14", 717 | "squizlabs/php_codesniffer": "^3.4" 718 | }, 719 | "bin": [ 720 | "bin/carbon" 721 | ], 722 | "type": "library", 723 | "extra": { 724 | "branch-alias": { 725 | "dev-3.x": "3.x-dev", 726 | "dev-master": "2.x-dev" 727 | }, 728 | "laravel": { 729 | "providers": [ 730 | "Carbon\\Laravel\\ServiceProvider" 731 | ] 732 | }, 733 | "phpstan": { 734 | "includes": [ 735 | "extension.neon" 736 | ] 737 | } 738 | }, 739 | "autoload": { 740 | "psr-4": { 741 | "Carbon\\": "src/Carbon/" 742 | } 743 | }, 744 | "notification-url": "https://packagist.org/downloads/", 745 | "license": [ 746 | "MIT" 747 | ], 748 | "authors": [ 749 | { 750 | "name": "Brian Nesbitt", 751 | "email": "brian@nesbot.com", 752 | "homepage": "https://markido.com" 753 | }, 754 | { 755 | "name": "kylekatarnls", 756 | "homepage": "https://github.com/kylekatarnls" 757 | } 758 | ], 759 | "description": "An API extension for DateTime that supports 281 different languages.", 760 | "homepage": "https://carbon.nesbot.com", 761 | "keywords": [ 762 | "date", 763 | "datetime", 764 | "time" 765 | ], 766 | "support": { 767 | "docs": "https://carbon.nesbot.com/docs", 768 | "issues": "https://github.com/briannesbitt/Carbon/issues", 769 | "source": "https://github.com/briannesbitt/Carbon" 770 | }, 771 | "funding": [ 772 | { 773 | "url": "https://opencollective.com/Carbon", 774 | "type": "open_collective" 775 | }, 776 | { 777 | "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", 778 | "type": "tidelift" 779 | } 780 | ], 781 | "time": "2022-02-13T18:13:33+00:00" 782 | }, 783 | { 784 | "name": "psr/container", 785 | "version": "2.0.2", 786 | "source": { 787 | "type": "git", 788 | "url": "https://github.com/php-fig/container.git", 789 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 790 | }, 791 | "dist": { 792 | "type": "zip", 793 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 794 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 795 | "shasum": "" 796 | }, 797 | "require": { 798 | "php": ">=7.4.0" 799 | }, 800 | "type": "library", 801 | "extra": { 802 | "branch-alias": { 803 | "dev-master": "2.0.x-dev" 804 | } 805 | }, 806 | "autoload": { 807 | "psr-4": { 808 | "Psr\\Container\\": "src/" 809 | } 810 | }, 811 | "notification-url": "https://packagist.org/downloads/", 812 | "license": [ 813 | "MIT" 814 | ], 815 | "authors": [ 816 | { 817 | "name": "PHP-FIG", 818 | "homepage": "https://www.php-fig.org/" 819 | } 820 | ], 821 | "description": "Common Container Interface (PHP FIG PSR-11)", 822 | "homepage": "https://github.com/php-fig/container", 823 | "keywords": [ 824 | "PSR-11", 825 | "container", 826 | "container-interface", 827 | "container-interop", 828 | "psr" 829 | ], 830 | "support": { 831 | "issues": "https://github.com/php-fig/container/issues", 832 | "source": "https://github.com/php-fig/container/tree/2.0.2" 833 | }, 834 | "time": "2021-11-05T16:47:00+00:00" 835 | }, 836 | { 837 | "name": "psr/http-client", 838 | "version": "1.0.1", 839 | "source": { 840 | "type": "git", 841 | "url": "https://github.com/php-fig/http-client.git", 842 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" 843 | }, 844 | "dist": { 845 | "type": "zip", 846 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 847 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", 848 | "shasum": "" 849 | }, 850 | "require": { 851 | "php": "^7.0 || ^8.0", 852 | "psr/http-message": "^1.0" 853 | }, 854 | "type": "library", 855 | "extra": { 856 | "branch-alias": { 857 | "dev-master": "1.0.x-dev" 858 | } 859 | }, 860 | "autoload": { 861 | "psr-4": { 862 | "Psr\\Http\\Client\\": "src/" 863 | } 864 | }, 865 | "notification-url": "https://packagist.org/downloads/", 866 | "license": [ 867 | "MIT" 868 | ], 869 | "authors": [ 870 | { 871 | "name": "PHP-FIG", 872 | "homepage": "http://www.php-fig.org/" 873 | } 874 | ], 875 | "description": "Common interface for HTTP clients", 876 | "homepage": "https://github.com/php-fig/http-client", 877 | "keywords": [ 878 | "http", 879 | "http-client", 880 | "psr", 881 | "psr-18" 882 | ], 883 | "support": { 884 | "source": "https://github.com/php-fig/http-client/tree/master" 885 | }, 886 | "time": "2020-06-29T06:28:15+00:00" 887 | }, 888 | { 889 | "name": "psr/http-factory", 890 | "version": "1.0.1", 891 | "source": { 892 | "type": "git", 893 | "url": "https://github.com/php-fig/http-factory.git", 894 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" 895 | }, 896 | "dist": { 897 | "type": "zip", 898 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 899 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 900 | "shasum": "" 901 | }, 902 | "require": { 903 | "php": ">=7.0.0", 904 | "psr/http-message": "^1.0" 905 | }, 906 | "type": "library", 907 | "extra": { 908 | "branch-alias": { 909 | "dev-master": "1.0.x-dev" 910 | } 911 | }, 912 | "autoload": { 913 | "psr-4": { 914 | "Psr\\Http\\Message\\": "src/" 915 | } 916 | }, 917 | "notification-url": "https://packagist.org/downloads/", 918 | "license": [ 919 | "MIT" 920 | ], 921 | "authors": [ 922 | { 923 | "name": "PHP-FIG", 924 | "homepage": "http://www.php-fig.org/" 925 | } 926 | ], 927 | "description": "Common interfaces for PSR-7 HTTP message factories", 928 | "keywords": [ 929 | "factory", 930 | "http", 931 | "message", 932 | "psr", 933 | "psr-17", 934 | "psr-7", 935 | "request", 936 | "response" 937 | ], 938 | "support": { 939 | "source": "https://github.com/php-fig/http-factory/tree/master" 940 | }, 941 | "time": "2019-04-30T12:38:16+00:00" 942 | }, 943 | { 944 | "name": "psr/http-message", 945 | "version": "1.0.1", 946 | "source": { 947 | "type": "git", 948 | "url": "https://github.com/php-fig/http-message.git", 949 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 950 | }, 951 | "dist": { 952 | "type": "zip", 953 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 954 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 955 | "shasum": "" 956 | }, 957 | "require": { 958 | "php": ">=5.3.0" 959 | }, 960 | "type": "library", 961 | "extra": { 962 | "branch-alias": { 963 | "dev-master": "1.0.x-dev" 964 | } 965 | }, 966 | "autoload": { 967 | "psr-4": { 968 | "Psr\\Http\\Message\\": "src/" 969 | } 970 | }, 971 | "notification-url": "https://packagist.org/downloads/", 972 | "license": [ 973 | "MIT" 974 | ], 975 | "authors": [ 976 | { 977 | "name": "PHP-FIG", 978 | "homepage": "http://www.php-fig.org/" 979 | } 980 | ], 981 | "description": "Common interface for HTTP messages", 982 | "homepage": "https://github.com/php-fig/http-message", 983 | "keywords": [ 984 | "http", 985 | "http-message", 986 | "psr", 987 | "psr-7", 988 | "request", 989 | "response" 990 | ], 991 | "support": { 992 | "source": "https://github.com/php-fig/http-message/tree/master" 993 | }, 994 | "time": "2016-08-06T14:39:51+00:00" 995 | }, 996 | { 997 | "name": "psr/simple-cache", 998 | "version": "3.0.0", 999 | "source": { 1000 | "type": "git", 1001 | "url": "https://github.com/php-fig/simple-cache.git", 1002 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" 1003 | }, 1004 | "dist": { 1005 | "type": "zip", 1006 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", 1007 | "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", 1008 | "shasum": "" 1009 | }, 1010 | "require": { 1011 | "php": ">=8.0.0" 1012 | }, 1013 | "type": "library", 1014 | "extra": { 1015 | "branch-alias": { 1016 | "dev-master": "3.0.x-dev" 1017 | } 1018 | }, 1019 | "autoload": { 1020 | "psr-4": { 1021 | "Psr\\SimpleCache\\": "src/" 1022 | } 1023 | }, 1024 | "notification-url": "https://packagist.org/downloads/", 1025 | "license": [ 1026 | "MIT" 1027 | ], 1028 | "authors": [ 1029 | { 1030 | "name": "PHP-FIG", 1031 | "homepage": "https://www.php-fig.org/" 1032 | } 1033 | ], 1034 | "description": "Common interfaces for simple caching", 1035 | "keywords": [ 1036 | "cache", 1037 | "caching", 1038 | "psr", 1039 | "psr-16", 1040 | "simple-cache" 1041 | ], 1042 | "support": { 1043 | "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" 1044 | }, 1045 | "time": "2021-10-29T13:26:27+00:00" 1046 | }, 1047 | { 1048 | "name": "ralouphie/getallheaders", 1049 | "version": "3.0.3", 1050 | "source": { 1051 | "type": "git", 1052 | "url": "https://github.com/ralouphie/getallheaders.git", 1053 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1054 | }, 1055 | "dist": { 1056 | "type": "zip", 1057 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1058 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1059 | "shasum": "" 1060 | }, 1061 | "require": { 1062 | "php": ">=5.6" 1063 | }, 1064 | "require-dev": { 1065 | "php-coveralls/php-coveralls": "^2.1", 1066 | "phpunit/phpunit": "^5 || ^6.5" 1067 | }, 1068 | "type": "library", 1069 | "autoload": { 1070 | "files": [ 1071 | "src/getallheaders.php" 1072 | ] 1073 | }, 1074 | "notification-url": "https://packagist.org/downloads/", 1075 | "license": [ 1076 | "MIT" 1077 | ], 1078 | "authors": [ 1079 | { 1080 | "name": "Ralph Khattar", 1081 | "email": "ralph.khattar@gmail.com" 1082 | } 1083 | ], 1084 | "description": "A polyfill for getallheaders.", 1085 | "support": { 1086 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1087 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1088 | }, 1089 | "time": "2019-03-08T08:55:37+00:00" 1090 | }, 1091 | { 1092 | "name": "symfony/deprecation-contracts", 1093 | "version": "v3.0.0", 1094 | "source": { 1095 | "type": "git", 1096 | "url": "https://github.com/symfony/deprecation-contracts.git", 1097 | "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" 1098 | }, 1099 | "dist": { 1100 | "type": "zip", 1101 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", 1102 | "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", 1103 | "shasum": "" 1104 | }, 1105 | "require": { 1106 | "php": ">=8.0.2" 1107 | }, 1108 | "type": "library", 1109 | "extra": { 1110 | "branch-alias": { 1111 | "dev-main": "3.0-dev" 1112 | }, 1113 | "thanks": { 1114 | "name": "symfony/contracts", 1115 | "url": "https://github.com/symfony/contracts" 1116 | } 1117 | }, 1118 | "autoload": { 1119 | "files": [ 1120 | "function.php" 1121 | ] 1122 | }, 1123 | "notification-url": "https://packagist.org/downloads/", 1124 | "license": [ 1125 | "MIT" 1126 | ], 1127 | "authors": [ 1128 | { 1129 | "name": "Nicolas Grekas", 1130 | "email": "p@tchwork.com" 1131 | }, 1132 | { 1133 | "name": "Symfony Community", 1134 | "homepage": "https://symfony.com/contributors" 1135 | } 1136 | ], 1137 | "description": "A generic function and convention to trigger deprecation notices", 1138 | "homepage": "https://symfony.com", 1139 | "support": { 1140 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.0" 1141 | }, 1142 | "funding": [ 1143 | { 1144 | "url": "https://symfony.com/sponsor", 1145 | "type": "custom" 1146 | }, 1147 | { 1148 | "url": "https://github.com/fabpot", 1149 | "type": "github" 1150 | }, 1151 | { 1152 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1153 | "type": "tidelift" 1154 | } 1155 | ], 1156 | "time": "2021-11-01T23:48:49+00:00" 1157 | }, 1158 | { 1159 | "name": "symfony/polyfill-mbstring", 1160 | "version": "v1.24.0", 1161 | "source": { 1162 | "type": "git", 1163 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1164 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" 1165 | }, 1166 | "dist": { 1167 | "type": "zip", 1168 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", 1169 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", 1170 | "shasum": "" 1171 | }, 1172 | "require": { 1173 | "php": ">=7.1" 1174 | }, 1175 | "provide": { 1176 | "ext-mbstring": "*" 1177 | }, 1178 | "suggest": { 1179 | "ext-mbstring": "For best performance" 1180 | }, 1181 | "type": "library", 1182 | "extra": { 1183 | "branch-alias": { 1184 | "dev-main": "1.23-dev" 1185 | }, 1186 | "thanks": { 1187 | "name": "symfony/polyfill", 1188 | "url": "https://github.com/symfony/polyfill" 1189 | } 1190 | }, 1191 | "autoload": { 1192 | "files": [ 1193 | "bootstrap.php" 1194 | ], 1195 | "psr-4": { 1196 | "Symfony\\Polyfill\\Mbstring\\": "" 1197 | } 1198 | }, 1199 | "notification-url": "https://packagist.org/downloads/", 1200 | "license": [ 1201 | "MIT" 1202 | ], 1203 | "authors": [ 1204 | { 1205 | "name": "Nicolas Grekas", 1206 | "email": "p@tchwork.com" 1207 | }, 1208 | { 1209 | "name": "Symfony Community", 1210 | "homepage": "https://symfony.com/contributors" 1211 | } 1212 | ], 1213 | "description": "Symfony polyfill for the Mbstring extension", 1214 | "homepage": "https://symfony.com", 1215 | "keywords": [ 1216 | "compatibility", 1217 | "mbstring", 1218 | "polyfill", 1219 | "portable", 1220 | "shim" 1221 | ], 1222 | "support": { 1223 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" 1224 | }, 1225 | "funding": [ 1226 | { 1227 | "url": "https://symfony.com/sponsor", 1228 | "type": "custom" 1229 | }, 1230 | { 1231 | "url": "https://github.com/fabpot", 1232 | "type": "github" 1233 | }, 1234 | { 1235 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1236 | "type": "tidelift" 1237 | } 1238 | ], 1239 | "time": "2021-11-30T18:21:41+00:00" 1240 | }, 1241 | { 1242 | "name": "symfony/polyfill-php80", 1243 | "version": "v1.24.0", 1244 | "source": { 1245 | "type": "git", 1246 | "url": "https://github.com/symfony/polyfill-php80.git", 1247 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" 1248 | }, 1249 | "dist": { 1250 | "type": "zip", 1251 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", 1252 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", 1253 | "shasum": "" 1254 | }, 1255 | "require": { 1256 | "php": ">=7.1" 1257 | }, 1258 | "type": "library", 1259 | "extra": { 1260 | "branch-alias": { 1261 | "dev-main": "1.23-dev" 1262 | }, 1263 | "thanks": { 1264 | "name": "symfony/polyfill", 1265 | "url": "https://github.com/symfony/polyfill" 1266 | } 1267 | }, 1268 | "autoload": { 1269 | "files": [ 1270 | "bootstrap.php" 1271 | ], 1272 | "psr-4": { 1273 | "Symfony\\Polyfill\\Php80\\": "" 1274 | }, 1275 | "classmap": [ 1276 | "Resources/stubs" 1277 | ] 1278 | }, 1279 | "notification-url": "https://packagist.org/downloads/", 1280 | "license": [ 1281 | "MIT" 1282 | ], 1283 | "authors": [ 1284 | { 1285 | "name": "Ion Bazan", 1286 | "email": "ion.bazan@gmail.com" 1287 | }, 1288 | { 1289 | "name": "Nicolas Grekas", 1290 | "email": "p@tchwork.com" 1291 | }, 1292 | { 1293 | "name": "Symfony Community", 1294 | "homepage": "https://symfony.com/contributors" 1295 | } 1296 | ], 1297 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1298 | "homepage": "https://symfony.com", 1299 | "keywords": [ 1300 | "compatibility", 1301 | "polyfill", 1302 | "portable", 1303 | "shim" 1304 | ], 1305 | "support": { 1306 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" 1307 | }, 1308 | "funding": [ 1309 | { 1310 | "url": "https://symfony.com/sponsor", 1311 | "type": "custom" 1312 | }, 1313 | { 1314 | "url": "https://github.com/fabpot", 1315 | "type": "github" 1316 | }, 1317 | { 1318 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1319 | "type": "tidelift" 1320 | } 1321 | ], 1322 | "time": "2021-09-13T13:58:33+00:00" 1323 | }, 1324 | { 1325 | "name": "symfony/translation", 1326 | "version": "v6.0.3", 1327 | "source": { 1328 | "type": "git", 1329 | "url": "https://github.com/symfony/translation.git", 1330 | "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d" 1331 | }, 1332 | "dist": { 1333 | "type": "zip", 1334 | "url": "https://api.github.com/repos/symfony/translation/zipball/71bb15335798f8c4da110911bcf2d2fead7a430d", 1335 | "reference": "71bb15335798f8c4da110911bcf2d2fead7a430d", 1336 | "shasum": "" 1337 | }, 1338 | "require": { 1339 | "php": ">=8.0.2", 1340 | "symfony/polyfill-mbstring": "~1.0", 1341 | "symfony/translation-contracts": "^2.3|^3.0" 1342 | }, 1343 | "conflict": { 1344 | "symfony/config": "<5.4", 1345 | "symfony/console": "<5.4", 1346 | "symfony/dependency-injection": "<5.4", 1347 | "symfony/http-kernel": "<5.4", 1348 | "symfony/twig-bundle": "<5.4", 1349 | "symfony/yaml": "<5.4" 1350 | }, 1351 | "provide": { 1352 | "symfony/translation-implementation": "2.3|3.0" 1353 | }, 1354 | "require-dev": { 1355 | "psr/log": "^1|^2|^3", 1356 | "symfony/config": "^5.4|^6.0", 1357 | "symfony/console": "^5.4|^6.0", 1358 | "symfony/dependency-injection": "^5.4|^6.0", 1359 | "symfony/finder": "^5.4|^6.0", 1360 | "symfony/http-client-contracts": "^1.1|^2.0|^3.0", 1361 | "symfony/http-kernel": "^5.4|^6.0", 1362 | "symfony/intl": "^5.4|^6.0", 1363 | "symfony/polyfill-intl-icu": "^1.21", 1364 | "symfony/service-contracts": "^1.1.2|^2|^3", 1365 | "symfony/yaml": "^5.4|^6.0" 1366 | }, 1367 | "suggest": { 1368 | "psr/log-implementation": "To use logging capability in translator", 1369 | "symfony/config": "", 1370 | "symfony/yaml": "" 1371 | }, 1372 | "type": "library", 1373 | "autoload": { 1374 | "files": [ 1375 | "Resources/functions.php" 1376 | ], 1377 | "psr-4": { 1378 | "Symfony\\Component\\Translation\\": "" 1379 | }, 1380 | "exclude-from-classmap": [ 1381 | "/Tests/" 1382 | ] 1383 | }, 1384 | "notification-url": "https://packagist.org/downloads/", 1385 | "license": [ 1386 | "MIT" 1387 | ], 1388 | "authors": [ 1389 | { 1390 | "name": "Fabien Potencier", 1391 | "email": "fabien@symfony.com" 1392 | }, 1393 | { 1394 | "name": "Symfony Community", 1395 | "homepage": "https://symfony.com/contributors" 1396 | } 1397 | ], 1398 | "description": "Provides tools to internationalize your application", 1399 | "homepage": "https://symfony.com", 1400 | "support": { 1401 | "source": "https://github.com/symfony/translation/tree/v6.0.3" 1402 | }, 1403 | "funding": [ 1404 | { 1405 | "url": "https://symfony.com/sponsor", 1406 | "type": "custom" 1407 | }, 1408 | { 1409 | "url": "https://github.com/fabpot", 1410 | "type": "github" 1411 | }, 1412 | { 1413 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1414 | "type": "tidelift" 1415 | } 1416 | ], 1417 | "time": "2022-01-07T00:29:03+00:00" 1418 | }, 1419 | { 1420 | "name": "symfony/translation-contracts", 1421 | "version": "v3.0.0", 1422 | "source": { 1423 | "type": "git", 1424 | "url": "https://github.com/symfony/translation-contracts.git", 1425 | "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" 1426 | }, 1427 | "dist": { 1428 | "type": "zip", 1429 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", 1430 | "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", 1431 | "shasum": "" 1432 | }, 1433 | "require": { 1434 | "php": ">=8.0.2" 1435 | }, 1436 | "suggest": { 1437 | "symfony/translation-implementation": "" 1438 | }, 1439 | "type": "library", 1440 | "extra": { 1441 | "branch-alias": { 1442 | "dev-main": "3.0-dev" 1443 | }, 1444 | "thanks": { 1445 | "name": "symfony/contracts", 1446 | "url": "https://github.com/symfony/contracts" 1447 | } 1448 | }, 1449 | "autoload": { 1450 | "psr-4": { 1451 | "Symfony\\Contracts\\Translation\\": "" 1452 | } 1453 | }, 1454 | "notification-url": "https://packagist.org/downloads/", 1455 | "license": [ 1456 | "MIT" 1457 | ], 1458 | "authors": [ 1459 | { 1460 | "name": "Nicolas Grekas", 1461 | "email": "p@tchwork.com" 1462 | }, 1463 | { 1464 | "name": "Symfony Community", 1465 | "homepage": "https://symfony.com/contributors" 1466 | } 1467 | ], 1468 | "description": "Generic abstractions related to translation", 1469 | "homepage": "https://symfony.com", 1470 | "keywords": [ 1471 | "abstractions", 1472 | "contracts", 1473 | "decoupling", 1474 | "interfaces", 1475 | "interoperability", 1476 | "standards" 1477 | ], 1478 | "support": { 1479 | "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" 1480 | }, 1481 | "funding": [ 1482 | { 1483 | "url": "https://symfony.com/sponsor", 1484 | "type": "custom" 1485 | }, 1486 | { 1487 | "url": "https://github.com/fabpot", 1488 | "type": "github" 1489 | }, 1490 | { 1491 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1492 | "type": "tidelift" 1493 | } 1494 | ], 1495 | "time": "2021-09-07T12:43:40+00:00" 1496 | }, 1497 | { 1498 | "name": "voku/portable-ascii", 1499 | "version": "2.0.0", 1500 | "source": { 1501 | "type": "git", 1502 | "url": "https://github.com/voku/portable-ascii.git", 1503 | "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89" 1504 | }, 1505 | "dist": { 1506 | "type": "zip", 1507 | "url": "https://api.github.com/repos/voku/portable-ascii/zipball/9bd89e83cecdf8c37b64909454249eaed98b2c89", 1508 | "reference": "9bd89e83cecdf8c37b64909454249eaed98b2c89", 1509 | "shasum": "" 1510 | }, 1511 | "require": { 1512 | "php": ">=7.0.0" 1513 | }, 1514 | "require-dev": { 1515 | "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" 1516 | }, 1517 | "suggest": { 1518 | "ext-intl": "Use Intl for transliterator_transliterate() support" 1519 | }, 1520 | "type": "library", 1521 | "autoload": { 1522 | "psr-4": { 1523 | "voku\\": "src/voku/" 1524 | } 1525 | }, 1526 | "notification-url": "https://packagist.org/downloads/", 1527 | "license": [ 1528 | "MIT" 1529 | ], 1530 | "authors": [ 1531 | { 1532 | "name": "Lars Moelleken", 1533 | "homepage": "http://www.moelleken.org/" 1534 | } 1535 | ], 1536 | "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", 1537 | "homepage": "https://github.com/voku/portable-ascii", 1538 | "keywords": [ 1539 | "ascii", 1540 | "clean", 1541 | "php" 1542 | ], 1543 | "support": { 1544 | "issues": "https://github.com/voku/portable-ascii/issues", 1545 | "source": "https://github.com/voku/portable-ascii/tree/2.0.0" 1546 | }, 1547 | "funding": [ 1548 | { 1549 | "url": "https://www.paypal.me/moelleken", 1550 | "type": "custom" 1551 | }, 1552 | { 1553 | "url": "https://github.com/voku", 1554 | "type": "github" 1555 | }, 1556 | { 1557 | "url": "https://opencollective.com/portable-ascii", 1558 | "type": "open_collective" 1559 | }, 1560 | { 1561 | "url": "https://www.patreon.com/voku", 1562 | "type": "patreon" 1563 | }, 1564 | { 1565 | "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", 1566 | "type": "tidelift" 1567 | } 1568 | ], 1569 | "time": "2022-01-24T18:59:03+00:00" 1570 | } 1571 | ], 1572 | "packages-dev": [ 1573 | { 1574 | "name": "doctrine/instantiator", 1575 | "version": "1.4.0", 1576 | "source": { 1577 | "type": "git", 1578 | "url": "https://github.com/doctrine/instantiator.git", 1579 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" 1580 | }, 1581 | "dist": { 1582 | "type": "zip", 1583 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", 1584 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", 1585 | "shasum": "" 1586 | }, 1587 | "require": { 1588 | "php": "^7.1 || ^8.0" 1589 | }, 1590 | "require-dev": { 1591 | "doctrine/coding-standard": "^8.0", 1592 | "ext-pdo": "*", 1593 | "ext-phar": "*", 1594 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 1595 | "phpstan/phpstan": "^0.12", 1596 | "phpstan/phpstan-phpunit": "^0.12", 1597 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 1598 | }, 1599 | "type": "library", 1600 | "autoload": { 1601 | "psr-4": { 1602 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1603 | } 1604 | }, 1605 | "notification-url": "https://packagist.org/downloads/", 1606 | "license": [ 1607 | "MIT" 1608 | ], 1609 | "authors": [ 1610 | { 1611 | "name": "Marco Pivetta", 1612 | "email": "ocramius@gmail.com", 1613 | "homepage": "https://ocramius.github.io/" 1614 | } 1615 | ], 1616 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1617 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 1618 | "keywords": [ 1619 | "constructor", 1620 | "instantiate" 1621 | ], 1622 | "support": { 1623 | "issues": "https://github.com/doctrine/instantiator/issues", 1624 | "source": "https://github.com/doctrine/instantiator/tree/1.4.0" 1625 | }, 1626 | "funding": [ 1627 | { 1628 | "url": "https://www.doctrine-project.org/sponsorship.html", 1629 | "type": "custom" 1630 | }, 1631 | { 1632 | "url": "https://www.patreon.com/phpdoctrine", 1633 | "type": "patreon" 1634 | }, 1635 | { 1636 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 1637 | "type": "tidelift" 1638 | } 1639 | ], 1640 | "time": "2020-11-10T18:47:58+00:00" 1641 | }, 1642 | { 1643 | "name": "larapack/dd", 1644 | "version": "1.1", 1645 | "source": { 1646 | "type": "git", 1647 | "url": "https://github.com/larapack/dd.git", 1648 | "reference": "561b5111a13d0094b59b5c81b1572489485fb948" 1649 | }, 1650 | "dist": { 1651 | "type": "zip", 1652 | "url": "https://api.github.com/repos/larapack/dd/zipball/561b5111a13d0094b59b5c81b1572489485fb948", 1653 | "reference": "561b5111a13d0094b59b5c81b1572489485fb948", 1654 | "shasum": "" 1655 | }, 1656 | "require": { 1657 | "symfony/var-dumper": "*" 1658 | }, 1659 | "type": "package", 1660 | "autoload": { 1661 | "files": [ 1662 | "src/helper.php" 1663 | ] 1664 | }, 1665 | "notification-url": "https://packagist.org/downloads/", 1666 | "license": [ 1667 | "MIT" 1668 | ], 1669 | "authors": [ 1670 | { 1671 | "name": "Mark Topper", 1672 | "email": "hi@webman.io" 1673 | } 1674 | ], 1675 | "description": "`dd` is a helper method in Laravel. This package will add the `dd` to your application.", 1676 | "support": { 1677 | "issues": "https://github.com/larapack/dd/issues", 1678 | "source": "https://github.com/larapack/dd/tree/master" 1679 | }, 1680 | "time": "2016-12-15T09:34:34+00:00" 1681 | }, 1682 | { 1683 | "name": "myclabs/deep-copy", 1684 | "version": "1.10.2", 1685 | "source": { 1686 | "type": "git", 1687 | "url": "https://github.com/myclabs/DeepCopy.git", 1688 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 1689 | }, 1690 | "dist": { 1691 | "type": "zip", 1692 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 1693 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 1694 | "shasum": "" 1695 | }, 1696 | "require": { 1697 | "php": "^7.1 || ^8.0" 1698 | }, 1699 | "replace": { 1700 | "myclabs/deep-copy": "self.version" 1701 | }, 1702 | "require-dev": { 1703 | "doctrine/collections": "^1.0", 1704 | "doctrine/common": "^2.6", 1705 | "phpunit/phpunit": "^7.1" 1706 | }, 1707 | "type": "library", 1708 | "autoload": { 1709 | "files": [ 1710 | "src/DeepCopy/deep_copy.php" 1711 | ], 1712 | "psr-4": { 1713 | "DeepCopy\\": "src/DeepCopy/" 1714 | } 1715 | }, 1716 | "notification-url": "https://packagist.org/downloads/", 1717 | "license": [ 1718 | "MIT" 1719 | ], 1720 | "description": "Create deep copies (clones) of your objects", 1721 | "keywords": [ 1722 | "clone", 1723 | "copy", 1724 | "duplicate", 1725 | "object", 1726 | "object graph" 1727 | ], 1728 | "support": { 1729 | "issues": "https://github.com/myclabs/DeepCopy/issues", 1730 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" 1731 | }, 1732 | "funding": [ 1733 | { 1734 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 1735 | "type": "tidelift" 1736 | } 1737 | ], 1738 | "time": "2020-11-13T09:40:50+00:00" 1739 | }, 1740 | { 1741 | "name": "nikic/php-parser", 1742 | "version": "v4.13.2", 1743 | "source": { 1744 | "type": "git", 1745 | "url": "https://github.com/nikic/PHP-Parser.git", 1746 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077" 1747 | }, 1748 | "dist": { 1749 | "type": "zip", 1750 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", 1751 | "reference": "210577fe3cf7badcc5814d99455df46564f3c077", 1752 | "shasum": "" 1753 | }, 1754 | "require": { 1755 | "ext-tokenizer": "*", 1756 | "php": ">=7.0" 1757 | }, 1758 | "require-dev": { 1759 | "ircmaxell/php-yacc": "^0.0.7", 1760 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 1761 | }, 1762 | "bin": [ 1763 | "bin/php-parse" 1764 | ], 1765 | "type": "library", 1766 | "extra": { 1767 | "branch-alias": { 1768 | "dev-master": "4.9-dev" 1769 | } 1770 | }, 1771 | "autoload": { 1772 | "psr-4": { 1773 | "PhpParser\\": "lib/PhpParser" 1774 | } 1775 | }, 1776 | "notification-url": "https://packagist.org/downloads/", 1777 | "license": [ 1778 | "BSD-3-Clause" 1779 | ], 1780 | "authors": [ 1781 | { 1782 | "name": "Nikita Popov" 1783 | } 1784 | ], 1785 | "description": "A PHP parser written in PHP", 1786 | "keywords": [ 1787 | "parser", 1788 | "php" 1789 | ], 1790 | "support": { 1791 | "issues": "https://github.com/nikic/PHP-Parser/issues", 1792 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" 1793 | }, 1794 | "time": "2021-11-30T19:35:32+00:00" 1795 | }, 1796 | { 1797 | "name": "phar-io/manifest", 1798 | "version": "2.0.3", 1799 | "source": { 1800 | "type": "git", 1801 | "url": "https://github.com/phar-io/manifest.git", 1802 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 1803 | }, 1804 | "dist": { 1805 | "type": "zip", 1806 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 1807 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 1808 | "shasum": "" 1809 | }, 1810 | "require": { 1811 | "ext-dom": "*", 1812 | "ext-phar": "*", 1813 | "ext-xmlwriter": "*", 1814 | "phar-io/version": "^3.0.1", 1815 | "php": "^7.2 || ^8.0" 1816 | }, 1817 | "type": "library", 1818 | "extra": { 1819 | "branch-alias": { 1820 | "dev-master": "2.0.x-dev" 1821 | } 1822 | }, 1823 | "autoload": { 1824 | "classmap": [ 1825 | "src/" 1826 | ] 1827 | }, 1828 | "notification-url": "https://packagist.org/downloads/", 1829 | "license": [ 1830 | "BSD-3-Clause" 1831 | ], 1832 | "authors": [ 1833 | { 1834 | "name": "Arne Blankerts", 1835 | "email": "arne@blankerts.de", 1836 | "role": "Developer" 1837 | }, 1838 | { 1839 | "name": "Sebastian Heuer", 1840 | "email": "sebastian@phpeople.de", 1841 | "role": "Developer" 1842 | }, 1843 | { 1844 | "name": "Sebastian Bergmann", 1845 | "email": "sebastian@phpunit.de", 1846 | "role": "Developer" 1847 | } 1848 | ], 1849 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1850 | "support": { 1851 | "issues": "https://github.com/phar-io/manifest/issues", 1852 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 1853 | }, 1854 | "time": "2021-07-20T11:28:43+00:00" 1855 | }, 1856 | { 1857 | "name": "phar-io/version", 1858 | "version": "3.2.1", 1859 | "source": { 1860 | "type": "git", 1861 | "url": "https://github.com/phar-io/version.git", 1862 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 1863 | }, 1864 | "dist": { 1865 | "type": "zip", 1866 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1867 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1868 | "shasum": "" 1869 | }, 1870 | "require": { 1871 | "php": "^7.2 || ^8.0" 1872 | }, 1873 | "type": "library", 1874 | "autoload": { 1875 | "classmap": [ 1876 | "src/" 1877 | ] 1878 | }, 1879 | "notification-url": "https://packagist.org/downloads/", 1880 | "license": [ 1881 | "BSD-3-Clause" 1882 | ], 1883 | "authors": [ 1884 | { 1885 | "name": "Arne Blankerts", 1886 | "email": "arne@blankerts.de", 1887 | "role": "Developer" 1888 | }, 1889 | { 1890 | "name": "Sebastian Heuer", 1891 | "email": "sebastian@phpeople.de", 1892 | "role": "Developer" 1893 | }, 1894 | { 1895 | "name": "Sebastian Bergmann", 1896 | "email": "sebastian@phpunit.de", 1897 | "role": "Developer" 1898 | } 1899 | ], 1900 | "description": "Library for handling version information and constraints", 1901 | "support": { 1902 | "issues": "https://github.com/phar-io/version/issues", 1903 | "source": "https://github.com/phar-io/version/tree/3.2.1" 1904 | }, 1905 | "time": "2022-02-21T01:04:05+00:00" 1906 | }, 1907 | { 1908 | "name": "phpdocumentor/reflection-common", 1909 | "version": "2.2.0", 1910 | "source": { 1911 | "type": "git", 1912 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1913 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 1914 | }, 1915 | "dist": { 1916 | "type": "zip", 1917 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1918 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1919 | "shasum": "" 1920 | }, 1921 | "require": { 1922 | "php": "^7.2 || ^8.0" 1923 | }, 1924 | "type": "library", 1925 | "extra": { 1926 | "branch-alias": { 1927 | "dev-2.x": "2.x-dev" 1928 | } 1929 | }, 1930 | "autoload": { 1931 | "psr-4": { 1932 | "phpDocumentor\\Reflection\\": "src/" 1933 | } 1934 | }, 1935 | "notification-url": "https://packagist.org/downloads/", 1936 | "license": [ 1937 | "MIT" 1938 | ], 1939 | "authors": [ 1940 | { 1941 | "name": "Jaap van Otterdijk", 1942 | "email": "opensource@ijaap.nl" 1943 | } 1944 | ], 1945 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1946 | "homepage": "http://www.phpdoc.org", 1947 | "keywords": [ 1948 | "FQSEN", 1949 | "phpDocumentor", 1950 | "phpdoc", 1951 | "reflection", 1952 | "static analysis" 1953 | ], 1954 | "support": { 1955 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 1956 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 1957 | }, 1958 | "time": "2020-06-27T09:03:43+00:00" 1959 | }, 1960 | { 1961 | "name": "phpdocumentor/reflection-docblock", 1962 | "version": "5.3.0", 1963 | "source": { 1964 | "type": "git", 1965 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1966 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" 1967 | }, 1968 | "dist": { 1969 | "type": "zip", 1970 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", 1971 | "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", 1972 | "shasum": "" 1973 | }, 1974 | "require": { 1975 | "ext-filter": "*", 1976 | "php": "^7.2 || ^8.0", 1977 | "phpdocumentor/reflection-common": "^2.2", 1978 | "phpdocumentor/type-resolver": "^1.3", 1979 | "webmozart/assert": "^1.9.1" 1980 | }, 1981 | "require-dev": { 1982 | "mockery/mockery": "~1.3.2", 1983 | "psalm/phar": "^4.8" 1984 | }, 1985 | "type": "library", 1986 | "extra": { 1987 | "branch-alias": { 1988 | "dev-master": "5.x-dev" 1989 | } 1990 | }, 1991 | "autoload": { 1992 | "psr-4": { 1993 | "phpDocumentor\\Reflection\\": "src" 1994 | } 1995 | }, 1996 | "notification-url": "https://packagist.org/downloads/", 1997 | "license": [ 1998 | "MIT" 1999 | ], 2000 | "authors": [ 2001 | { 2002 | "name": "Mike van Riel", 2003 | "email": "me@mikevanriel.com" 2004 | }, 2005 | { 2006 | "name": "Jaap van Otterdijk", 2007 | "email": "account@ijaap.nl" 2008 | } 2009 | ], 2010 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 2011 | "support": { 2012 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 2013 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" 2014 | }, 2015 | "time": "2021-10-19T17:43:47+00:00" 2016 | }, 2017 | { 2018 | "name": "phpdocumentor/type-resolver", 2019 | "version": "1.6.0", 2020 | "source": { 2021 | "type": "git", 2022 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 2023 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" 2024 | }, 2025 | "dist": { 2026 | "type": "zip", 2027 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", 2028 | "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", 2029 | "shasum": "" 2030 | }, 2031 | "require": { 2032 | "php": "^7.2 || ^8.0", 2033 | "phpdocumentor/reflection-common": "^2.0" 2034 | }, 2035 | "require-dev": { 2036 | "ext-tokenizer": "*", 2037 | "psalm/phar": "^4.8" 2038 | }, 2039 | "type": "library", 2040 | "extra": { 2041 | "branch-alias": { 2042 | "dev-1.x": "1.x-dev" 2043 | } 2044 | }, 2045 | "autoload": { 2046 | "psr-4": { 2047 | "phpDocumentor\\Reflection\\": "src" 2048 | } 2049 | }, 2050 | "notification-url": "https://packagist.org/downloads/", 2051 | "license": [ 2052 | "MIT" 2053 | ], 2054 | "authors": [ 2055 | { 2056 | "name": "Mike van Riel", 2057 | "email": "me@mikevanriel.com" 2058 | } 2059 | ], 2060 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 2061 | "support": { 2062 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 2063 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" 2064 | }, 2065 | "time": "2022-01-04T19:58:01+00:00" 2066 | }, 2067 | { 2068 | "name": "phpspec/prophecy", 2069 | "version": "v1.15.0", 2070 | "source": { 2071 | "type": "git", 2072 | "url": "https://github.com/phpspec/prophecy.git", 2073 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" 2074 | }, 2075 | "dist": { 2076 | "type": "zip", 2077 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", 2078 | "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", 2079 | "shasum": "" 2080 | }, 2081 | "require": { 2082 | "doctrine/instantiator": "^1.2", 2083 | "php": "^7.2 || ~8.0, <8.2", 2084 | "phpdocumentor/reflection-docblock": "^5.2", 2085 | "sebastian/comparator": "^3.0 || ^4.0", 2086 | "sebastian/recursion-context": "^3.0 || ^4.0" 2087 | }, 2088 | "require-dev": { 2089 | "phpspec/phpspec": "^6.0 || ^7.0", 2090 | "phpunit/phpunit": "^8.0 || ^9.0" 2091 | }, 2092 | "type": "library", 2093 | "extra": { 2094 | "branch-alias": { 2095 | "dev-master": "1.x-dev" 2096 | } 2097 | }, 2098 | "autoload": { 2099 | "psr-4": { 2100 | "Prophecy\\": "src/Prophecy" 2101 | } 2102 | }, 2103 | "notification-url": "https://packagist.org/downloads/", 2104 | "license": [ 2105 | "MIT" 2106 | ], 2107 | "authors": [ 2108 | { 2109 | "name": "Konstantin Kudryashov", 2110 | "email": "ever.zet@gmail.com", 2111 | "homepage": "http://everzet.com" 2112 | }, 2113 | { 2114 | "name": "Marcello Duarte", 2115 | "email": "marcello.duarte@gmail.com" 2116 | } 2117 | ], 2118 | "description": "Highly opinionated mocking framework for PHP 5.3+", 2119 | "homepage": "https://github.com/phpspec/prophecy", 2120 | "keywords": [ 2121 | "Double", 2122 | "Dummy", 2123 | "fake", 2124 | "mock", 2125 | "spy", 2126 | "stub" 2127 | ], 2128 | "support": { 2129 | "issues": "https://github.com/phpspec/prophecy/issues", 2130 | "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" 2131 | }, 2132 | "time": "2021-12-08T12:19:24+00:00" 2133 | }, 2134 | { 2135 | "name": "phpunit/php-code-coverage", 2136 | "version": "9.2.13", 2137 | "source": { 2138 | "type": "git", 2139 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 2140 | "reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8" 2141 | }, 2142 | "dist": { 2143 | "type": "zip", 2144 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/deac8540cb7bd40b2b8cfa679b76202834fd04e8", 2145 | "reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8", 2146 | "shasum": "" 2147 | }, 2148 | "require": { 2149 | "ext-dom": "*", 2150 | "ext-libxml": "*", 2151 | "ext-xmlwriter": "*", 2152 | "nikic/php-parser": "^4.13.0", 2153 | "php": ">=7.3", 2154 | "phpunit/php-file-iterator": "^3.0.3", 2155 | "phpunit/php-text-template": "^2.0.2", 2156 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 2157 | "sebastian/complexity": "^2.0", 2158 | "sebastian/environment": "^5.1.2", 2159 | "sebastian/lines-of-code": "^1.0.3", 2160 | "sebastian/version": "^3.0.1", 2161 | "theseer/tokenizer": "^1.2.0" 2162 | }, 2163 | "require-dev": { 2164 | "phpunit/phpunit": "^9.3" 2165 | }, 2166 | "suggest": { 2167 | "ext-pcov": "*", 2168 | "ext-xdebug": "*" 2169 | }, 2170 | "type": "library", 2171 | "extra": { 2172 | "branch-alias": { 2173 | "dev-master": "9.2-dev" 2174 | } 2175 | }, 2176 | "autoload": { 2177 | "classmap": [ 2178 | "src/" 2179 | ] 2180 | }, 2181 | "notification-url": "https://packagist.org/downloads/", 2182 | "license": [ 2183 | "BSD-3-Clause" 2184 | ], 2185 | "authors": [ 2186 | { 2187 | "name": "Sebastian Bergmann", 2188 | "email": "sebastian@phpunit.de", 2189 | "role": "lead" 2190 | } 2191 | ], 2192 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 2193 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 2194 | "keywords": [ 2195 | "coverage", 2196 | "testing", 2197 | "xunit" 2198 | ], 2199 | "support": { 2200 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 2201 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.13" 2202 | }, 2203 | "funding": [ 2204 | { 2205 | "url": "https://github.com/sebastianbergmann", 2206 | "type": "github" 2207 | } 2208 | ], 2209 | "time": "2022-02-23T17:02:38+00:00" 2210 | }, 2211 | { 2212 | "name": "phpunit/php-file-iterator", 2213 | "version": "3.0.6", 2214 | "source": { 2215 | "type": "git", 2216 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 2217 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 2218 | }, 2219 | "dist": { 2220 | "type": "zip", 2221 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 2222 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 2223 | "shasum": "" 2224 | }, 2225 | "require": { 2226 | "php": ">=7.3" 2227 | }, 2228 | "require-dev": { 2229 | "phpunit/phpunit": "^9.3" 2230 | }, 2231 | "type": "library", 2232 | "extra": { 2233 | "branch-alias": { 2234 | "dev-master": "3.0-dev" 2235 | } 2236 | }, 2237 | "autoload": { 2238 | "classmap": [ 2239 | "src/" 2240 | ] 2241 | }, 2242 | "notification-url": "https://packagist.org/downloads/", 2243 | "license": [ 2244 | "BSD-3-Clause" 2245 | ], 2246 | "authors": [ 2247 | { 2248 | "name": "Sebastian Bergmann", 2249 | "email": "sebastian@phpunit.de", 2250 | "role": "lead" 2251 | } 2252 | ], 2253 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 2254 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 2255 | "keywords": [ 2256 | "filesystem", 2257 | "iterator" 2258 | ], 2259 | "support": { 2260 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 2261 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 2262 | }, 2263 | "funding": [ 2264 | { 2265 | "url": "https://github.com/sebastianbergmann", 2266 | "type": "github" 2267 | } 2268 | ], 2269 | "time": "2021-12-02T12:48:52+00:00" 2270 | }, 2271 | { 2272 | "name": "phpunit/php-invoker", 2273 | "version": "3.1.1", 2274 | "source": { 2275 | "type": "git", 2276 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 2277 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 2278 | }, 2279 | "dist": { 2280 | "type": "zip", 2281 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 2282 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 2283 | "shasum": "" 2284 | }, 2285 | "require": { 2286 | "php": ">=7.3" 2287 | }, 2288 | "require-dev": { 2289 | "ext-pcntl": "*", 2290 | "phpunit/phpunit": "^9.3" 2291 | }, 2292 | "suggest": { 2293 | "ext-pcntl": "*" 2294 | }, 2295 | "type": "library", 2296 | "extra": { 2297 | "branch-alias": { 2298 | "dev-master": "3.1-dev" 2299 | } 2300 | }, 2301 | "autoload": { 2302 | "classmap": [ 2303 | "src/" 2304 | ] 2305 | }, 2306 | "notification-url": "https://packagist.org/downloads/", 2307 | "license": [ 2308 | "BSD-3-Clause" 2309 | ], 2310 | "authors": [ 2311 | { 2312 | "name": "Sebastian Bergmann", 2313 | "email": "sebastian@phpunit.de", 2314 | "role": "lead" 2315 | } 2316 | ], 2317 | "description": "Invoke callables with a timeout", 2318 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 2319 | "keywords": [ 2320 | "process" 2321 | ], 2322 | "support": { 2323 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 2324 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 2325 | }, 2326 | "funding": [ 2327 | { 2328 | "url": "https://github.com/sebastianbergmann", 2329 | "type": "github" 2330 | } 2331 | ], 2332 | "time": "2020-09-28T05:58:55+00:00" 2333 | }, 2334 | { 2335 | "name": "phpunit/php-text-template", 2336 | "version": "2.0.4", 2337 | "source": { 2338 | "type": "git", 2339 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2340 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 2341 | }, 2342 | "dist": { 2343 | "type": "zip", 2344 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 2345 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 2346 | "shasum": "" 2347 | }, 2348 | "require": { 2349 | "php": ">=7.3" 2350 | }, 2351 | "require-dev": { 2352 | "phpunit/phpunit": "^9.3" 2353 | }, 2354 | "type": "library", 2355 | "extra": { 2356 | "branch-alias": { 2357 | "dev-master": "2.0-dev" 2358 | } 2359 | }, 2360 | "autoload": { 2361 | "classmap": [ 2362 | "src/" 2363 | ] 2364 | }, 2365 | "notification-url": "https://packagist.org/downloads/", 2366 | "license": [ 2367 | "BSD-3-Clause" 2368 | ], 2369 | "authors": [ 2370 | { 2371 | "name": "Sebastian Bergmann", 2372 | "email": "sebastian@phpunit.de", 2373 | "role": "lead" 2374 | } 2375 | ], 2376 | "description": "Simple template engine.", 2377 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2378 | "keywords": [ 2379 | "template" 2380 | ], 2381 | "support": { 2382 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 2383 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 2384 | }, 2385 | "funding": [ 2386 | { 2387 | "url": "https://github.com/sebastianbergmann", 2388 | "type": "github" 2389 | } 2390 | ], 2391 | "time": "2020-10-26T05:33:50+00:00" 2392 | }, 2393 | { 2394 | "name": "phpunit/php-timer", 2395 | "version": "5.0.3", 2396 | "source": { 2397 | "type": "git", 2398 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2399 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 2400 | }, 2401 | "dist": { 2402 | "type": "zip", 2403 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2404 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2405 | "shasum": "" 2406 | }, 2407 | "require": { 2408 | "php": ">=7.3" 2409 | }, 2410 | "require-dev": { 2411 | "phpunit/phpunit": "^9.3" 2412 | }, 2413 | "type": "library", 2414 | "extra": { 2415 | "branch-alias": { 2416 | "dev-master": "5.0-dev" 2417 | } 2418 | }, 2419 | "autoload": { 2420 | "classmap": [ 2421 | "src/" 2422 | ] 2423 | }, 2424 | "notification-url": "https://packagist.org/downloads/", 2425 | "license": [ 2426 | "BSD-3-Clause" 2427 | ], 2428 | "authors": [ 2429 | { 2430 | "name": "Sebastian Bergmann", 2431 | "email": "sebastian@phpunit.de", 2432 | "role": "lead" 2433 | } 2434 | ], 2435 | "description": "Utility class for timing", 2436 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2437 | "keywords": [ 2438 | "timer" 2439 | ], 2440 | "support": { 2441 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 2442 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 2443 | }, 2444 | "funding": [ 2445 | { 2446 | "url": "https://github.com/sebastianbergmann", 2447 | "type": "github" 2448 | } 2449 | ], 2450 | "time": "2020-10-26T13:16:10+00:00" 2451 | }, 2452 | { 2453 | "name": "phpunit/phpunit", 2454 | "version": "9.5.16", 2455 | "source": { 2456 | "type": "git", 2457 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2458 | "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc" 2459 | }, 2460 | "dist": { 2461 | "type": "zip", 2462 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc", 2463 | "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc", 2464 | "shasum": "" 2465 | }, 2466 | "require": { 2467 | "doctrine/instantiator": "^1.3.1", 2468 | "ext-dom": "*", 2469 | "ext-json": "*", 2470 | "ext-libxml": "*", 2471 | "ext-mbstring": "*", 2472 | "ext-xml": "*", 2473 | "ext-xmlwriter": "*", 2474 | "myclabs/deep-copy": "^1.10.1", 2475 | "phar-io/manifest": "^2.0.3", 2476 | "phar-io/version": "^3.0.2", 2477 | "php": ">=7.3", 2478 | "phpspec/prophecy": "^1.12.1", 2479 | "phpunit/php-code-coverage": "^9.2.13", 2480 | "phpunit/php-file-iterator": "^3.0.5", 2481 | "phpunit/php-invoker": "^3.1.1", 2482 | "phpunit/php-text-template": "^2.0.3", 2483 | "phpunit/php-timer": "^5.0.2", 2484 | "sebastian/cli-parser": "^1.0.1", 2485 | "sebastian/code-unit": "^1.0.6", 2486 | "sebastian/comparator": "^4.0.5", 2487 | "sebastian/diff": "^4.0.3", 2488 | "sebastian/environment": "^5.1.3", 2489 | "sebastian/exporter": "^4.0.3", 2490 | "sebastian/global-state": "^5.0.1", 2491 | "sebastian/object-enumerator": "^4.0.3", 2492 | "sebastian/resource-operations": "^3.0.3", 2493 | "sebastian/type": "^2.3.4", 2494 | "sebastian/version": "^3.0.2" 2495 | }, 2496 | "require-dev": { 2497 | "ext-pdo": "*", 2498 | "phpspec/prophecy-phpunit": "^2.0.1" 2499 | }, 2500 | "suggest": { 2501 | "ext-soap": "*", 2502 | "ext-xdebug": "*" 2503 | }, 2504 | "bin": [ 2505 | "phpunit" 2506 | ], 2507 | "type": "library", 2508 | "extra": { 2509 | "branch-alias": { 2510 | "dev-master": "9.5-dev" 2511 | } 2512 | }, 2513 | "autoload": { 2514 | "files": [ 2515 | "src/Framework/Assert/Functions.php" 2516 | ], 2517 | "classmap": [ 2518 | "src/" 2519 | ] 2520 | }, 2521 | "notification-url": "https://packagist.org/downloads/", 2522 | "license": [ 2523 | "BSD-3-Clause" 2524 | ], 2525 | "authors": [ 2526 | { 2527 | "name": "Sebastian Bergmann", 2528 | "email": "sebastian@phpunit.de", 2529 | "role": "lead" 2530 | } 2531 | ], 2532 | "description": "The PHP Unit Testing framework.", 2533 | "homepage": "https://phpunit.de/", 2534 | "keywords": [ 2535 | "phpunit", 2536 | "testing", 2537 | "xunit" 2538 | ], 2539 | "support": { 2540 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 2541 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16" 2542 | }, 2543 | "funding": [ 2544 | { 2545 | "url": "https://phpunit.de/sponsors.html", 2546 | "type": "custom" 2547 | }, 2548 | { 2549 | "url": "https://github.com/sebastianbergmann", 2550 | "type": "github" 2551 | } 2552 | ], 2553 | "time": "2022-02-23T17:10:58+00:00" 2554 | }, 2555 | { 2556 | "name": "sebastian/cli-parser", 2557 | "version": "1.0.1", 2558 | "source": { 2559 | "type": "git", 2560 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 2561 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 2562 | }, 2563 | "dist": { 2564 | "type": "zip", 2565 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2566 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2567 | "shasum": "" 2568 | }, 2569 | "require": { 2570 | "php": ">=7.3" 2571 | }, 2572 | "require-dev": { 2573 | "phpunit/phpunit": "^9.3" 2574 | }, 2575 | "type": "library", 2576 | "extra": { 2577 | "branch-alias": { 2578 | "dev-master": "1.0-dev" 2579 | } 2580 | }, 2581 | "autoload": { 2582 | "classmap": [ 2583 | "src/" 2584 | ] 2585 | }, 2586 | "notification-url": "https://packagist.org/downloads/", 2587 | "license": [ 2588 | "BSD-3-Clause" 2589 | ], 2590 | "authors": [ 2591 | { 2592 | "name": "Sebastian Bergmann", 2593 | "email": "sebastian@phpunit.de", 2594 | "role": "lead" 2595 | } 2596 | ], 2597 | "description": "Library for parsing CLI options", 2598 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 2599 | "support": { 2600 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 2601 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 2602 | }, 2603 | "funding": [ 2604 | { 2605 | "url": "https://github.com/sebastianbergmann", 2606 | "type": "github" 2607 | } 2608 | ], 2609 | "time": "2020-09-28T06:08:49+00:00" 2610 | }, 2611 | { 2612 | "name": "sebastian/code-unit", 2613 | "version": "1.0.8", 2614 | "source": { 2615 | "type": "git", 2616 | "url": "https://github.com/sebastianbergmann/code-unit.git", 2617 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 2618 | }, 2619 | "dist": { 2620 | "type": "zip", 2621 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 2622 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 2623 | "shasum": "" 2624 | }, 2625 | "require": { 2626 | "php": ">=7.3" 2627 | }, 2628 | "require-dev": { 2629 | "phpunit/phpunit": "^9.3" 2630 | }, 2631 | "type": "library", 2632 | "extra": { 2633 | "branch-alias": { 2634 | "dev-master": "1.0-dev" 2635 | } 2636 | }, 2637 | "autoload": { 2638 | "classmap": [ 2639 | "src/" 2640 | ] 2641 | }, 2642 | "notification-url": "https://packagist.org/downloads/", 2643 | "license": [ 2644 | "BSD-3-Clause" 2645 | ], 2646 | "authors": [ 2647 | { 2648 | "name": "Sebastian Bergmann", 2649 | "email": "sebastian@phpunit.de", 2650 | "role": "lead" 2651 | } 2652 | ], 2653 | "description": "Collection of value objects that represent the PHP code units", 2654 | "homepage": "https://github.com/sebastianbergmann/code-unit", 2655 | "support": { 2656 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 2657 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 2658 | }, 2659 | "funding": [ 2660 | { 2661 | "url": "https://github.com/sebastianbergmann", 2662 | "type": "github" 2663 | } 2664 | ], 2665 | "time": "2020-10-26T13:08:54+00:00" 2666 | }, 2667 | { 2668 | "name": "sebastian/code-unit-reverse-lookup", 2669 | "version": "2.0.3", 2670 | "source": { 2671 | "type": "git", 2672 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2673 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 2674 | }, 2675 | "dist": { 2676 | "type": "zip", 2677 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2678 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2679 | "shasum": "" 2680 | }, 2681 | "require": { 2682 | "php": ">=7.3" 2683 | }, 2684 | "require-dev": { 2685 | "phpunit/phpunit": "^9.3" 2686 | }, 2687 | "type": "library", 2688 | "extra": { 2689 | "branch-alias": { 2690 | "dev-master": "2.0-dev" 2691 | } 2692 | }, 2693 | "autoload": { 2694 | "classmap": [ 2695 | "src/" 2696 | ] 2697 | }, 2698 | "notification-url": "https://packagist.org/downloads/", 2699 | "license": [ 2700 | "BSD-3-Clause" 2701 | ], 2702 | "authors": [ 2703 | { 2704 | "name": "Sebastian Bergmann", 2705 | "email": "sebastian@phpunit.de" 2706 | } 2707 | ], 2708 | "description": "Looks up which function or method a line of code belongs to", 2709 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2710 | "support": { 2711 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 2712 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 2713 | }, 2714 | "funding": [ 2715 | { 2716 | "url": "https://github.com/sebastianbergmann", 2717 | "type": "github" 2718 | } 2719 | ], 2720 | "time": "2020-09-28T05:30:19+00:00" 2721 | }, 2722 | { 2723 | "name": "sebastian/comparator", 2724 | "version": "4.0.6", 2725 | "source": { 2726 | "type": "git", 2727 | "url": "https://github.com/sebastianbergmann/comparator.git", 2728 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382" 2729 | }, 2730 | "dist": { 2731 | "type": "zip", 2732 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", 2733 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382", 2734 | "shasum": "" 2735 | }, 2736 | "require": { 2737 | "php": ">=7.3", 2738 | "sebastian/diff": "^4.0", 2739 | "sebastian/exporter": "^4.0" 2740 | }, 2741 | "require-dev": { 2742 | "phpunit/phpunit": "^9.3" 2743 | }, 2744 | "type": "library", 2745 | "extra": { 2746 | "branch-alias": { 2747 | "dev-master": "4.0-dev" 2748 | } 2749 | }, 2750 | "autoload": { 2751 | "classmap": [ 2752 | "src/" 2753 | ] 2754 | }, 2755 | "notification-url": "https://packagist.org/downloads/", 2756 | "license": [ 2757 | "BSD-3-Clause" 2758 | ], 2759 | "authors": [ 2760 | { 2761 | "name": "Sebastian Bergmann", 2762 | "email": "sebastian@phpunit.de" 2763 | }, 2764 | { 2765 | "name": "Jeff Welch", 2766 | "email": "whatthejeff@gmail.com" 2767 | }, 2768 | { 2769 | "name": "Volker Dusch", 2770 | "email": "github@wallbash.com" 2771 | }, 2772 | { 2773 | "name": "Bernhard Schussek", 2774 | "email": "bschussek@2bepublished.at" 2775 | } 2776 | ], 2777 | "description": "Provides the functionality to compare PHP values for equality", 2778 | "homepage": "https://github.com/sebastianbergmann/comparator", 2779 | "keywords": [ 2780 | "comparator", 2781 | "compare", 2782 | "equality" 2783 | ], 2784 | "support": { 2785 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 2786 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" 2787 | }, 2788 | "funding": [ 2789 | { 2790 | "url": "https://github.com/sebastianbergmann", 2791 | "type": "github" 2792 | } 2793 | ], 2794 | "time": "2020-10-26T15:49:45+00:00" 2795 | }, 2796 | { 2797 | "name": "sebastian/complexity", 2798 | "version": "2.0.2", 2799 | "source": { 2800 | "type": "git", 2801 | "url": "https://github.com/sebastianbergmann/complexity.git", 2802 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 2803 | }, 2804 | "dist": { 2805 | "type": "zip", 2806 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 2807 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 2808 | "shasum": "" 2809 | }, 2810 | "require": { 2811 | "nikic/php-parser": "^4.7", 2812 | "php": ">=7.3" 2813 | }, 2814 | "require-dev": { 2815 | "phpunit/phpunit": "^9.3" 2816 | }, 2817 | "type": "library", 2818 | "extra": { 2819 | "branch-alias": { 2820 | "dev-master": "2.0-dev" 2821 | } 2822 | }, 2823 | "autoload": { 2824 | "classmap": [ 2825 | "src/" 2826 | ] 2827 | }, 2828 | "notification-url": "https://packagist.org/downloads/", 2829 | "license": [ 2830 | "BSD-3-Clause" 2831 | ], 2832 | "authors": [ 2833 | { 2834 | "name": "Sebastian Bergmann", 2835 | "email": "sebastian@phpunit.de", 2836 | "role": "lead" 2837 | } 2838 | ], 2839 | "description": "Library for calculating the complexity of PHP code units", 2840 | "homepage": "https://github.com/sebastianbergmann/complexity", 2841 | "support": { 2842 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 2843 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 2844 | }, 2845 | "funding": [ 2846 | { 2847 | "url": "https://github.com/sebastianbergmann", 2848 | "type": "github" 2849 | } 2850 | ], 2851 | "time": "2020-10-26T15:52:27+00:00" 2852 | }, 2853 | { 2854 | "name": "sebastian/diff", 2855 | "version": "4.0.4", 2856 | "source": { 2857 | "type": "git", 2858 | "url": "https://github.com/sebastianbergmann/diff.git", 2859 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 2860 | }, 2861 | "dist": { 2862 | "type": "zip", 2863 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2864 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2865 | "shasum": "" 2866 | }, 2867 | "require": { 2868 | "php": ">=7.3" 2869 | }, 2870 | "require-dev": { 2871 | "phpunit/phpunit": "^9.3", 2872 | "symfony/process": "^4.2 || ^5" 2873 | }, 2874 | "type": "library", 2875 | "extra": { 2876 | "branch-alias": { 2877 | "dev-master": "4.0-dev" 2878 | } 2879 | }, 2880 | "autoload": { 2881 | "classmap": [ 2882 | "src/" 2883 | ] 2884 | }, 2885 | "notification-url": "https://packagist.org/downloads/", 2886 | "license": [ 2887 | "BSD-3-Clause" 2888 | ], 2889 | "authors": [ 2890 | { 2891 | "name": "Sebastian Bergmann", 2892 | "email": "sebastian@phpunit.de" 2893 | }, 2894 | { 2895 | "name": "Kore Nordmann", 2896 | "email": "mail@kore-nordmann.de" 2897 | } 2898 | ], 2899 | "description": "Diff implementation", 2900 | "homepage": "https://github.com/sebastianbergmann/diff", 2901 | "keywords": [ 2902 | "diff", 2903 | "udiff", 2904 | "unidiff", 2905 | "unified diff" 2906 | ], 2907 | "support": { 2908 | "issues": "https://github.com/sebastianbergmann/diff/issues", 2909 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 2910 | }, 2911 | "funding": [ 2912 | { 2913 | "url": "https://github.com/sebastianbergmann", 2914 | "type": "github" 2915 | } 2916 | ], 2917 | "time": "2020-10-26T13:10:38+00:00" 2918 | }, 2919 | { 2920 | "name": "sebastian/environment", 2921 | "version": "5.1.3", 2922 | "source": { 2923 | "type": "git", 2924 | "url": "https://github.com/sebastianbergmann/environment.git", 2925 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac" 2926 | }, 2927 | "dist": { 2928 | "type": "zip", 2929 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", 2930 | "reference": "388b6ced16caa751030f6a69e588299fa09200ac", 2931 | "shasum": "" 2932 | }, 2933 | "require": { 2934 | "php": ">=7.3" 2935 | }, 2936 | "require-dev": { 2937 | "phpunit/phpunit": "^9.3" 2938 | }, 2939 | "suggest": { 2940 | "ext-posix": "*" 2941 | }, 2942 | "type": "library", 2943 | "extra": { 2944 | "branch-alias": { 2945 | "dev-master": "5.1-dev" 2946 | } 2947 | }, 2948 | "autoload": { 2949 | "classmap": [ 2950 | "src/" 2951 | ] 2952 | }, 2953 | "notification-url": "https://packagist.org/downloads/", 2954 | "license": [ 2955 | "BSD-3-Clause" 2956 | ], 2957 | "authors": [ 2958 | { 2959 | "name": "Sebastian Bergmann", 2960 | "email": "sebastian@phpunit.de" 2961 | } 2962 | ], 2963 | "description": "Provides functionality to handle HHVM/PHP environments", 2964 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2965 | "keywords": [ 2966 | "Xdebug", 2967 | "environment", 2968 | "hhvm" 2969 | ], 2970 | "support": { 2971 | "issues": "https://github.com/sebastianbergmann/environment/issues", 2972 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" 2973 | }, 2974 | "funding": [ 2975 | { 2976 | "url": "https://github.com/sebastianbergmann", 2977 | "type": "github" 2978 | } 2979 | ], 2980 | "time": "2020-09-28T05:52:38+00:00" 2981 | }, 2982 | { 2983 | "name": "sebastian/exporter", 2984 | "version": "4.0.4", 2985 | "source": { 2986 | "type": "git", 2987 | "url": "https://github.com/sebastianbergmann/exporter.git", 2988 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" 2989 | }, 2990 | "dist": { 2991 | "type": "zip", 2992 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", 2993 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", 2994 | "shasum": "" 2995 | }, 2996 | "require": { 2997 | "php": ">=7.3", 2998 | "sebastian/recursion-context": "^4.0" 2999 | }, 3000 | "require-dev": { 3001 | "ext-mbstring": "*", 3002 | "phpunit/phpunit": "^9.3" 3003 | }, 3004 | "type": "library", 3005 | "extra": { 3006 | "branch-alias": { 3007 | "dev-master": "4.0-dev" 3008 | } 3009 | }, 3010 | "autoload": { 3011 | "classmap": [ 3012 | "src/" 3013 | ] 3014 | }, 3015 | "notification-url": "https://packagist.org/downloads/", 3016 | "license": [ 3017 | "BSD-3-Clause" 3018 | ], 3019 | "authors": [ 3020 | { 3021 | "name": "Sebastian Bergmann", 3022 | "email": "sebastian@phpunit.de" 3023 | }, 3024 | { 3025 | "name": "Jeff Welch", 3026 | "email": "whatthejeff@gmail.com" 3027 | }, 3028 | { 3029 | "name": "Volker Dusch", 3030 | "email": "github@wallbash.com" 3031 | }, 3032 | { 3033 | "name": "Adam Harvey", 3034 | "email": "aharvey@php.net" 3035 | }, 3036 | { 3037 | "name": "Bernhard Schussek", 3038 | "email": "bschussek@gmail.com" 3039 | } 3040 | ], 3041 | "description": "Provides the functionality to export PHP variables for visualization", 3042 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 3043 | "keywords": [ 3044 | "export", 3045 | "exporter" 3046 | ], 3047 | "support": { 3048 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 3049 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" 3050 | }, 3051 | "funding": [ 3052 | { 3053 | "url": "https://github.com/sebastianbergmann", 3054 | "type": "github" 3055 | } 3056 | ], 3057 | "time": "2021-11-11T14:18:36+00:00" 3058 | }, 3059 | { 3060 | "name": "sebastian/global-state", 3061 | "version": "5.0.5", 3062 | "source": { 3063 | "type": "git", 3064 | "url": "https://github.com/sebastianbergmann/global-state.git", 3065 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 3066 | }, 3067 | "dist": { 3068 | "type": "zip", 3069 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 3070 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 3071 | "shasum": "" 3072 | }, 3073 | "require": { 3074 | "php": ">=7.3", 3075 | "sebastian/object-reflector": "^2.0", 3076 | "sebastian/recursion-context": "^4.0" 3077 | }, 3078 | "require-dev": { 3079 | "ext-dom": "*", 3080 | "phpunit/phpunit": "^9.3" 3081 | }, 3082 | "suggest": { 3083 | "ext-uopz": "*" 3084 | }, 3085 | "type": "library", 3086 | "extra": { 3087 | "branch-alias": { 3088 | "dev-master": "5.0-dev" 3089 | } 3090 | }, 3091 | "autoload": { 3092 | "classmap": [ 3093 | "src/" 3094 | ] 3095 | }, 3096 | "notification-url": "https://packagist.org/downloads/", 3097 | "license": [ 3098 | "BSD-3-Clause" 3099 | ], 3100 | "authors": [ 3101 | { 3102 | "name": "Sebastian Bergmann", 3103 | "email": "sebastian@phpunit.de" 3104 | } 3105 | ], 3106 | "description": "Snapshotting of global state", 3107 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 3108 | "keywords": [ 3109 | "global state" 3110 | ], 3111 | "support": { 3112 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 3113 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 3114 | }, 3115 | "funding": [ 3116 | { 3117 | "url": "https://github.com/sebastianbergmann", 3118 | "type": "github" 3119 | } 3120 | ], 3121 | "time": "2022-02-14T08:28:10+00:00" 3122 | }, 3123 | { 3124 | "name": "sebastian/lines-of-code", 3125 | "version": "1.0.3", 3126 | "source": { 3127 | "type": "git", 3128 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 3129 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 3130 | }, 3131 | "dist": { 3132 | "type": "zip", 3133 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 3134 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 3135 | "shasum": "" 3136 | }, 3137 | "require": { 3138 | "nikic/php-parser": "^4.6", 3139 | "php": ">=7.3" 3140 | }, 3141 | "require-dev": { 3142 | "phpunit/phpunit": "^9.3" 3143 | }, 3144 | "type": "library", 3145 | "extra": { 3146 | "branch-alias": { 3147 | "dev-master": "1.0-dev" 3148 | } 3149 | }, 3150 | "autoload": { 3151 | "classmap": [ 3152 | "src/" 3153 | ] 3154 | }, 3155 | "notification-url": "https://packagist.org/downloads/", 3156 | "license": [ 3157 | "BSD-3-Clause" 3158 | ], 3159 | "authors": [ 3160 | { 3161 | "name": "Sebastian Bergmann", 3162 | "email": "sebastian@phpunit.de", 3163 | "role": "lead" 3164 | } 3165 | ], 3166 | "description": "Library for counting the lines of code in PHP source code", 3167 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 3168 | "support": { 3169 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 3170 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 3171 | }, 3172 | "funding": [ 3173 | { 3174 | "url": "https://github.com/sebastianbergmann", 3175 | "type": "github" 3176 | } 3177 | ], 3178 | "time": "2020-11-28T06:42:11+00:00" 3179 | }, 3180 | { 3181 | "name": "sebastian/object-enumerator", 3182 | "version": "4.0.4", 3183 | "source": { 3184 | "type": "git", 3185 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 3186 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 3187 | }, 3188 | "dist": { 3189 | "type": "zip", 3190 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 3191 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 3192 | "shasum": "" 3193 | }, 3194 | "require": { 3195 | "php": ">=7.3", 3196 | "sebastian/object-reflector": "^2.0", 3197 | "sebastian/recursion-context": "^4.0" 3198 | }, 3199 | "require-dev": { 3200 | "phpunit/phpunit": "^9.3" 3201 | }, 3202 | "type": "library", 3203 | "extra": { 3204 | "branch-alias": { 3205 | "dev-master": "4.0-dev" 3206 | } 3207 | }, 3208 | "autoload": { 3209 | "classmap": [ 3210 | "src/" 3211 | ] 3212 | }, 3213 | "notification-url": "https://packagist.org/downloads/", 3214 | "license": [ 3215 | "BSD-3-Clause" 3216 | ], 3217 | "authors": [ 3218 | { 3219 | "name": "Sebastian Bergmann", 3220 | "email": "sebastian@phpunit.de" 3221 | } 3222 | ], 3223 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 3224 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 3225 | "support": { 3226 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 3227 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 3228 | }, 3229 | "funding": [ 3230 | { 3231 | "url": "https://github.com/sebastianbergmann", 3232 | "type": "github" 3233 | } 3234 | ], 3235 | "time": "2020-10-26T13:12:34+00:00" 3236 | }, 3237 | { 3238 | "name": "sebastian/object-reflector", 3239 | "version": "2.0.4", 3240 | "source": { 3241 | "type": "git", 3242 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 3243 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 3244 | }, 3245 | "dist": { 3246 | "type": "zip", 3247 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 3248 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 3249 | "shasum": "" 3250 | }, 3251 | "require": { 3252 | "php": ">=7.3" 3253 | }, 3254 | "require-dev": { 3255 | "phpunit/phpunit": "^9.3" 3256 | }, 3257 | "type": "library", 3258 | "extra": { 3259 | "branch-alias": { 3260 | "dev-master": "2.0-dev" 3261 | } 3262 | }, 3263 | "autoload": { 3264 | "classmap": [ 3265 | "src/" 3266 | ] 3267 | }, 3268 | "notification-url": "https://packagist.org/downloads/", 3269 | "license": [ 3270 | "BSD-3-Clause" 3271 | ], 3272 | "authors": [ 3273 | { 3274 | "name": "Sebastian Bergmann", 3275 | "email": "sebastian@phpunit.de" 3276 | } 3277 | ], 3278 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 3279 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 3280 | "support": { 3281 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 3282 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 3283 | }, 3284 | "funding": [ 3285 | { 3286 | "url": "https://github.com/sebastianbergmann", 3287 | "type": "github" 3288 | } 3289 | ], 3290 | "time": "2020-10-26T13:14:26+00:00" 3291 | }, 3292 | { 3293 | "name": "sebastian/recursion-context", 3294 | "version": "4.0.4", 3295 | "source": { 3296 | "type": "git", 3297 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 3298 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 3299 | }, 3300 | "dist": { 3301 | "type": "zip", 3302 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 3303 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 3304 | "shasum": "" 3305 | }, 3306 | "require": { 3307 | "php": ">=7.3" 3308 | }, 3309 | "require-dev": { 3310 | "phpunit/phpunit": "^9.3" 3311 | }, 3312 | "type": "library", 3313 | "extra": { 3314 | "branch-alias": { 3315 | "dev-master": "4.0-dev" 3316 | } 3317 | }, 3318 | "autoload": { 3319 | "classmap": [ 3320 | "src/" 3321 | ] 3322 | }, 3323 | "notification-url": "https://packagist.org/downloads/", 3324 | "license": [ 3325 | "BSD-3-Clause" 3326 | ], 3327 | "authors": [ 3328 | { 3329 | "name": "Sebastian Bergmann", 3330 | "email": "sebastian@phpunit.de" 3331 | }, 3332 | { 3333 | "name": "Jeff Welch", 3334 | "email": "whatthejeff@gmail.com" 3335 | }, 3336 | { 3337 | "name": "Adam Harvey", 3338 | "email": "aharvey@php.net" 3339 | } 3340 | ], 3341 | "description": "Provides functionality to recursively process PHP variables", 3342 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 3343 | "support": { 3344 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 3345 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 3346 | }, 3347 | "funding": [ 3348 | { 3349 | "url": "https://github.com/sebastianbergmann", 3350 | "type": "github" 3351 | } 3352 | ], 3353 | "time": "2020-10-26T13:17:30+00:00" 3354 | }, 3355 | { 3356 | "name": "sebastian/resource-operations", 3357 | "version": "3.0.3", 3358 | "source": { 3359 | "type": "git", 3360 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 3361 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 3362 | }, 3363 | "dist": { 3364 | "type": "zip", 3365 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 3366 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 3367 | "shasum": "" 3368 | }, 3369 | "require": { 3370 | "php": ">=7.3" 3371 | }, 3372 | "require-dev": { 3373 | "phpunit/phpunit": "^9.0" 3374 | }, 3375 | "type": "library", 3376 | "extra": { 3377 | "branch-alias": { 3378 | "dev-master": "3.0-dev" 3379 | } 3380 | }, 3381 | "autoload": { 3382 | "classmap": [ 3383 | "src/" 3384 | ] 3385 | }, 3386 | "notification-url": "https://packagist.org/downloads/", 3387 | "license": [ 3388 | "BSD-3-Clause" 3389 | ], 3390 | "authors": [ 3391 | { 3392 | "name": "Sebastian Bergmann", 3393 | "email": "sebastian@phpunit.de" 3394 | } 3395 | ], 3396 | "description": "Provides a list of PHP built-in functions that operate on resources", 3397 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 3398 | "support": { 3399 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 3400 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 3401 | }, 3402 | "funding": [ 3403 | { 3404 | "url": "https://github.com/sebastianbergmann", 3405 | "type": "github" 3406 | } 3407 | ], 3408 | "time": "2020-09-28T06:45:17+00:00" 3409 | }, 3410 | { 3411 | "name": "sebastian/type", 3412 | "version": "2.3.4", 3413 | "source": { 3414 | "type": "git", 3415 | "url": "https://github.com/sebastianbergmann/type.git", 3416 | "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" 3417 | }, 3418 | "dist": { 3419 | "type": "zip", 3420 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", 3421 | "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", 3422 | "shasum": "" 3423 | }, 3424 | "require": { 3425 | "php": ">=7.3" 3426 | }, 3427 | "require-dev": { 3428 | "phpunit/phpunit": "^9.3" 3429 | }, 3430 | "type": "library", 3431 | "extra": { 3432 | "branch-alias": { 3433 | "dev-master": "2.3-dev" 3434 | } 3435 | }, 3436 | "autoload": { 3437 | "classmap": [ 3438 | "src/" 3439 | ] 3440 | }, 3441 | "notification-url": "https://packagist.org/downloads/", 3442 | "license": [ 3443 | "BSD-3-Clause" 3444 | ], 3445 | "authors": [ 3446 | { 3447 | "name": "Sebastian Bergmann", 3448 | "email": "sebastian@phpunit.de", 3449 | "role": "lead" 3450 | } 3451 | ], 3452 | "description": "Collection of value objects that represent the types of the PHP type system", 3453 | "homepage": "https://github.com/sebastianbergmann/type", 3454 | "support": { 3455 | "issues": "https://github.com/sebastianbergmann/type/issues", 3456 | "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" 3457 | }, 3458 | "funding": [ 3459 | { 3460 | "url": "https://github.com/sebastianbergmann", 3461 | "type": "github" 3462 | } 3463 | ], 3464 | "time": "2021-06-15T12:49:02+00:00" 3465 | }, 3466 | { 3467 | "name": "sebastian/version", 3468 | "version": "3.0.2", 3469 | "source": { 3470 | "type": "git", 3471 | "url": "https://github.com/sebastianbergmann/version.git", 3472 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 3473 | }, 3474 | "dist": { 3475 | "type": "zip", 3476 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 3477 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 3478 | "shasum": "" 3479 | }, 3480 | "require": { 3481 | "php": ">=7.3" 3482 | }, 3483 | "type": "library", 3484 | "extra": { 3485 | "branch-alias": { 3486 | "dev-master": "3.0-dev" 3487 | } 3488 | }, 3489 | "autoload": { 3490 | "classmap": [ 3491 | "src/" 3492 | ] 3493 | }, 3494 | "notification-url": "https://packagist.org/downloads/", 3495 | "license": [ 3496 | "BSD-3-Clause" 3497 | ], 3498 | "authors": [ 3499 | { 3500 | "name": "Sebastian Bergmann", 3501 | "email": "sebastian@phpunit.de", 3502 | "role": "lead" 3503 | } 3504 | ], 3505 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3506 | "homepage": "https://github.com/sebastianbergmann/version", 3507 | "support": { 3508 | "issues": "https://github.com/sebastianbergmann/version/issues", 3509 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 3510 | }, 3511 | "funding": [ 3512 | { 3513 | "url": "https://github.com/sebastianbergmann", 3514 | "type": "github" 3515 | } 3516 | ], 3517 | "time": "2020-09-28T06:39:44+00:00" 3518 | }, 3519 | { 3520 | "name": "symfony/polyfill-ctype", 3521 | "version": "v1.24.0", 3522 | "source": { 3523 | "type": "git", 3524 | "url": "https://github.com/symfony/polyfill-ctype.git", 3525 | "reference": "30885182c981ab175d4d034db0f6f469898070ab" 3526 | }, 3527 | "dist": { 3528 | "type": "zip", 3529 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", 3530 | "reference": "30885182c981ab175d4d034db0f6f469898070ab", 3531 | "shasum": "" 3532 | }, 3533 | "require": { 3534 | "php": ">=7.1" 3535 | }, 3536 | "provide": { 3537 | "ext-ctype": "*" 3538 | }, 3539 | "suggest": { 3540 | "ext-ctype": "For best performance" 3541 | }, 3542 | "type": "library", 3543 | "extra": { 3544 | "branch-alias": { 3545 | "dev-main": "1.23-dev" 3546 | }, 3547 | "thanks": { 3548 | "name": "symfony/polyfill", 3549 | "url": "https://github.com/symfony/polyfill" 3550 | } 3551 | }, 3552 | "autoload": { 3553 | "psr-4": { 3554 | "Symfony\\Polyfill\\Ctype\\": "" 3555 | }, 3556 | "files": [ 3557 | "bootstrap.php" 3558 | ] 3559 | }, 3560 | "notification-url": "https://packagist.org/downloads/", 3561 | "license": [ 3562 | "MIT" 3563 | ], 3564 | "authors": [ 3565 | { 3566 | "name": "Gert de Pagter", 3567 | "email": "BackEndTea@gmail.com" 3568 | }, 3569 | { 3570 | "name": "Symfony Community", 3571 | "homepage": "https://symfony.com/contributors" 3572 | } 3573 | ], 3574 | "description": "Symfony polyfill for ctype functions", 3575 | "homepage": "https://symfony.com", 3576 | "keywords": [ 3577 | "compatibility", 3578 | "ctype", 3579 | "polyfill", 3580 | "portable" 3581 | ], 3582 | "support": { 3583 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" 3584 | }, 3585 | "funding": [ 3586 | { 3587 | "url": "https://symfony.com/sponsor", 3588 | "type": "custom" 3589 | }, 3590 | { 3591 | "url": "https://github.com/fabpot", 3592 | "type": "github" 3593 | }, 3594 | { 3595 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3596 | "type": "tidelift" 3597 | } 3598 | ], 3599 | "time": "2021-10-20T20:35:02+00:00" 3600 | }, 3601 | { 3602 | "name": "symfony/var-dumper", 3603 | "version": "v6.0.3", 3604 | "source": { 3605 | "type": "git", 3606 | "url": "https://github.com/symfony/var-dumper.git", 3607 | "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834" 3608 | }, 3609 | "dist": { 3610 | "type": "zip", 3611 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7b701676fc64f9ef11f9b4870f16b48f66be4834", 3612 | "reference": "7b701676fc64f9ef11f9b4870f16b48f66be4834", 3613 | "shasum": "" 3614 | }, 3615 | "require": { 3616 | "php": ">=8.0.2", 3617 | "symfony/polyfill-mbstring": "~1.0" 3618 | }, 3619 | "conflict": { 3620 | "phpunit/phpunit": "<5.4.3", 3621 | "symfony/console": "<5.4" 3622 | }, 3623 | "require-dev": { 3624 | "ext-iconv": "*", 3625 | "symfony/console": "^5.4|^6.0", 3626 | "symfony/process": "^5.4|^6.0", 3627 | "symfony/uid": "^5.4|^6.0", 3628 | "twig/twig": "^2.13|^3.0.4" 3629 | }, 3630 | "suggest": { 3631 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 3632 | "ext-intl": "To show region name in time zone dump", 3633 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 3634 | }, 3635 | "bin": [ 3636 | "Resources/bin/var-dump-server" 3637 | ], 3638 | "type": "library", 3639 | "autoload": { 3640 | "files": [ 3641 | "Resources/functions/dump.php" 3642 | ], 3643 | "psr-4": { 3644 | "Symfony\\Component\\VarDumper\\": "" 3645 | }, 3646 | "exclude-from-classmap": [ 3647 | "/Tests/" 3648 | ] 3649 | }, 3650 | "notification-url": "https://packagist.org/downloads/", 3651 | "license": [ 3652 | "MIT" 3653 | ], 3654 | "authors": [ 3655 | { 3656 | "name": "Nicolas Grekas", 3657 | "email": "p@tchwork.com" 3658 | }, 3659 | { 3660 | "name": "Symfony Community", 3661 | "homepage": "https://symfony.com/contributors" 3662 | } 3663 | ], 3664 | "description": "Provides mechanisms for walking through any arbitrary PHP variable", 3665 | "homepage": "https://symfony.com", 3666 | "keywords": [ 3667 | "debug", 3668 | "dump" 3669 | ], 3670 | "support": { 3671 | "source": "https://github.com/symfony/var-dumper/tree/v6.0.3" 3672 | }, 3673 | "funding": [ 3674 | { 3675 | "url": "https://symfony.com/sponsor", 3676 | "type": "custom" 3677 | }, 3678 | { 3679 | "url": "https://github.com/fabpot", 3680 | "type": "github" 3681 | }, 3682 | { 3683 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3684 | "type": "tidelift" 3685 | } 3686 | ], 3687 | "time": "2022-01-17T16:30:44+00:00" 3688 | }, 3689 | { 3690 | "name": "theseer/tokenizer", 3691 | "version": "1.2.1", 3692 | "source": { 3693 | "type": "git", 3694 | "url": "https://github.com/theseer/tokenizer.git", 3695 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 3696 | }, 3697 | "dist": { 3698 | "type": "zip", 3699 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 3700 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 3701 | "shasum": "" 3702 | }, 3703 | "require": { 3704 | "ext-dom": "*", 3705 | "ext-tokenizer": "*", 3706 | "ext-xmlwriter": "*", 3707 | "php": "^7.2 || ^8.0" 3708 | }, 3709 | "type": "library", 3710 | "autoload": { 3711 | "classmap": [ 3712 | "src/" 3713 | ] 3714 | }, 3715 | "notification-url": "https://packagist.org/downloads/", 3716 | "license": [ 3717 | "BSD-3-Clause" 3718 | ], 3719 | "authors": [ 3720 | { 3721 | "name": "Arne Blankerts", 3722 | "email": "arne@blankerts.de", 3723 | "role": "Developer" 3724 | } 3725 | ], 3726 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3727 | "support": { 3728 | "issues": "https://github.com/theseer/tokenizer/issues", 3729 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 3730 | }, 3731 | "funding": [ 3732 | { 3733 | "url": "https://github.com/theseer", 3734 | "type": "github" 3735 | } 3736 | ], 3737 | "time": "2021-07-28T10:34:58+00:00" 3738 | }, 3739 | { 3740 | "name": "webmozart/assert", 3741 | "version": "1.10.0", 3742 | "source": { 3743 | "type": "git", 3744 | "url": "https://github.com/webmozarts/assert.git", 3745 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" 3746 | }, 3747 | "dist": { 3748 | "type": "zip", 3749 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", 3750 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", 3751 | "shasum": "" 3752 | }, 3753 | "require": { 3754 | "php": "^7.2 || ^8.0", 3755 | "symfony/polyfill-ctype": "^1.8" 3756 | }, 3757 | "conflict": { 3758 | "phpstan/phpstan": "<0.12.20", 3759 | "vimeo/psalm": "<4.6.1 || 4.6.2" 3760 | }, 3761 | "require-dev": { 3762 | "phpunit/phpunit": "^8.5.13" 3763 | }, 3764 | "type": "library", 3765 | "extra": { 3766 | "branch-alias": { 3767 | "dev-master": "1.10-dev" 3768 | } 3769 | }, 3770 | "autoload": { 3771 | "psr-4": { 3772 | "Webmozart\\Assert\\": "src/" 3773 | } 3774 | }, 3775 | "notification-url": "https://packagist.org/downloads/", 3776 | "license": [ 3777 | "MIT" 3778 | ], 3779 | "authors": [ 3780 | { 3781 | "name": "Bernhard Schussek", 3782 | "email": "bschussek@gmail.com" 3783 | } 3784 | ], 3785 | "description": "Assertions to validate method input/output with nice error messages.", 3786 | "keywords": [ 3787 | "assert", 3788 | "check", 3789 | "validate" 3790 | ], 3791 | "support": { 3792 | "issues": "https://github.com/webmozarts/assert/issues", 3793 | "source": "https://github.com/webmozarts/assert/tree/1.10.0" 3794 | }, 3795 | "time": "2021-03-09T10:59:23+00:00" 3796 | } 3797 | ], 3798 | "aliases": [], 3799 | "minimum-stability": "stable", 3800 | "stability-flags": [], 3801 | "prefer-stable": false, 3802 | "prefer-lowest": false, 3803 | "platform": { 3804 | "php": ">=7.2" 3805 | }, 3806 | "platform-dev": [], 3807 | "plugin-api-version": "2.1.0" 3808 | } 3809 | -------------------------------------------------------------------------------- /src/Client.php: -------------------------------------------------------------------------------- 1 | url = $config['url']; 15 | $this->author = $config['author']; 16 | } 17 | 18 | public function send(array $message): int 19 | { 20 | $client = $this->prepareClient(); 21 | 22 | $body = $this->prepareBody($message); 23 | 24 | $response = $client->post($this->url, [ 25 | 'json' => $body, 26 | ]); 27 | 28 | return $response->getStatusCode(); 29 | } 30 | 31 | protected function prepareClient(): GuzzleHttp\Client 32 | { 33 | return new GuzzleHttp\Client([ 34 | 'timeout' => 2.0, 35 | 'verify' => false, 36 | ]); 37 | } 38 | 39 | protected function prepareBody(array $message): array 40 | { 41 | return [ 42 | 'username' => $this->author['username'], 43 | 'avatar_url' => $this->author['avatar_url'], 44 | 'content' => $message['content'] ?? '', 45 | 'embeds' => $message['embeds'] ?? [], 46 | ]; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/Content/Attributes/Author.php: -------------------------------------------------------------------------------- 1 | attributes = new Collection($attributes); 17 | } 18 | 19 | public function name(string $name): Author 20 | { 21 | $this->attributes->put('name', $name); 22 | 23 | return $this; 24 | } 25 | 26 | public function url(string $url): Author 27 | { 28 | $this->attributes->put('url', $url); 29 | 30 | return $this; 31 | } 32 | 33 | public function iconUrl(string $iconUrl): Author 34 | { 35 | $this->attributes->put('icon_url', $iconUrl); 36 | 37 | return $this; 38 | } 39 | 40 | public function toArray(): array 41 | { 42 | (new AuthorRules($this->attributes))->validate(); 43 | 44 | return [ 45 | 'author' => $this->attributes->toArray(), 46 | ]; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/Content/Attributes/Body.php: -------------------------------------------------------------------------------- 1 | attributes = new Collection($attributes); 17 | } 18 | 19 | public function title(string $title): Body 20 | { 21 | $this->attributes->put('title', $title); 22 | 23 | return $this; 24 | } 25 | 26 | public function description(string $description): Body 27 | { 28 | $this->attributes->put('description', $description); 29 | 30 | return $this; 31 | } 32 | 33 | public function url(string $url): Body 34 | { 35 | $this->attributes->put('url', $url); 36 | 37 | return $this; 38 | } 39 | 40 | public function color(string $color): Body 41 | { 42 | $this->attributes->put('color', $color); 43 | 44 | return $this; 45 | } 46 | 47 | public function toArray(): array 48 | { 49 | (new BodyRules($this->attributes))->validate(); 50 | 51 | return [ 52 | 'title' => $this->attributes->get('title'), 53 | 'description' => $this->attributes->get('description'), 54 | 'url' => $this->attributes->get('url'), 55 | 'color' => $this->attributes->get('color'), 56 | ]; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/Content/Attributes/Footer.php: -------------------------------------------------------------------------------- 1 | attributes = new Collection($attributes); 17 | } 18 | 19 | public function text(string $text): Footer 20 | { 21 | $this->attributes->put('text', $text); 22 | 23 | return $this; 24 | } 25 | 26 | public function iconUrl(string $iconUrl): Footer 27 | { 28 | $this->attributes->put('icon_url', $iconUrl); 29 | 30 | return $this; 31 | } 32 | 33 | public function timestamp(string $timestamp): Footer 34 | { 35 | $this->attributes->put('timestamp', $timestamp); 36 | 37 | return $this; 38 | } 39 | 40 | public function toArray(): array 41 | { 42 | (new FooterRules($this->attributes))->validate(); 43 | 44 | return [ 45 | 'footer' => [ 46 | 'text' => $this->attributes->get('text'), 47 | 'icon_url' => $this->attributes->get('icon_url'), 48 | ], 49 | 'timestamp' => $this->attributes->get('timestamp'), 50 | ]; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Content/Attributes/Image.php: -------------------------------------------------------------------------------- 1 | attributes = $attributes; 15 | } 16 | 17 | public function image(string $url): Image 18 | { 19 | $this->attributes['image'] = $url; 20 | 21 | return $this; 22 | } 23 | 24 | public function thumbnail(string $url): Image 25 | { 26 | $this->attributes['thumbnail'] = $url; 27 | 28 | return $this; 29 | } 30 | 31 | public function toArray(): array 32 | { 33 | return [ 34 | 'image' => [ 35 | 'url' => $this->attributes['image'] ?? null, 36 | ], 37 | 'thumbnail' => [ 38 | 'url' => $this->attributes['thumbnail'] ?? null, 39 | ], 40 | ]; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/Content/Attributes/Interfaces/Attribute.php: -------------------------------------------------------------------------------- 1 | attributes = new Collection(); 16 | } 17 | 18 | public function add(Attribute $attribute): Embed 19 | { 20 | $this->attributes->add($attribute); 21 | 22 | return $this; 23 | } 24 | 25 | public function addMany(array $attributes): Embed 26 | { 27 | array_map(function ($attribute) { 28 | 29 | $this->add($attribute); 30 | 31 | }, $attributes); 32 | 33 | return $this; 34 | } 35 | 36 | public function toArray(): array 37 | { 38 | $attributes = $this->attributes->toArray(); 39 | 40 | return array_merge(...$attributes); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/Content/Rules/AuthorRules.php: -------------------------------------------------------------------------------- 1 | attributes = $attributes; 15 | } 16 | 17 | public function validate(): bool 18 | { 19 | $this->hasUrlWithoutName(); 20 | $this->hasInvalidUrl(); 21 | 22 | return true; 23 | } 24 | 25 | protected function hasUrlWithoutName() 26 | { 27 | $hasOptionalFields = $this->attributes->get('url') || $this->attributes->get('icon_url'); 28 | 29 | if (! $this->attributes->get('name') && $hasOptionalFields) { 30 | throw new InvalidAttributeException('You cannot set url or icon_url fields without a name'); 31 | } 32 | } 33 | 34 | protected function hasInvalidUrl() 35 | { 36 | if (! $this->attributes->get('url')) { 37 | return; 38 | } 39 | 40 | $regexUrl = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/'; 41 | 42 | if (! preg_match($regexUrl, $this->attributes->get('url'))) { 43 | throw new InvalidAttributeException('The url field is not valid'); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/Content/Rules/BodyRules.php: -------------------------------------------------------------------------------- 1 | attributes = $attributes; 15 | } 16 | 17 | public function validate(): bool 18 | { 19 | $this->hasUrlWithoutTitle(); 20 | $this->hasInvalidUrl(); 21 | 22 | return true; 23 | } 24 | 25 | protected function hasUrlWithoutTitle() 26 | { 27 | if (! $this->attributes->get('title') && $this->attributes->get('url')) { 28 | throw new InvalidAttributeException('You cannot set an url without a title'); 29 | } 30 | } 31 | 32 | protected function hasInvalidUrl() 33 | { 34 | if (! $this->attributes->get('url')) { 35 | return; 36 | } 37 | 38 | $regexUrl = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/'; 39 | 40 | if (! preg_match($regexUrl, $this->attributes->get('url'))) { 41 | throw new InvalidAttributeException('The url field is not valid'); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/Content/Rules/FooterRules.php: -------------------------------------------------------------------------------- 1 | attributes = $attributes; 15 | } 16 | 17 | public function validate(): bool 18 | { 19 | $this->hasIconWithoutText(); 20 | 21 | return true; 22 | } 23 | 24 | protected function hasIconWithoutText() 25 | { 26 | if (! $this->attributes->get('text') && $this->attributes->get('icon_url')) { 27 | throw new InvalidAttributeException('You cannot set an icon_url without a text'); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/Content/Rules/Interfaces/Rule.php: -------------------------------------------------------------------------------- 1 | prepareEmbed(); 21 | 22 | $expected = $this->getExpected(); 23 | 24 | $this->assertInstanceOf(Embed::class, $embed); 25 | $this->assertEquals($expected, $embed->toArray()); 26 | } 27 | 28 | /** 29 | * @test 30 | */ 31 | public function make_with_methods() 32 | { 33 | $embed = $this->prepareEmbedWithMethods(); 34 | 35 | $expected = $this->getExpected(); 36 | 37 | $this->assertInstanceOf(Embed::class, $embed); 38 | $this->assertEquals($expected, $embed->toArray()); 39 | } 40 | 41 | protected function prepareEmbed(): Embed 42 | { 43 | $author = new Author([ 44 | 'name' => 'This is the author', 45 | 'url' => 'https://github.com/florianrambur/discord-webhook', 46 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 47 | ]); 48 | 49 | $body = new Body([ 50 | 'title' => 'Webhook Title', 51 | 'description' => 'Webhook Description', 52 | 'color' => 5814783, 53 | ]); 54 | 55 | $image = new Image([ 56 | 'image' => 'https://i.imgur.com/ZGPxFN2.jpg', 57 | ]); 58 | 59 | $footer = new Footer([ 60 | 'text' => 'This is the footer', 61 | 'timestamp' => '2021-07-06T22:00:00.000Z', 62 | ]); 63 | 64 | return (new Embed())->addMany([$author, $body, $image, $footer]); 65 | } 66 | 67 | protected function prepareEmbedWithMethods() 68 | { 69 | $author = (new Author()) 70 | ->name('This is the author') 71 | ->url('https://github.com/florianrambur/discord-webhook') 72 | ->iconUrl('https://github.com/florianrambur/discord-webhook/icon.jpg'); 73 | 74 | $body = (new Body()) 75 | ->title('Webhook Title') 76 | ->description('Webhook Description') 77 | ->color(5814783); 78 | 79 | $image = (new Image())->image('https://i.imgur.com/ZGPxFN2.jpg'); 80 | 81 | $footer = (new Footer()) 82 | ->text('This is the footer') 83 | ->timestamp('2021-07-06T22:00:00.000Z'); 84 | 85 | return (new Embed())->addMany([$author, $body, $image, $footer]); 86 | } 87 | 88 | protected function getExpected(): array 89 | { 90 | return [ 91 | 'author' => [ 92 | 'name' => 'This is the author', 93 | 'url' => 'https://github.com/florianrambur/discord-webhook', 94 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 95 | ], 96 | 'title' => 'Webhook Title', 97 | 'description' => 'Webhook Description', 98 | 'url' => null, 99 | 'color' => 5814783, 100 | 'image' => [ 101 | 'url' => 'https://i.imgur.com/ZGPxFN2.jpg', 102 | ], 103 | 'thumbnail' => [ 104 | 'url' => null, 105 | ], 106 | 'footer' => [ 107 | 'text' => 'This is the footer', 108 | 'icon_url' => null, 109 | ], 110 | 'timestamp' => '2021-07-06T22:00:00.000Z', 111 | ]; 112 | } 113 | } -------------------------------------------------------------------------------- /tests/Rules/AuthorRulesTest.php: -------------------------------------------------------------------------------- 1 | 'This is the author', 19 | 'url' => 'https://github.com/florianrambur/discord-webhook', 20 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 21 | ]); 22 | 23 | $validate = (new AuthorRules($attributes))->validate(); 24 | 25 | $this->assertTrue($validate); 26 | } 27 | 28 | /** 29 | * @test 30 | */ 31 | public function has_url_without_name() 32 | { 33 | $attributes = new Collection([ 34 | 'url' => 'https://github.com/florianrambur/discord-webhook', 35 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 36 | ]); 37 | 38 | $this->expectException(InvalidAttributeException::class); 39 | $this->expectExceptionMessage('You cannot set url or icon_url fields without a name'); 40 | 41 | (new AuthorRules($attributes))->validate(); 42 | } 43 | 44 | /** 45 | * @test 46 | */ 47 | public function has_invalid_url() 48 | { 49 | $attributes = new Collection([ 50 | 'name' => 'This is the author', 51 | 'url' => 'Wrong Url', 52 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 53 | ]); 54 | 55 | $this->expectException(InvalidAttributeException::class); 56 | $this->expectExceptionMessage('The url field is not valid'); 57 | 58 | (new AuthorRules($attributes))->validate(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /tests/Rules/BodyRulesTest.php: -------------------------------------------------------------------------------- 1 | 'Webhook Title', 19 | 'description' => 'Webhook Description', 20 | 'color' => '5814783', 21 | ]); 22 | 23 | $validate = (new BodyRules($attributes))->validate(); 24 | 25 | $this->assertTrue($validate); 26 | } 27 | 28 | /** 29 | * @test 30 | */ 31 | public function has_url_without_title() 32 | { 33 | $attributes = new Collection([ 34 | 'url' => 'https://github.com/florianrambur/discord-wewbhook', 35 | 'description' => 'Webhook Description', 36 | 'color' => '5814783', 37 | ]); 38 | 39 | $this->expectException(InvalidAttributeException::class); 40 | $this->expectExceptionMessage('You cannot set an url without a title'); 41 | 42 | (new BodyRules($attributes))->validate(); 43 | } 44 | 45 | /** 46 | * @test 47 | */ 48 | public function has_invalid_url() 49 | { 50 | $attributes = new Collection([ 51 | 'title' => 'Webhook Title', 52 | 'url' => 'invalid url', 53 | 'description' => 'Webhook Description', 54 | 'color' => '5814783', 55 | ]); 56 | 57 | $this->expectException(InvalidAttributeException::class); 58 | $this->expectExceptionMessage('The url field is not valid'); 59 | 60 | (new BodyRules($attributes))->validate(); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /tests/Rules/FooterRulesTest.php: -------------------------------------------------------------------------------- 1 | 'This is the footer', 19 | 'timestamp' => '2021-07-06T22:00:00.000Z', 20 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 21 | ]); 22 | 23 | $validate = (new FooterRules($attributes))->validate(); 24 | 25 | $this->assertTrue($validate); 26 | } 27 | 28 | /** 29 | * @test 30 | */ 31 | public function has_icon_without_text() 32 | { 33 | $attributes = new Collection([ 34 | 'timestamp' => '2021-07-06T22:00:00.000Z', 35 | 'icon_url' => 'https://github.com/florianrambur/discord-webhook/icon.jpg', 36 | ]); 37 | 38 | $this->expectException(InvalidAttributeException::class); 39 | $this->expectExceptionMessage('You cannot set an icon_url without a text'); 40 | 41 | (new FooterRules($attributes))->validate(); 42 | } 43 | } 44 | --------------------------------------------------------------------------------