├── .babelrc.js ├── .coveralls.yml ├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── .npmrc ├── .nvmrc ├── .travis.yml ├── Vagrantfile ├── block-scaffolding.php ├── composer.json ├── composer.lock ├── docker-compose.yml ├── init.sh ├── js ├── .gitignore └── src │ ├── editor.js │ └── editor.test.js ├── package-lock.json ├── package.json ├── php ├── Plugin.php └── Router.php ├── phpcs.xml.dist ├── phpunit.xml.dist ├── readme.md ├── renovate.json ├── scripts └── docker │ └── wordpress │ ├── Dockerfile │ └── config │ └── php │ ├── php.ini │ └── xdebug.ini ├── tests ├── bootstrap.php ├── coverage │ └── .gitignore └── php │ ├── TestCase.php │ ├── TestPlugin.php │ └── TestRouter.php └── webpack.config.js /.babelrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@wordpress/default', 4 | ], 5 | plugins: [ 6 | '@wordpress/babel-plugin-import-jsx-pragma', 7 | '@babel/transform-react-jsx', 8 | ], 9 | }; 10 | -------------------------------------------------------------------------------- /.coveralls.yml: -------------------------------------------------------------------------------- 1 | coverage_clover: 2 | - tests/coverage/php/clover.xml 3 | - tests/coverage/js/clover.xml 4 | json_path: tests/coverage/coveralls-upload.json 5 | service_name: travis-ci 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: http://EditorConfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | indent_style = tab 10 | 11 | [*.{json,yml,yaml}] 12 | indent_style = space 13 | indent_size = 2 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "plugin:@wordpress/eslint-plugin/recommended" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | .phpunit.result.cache 4 | .vagrant/ 5 | console.log 6 | node_modules/ 7 | phpcs.xml 8 | phpunit.xml 9 | vendor/ 10 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict = true 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | dist: xenial 2 | 3 | language: php 4 | 5 | php: 6 | - "7.3" 7 | 8 | before_install: 9 | - nvm install 10 | - nvm use 11 | 12 | install: 13 | - npm install 14 | 15 | script: 16 | - npm run lint 17 | - npm run test-with-coverage 18 | 19 | after_success: 20 | - npm run report-coverage 21 | 22 | notifications: 23 | email: false 24 | 25 | # Pull requests are built by default. 26 | branches: 27 | only: 28 | - master 29 | 30 | cache: 31 | npm: true 32 | directories: 33 | - $HOME/.composer/cache 34 | -------------------------------------------------------------------------------- /Vagrantfile: -------------------------------------------------------------------------------- 1 | # Local dev environment https://github.com/wpsh/wpsh-local 2 | 3 | load File.join( 4 | File.dirname(__FILE__), 5 | "vendor/wpsh/local/Vagrantfile" 6 | ) 7 | 8 | Vagrant.configure(2) do |config| 9 | config.vm.hostname = "block-scaffolding-wp" 10 | end 11 | -------------------------------------------------------------------------------- /block-scaffolding.php: -------------------------------------------------------------------------------- 1 | =7.2", 10 | "composer/installers": "^1.7" 11 | }, 12 | "require-dev": { 13 | "10up/wp_mock": "0.4.2", 14 | "dealerdirect/phpcodesniffer-composer-installer": "0.7.1", 15 | "mockery/mockery": "1.3.1", 16 | "php-coveralls/php-coveralls": "2.2.0", 17 | "phpcompatibility/phpcompatibility-wp": "2.1.0", 18 | "phpunit/phpunit": "8.5.2", 19 | "wp-coding-standards/wpcs": "2.3.0", 20 | "wpsh/local": "0.2.3" 21 | }, 22 | "autoload": { 23 | "psr-4": { 24 | "XWP\\BlockScaffolding\\": "php/" 25 | } 26 | }, 27 | "autoload-dev": { 28 | "psr-4": { 29 | "XWP\\BlockScaffolding\\": "tests/php/" 30 | } 31 | }, 32 | "scripts": { 33 | "lint": [ 34 | "@composer validate --strict", 35 | "phpcs ." 36 | ], 37 | "test": [ 38 | "phpunit" 39 | ], 40 | "coverage": [ 41 | "php-coveralls --verbose" 42 | ], 43 | "build": [ 44 | "composer install --no-dev --prefer-dist --optimize-autoloader --no-scripts" 45 | ] 46 | }, 47 | "config": { 48 | "sort-packages": true 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /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": "c06be08f7943f81ca467bd0dce021c41", 8 | "packages": [ 9 | { 10 | "name": "composer/installers", 11 | "version": "v1.11.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/composer/installers.git", 15 | "reference": "ae03311f45dfe194412081526be2e003960df74b" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/composer/installers/zipball/ae03311f45dfe194412081526be2e003960df74b", 20 | "reference": "ae03311f45dfe194412081526be2e003960df74b", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "composer-plugin-api": "^1.0 || ^2.0" 25 | }, 26 | "replace": { 27 | "roundcube/plugin-installer": "*", 28 | "shama/baton": "*" 29 | }, 30 | "require-dev": { 31 | "composer/composer": "1.6.* || ^2.0", 32 | "composer/semver": "^1 || ^3", 33 | "phpstan/phpstan": "^0.12.55", 34 | "phpstan/phpstan-phpunit": "^0.12.16", 35 | "symfony/phpunit-bridge": "^4.2 || ^5", 36 | "symfony/process": "^2.3" 37 | }, 38 | "type": "composer-plugin", 39 | "extra": { 40 | "class": "Composer\\Installers\\Plugin", 41 | "branch-alias": { 42 | "dev-main": "1.x-dev" 43 | } 44 | }, 45 | "autoload": { 46 | "psr-4": { 47 | "Composer\\Installers\\": "src/Composer/Installers" 48 | } 49 | }, 50 | "notification-url": "https://packagist.org/downloads/", 51 | "license": [ 52 | "MIT" 53 | ], 54 | "authors": [ 55 | { 56 | "name": "Kyle Robinson Young", 57 | "email": "kyle@dontkry.com", 58 | "homepage": "https://github.com/shama" 59 | } 60 | ], 61 | "description": "A multi-framework Composer library installer", 62 | "homepage": "https://composer.github.io/installers/", 63 | "keywords": [ 64 | "Craft", 65 | "Dolibarr", 66 | "Eliasis", 67 | "Hurad", 68 | "ImageCMS", 69 | "Kanboard", 70 | "Lan Management System", 71 | "MODX Evo", 72 | "MantisBT", 73 | "Mautic", 74 | "Maya", 75 | "OXID", 76 | "Plentymarkets", 77 | "Porto", 78 | "RadPHP", 79 | "SMF", 80 | "Starbug", 81 | "Thelia", 82 | "Whmcs", 83 | "WolfCMS", 84 | "agl", 85 | "aimeos", 86 | "annotatecms", 87 | "attogram", 88 | "bitrix", 89 | "cakephp", 90 | "chef", 91 | "cockpit", 92 | "codeigniter", 93 | "concrete5", 94 | "croogo", 95 | "dokuwiki", 96 | "drupal", 97 | "eZ Platform", 98 | "elgg", 99 | "expressionengine", 100 | "fuelphp", 101 | "grav", 102 | "installer", 103 | "itop", 104 | "joomla", 105 | "known", 106 | "kohana", 107 | "laravel", 108 | "lavalite", 109 | "lithium", 110 | "magento", 111 | "majima", 112 | "mako", 113 | "mediawiki", 114 | "miaoxing", 115 | "modulework", 116 | "modx", 117 | "moodle", 118 | "osclass", 119 | "phpbb", 120 | "piwik", 121 | "ppi", 122 | "processwire", 123 | "puppet", 124 | "pxcms", 125 | "reindex", 126 | "roundcube", 127 | "shopware", 128 | "silverstripe", 129 | "sydes", 130 | "sylius", 131 | "symfony", 132 | "tastyigniter", 133 | "typo3", 134 | "wordpress", 135 | "yawik", 136 | "zend", 137 | "zikula" 138 | ], 139 | "support": { 140 | "issues": "https://github.com/composer/installers/issues", 141 | "source": "https://github.com/composer/installers/tree/v1.11.0" 142 | }, 143 | "funding": [ 144 | { 145 | "url": "https://packagist.com", 146 | "type": "custom" 147 | }, 148 | { 149 | "url": "https://github.com/composer", 150 | "type": "github" 151 | }, 152 | { 153 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 154 | "type": "tidelift" 155 | } 156 | ], 157 | "time": "2021-04-28T06:42:17+00:00" 158 | } 159 | ], 160 | "packages-dev": [ 161 | { 162 | "name": "10up/wp_mock", 163 | "version": "0.4.2", 164 | "source": { 165 | "type": "git", 166 | "url": "https://github.com/10up/wp_mock.git", 167 | "reference": "9019226eb50df275aa86bb15bfc98a619601ee49" 168 | }, 169 | "dist": { 170 | "type": "zip", 171 | "url": "https://api.github.com/repos/10up/wp_mock/zipball/9019226eb50df275aa86bb15bfc98a619601ee49", 172 | "reference": "9019226eb50df275aa86bb15bfc98a619601ee49", 173 | "shasum": "" 174 | }, 175 | "require": { 176 | "antecedent/patchwork": "^2.1", 177 | "mockery/mockery": "^1.0", 178 | "php": ">=7.1", 179 | "phpunit/phpunit": ">=7.0" 180 | }, 181 | "require-dev": { 182 | "behat/behat": "^3.0", 183 | "php-coveralls/php-coveralls": "^2.1", 184 | "sebastian/comparator": ">=1.2.3" 185 | }, 186 | "type": "library", 187 | "autoload": { 188 | "psr-4": { 189 | "WP_Mock\\": "./php/WP_Mock" 190 | }, 191 | "classmap": [ 192 | "php/WP_Mock.php" 193 | ] 194 | }, 195 | "notification-url": "https://packagist.org/downloads/", 196 | "license": [ 197 | "GPL-2.0-or-later" 198 | ], 199 | "description": "A mocking library to take the pain out of unit testing for WordPress", 200 | "support": { 201 | "issues": "https://github.com/10up/wp_mock/issues", 202 | "source": "https://github.com/10up/wp_mock/tree/master" 203 | }, 204 | "time": "2019-03-16T03:44:39+00:00" 205 | }, 206 | { 207 | "name": "antecedent/patchwork", 208 | "version": "2.1.12", 209 | "source": { 210 | "type": "git", 211 | "url": "https://github.com/antecedent/patchwork.git", 212 | "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea" 213 | }, 214 | "dist": { 215 | "type": "zip", 216 | "url": "https://api.github.com/repos/antecedent/patchwork/zipball/b98e046dd4c0acc34a0846604f06f6111654d9ea", 217 | "reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea", 218 | "shasum": "" 219 | }, 220 | "require": { 221 | "php": ">=5.4.0" 222 | }, 223 | "require-dev": { 224 | "phpunit/phpunit": ">=4" 225 | }, 226 | "type": "library", 227 | "notification-url": "https://packagist.org/downloads/", 228 | "license": [ 229 | "MIT" 230 | ], 231 | "authors": [ 232 | { 233 | "name": "Ignas Rudaitis", 234 | "email": "ignas.rudaitis@gmail.com" 235 | } 236 | ], 237 | "description": "Method redefinition (monkey-patching) functionality for PHP.", 238 | "homepage": "http://patchwork2.org/", 239 | "keywords": [ 240 | "aop", 241 | "aspect", 242 | "interception", 243 | "monkeypatching", 244 | "redefinition", 245 | "runkit", 246 | "testing" 247 | ], 248 | "support": { 249 | "issues": "https://github.com/antecedent/patchwork/issues", 250 | "source": "https://github.com/antecedent/patchwork/tree/2.1.12" 251 | }, 252 | "time": "2019-12-22T17:52:09+00:00" 253 | }, 254 | { 255 | "name": "dealerdirect/phpcodesniffer-composer-installer", 256 | "version": "v0.7.1", 257 | "source": { 258 | "type": "git", 259 | "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", 260 | "reference": "fe390591e0241955f22eb9ba327d137e501c771c" 261 | }, 262 | "dist": { 263 | "type": "zip", 264 | "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", 265 | "reference": "fe390591e0241955f22eb9ba327d137e501c771c", 266 | "shasum": "" 267 | }, 268 | "require": { 269 | "composer-plugin-api": "^1.0 || ^2.0", 270 | "php": ">=5.3", 271 | "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" 272 | }, 273 | "require-dev": { 274 | "composer/composer": "*", 275 | "phpcompatibility/php-compatibility": "^9.0", 276 | "sensiolabs/security-checker": "^4.1.0" 277 | }, 278 | "type": "composer-plugin", 279 | "extra": { 280 | "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" 281 | }, 282 | "autoload": { 283 | "psr-4": { 284 | "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" 285 | } 286 | }, 287 | "notification-url": "https://packagist.org/downloads/", 288 | "license": [ 289 | "MIT" 290 | ], 291 | "authors": [ 292 | { 293 | "name": "Franck Nijhof", 294 | "email": "franck.nijhof@dealerdirect.com", 295 | "homepage": "http://www.frenck.nl", 296 | "role": "Developer / IT Manager" 297 | } 298 | ], 299 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin", 300 | "homepage": "http://www.dealerdirect.com", 301 | "keywords": [ 302 | "PHPCodeSniffer", 303 | "PHP_CodeSniffer", 304 | "code quality", 305 | "codesniffer", 306 | "composer", 307 | "installer", 308 | "phpcs", 309 | "plugin", 310 | "qa", 311 | "quality", 312 | "standard", 313 | "standards", 314 | "style guide", 315 | "stylecheck", 316 | "tests" 317 | ], 318 | "support": { 319 | "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", 320 | "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" 321 | }, 322 | "time": "2020-12-07T18:04:37+00:00" 323 | }, 324 | { 325 | "name": "doctrine/instantiator", 326 | "version": "1.4.0", 327 | "source": { 328 | "type": "git", 329 | "url": "https://github.com/doctrine/instantiator.git", 330 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" 331 | }, 332 | "dist": { 333 | "type": "zip", 334 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", 335 | "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", 336 | "shasum": "" 337 | }, 338 | "require": { 339 | "php": "^7.1 || ^8.0" 340 | }, 341 | "require-dev": { 342 | "doctrine/coding-standard": "^8.0", 343 | "ext-pdo": "*", 344 | "ext-phar": "*", 345 | "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", 346 | "phpstan/phpstan": "^0.12", 347 | "phpstan/phpstan-phpunit": "^0.12", 348 | "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" 349 | }, 350 | "type": "library", 351 | "autoload": { 352 | "psr-4": { 353 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 354 | } 355 | }, 356 | "notification-url": "https://packagist.org/downloads/", 357 | "license": [ 358 | "MIT" 359 | ], 360 | "authors": [ 361 | { 362 | "name": "Marco Pivetta", 363 | "email": "ocramius@gmail.com", 364 | "homepage": "https://ocramius.github.io/" 365 | } 366 | ], 367 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 368 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 369 | "keywords": [ 370 | "constructor", 371 | "instantiate" 372 | ], 373 | "support": { 374 | "issues": "https://github.com/doctrine/instantiator/issues", 375 | "source": "https://github.com/doctrine/instantiator/tree/1.4.0" 376 | }, 377 | "funding": [ 378 | { 379 | "url": "https://www.doctrine-project.org/sponsorship.html", 380 | "type": "custom" 381 | }, 382 | { 383 | "url": "https://www.patreon.com/phpdoctrine", 384 | "type": "patreon" 385 | }, 386 | { 387 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 388 | "type": "tidelift" 389 | } 390 | ], 391 | "time": "2020-11-10T18:47:58+00:00" 392 | }, 393 | { 394 | "name": "guzzlehttp/guzzle", 395 | "version": "6.5.5", 396 | "source": { 397 | "type": "git", 398 | "url": "https://github.com/guzzle/guzzle.git", 399 | "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" 400 | }, 401 | "dist": { 402 | "type": "zip", 403 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", 404 | "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", 405 | "shasum": "" 406 | }, 407 | "require": { 408 | "ext-json": "*", 409 | "guzzlehttp/promises": "^1.0", 410 | "guzzlehttp/psr7": "^1.6.1", 411 | "php": ">=5.5", 412 | "symfony/polyfill-intl-idn": "^1.17.0" 413 | }, 414 | "require-dev": { 415 | "ext-curl": "*", 416 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 417 | "psr/log": "^1.1" 418 | }, 419 | "suggest": { 420 | "psr/log": "Required for using the Log middleware" 421 | }, 422 | "type": "library", 423 | "extra": { 424 | "branch-alias": { 425 | "dev-master": "6.5-dev" 426 | } 427 | }, 428 | "autoload": { 429 | "psr-4": { 430 | "GuzzleHttp\\": "src/" 431 | }, 432 | "files": [ 433 | "src/functions_include.php" 434 | ] 435 | }, 436 | "notification-url": "https://packagist.org/downloads/", 437 | "license": [ 438 | "MIT" 439 | ], 440 | "authors": [ 441 | { 442 | "name": "Michael Dowling", 443 | "email": "mtdowling@gmail.com", 444 | "homepage": "https://github.com/mtdowling" 445 | } 446 | ], 447 | "description": "Guzzle is a PHP HTTP client library", 448 | "homepage": "http://guzzlephp.org/", 449 | "keywords": [ 450 | "client", 451 | "curl", 452 | "framework", 453 | "http", 454 | "http client", 455 | "rest", 456 | "web service" 457 | ], 458 | "support": { 459 | "issues": "https://github.com/guzzle/guzzle/issues", 460 | "source": "https://github.com/guzzle/guzzle/tree/6.5" 461 | }, 462 | "time": "2020-06-16T21:01:06+00:00" 463 | }, 464 | { 465 | "name": "guzzlehttp/promises", 466 | "version": "1.4.1", 467 | "source": { 468 | "type": "git", 469 | "url": "https://github.com/guzzle/promises.git", 470 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" 471 | }, 472 | "dist": { 473 | "type": "zip", 474 | "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", 475 | "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", 476 | "shasum": "" 477 | }, 478 | "require": { 479 | "php": ">=5.5" 480 | }, 481 | "require-dev": { 482 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 483 | }, 484 | "type": "library", 485 | "extra": { 486 | "branch-alias": { 487 | "dev-master": "1.4-dev" 488 | } 489 | }, 490 | "autoload": { 491 | "psr-4": { 492 | "GuzzleHttp\\Promise\\": "src/" 493 | }, 494 | "files": [ 495 | "src/functions_include.php" 496 | ] 497 | }, 498 | "notification-url": "https://packagist.org/downloads/", 499 | "license": [ 500 | "MIT" 501 | ], 502 | "authors": [ 503 | { 504 | "name": "Michael Dowling", 505 | "email": "mtdowling@gmail.com", 506 | "homepage": "https://github.com/mtdowling" 507 | } 508 | ], 509 | "description": "Guzzle promises library", 510 | "keywords": [ 511 | "promise" 512 | ], 513 | "support": { 514 | "issues": "https://github.com/guzzle/promises/issues", 515 | "source": "https://github.com/guzzle/promises/tree/1.4.1" 516 | }, 517 | "time": "2021-03-07T09:25:29+00:00" 518 | }, 519 | { 520 | "name": "guzzlehttp/psr7", 521 | "version": "1.8.2", 522 | "source": { 523 | "type": "git", 524 | "url": "https://github.com/guzzle/psr7.git", 525 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91" 526 | }, 527 | "dist": { 528 | "type": "zip", 529 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", 530 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91", 531 | "shasum": "" 532 | }, 533 | "require": { 534 | "php": ">=5.4.0", 535 | "psr/http-message": "~1.0", 536 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 537 | }, 538 | "provide": { 539 | "psr/http-message-implementation": "1.0" 540 | }, 541 | "require-dev": { 542 | "ext-zlib": "*", 543 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" 544 | }, 545 | "suggest": { 546 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 547 | }, 548 | "type": "library", 549 | "extra": { 550 | "branch-alias": { 551 | "dev-master": "1.7-dev" 552 | } 553 | }, 554 | "autoload": { 555 | "psr-4": { 556 | "GuzzleHttp\\Psr7\\": "src/" 557 | }, 558 | "files": [ 559 | "src/functions_include.php" 560 | ] 561 | }, 562 | "notification-url": "https://packagist.org/downloads/", 563 | "license": [ 564 | "MIT" 565 | ], 566 | "authors": [ 567 | { 568 | "name": "Michael Dowling", 569 | "email": "mtdowling@gmail.com", 570 | "homepage": "https://github.com/mtdowling" 571 | }, 572 | { 573 | "name": "Tobias Schultze", 574 | "homepage": "https://github.com/Tobion" 575 | } 576 | ], 577 | "description": "PSR-7 message implementation that also provides common utility methods", 578 | "keywords": [ 579 | "http", 580 | "message", 581 | "psr-7", 582 | "request", 583 | "response", 584 | "stream", 585 | "uri", 586 | "url" 587 | ], 588 | "support": { 589 | "issues": "https://github.com/guzzle/psr7/issues", 590 | "source": "https://github.com/guzzle/psr7/tree/1.8.2" 591 | }, 592 | "time": "2021-04-26T09:17:50+00:00" 593 | }, 594 | { 595 | "name": "hamcrest/hamcrest-php", 596 | "version": "v2.0.1", 597 | "source": { 598 | "type": "git", 599 | "url": "https://github.com/hamcrest/hamcrest-php.git", 600 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" 601 | }, 602 | "dist": { 603 | "type": "zip", 604 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", 605 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", 606 | "shasum": "" 607 | }, 608 | "require": { 609 | "php": "^5.3|^7.0|^8.0" 610 | }, 611 | "replace": { 612 | "cordoval/hamcrest-php": "*", 613 | "davedevelopment/hamcrest-php": "*", 614 | "kodova/hamcrest-php": "*" 615 | }, 616 | "require-dev": { 617 | "phpunit/php-file-iterator": "^1.4 || ^2.0", 618 | "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" 619 | }, 620 | "type": "library", 621 | "extra": { 622 | "branch-alias": { 623 | "dev-master": "2.1-dev" 624 | } 625 | }, 626 | "autoload": { 627 | "classmap": [ 628 | "hamcrest" 629 | ] 630 | }, 631 | "notification-url": "https://packagist.org/downloads/", 632 | "license": [ 633 | "BSD-3-Clause" 634 | ], 635 | "description": "This is the PHP port of Hamcrest Matchers", 636 | "keywords": [ 637 | "test" 638 | ], 639 | "support": { 640 | "issues": "https://github.com/hamcrest/hamcrest-php/issues", 641 | "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" 642 | }, 643 | "time": "2020-07-09T08:09:16+00:00" 644 | }, 645 | { 646 | "name": "mockery/mockery", 647 | "version": "1.3.1", 648 | "source": { 649 | "type": "git", 650 | "url": "https://github.com/mockery/mockery.git", 651 | "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be" 652 | }, 653 | "dist": { 654 | "type": "zip", 655 | "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", 656 | "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be", 657 | "shasum": "" 658 | }, 659 | "require": { 660 | "hamcrest/hamcrest-php": "~2.0", 661 | "lib-pcre": ">=7.0", 662 | "php": ">=5.6.0" 663 | }, 664 | "require-dev": { 665 | "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" 666 | }, 667 | "type": "library", 668 | "extra": { 669 | "branch-alias": { 670 | "dev-master": "1.3.x-dev" 671 | } 672 | }, 673 | "autoload": { 674 | "psr-0": { 675 | "Mockery": "library/" 676 | } 677 | }, 678 | "notification-url": "https://packagist.org/downloads/", 679 | "license": [ 680 | "BSD-3-Clause" 681 | ], 682 | "authors": [ 683 | { 684 | "name": "Pádraic Brady", 685 | "email": "padraic.brady@gmail.com", 686 | "homepage": "http://blog.astrumfutura.com" 687 | }, 688 | { 689 | "name": "Dave Marshall", 690 | "email": "dave.marshall@atstsolutions.co.uk", 691 | "homepage": "http://davedevelopment.co.uk" 692 | } 693 | ], 694 | "description": "Mockery is a simple yet flexible PHP mock object framework", 695 | "homepage": "https://github.com/mockery/mockery", 696 | "keywords": [ 697 | "BDD", 698 | "TDD", 699 | "library", 700 | "mock", 701 | "mock objects", 702 | "mockery", 703 | "stub", 704 | "test", 705 | "test double", 706 | "testing" 707 | ], 708 | "support": { 709 | "issues": "https://github.com/mockery/mockery/issues", 710 | "source": "https://github.com/mockery/mockery/tree/master" 711 | }, 712 | "time": "2019-12-26T09:49:15+00:00" 713 | }, 714 | { 715 | "name": "myclabs/deep-copy", 716 | "version": "1.10.2", 717 | "source": { 718 | "type": "git", 719 | "url": "https://github.com/myclabs/DeepCopy.git", 720 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" 721 | }, 722 | "dist": { 723 | "type": "zip", 724 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", 725 | "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", 726 | "shasum": "" 727 | }, 728 | "require": { 729 | "php": "^7.1 || ^8.0" 730 | }, 731 | "replace": { 732 | "myclabs/deep-copy": "self.version" 733 | }, 734 | "require-dev": { 735 | "doctrine/collections": "^1.0", 736 | "doctrine/common": "^2.6", 737 | "phpunit/phpunit": "^7.1" 738 | }, 739 | "type": "library", 740 | "autoload": { 741 | "psr-4": { 742 | "DeepCopy\\": "src/DeepCopy/" 743 | }, 744 | "files": [ 745 | "src/DeepCopy/deep_copy.php" 746 | ] 747 | }, 748 | "notification-url": "https://packagist.org/downloads/", 749 | "license": [ 750 | "MIT" 751 | ], 752 | "description": "Create deep copies (clones) of your objects", 753 | "keywords": [ 754 | "clone", 755 | "copy", 756 | "duplicate", 757 | "object", 758 | "object graph" 759 | ], 760 | "support": { 761 | "issues": "https://github.com/myclabs/DeepCopy/issues", 762 | "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" 763 | }, 764 | "funding": [ 765 | { 766 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 767 | "type": "tidelift" 768 | } 769 | ], 770 | "time": "2020-11-13T09:40:50+00:00" 771 | }, 772 | { 773 | "name": "phar-io/manifest", 774 | "version": "1.0.3", 775 | "source": { 776 | "type": "git", 777 | "url": "https://github.com/phar-io/manifest.git", 778 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 779 | }, 780 | "dist": { 781 | "type": "zip", 782 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 783 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 784 | "shasum": "" 785 | }, 786 | "require": { 787 | "ext-dom": "*", 788 | "ext-phar": "*", 789 | "phar-io/version": "^2.0", 790 | "php": "^5.6 || ^7.0" 791 | }, 792 | "type": "library", 793 | "extra": { 794 | "branch-alias": { 795 | "dev-master": "1.0.x-dev" 796 | } 797 | }, 798 | "autoload": { 799 | "classmap": [ 800 | "src/" 801 | ] 802 | }, 803 | "notification-url": "https://packagist.org/downloads/", 804 | "license": [ 805 | "BSD-3-Clause" 806 | ], 807 | "authors": [ 808 | { 809 | "name": "Arne Blankerts", 810 | "email": "arne@blankerts.de", 811 | "role": "Developer" 812 | }, 813 | { 814 | "name": "Sebastian Heuer", 815 | "email": "sebastian@phpeople.de", 816 | "role": "Developer" 817 | }, 818 | { 819 | "name": "Sebastian Bergmann", 820 | "email": "sebastian@phpunit.de", 821 | "role": "Developer" 822 | } 823 | ], 824 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 825 | "support": { 826 | "issues": "https://github.com/phar-io/manifest/issues", 827 | "source": "https://github.com/phar-io/manifest/tree/master" 828 | }, 829 | "time": "2018-07-08T19:23:20+00:00" 830 | }, 831 | { 832 | "name": "phar-io/version", 833 | "version": "2.0.1", 834 | "source": { 835 | "type": "git", 836 | "url": "https://github.com/phar-io/version.git", 837 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 838 | }, 839 | "dist": { 840 | "type": "zip", 841 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 842 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 843 | "shasum": "" 844 | }, 845 | "require": { 846 | "php": "^5.6 || ^7.0" 847 | }, 848 | "type": "library", 849 | "autoload": { 850 | "classmap": [ 851 | "src/" 852 | ] 853 | }, 854 | "notification-url": "https://packagist.org/downloads/", 855 | "license": [ 856 | "BSD-3-Clause" 857 | ], 858 | "authors": [ 859 | { 860 | "name": "Arne Blankerts", 861 | "email": "arne@blankerts.de", 862 | "role": "Developer" 863 | }, 864 | { 865 | "name": "Sebastian Heuer", 866 | "email": "sebastian@phpeople.de", 867 | "role": "Developer" 868 | }, 869 | { 870 | "name": "Sebastian Bergmann", 871 | "email": "sebastian@phpunit.de", 872 | "role": "Developer" 873 | } 874 | ], 875 | "description": "Library for handling version information and constraints", 876 | "support": { 877 | "issues": "https://github.com/phar-io/version/issues", 878 | "source": "https://github.com/phar-io/version/tree/master" 879 | }, 880 | "time": "2018-07-08T19:19:57+00:00" 881 | }, 882 | { 883 | "name": "php-coveralls/php-coveralls", 884 | "version": "v2.2.0", 885 | "source": { 886 | "type": "git", 887 | "url": "https://github.com/php-coveralls/php-coveralls.git", 888 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae" 889 | }, 890 | "dist": { 891 | "type": "zip", 892 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae", 893 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae", 894 | "shasum": "" 895 | }, 896 | "require": { 897 | "ext-json": "*", 898 | "ext-simplexml": "*", 899 | "guzzlehttp/guzzle": "^6.0", 900 | "php": "^5.5 || ^7.0", 901 | "psr/log": "^1.0", 902 | "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0", 903 | "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", 904 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0", 905 | "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0" 906 | }, 907 | "require-dev": { 908 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" 909 | }, 910 | "suggest": { 911 | "symfony/http-kernel": "Allows Symfony integration" 912 | }, 913 | "bin": [ 914 | "bin/php-coveralls" 915 | ], 916 | "type": "library", 917 | "extra": { 918 | "branch-alias": { 919 | "dev-master": "2.2-dev" 920 | } 921 | }, 922 | "autoload": { 923 | "psr-4": { 924 | "PhpCoveralls\\": "src/" 925 | } 926 | }, 927 | "notification-url": "https://packagist.org/downloads/", 928 | "license": [ 929 | "MIT" 930 | ], 931 | "authors": [ 932 | { 933 | "name": "Kitamura Satoshi", 934 | "email": "with.no.parachute@gmail.com", 935 | "homepage": "https://www.facebook.com/satooshi.jp", 936 | "role": "Original creator" 937 | }, 938 | { 939 | "name": "Takashi Matsuo", 940 | "email": "tmatsuo@google.com" 941 | }, 942 | { 943 | "name": "Google Inc" 944 | }, 945 | { 946 | "name": "Dariusz Ruminski", 947 | "email": "dariusz.ruminski@gmail.com", 948 | "homepage": "https://github.com/keradus" 949 | }, 950 | { 951 | "name": "Contributors", 952 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" 953 | } 954 | ], 955 | "description": "PHP client library for Coveralls API", 956 | "homepage": "https://github.com/php-coveralls/php-coveralls", 957 | "keywords": [ 958 | "ci", 959 | "coverage", 960 | "github", 961 | "test" 962 | ], 963 | "support": { 964 | "issues": "https://github.com/php-coveralls/php-coveralls/issues", 965 | "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.2.0" 966 | }, 967 | "time": "2019-11-20T16:29:20+00:00" 968 | }, 969 | { 970 | "name": "phpcompatibility/php-compatibility", 971 | "version": "9.3.5", 972 | "source": { 973 | "type": "git", 974 | "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", 975 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" 976 | }, 977 | "dist": { 978 | "type": "zip", 979 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", 980 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", 981 | "shasum": "" 982 | }, 983 | "require": { 984 | "php": ">=5.3", 985 | "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" 986 | }, 987 | "conflict": { 988 | "squizlabs/php_codesniffer": "2.6.2" 989 | }, 990 | "require-dev": { 991 | "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" 992 | }, 993 | "suggest": { 994 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", 995 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 996 | }, 997 | "type": "phpcodesniffer-standard", 998 | "notification-url": "https://packagist.org/downloads/", 999 | "license": [ 1000 | "LGPL-3.0-or-later" 1001 | ], 1002 | "authors": [ 1003 | { 1004 | "name": "Wim Godden", 1005 | "homepage": "https://github.com/wimg", 1006 | "role": "lead" 1007 | }, 1008 | { 1009 | "name": "Juliette Reinders Folmer", 1010 | "homepage": "https://github.com/jrfnl", 1011 | "role": "lead" 1012 | }, 1013 | { 1014 | "name": "Contributors", 1015 | "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" 1016 | } 1017 | ], 1018 | "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", 1019 | "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", 1020 | "keywords": [ 1021 | "compatibility", 1022 | "phpcs", 1023 | "standards" 1024 | ], 1025 | "support": { 1026 | "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", 1027 | "source": "https://github.com/PHPCompatibility/PHPCompatibility" 1028 | }, 1029 | "time": "2019-12-27T09:44:58+00:00" 1030 | }, 1031 | { 1032 | "name": "phpcompatibility/phpcompatibility-paragonie", 1033 | "version": "1.3.1", 1034 | "source": { 1035 | "type": "git", 1036 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", 1037 | "reference": "ddabec839cc003651f2ce695c938686d1086cf43" 1038 | }, 1039 | "dist": { 1040 | "type": "zip", 1041 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/ddabec839cc003651f2ce695c938686d1086cf43", 1042 | "reference": "ddabec839cc003651f2ce695c938686d1086cf43", 1043 | "shasum": "" 1044 | }, 1045 | "require": { 1046 | "phpcompatibility/php-compatibility": "^9.0" 1047 | }, 1048 | "require-dev": { 1049 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7", 1050 | "paragonie/random_compat": "dev-master", 1051 | "paragonie/sodium_compat": "dev-master" 1052 | }, 1053 | "suggest": { 1054 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 1055 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 1056 | }, 1057 | "type": "phpcodesniffer-standard", 1058 | "notification-url": "https://packagist.org/downloads/", 1059 | "license": [ 1060 | "LGPL-3.0-or-later" 1061 | ], 1062 | "authors": [ 1063 | { 1064 | "name": "Wim Godden", 1065 | "role": "lead" 1066 | }, 1067 | { 1068 | "name": "Juliette Reinders Folmer", 1069 | "role": "lead" 1070 | } 1071 | ], 1072 | "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", 1073 | "homepage": "http://phpcompatibility.com/", 1074 | "keywords": [ 1075 | "compatibility", 1076 | "paragonie", 1077 | "phpcs", 1078 | "polyfill", 1079 | "standards" 1080 | ], 1081 | "support": { 1082 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", 1083 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" 1084 | }, 1085 | "time": "2021-02-15T10:24:51+00:00" 1086 | }, 1087 | { 1088 | "name": "phpcompatibility/phpcompatibility-wp", 1089 | "version": "2.1.0", 1090 | "source": { 1091 | "type": "git", 1092 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", 1093 | "reference": "41bef18ba688af638b7310666db28e1ea9158b2f" 1094 | }, 1095 | "dist": { 1096 | "type": "zip", 1097 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/41bef18ba688af638b7310666db28e1ea9158b2f", 1098 | "reference": "41bef18ba688af638b7310666db28e1ea9158b2f", 1099 | "shasum": "" 1100 | }, 1101 | "require": { 1102 | "phpcompatibility/php-compatibility": "^9.0", 1103 | "phpcompatibility/phpcompatibility-paragonie": "^1.0" 1104 | }, 1105 | "require-dev": { 1106 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5" 1107 | }, 1108 | "suggest": { 1109 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 1110 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 1111 | }, 1112 | "type": "phpcodesniffer-standard", 1113 | "notification-url": "https://packagist.org/downloads/", 1114 | "license": [ 1115 | "LGPL-3.0-or-later" 1116 | ], 1117 | "authors": [ 1118 | { 1119 | "name": "Wim Godden", 1120 | "role": "lead" 1121 | }, 1122 | { 1123 | "name": "Juliette Reinders Folmer", 1124 | "role": "lead" 1125 | } 1126 | ], 1127 | "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", 1128 | "homepage": "http://phpcompatibility.com/", 1129 | "keywords": [ 1130 | "compatibility", 1131 | "phpcs", 1132 | "standards", 1133 | "wordpress" 1134 | ], 1135 | "support": { 1136 | "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", 1137 | "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" 1138 | }, 1139 | "time": "2019-08-28T14:22:28+00:00" 1140 | }, 1141 | { 1142 | "name": "phpdocumentor/reflection-common", 1143 | "version": "2.2.0", 1144 | "source": { 1145 | "type": "git", 1146 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1147 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 1148 | }, 1149 | "dist": { 1150 | "type": "zip", 1151 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1152 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 1153 | "shasum": "" 1154 | }, 1155 | "require": { 1156 | "php": "^7.2 || ^8.0" 1157 | }, 1158 | "type": "library", 1159 | "extra": { 1160 | "branch-alias": { 1161 | "dev-2.x": "2.x-dev" 1162 | } 1163 | }, 1164 | "autoload": { 1165 | "psr-4": { 1166 | "phpDocumentor\\Reflection\\": "src/" 1167 | } 1168 | }, 1169 | "notification-url": "https://packagist.org/downloads/", 1170 | "license": [ 1171 | "MIT" 1172 | ], 1173 | "authors": [ 1174 | { 1175 | "name": "Jaap van Otterdijk", 1176 | "email": "opensource@ijaap.nl" 1177 | } 1178 | ], 1179 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1180 | "homepage": "http://www.phpdoc.org", 1181 | "keywords": [ 1182 | "FQSEN", 1183 | "phpDocumentor", 1184 | "phpdoc", 1185 | "reflection", 1186 | "static analysis" 1187 | ], 1188 | "support": { 1189 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 1190 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 1191 | }, 1192 | "time": "2020-06-27T09:03:43+00:00" 1193 | }, 1194 | { 1195 | "name": "phpdocumentor/reflection-docblock", 1196 | "version": "5.2.2", 1197 | "source": { 1198 | "type": "git", 1199 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1200 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" 1201 | }, 1202 | "dist": { 1203 | "type": "zip", 1204 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", 1205 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", 1206 | "shasum": "" 1207 | }, 1208 | "require": { 1209 | "ext-filter": "*", 1210 | "php": "^7.2 || ^8.0", 1211 | "phpdocumentor/reflection-common": "^2.2", 1212 | "phpdocumentor/type-resolver": "^1.3", 1213 | "webmozart/assert": "^1.9.1" 1214 | }, 1215 | "require-dev": { 1216 | "mockery/mockery": "~1.3.2" 1217 | }, 1218 | "type": "library", 1219 | "extra": { 1220 | "branch-alias": { 1221 | "dev-master": "5.x-dev" 1222 | } 1223 | }, 1224 | "autoload": { 1225 | "psr-4": { 1226 | "phpDocumentor\\Reflection\\": "src" 1227 | } 1228 | }, 1229 | "notification-url": "https://packagist.org/downloads/", 1230 | "license": [ 1231 | "MIT" 1232 | ], 1233 | "authors": [ 1234 | { 1235 | "name": "Mike van Riel", 1236 | "email": "me@mikevanriel.com" 1237 | }, 1238 | { 1239 | "name": "Jaap van Otterdijk", 1240 | "email": "account@ijaap.nl" 1241 | } 1242 | ], 1243 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1244 | "support": { 1245 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 1246 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" 1247 | }, 1248 | "time": "2020-09-03T19:13:55+00:00" 1249 | }, 1250 | { 1251 | "name": "phpdocumentor/type-resolver", 1252 | "version": "1.4.0", 1253 | "source": { 1254 | "type": "git", 1255 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1256 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" 1257 | }, 1258 | "dist": { 1259 | "type": "zip", 1260 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 1261 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", 1262 | "shasum": "" 1263 | }, 1264 | "require": { 1265 | "php": "^7.2 || ^8.0", 1266 | "phpdocumentor/reflection-common": "^2.0" 1267 | }, 1268 | "require-dev": { 1269 | "ext-tokenizer": "*" 1270 | }, 1271 | "type": "library", 1272 | "extra": { 1273 | "branch-alias": { 1274 | "dev-1.x": "1.x-dev" 1275 | } 1276 | }, 1277 | "autoload": { 1278 | "psr-4": { 1279 | "phpDocumentor\\Reflection\\": "src" 1280 | } 1281 | }, 1282 | "notification-url": "https://packagist.org/downloads/", 1283 | "license": [ 1284 | "MIT" 1285 | ], 1286 | "authors": [ 1287 | { 1288 | "name": "Mike van Riel", 1289 | "email": "me@mikevanriel.com" 1290 | } 1291 | ], 1292 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 1293 | "support": { 1294 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 1295 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" 1296 | }, 1297 | "time": "2020-09-17T18:55:26+00:00" 1298 | }, 1299 | { 1300 | "name": "phpspec/prophecy", 1301 | "version": "1.13.0", 1302 | "source": { 1303 | "type": "git", 1304 | "url": "https://github.com/phpspec/prophecy.git", 1305 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" 1306 | }, 1307 | "dist": { 1308 | "type": "zip", 1309 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", 1310 | "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", 1311 | "shasum": "" 1312 | }, 1313 | "require": { 1314 | "doctrine/instantiator": "^1.2", 1315 | "php": "^7.2 || ~8.0, <8.1", 1316 | "phpdocumentor/reflection-docblock": "^5.2", 1317 | "sebastian/comparator": "^3.0 || ^4.0", 1318 | "sebastian/recursion-context": "^3.0 || ^4.0" 1319 | }, 1320 | "require-dev": { 1321 | "phpspec/phpspec": "^6.0", 1322 | "phpunit/phpunit": "^8.0 || ^9.0" 1323 | }, 1324 | "type": "library", 1325 | "extra": { 1326 | "branch-alias": { 1327 | "dev-master": "1.11.x-dev" 1328 | } 1329 | }, 1330 | "autoload": { 1331 | "psr-4": { 1332 | "Prophecy\\": "src/Prophecy" 1333 | } 1334 | }, 1335 | "notification-url": "https://packagist.org/downloads/", 1336 | "license": [ 1337 | "MIT" 1338 | ], 1339 | "authors": [ 1340 | { 1341 | "name": "Konstantin Kudryashov", 1342 | "email": "ever.zet@gmail.com", 1343 | "homepage": "http://everzet.com" 1344 | }, 1345 | { 1346 | "name": "Marcello Duarte", 1347 | "email": "marcello.duarte@gmail.com" 1348 | } 1349 | ], 1350 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1351 | "homepage": "https://github.com/phpspec/prophecy", 1352 | "keywords": [ 1353 | "Double", 1354 | "Dummy", 1355 | "fake", 1356 | "mock", 1357 | "spy", 1358 | "stub" 1359 | ], 1360 | "support": { 1361 | "issues": "https://github.com/phpspec/prophecy/issues", 1362 | "source": "https://github.com/phpspec/prophecy/tree/1.13.0" 1363 | }, 1364 | "time": "2021-03-17T13:42:18+00:00" 1365 | }, 1366 | { 1367 | "name": "phpunit/php-code-coverage", 1368 | "version": "7.0.14", 1369 | "source": { 1370 | "type": "git", 1371 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1372 | "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" 1373 | }, 1374 | "dist": { 1375 | "type": "zip", 1376 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", 1377 | "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", 1378 | "shasum": "" 1379 | }, 1380 | "require": { 1381 | "ext-dom": "*", 1382 | "ext-xmlwriter": "*", 1383 | "php": ">=7.2", 1384 | "phpunit/php-file-iterator": "^2.0.2", 1385 | "phpunit/php-text-template": "^1.2.1", 1386 | "phpunit/php-token-stream": "^3.1.1 || ^4.0", 1387 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1388 | "sebastian/environment": "^4.2.2", 1389 | "sebastian/version": "^2.0.1", 1390 | "theseer/tokenizer": "^1.1.3" 1391 | }, 1392 | "require-dev": { 1393 | "phpunit/phpunit": "^8.2.2" 1394 | }, 1395 | "suggest": { 1396 | "ext-xdebug": "^2.7.2" 1397 | }, 1398 | "type": "library", 1399 | "extra": { 1400 | "branch-alias": { 1401 | "dev-master": "7.0-dev" 1402 | } 1403 | }, 1404 | "autoload": { 1405 | "classmap": [ 1406 | "src/" 1407 | ] 1408 | }, 1409 | "notification-url": "https://packagist.org/downloads/", 1410 | "license": [ 1411 | "BSD-3-Clause" 1412 | ], 1413 | "authors": [ 1414 | { 1415 | "name": "Sebastian Bergmann", 1416 | "email": "sebastian@phpunit.de", 1417 | "role": "lead" 1418 | } 1419 | ], 1420 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1421 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1422 | "keywords": [ 1423 | "coverage", 1424 | "testing", 1425 | "xunit" 1426 | ], 1427 | "support": { 1428 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1429 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" 1430 | }, 1431 | "funding": [ 1432 | { 1433 | "url": "https://github.com/sebastianbergmann", 1434 | "type": "github" 1435 | } 1436 | ], 1437 | "time": "2020-12-02T13:39:03+00:00" 1438 | }, 1439 | { 1440 | "name": "phpunit/php-file-iterator", 1441 | "version": "2.0.3", 1442 | "source": { 1443 | "type": "git", 1444 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1445 | "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" 1446 | }, 1447 | "dist": { 1448 | "type": "zip", 1449 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", 1450 | "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", 1451 | "shasum": "" 1452 | }, 1453 | "require": { 1454 | "php": ">=7.1" 1455 | }, 1456 | "require-dev": { 1457 | "phpunit/phpunit": "^8.5" 1458 | }, 1459 | "type": "library", 1460 | "extra": { 1461 | "branch-alias": { 1462 | "dev-master": "2.0.x-dev" 1463 | } 1464 | }, 1465 | "autoload": { 1466 | "classmap": [ 1467 | "src/" 1468 | ] 1469 | }, 1470 | "notification-url": "https://packagist.org/downloads/", 1471 | "license": [ 1472 | "BSD-3-Clause" 1473 | ], 1474 | "authors": [ 1475 | { 1476 | "name": "Sebastian Bergmann", 1477 | "email": "sebastian@phpunit.de", 1478 | "role": "lead" 1479 | } 1480 | ], 1481 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1482 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1483 | "keywords": [ 1484 | "filesystem", 1485 | "iterator" 1486 | ], 1487 | "support": { 1488 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1489 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" 1490 | }, 1491 | "funding": [ 1492 | { 1493 | "url": "https://github.com/sebastianbergmann", 1494 | "type": "github" 1495 | } 1496 | ], 1497 | "time": "2020-11-30T08:25:21+00:00" 1498 | }, 1499 | { 1500 | "name": "phpunit/php-text-template", 1501 | "version": "1.2.1", 1502 | "source": { 1503 | "type": "git", 1504 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1505 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1506 | }, 1507 | "dist": { 1508 | "type": "zip", 1509 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1510 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1511 | "shasum": "" 1512 | }, 1513 | "require": { 1514 | "php": ">=5.3.3" 1515 | }, 1516 | "type": "library", 1517 | "autoload": { 1518 | "classmap": [ 1519 | "src/" 1520 | ] 1521 | }, 1522 | "notification-url": "https://packagist.org/downloads/", 1523 | "license": [ 1524 | "BSD-3-Clause" 1525 | ], 1526 | "authors": [ 1527 | { 1528 | "name": "Sebastian Bergmann", 1529 | "email": "sebastian@phpunit.de", 1530 | "role": "lead" 1531 | } 1532 | ], 1533 | "description": "Simple template engine.", 1534 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1535 | "keywords": [ 1536 | "template" 1537 | ], 1538 | "support": { 1539 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1540 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" 1541 | }, 1542 | "time": "2015-06-21T13:50:34+00:00" 1543 | }, 1544 | { 1545 | "name": "phpunit/php-timer", 1546 | "version": "2.1.3", 1547 | "source": { 1548 | "type": "git", 1549 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1550 | "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" 1551 | }, 1552 | "dist": { 1553 | "type": "zip", 1554 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", 1555 | "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", 1556 | "shasum": "" 1557 | }, 1558 | "require": { 1559 | "php": ">=7.1" 1560 | }, 1561 | "require-dev": { 1562 | "phpunit/phpunit": "^8.5" 1563 | }, 1564 | "type": "library", 1565 | "extra": { 1566 | "branch-alias": { 1567 | "dev-master": "2.1-dev" 1568 | } 1569 | }, 1570 | "autoload": { 1571 | "classmap": [ 1572 | "src/" 1573 | ] 1574 | }, 1575 | "notification-url": "https://packagist.org/downloads/", 1576 | "license": [ 1577 | "BSD-3-Clause" 1578 | ], 1579 | "authors": [ 1580 | { 1581 | "name": "Sebastian Bergmann", 1582 | "email": "sebastian@phpunit.de", 1583 | "role": "lead" 1584 | } 1585 | ], 1586 | "description": "Utility class for timing", 1587 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1588 | "keywords": [ 1589 | "timer" 1590 | ], 1591 | "support": { 1592 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1593 | "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" 1594 | }, 1595 | "funding": [ 1596 | { 1597 | "url": "https://github.com/sebastianbergmann", 1598 | "type": "github" 1599 | } 1600 | ], 1601 | "time": "2020-11-30T08:20:02+00:00" 1602 | }, 1603 | { 1604 | "name": "phpunit/php-token-stream", 1605 | "version": "4.0.4", 1606 | "source": { 1607 | "type": "git", 1608 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1609 | "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3" 1610 | }, 1611 | "dist": { 1612 | "type": "zip", 1613 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/a853a0e183b9db7eed023d7933a858fa1c8d25a3", 1614 | "reference": "a853a0e183b9db7eed023d7933a858fa1c8d25a3", 1615 | "shasum": "" 1616 | }, 1617 | "require": { 1618 | "ext-tokenizer": "*", 1619 | "php": "^7.3 || ^8.0" 1620 | }, 1621 | "require-dev": { 1622 | "phpunit/phpunit": "^9.0" 1623 | }, 1624 | "type": "library", 1625 | "extra": { 1626 | "branch-alias": { 1627 | "dev-master": "4.0-dev" 1628 | } 1629 | }, 1630 | "autoload": { 1631 | "classmap": [ 1632 | "src/" 1633 | ] 1634 | }, 1635 | "notification-url": "https://packagist.org/downloads/", 1636 | "license": [ 1637 | "BSD-3-Clause" 1638 | ], 1639 | "authors": [ 1640 | { 1641 | "name": "Sebastian Bergmann", 1642 | "email": "sebastian@phpunit.de" 1643 | } 1644 | ], 1645 | "description": "Wrapper around PHP's tokenizer extension.", 1646 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1647 | "keywords": [ 1648 | "tokenizer" 1649 | ], 1650 | "support": { 1651 | "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", 1652 | "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" 1653 | }, 1654 | "funding": [ 1655 | { 1656 | "url": "https://github.com/sebastianbergmann", 1657 | "type": "github" 1658 | } 1659 | ], 1660 | "abandoned": true, 1661 | "time": "2020-08-04T08:28:15+00:00" 1662 | }, 1663 | { 1664 | "name": "phpunit/phpunit", 1665 | "version": "8.5.2", 1666 | "source": { 1667 | "type": "git", 1668 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1669 | "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0" 1670 | }, 1671 | "dist": { 1672 | "type": "zip", 1673 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/018b6ac3c8ab20916db85fa91bf6465acb64d1e0", 1674 | "reference": "018b6ac3c8ab20916db85fa91bf6465acb64d1e0", 1675 | "shasum": "" 1676 | }, 1677 | "require": { 1678 | "doctrine/instantiator": "^1.2.0", 1679 | "ext-dom": "*", 1680 | "ext-json": "*", 1681 | "ext-libxml": "*", 1682 | "ext-mbstring": "*", 1683 | "ext-xml": "*", 1684 | "ext-xmlwriter": "*", 1685 | "myclabs/deep-copy": "^1.9.1", 1686 | "phar-io/manifest": "^1.0.3", 1687 | "phar-io/version": "^2.0.1", 1688 | "php": "^7.2", 1689 | "phpspec/prophecy": "^1.8.1", 1690 | "phpunit/php-code-coverage": "^7.0.7", 1691 | "phpunit/php-file-iterator": "^2.0.2", 1692 | "phpunit/php-text-template": "^1.2.1", 1693 | "phpunit/php-timer": "^2.1.2", 1694 | "sebastian/comparator": "^3.0.2", 1695 | "sebastian/diff": "^3.0.2", 1696 | "sebastian/environment": "^4.2.2", 1697 | "sebastian/exporter": "^3.1.1", 1698 | "sebastian/global-state": "^3.0.0", 1699 | "sebastian/object-enumerator": "^3.0.3", 1700 | "sebastian/resource-operations": "^2.0.1", 1701 | "sebastian/type": "^1.1.3", 1702 | "sebastian/version": "^2.0.1" 1703 | }, 1704 | "require-dev": { 1705 | "ext-pdo": "*" 1706 | }, 1707 | "suggest": { 1708 | "ext-soap": "*", 1709 | "ext-xdebug": "*", 1710 | "phpunit/php-invoker": "^2.0.0" 1711 | }, 1712 | "bin": [ 1713 | "phpunit" 1714 | ], 1715 | "type": "library", 1716 | "extra": { 1717 | "branch-alias": { 1718 | "dev-master": "8.5-dev" 1719 | } 1720 | }, 1721 | "autoload": { 1722 | "classmap": [ 1723 | "src/" 1724 | ] 1725 | }, 1726 | "notification-url": "https://packagist.org/downloads/", 1727 | "license": [ 1728 | "BSD-3-Clause" 1729 | ], 1730 | "authors": [ 1731 | { 1732 | "name": "Sebastian Bergmann", 1733 | "email": "sebastian@phpunit.de", 1734 | "role": "lead" 1735 | } 1736 | ], 1737 | "description": "The PHP Unit Testing framework.", 1738 | "homepage": "https://phpunit.de/", 1739 | "keywords": [ 1740 | "phpunit", 1741 | "testing", 1742 | "xunit" 1743 | ], 1744 | "support": { 1745 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1746 | "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.2" 1747 | }, 1748 | "time": "2020-01-08T08:49:49+00:00" 1749 | }, 1750 | { 1751 | "name": "psr/container", 1752 | "version": "1.1.1", 1753 | "source": { 1754 | "type": "git", 1755 | "url": "https://github.com/php-fig/container.git", 1756 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" 1757 | }, 1758 | "dist": { 1759 | "type": "zip", 1760 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", 1761 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", 1762 | "shasum": "" 1763 | }, 1764 | "require": { 1765 | "php": ">=7.2.0" 1766 | }, 1767 | "type": "library", 1768 | "autoload": { 1769 | "psr-4": { 1770 | "Psr\\Container\\": "src/" 1771 | } 1772 | }, 1773 | "notification-url": "https://packagist.org/downloads/", 1774 | "license": [ 1775 | "MIT" 1776 | ], 1777 | "authors": [ 1778 | { 1779 | "name": "PHP-FIG", 1780 | "homepage": "https://www.php-fig.org/" 1781 | } 1782 | ], 1783 | "description": "Common Container Interface (PHP FIG PSR-11)", 1784 | "homepage": "https://github.com/php-fig/container", 1785 | "keywords": [ 1786 | "PSR-11", 1787 | "container", 1788 | "container-interface", 1789 | "container-interop", 1790 | "psr" 1791 | ], 1792 | "support": { 1793 | "issues": "https://github.com/php-fig/container/issues", 1794 | "source": "https://github.com/php-fig/container/tree/1.1.1" 1795 | }, 1796 | "time": "2021-03-05T17:36:06+00:00" 1797 | }, 1798 | { 1799 | "name": "psr/http-message", 1800 | "version": "1.0.1", 1801 | "source": { 1802 | "type": "git", 1803 | "url": "https://github.com/php-fig/http-message.git", 1804 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 1805 | }, 1806 | "dist": { 1807 | "type": "zip", 1808 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 1809 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 1810 | "shasum": "" 1811 | }, 1812 | "require": { 1813 | "php": ">=5.3.0" 1814 | }, 1815 | "type": "library", 1816 | "extra": { 1817 | "branch-alias": { 1818 | "dev-master": "1.0.x-dev" 1819 | } 1820 | }, 1821 | "autoload": { 1822 | "psr-4": { 1823 | "Psr\\Http\\Message\\": "src/" 1824 | } 1825 | }, 1826 | "notification-url": "https://packagist.org/downloads/", 1827 | "license": [ 1828 | "MIT" 1829 | ], 1830 | "authors": [ 1831 | { 1832 | "name": "PHP-FIG", 1833 | "homepage": "http://www.php-fig.org/" 1834 | } 1835 | ], 1836 | "description": "Common interface for HTTP messages", 1837 | "homepage": "https://github.com/php-fig/http-message", 1838 | "keywords": [ 1839 | "http", 1840 | "http-message", 1841 | "psr", 1842 | "psr-7", 1843 | "request", 1844 | "response" 1845 | ], 1846 | "support": { 1847 | "source": "https://github.com/php-fig/http-message/tree/master" 1848 | }, 1849 | "time": "2016-08-06T14:39:51+00:00" 1850 | }, 1851 | { 1852 | "name": "psr/log", 1853 | "version": "1.1.4", 1854 | "source": { 1855 | "type": "git", 1856 | "url": "https://github.com/php-fig/log.git", 1857 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11" 1858 | }, 1859 | "dist": { 1860 | "type": "zip", 1861 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", 1862 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11", 1863 | "shasum": "" 1864 | }, 1865 | "require": { 1866 | "php": ">=5.3.0" 1867 | }, 1868 | "type": "library", 1869 | "extra": { 1870 | "branch-alias": { 1871 | "dev-master": "1.1.x-dev" 1872 | } 1873 | }, 1874 | "autoload": { 1875 | "psr-4": { 1876 | "Psr\\Log\\": "Psr/Log/" 1877 | } 1878 | }, 1879 | "notification-url": "https://packagist.org/downloads/", 1880 | "license": [ 1881 | "MIT" 1882 | ], 1883 | "authors": [ 1884 | { 1885 | "name": "PHP-FIG", 1886 | "homepage": "https://www.php-fig.org/" 1887 | } 1888 | ], 1889 | "description": "Common interface for logging libraries", 1890 | "homepage": "https://github.com/php-fig/log", 1891 | "keywords": [ 1892 | "log", 1893 | "psr", 1894 | "psr-3" 1895 | ], 1896 | "support": { 1897 | "source": "https://github.com/php-fig/log/tree/1.1.4" 1898 | }, 1899 | "time": "2021-05-03T11:20:27+00:00" 1900 | }, 1901 | { 1902 | "name": "ralouphie/getallheaders", 1903 | "version": "3.0.3", 1904 | "source": { 1905 | "type": "git", 1906 | "url": "https://github.com/ralouphie/getallheaders.git", 1907 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1908 | }, 1909 | "dist": { 1910 | "type": "zip", 1911 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1912 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1913 | "shasum": "" 1914 | }, 1915 | "require": { 1916 | "php": ">=5.6" 1917 | }, 1918 | "require-dev": { 1919 | "php-coveralls/php-coveralls": "^2.1", 1920 | "phpunit/phpunit": "^5 || ^6.5" 1921 | }, 1922 | "type": "library", 1923 | "autoload": { 1924 | "files": [ 1925 | "src/getallheaders.php" 1926 | ] 1927 | }, 1928 | "notification-url": "https://packagist.org/downloads/", 1929 | "license": [ 1930 | "MIT" 1931 | ], 1932 | "authors": [ 1933 | { 1934 | "name": "Ralph Khattar", 1935 | "email": "ralph.khattar@gmail.com" 1936 | } 1937 | ], 1938 | "description": "A polyfill for getallheaders.", 1939 | "support": { 1940 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1941 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1942 | }, 1943 | "time": "2019-03-08T08:55:37+00:00" 1944 | }, 1945 | { 1946 | "name": "sebastian/code-unit-reverse-lookup", 1947 | "version": "1.0.2", 1948 | "source": { 1949 | "type": "git", 1950 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1951 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" 1952 | }, 1953 | "dist": { 1954 | "type": "zip", 1955 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", 1956 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", 1957 | "shasum": "" 1958 | }, 1959 | "require": { 1960 | "php": ">=5.6" 1961 | }, 1962 | "require-dev": { 1963 | "phpunit/phpunit": "^8.5" 1964 | }, 1965 | "type": "library", 1966 | "extra": { 1967 | "branch-alias": { 1968 | "dev-master": "1.0.x-dev" 1969 | } 1970 | }, 1971 | "autoload": { 1972 | "classmap": [ 1973 | "src/" 1974 | ] 1975 | }, 1976 | "notification-url": "https://packagist.org/downloads/", 1977 | "license": [ 1978 | "BSD-3-Clause" 1979 | ], 1980 | "authors": [ 1981 | { 1982 | "name": "Sebastian Bergmann", 1983 | "email": "sebastian@phpunit.de" 1984 | } 1985 | ], 1986 | "description": "Looks up which function or method a line of code belongs to", 1987 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1988 | "support": { 1989 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1990 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" 1991 | }, 1992 | "funding": [ 1993 | { 1994 | "url": "https://github.com/sebastianbergmann", 1995 | "type": "github" 1996 | } 1997 | ], 1998 | "time": "2020-11-30T08:15:22+00:00" 1999 | }, 2000 | { 2001 | "name": "sebastian/comparator", 2002 | "version": "3.0.3", 2003 | "source": { 2004 | "type": "git", 2005 | "url": "https://github.com/sebastianbergmann/comparator.git", 2006 | "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" 2007 | }, 2008 | "dist": { 2009 | "type": "zip", 2010 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", 2011 | "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", 2012 | "shasum": "" 2013 | }, 2014 | "require": { 2015 | "php": ">=7.1", 2016 | "sebastian/diff": "^3.0", 2017 | "sebastian/exporter": "^3.1" 2018 | }, 2019 | "require-dev": { 2020 | "phpunit/phpunit": "^8.5" 2021 | }, 2022 | "type": "library", 2023 | "extra": { 2024 | "branch-alias": { 2025 | "dev-master": "3.0-dev" 2026 | } 2027 | }, 2028 | "autoload": { 2029 | "classmap": [ 2030 | "src/" 2031 | ] 2032 | }, 2033 | "notification-url": "https://packagist.org/downloads/", 2034 | "license": [ 2035 | "BSD-3-Clause" 2036 | ], 2037 | "authors": [ 2038 | { 2039 | "name": "Sebastian Bergmann", 2040 | "email": "sebastian@phpunit.de" 2041 | }, 2042 | { 2043 | "name": "Jeff Welch", 2044 | "email": "whatthejeff@gmail.com" 2045 | }, 2046 | { 2047 | "name": "Volker Dusch", 2048 | "email": "github@wallbash.com" 2049 | }, 2050 | { 2051 | "name": "Bernhard Schussek", 2052 | "email": "bschussek@2bepublished.at" 2053 | } 2054 | ], 2055 | "description": "Provides the functionality to compare PHP values for equality", 2056 | "homepage": "https://github.com/sebastianbergmann/comparator", 2057 | "keywords": [ 2058 | "comparator", 2059 | "compare", 2060 | "equality" 2061 | ], 2062 | "support": { 2063 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 2064 | "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" 2065 | }, 2066 | "funding": [ 2067 | { 2068 | "url": "https://github.com/sebastianbergmann", 2069 | "type": "github" 2070 | } 2071 | ], 2072 | "time": "2020-11-30T08:04:30+00:00" 2073 | }, 2074 | { 2075 | "name": "sebastian/diff", 2076 | "version": "3.0.3", 2077 | "source": { 2078 | "type": "git", 2079 | "url": "https://github.com/sebastianbergmann/diff.git", 2080 | "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" 2081 | }, 2082 | "dist": { 2083 | "type": "zip", 2084 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", 2085 | "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", 2086 | "shasum": "" 2087 | }, 2088 | "require": { 2089 | "php": ">=7.1" 2090 | }, 2091 | "require-dev": { 2092 | "phpunit/phpunit": "^7.5 || ^8.0", 2093 | "symfony/process": "^2 || ^3.3 || ^4" 2094 | }, 2095 | "type": "library", 2096 | "extra": { 2097 | "branch-alias": { 2098 | "dev-master": "3.0-dev" 2099 | } 2100 | }, 2101 | "autoload": { 2102 | "classmap": [ 2103 | "src/" 2104 | ] 2105 | }, 2106 | "notification-url": "https://packagist.org/downloads/", 2107 | "license": [ 2108 | "BSD-3-Clause" 2109 | ], 2110 | "authors": [ 2111 | { 2112 | "name": "Sebastian Bergmann", 2113 | "email": "sebastian@phpunit.de" 2114 | }, 2115 | { 2116 | "name": "Kore Nordmann", 2117 | "email": "mail@kore-nordmann.de" 2118 | } 2119 | ], 2120 | "description": "Diff implementation", 2121 | "homepage": "https://github.com/sebastianbergmann/diff", 2122 | "keywords": [ 2123 | "diff", 2124 | "udiff", 2125 | "unidiff", 2126 | "unified diff" 2127 | ], 2128 | "support": { 2129 | "issues": "https://github.com/sebastianbergmann/diff/issues", 2130 | "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" 2131 | }, 2132 | "funding": [ 2133 | { 2134 | "url": "https://github.com/sebastianbergmann", 2135 | "type": "github" 2136 | } 2137 | ], 2138 | "time": "2020-11-30T07:59:04+00:00" 2139 | }, 2140 | { 2141 | "name": "sebastian/environment", 2142 | "version": "4.2.4", 2143 | "source": { 2144 | "type": "git", 2145 | "url": "https://github.com/sebastianbergmann/environment.git", 2146 | "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" 2147 | }, 2148 | "dist": { 2149 | "type": "zip", 2150 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", 2151 | "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", 2152 | "shasum": "" 2153 | }, 2154 | "require": { 2155 | "php": ">=7.1" 2156 | }, 2157 | "require-dev": { 2158 | "phpunit/phpunit": "^7.5" 2159 | }, 2160 | "suggest": { 2161 | "ext-posix": "*" 2162 | }, 2163 | "type": "library", 2164 | "extra": { 2165 | "branch-alias": { 2166 | "dev-master": "4.2-dev" 2167 | } 2168 | }, 2169 | "autoload": { 2170 | "classmap": [ 2171 | "src/" 2172 | ] 2173 | }, 2174 | "notification-url": "https://packagist.org/downloads/", 2175 | "license": [ 2176 | "BSD-3-Clause" 2177 | ], 2178 | "authors": [ 2179 | { 2180 | "name": "Sebastian Bergmann", 2181 | "email": "sebastian@phpunit.de" 2182 | } 2183 | ], 2184 | "description": "Provides functionality to handle HHVM/PHP environments", 2185 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2186 | "keywords": [ 2187 | "Xdebug", 2188 | "environment", 2189 | "hhvm" 2190 | ], 2191 | "support": { 2192 | "issues": "https://github.com/sebastianbergmann/environment/issues", 2193 | "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" 2194 | }, 2195 | "funding": [ 2196 | { 2197 | "url": "https://github.com/sebastianbergmann", 2198 | "type": "github" 2199 | } 2200 | ], 2201 | "time": "2020-11-30T07:53:42+00:00" 2202 | }, 2203 | { 2204 | "name": "sebastian/exporter", 2205 | "version": "3.1.3", 2206 | "source": { 2207 | "type": "git", 2208 | "url": "https://github.com/sebastianbergmann/exporter.git", 2209 | "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" 2210 | }, 2211 | "dist": { 2212 | "type": "zip", 2213 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", 2214 | "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", 2215 | "shasum": "" 2216 | }, 2217 | "require": { 2218 | "php": ">=7.0", 2219 | "sebastian/recursion-context": "^3.0" 2220 | }, 2221 | "require-dev": { 2222 | "ext-mbstring": "*", 2223 | "phpunit/phpunit": "^6.0" 2224 | }, 2225 | "type": "library", 2226 | "extra": { 2227 | "branch-alias": { 2228 | "dev-master": "3.1.x-dev" 2229 | } 2230 | }, 2231 | "autoload": { 2232 | "classmap": [ 2233 | "src/" 2234 | ] 2235 | }, 2236 | "notification-url": "https://packagist.org/downloads/", 2237 | "license": [ 2238 | "BSD-3-Clause" 2239 | ], 2240 | "authors": [ 2241 | { 2242 | "name": "Sebastian Bergmann", 2243 | "email": "sebastian@phpunit.de" 2244 | }, 2245 | { 2246 | "name": "Jeff Welch", 2247 | "email": "whatthejeff@gmail.com" 2248 | }, 2249 | { 2250 | "name": "Volker Dusch", 2251 | "email": "github@wallbash.com" 2252 | }, 2253 | { 2254 | "name": "Adam Harvey", 2255 | "email": "aharvey@php.net" 2256 | }, 2257 | { 2258 | "name": "Bernhard Schussek", 2259 | "email": "bschussek@gmail.com" 2260 | } 2261 | ], 2262 | "description": "Provides the functionality to export PHP variables for visualization", 2263 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2264 | "keywords": [ 2265 | "export", 2266 | "exporter" 2267 | ], 2268 | "support": { 2269 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 2270 | "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" 2271 | }, 2272 | "funding": [ 2273 | { 2274 | "url": "https://github.com/sebastianbergmann", 2275 | "type": "github" 2276 | } 2277 | ], 2278 | "time": "2020-11-30T07:47:53+00:00" 2279 | }, 2280 | { 2281 | "name": "sebastian/global-state", 2282 | "version": "3.0.1", 2283 | "source": { 2284 | "type": "git", 2285 | "url": "https://github.com/sebastianbergmann/global-state.git", 2286 | "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" 2287 | }, 2288 | "dist": { 2289 | "type": "zip", 2290 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", 2291 | "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", 2292 | "shasum": "" 2293 | }, 2294 | "require": { 2295 | "php": ">=7.2", 2296 | "sebastian/object-reflector": "^1.1.1", 2297 | "sebastian/recursion-context": "^3.0" 2298 | }, 2299 | "require-dev": { 2300 | "ext-dom": "*", 2301 | "phpunit/phpunit": "^8.0" 2302 | }, 2303 | "suggest": { 2304 | "ext-uopz": "*" 2305 | }, 2306 | "type": "library", 2307 | "extra": { 2308 | "branch-alias": { 2309 | "dev-master": "3.0-dev" 2310 | } 2311 | }, 2312 | "autoload": { 2313 | "classmap": [ 2314 | "src/" 2315 | ] 2316 | }, 2317 | "notification-url": "https://packagist.org/downloads/", 2318 | "license": [ 2319 | "BSD-3-Clause" 2320 | ], 2321 | "authors": [ 2322 | { 2323 | "name": "Sebastian Bergmann", 2324 | "email": "sebastian@phpunit.de" 2325 | } 2326 | ], 2327 | "description": "Snapshotting of global state", 2328 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2329 | "keywords": [ 2330 | "global state" 2331 | ], 2332 | "support": { 2333 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 2334 | "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" 2335 | }, 2336 | "funding": [ 2337 | { 2338 | "url": "https://github.com/sebastianbergmann", 2339 | "type": "github" 2340 | } 2341 | ], 2342 | "time": "2020-11-30T07:43:24+00:00" 2343 | }, 2344 | { 2345 | "name": "sebastian/object-enumerator", 2346 | "version": "3.0.4", 2347 | "source": { 2348 | "type": "git", 2349 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2350 | "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" 2351 | }, 2352 | "dist": { 2353 | "type": "zip", 2354 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", 2355 | "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", 2356 | "shasum": "" 2357 | }, 2358 | "require": { 2359 | "php": ">=7.0", 2360 | "sebastian/object-reflector": "^1.1.1", 2361 | "sebastian/recursion-context": "^3.0" 2362 | }, 2363 | "require-dev": { 2364 | "phpunit/phpunit": "^6.0" 2365 | }, 2366 | "type": "library", 2367 | "extra": { 2368 | "branch-alias": { 2369 | "dev-master": "3.0.x-dev" 2370 | } 2371 | }, 2372 | "autoload": { 2373 | "classmap": [ 2374 | "src/" 2375 | ] 2376 | }, 2377 | "notification-url": "https://packagist.org/downloads/", 2378 | "license": [ 2379 | "BSD-3-Clause" 2380 | ], 2381 | "authors": [ 2382 | { 2383 | "name": "Sebastian Bergmann", 2384 | "email": "sebastian@phpunit.de" 2385 | } 2386 | ], 2387 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2388 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2389 | "support": { 2390 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2391 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" 2392 | }, 2393 | "funding": [ 2394 | { 2395 | "url": "https://github.com/sebastianbergmann", 2396 | "type": "github" 2397 | } 2398 | ], 2399 | "time": "2020-11-30T07:40:27+00:00" 2400 | }, 2401 | { 2402 | "name": "sebastian/object-reflector", 2403 | "version": "1.1.2", 2404 | "source": { 2405 | "type": "git", 2406 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2407 | "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" 2408 | }, 2409 | "dist": { 2410 | "type": "zip", 2411 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", 2412 | "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", 2413 | "shasum": "" 2414 | }, 2415 | "require": { 2416 | "php": ">=7.0" 2417 | }, 2418 | "require-dev": { 2419 | "phpunit/phpunit": "^6.0" 2420 | }, 2421 | "type": "library", 2422 | "extra": { 2423 | "branch-alias": { 2424 | "dev-master": "1.1-dev" 2425 | } 2426 | }, 2427 | "autoload": { 2428 | "classmap": [ 2429 | "src/" 2430 | ] 2431 | }, 2432 | "notification-url": "https://packagist.org/downloads/", 2433 | "license": [ 2434 | "BSD-3-Clause" 2435 | ], 2436 | "authors": [ 2437 | { 2438 | "name": "Sebastian Bergmann", 2439 | "email": "sebastian@phpunit.de" 2440 | } 2441 | ], 2442 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2443 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2444 | "support": { 2445 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2446 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" 2447 | }, 2448 | "funding": [ 2449 | { 2450 | "url": "https://github.com/sebastianbergmann", 2451 | "type": "github" 2452 | } 2453 | ], 2454 | "time": "2020-11-30T07:37:18+00:00" 2455 | }, 2456 | { 2457 | "name": "sebastian/recursion-context", 2458 | "version": "3.0.1", 2459 | "source": { 2460 | "type": "git", 2461 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2462 | "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" 2463 | }, 2464 | "dist": { 2465 | "type": "zip", 2466 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", 2467 | "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", 2468 | "shasum": "" 2469 | }, 2470 | "require": { 2471 | "php": ">=7.0" 2472 | }, 2473 | "require-dev": { 2474 | "phpunit/phpunit": "^6.0" 2475 | }, 2476 | "type": "library", 2477 | "extra": { 2478 | "branch-alias": { 2479 | "dev-master": "3.0.x-dev" 2480 | } 2481 | }, 2482 | "autoload": { 2483 | "classmap": [ 2484 | "src/" 2485 | ] 2486 | }, 2487 | "notification-url": "https://packagist.org/downloads/", 2488 | "license": [ 2489 | "BSD-3-Clause" 2490 | ], 2491 | "authors": [ 2492 | { 2493 | "name": "Sebastian Bergmann", 2494 | "email": "sebastian@phpunit.de" 2495 | }, 2496 | { 2497 | "name": "Jeff Welch", 2498 | "email": "whatthejeff@gmail.com" 2499 | }, 2500 | { 2501 | "name": "Adam Harvey", 2502 | "email": "aharvey@php.net" 2503 | } 2504 | ], 2505 | "description": "Provides functionality to recursively process PHP variables", 2506 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2507 | "support": { 2508 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2509 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" 2510 | }, 2511 | "funding": [ 2512 | { 2513 | "url": "https://github.com/sebastianbergmann", 2514 | "type": "github" 2515 | } 2516 | ], 2517 | "time": "2020-11-30T07:34:24+00:00" 2518 | }, 2519 | { 2520 | "name": "sebastian/resource-operations", 2521 | "version": "2.0.2", 2522 | "source": { 2523 | "type": "git", 2524 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2525 | "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" 2526 | }, 2527 | "dist": { 2528 | "type": "zip", 2529 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", 2530 | "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", 2531 | "shasum": "" 2532 | }, 2533 | "require": { 2534 | "php": ">=7.1" 2535 | }, 2536 | "type": "library", 2537 | "extra": { 2538 | "branch-alias": { 2539 | "dev-master": "2.0-dev" 2540 | } 2541 | }, 2542 | "autoload": { 2543 | "classmap": [ 2544 | "src/" 2545 | ] 2546 | }, 2547 | "notification-url": "https://packagist.org/downloads/", 2548 | "license": [ 2549 | "BSD-3-Clause" 2550 | ], 2551 | "authors": [ 2552 | { 2553 | "name": "Sebastian Bergmann", 2554 | "email": "sebastian@phpunit.de" 2555 | } 2556 | ], 2557 | "description": "Provides a list of PHP built-in functions that operate on resources", 2558 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2559 | "support": { 2560 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2561 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" 2562 | }, 2563 | "funding": [ 2564 | { 2565 | "url": "https://github.com/sebastianbergmann", 2566 | "type": "github" 2567 | } 2568 | ], 2569 | "time": "2020-11-30T07:30:19+00:00" 2570 | }, 2571 | { 2572 | "name": "sebastian/type", 2573 | "version": "1.1.4", 2574 | "source": { 2575 | "type": "git", 2576 | "url": "https://github.com/sebastianbergmann/type.git", 2577 | "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" 2578 | }, 2579 | "dist": { 2580 | "type": "zip", 2581 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", 2582 | "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", 2583 | "shasum": "" 2584 | }, 2585 | "require": { 2586 | "php": ">=7.2" 2587 | }, 2588 | "require-dev": { 2589 | "phpunit/phpunit": "^8.2" 2590 | }, 2591 | "type": "library", 2592 | "extra": { 2593 | "branch-alias": { 2594 | "dev-master": "1.1-dev" 2595 | } 2596 | }, 2597 | "autoload": { 2598 | "classmap": [ 2599 | "src/" 2600 | ] 2601 | }, 2602 | "notification-url": "https://packagist.org/downloads/", 2603 | "license": [ 2604 | "BSD-3-Clause" 2605 | ], 2606 | "authors": [ 2607 | { 2608 | "name": "Sebastian Bergmann", 2609 | "email": "sebastian@phpunit.de", 2610 | "role": "lead" 2611 | } 2612 | ], 2613 | "description": "Collection of value objects that represent the types of the PHP type system", 2614 | "homepage": "https://github.com/sebastianbergmann/type", 2615 | "support": { 2616 | "issues": "https://github.com/sebastianbergmann/type/issues", 2617 | "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" 2618 | }, 2619 | "funding": [ 2620 | { 2621 | "url": "https://github.com/sebastianbergmann", 2622 | "type": "github" 2623 | } 2624 | ], 2625 | "time": "2020-11-30T07:25:11+00:00" 2626 | }, 2627 | { 2628 | "name": "sebastian/version", 2629 | "version": "2.0.1", 2630 | "source": { 2631 | "type": "git", 2632 | "url": "https://github.com/sebastianbergmann/version.git", 2633 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2634 | }, 2635 | "dist": { 2636 | "type": "zip", 2637 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2638 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2639 | "shasum": "" 2640 | }, 2641 | "require": { 2642 | "php": ">=5.6" 2643 | }, 2644 | "type": "library", 2645 | "extra": { 2646 | "branch-alias": { 2647 | "dev-master": "2.0.x-dev" 2648 | } 2649 | }, 2650 | "autoload": { 2651 | "classmap": [ 2652 | "src/" 2653 | ] 2654 | }, 2655 | "notification-url": "https://packagist.org/downloads/", 2656 | "license": [ 2657 | "BSD-3-Clause" 2658 | ], 2659 | "authors": [ 2660 | { 2661 | "name": "Sebastian Bergmann", 2662 | "email": "sebastian@phpunit.de", 2663 | "role": "lead" 2664 | } 2665 | ], 2666 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2667 | "homepage": "https://github.com/sebastianbergmann/version", 2668 | "support": { 2669 | "issues": "https://github.com/sebastianbergmann/version/issues", 2670 | "source": "https://github.com/sebastianbergmann/version/tree/master" 2671 | }, 2672 | "time": "2016-10-03T07:35:21+00:00" 2673 | }, 2674 | { 2675 | "name": "squizlabs/php_codesniffer", 2676 | "version": "3.6.0", 2677 | "source": { 2678 | "type": "git", 2679 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 2680 | "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" 2681 | }, 2682 | "dist": { 2683 | "type": "zip", 2684 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", 2685 | "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", 2686 | "shasum": "" 2687 | }, 2688 | "require": { 2689 | "ext-simplexml": "*", 2690 | "ext-tokenizer": "*", 2691 | "ext-xmlwriter": "*", 2692 | "php": ">=5.4.0" 2693 | }, 2694 | "require-dev": { 2695 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 2696 | }, 2697 | "bin": [ 2698 | "bin/phpcs", 2699 | "bin/phpcbf" 2700 | ], 2701 | "type": "library", 2702 | "extra": { 2703 | "branch-alias": { 2704 | "dev-master": "3.x-dev" 2705 | } 2706 | }, 2707 | "notification-url": "https://packagist.org/downloads/", 2708 | "license": [ 2709 | "BSD-3-Clause" 2710 | ], 2711 | "authors": [ 2712 | { 2713 | "name": "Greg Sherwood", 2714 | "role": "lead" 2715 | } 2716 | ], 2717 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 2718 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 2719 | "keywords": [ 2720 | "phpcs", 2721 | "standards" 2722 | ], 2723 | "support": { 2724 | "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", 2725 | "source": "https://github.com/squizlabs/PHP_CodeSniffer", 2726 | "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" 2727 | }, 2728 | "time": "2021-04-09T00:54:41+00:00" 2729 | }, 2730 | { 2731 | "name": "symfony/config", 2732 | "version": "v5.2.7", 2733 | "source": { 2734 | "type": "git", 2735 | "url": "https://github.com/symfony/config.git", 2736 | "reference": "3817662ada105c8c4d1afdb4ec003003efd1d8d8" 2737 | }, 2738 | "dist": { 2739 | "type": "zip", 2740 | "url": "https://api.github.com/repos/symfony/config/zipball/3817662ada105c8c4d1afdb4ec003003efd1d8d8", 2741 | "reference": "3817662ada105c8c4d1afdb4ec003003efd1d8d8", 2742 | "shasum": "" 2743 | }, 2744 | "require": { 2745 | "php": ">=7.2.5", 2746 | "symfony/deprecation-contracts": "^2.1", 2747 | "symfony/filesystem": "^4.4|^5.0", 2748 | "symfony/polyfill-ctype": "~1.8", 2749 | "symfony/polyfill-php80": "^1.15" 2750 | }, 2751 | "conflict": { 2752 | "symfony/finder": "<4.4" 2753 | }, 2754 | "require-dev": { 2755 | "symfony/event-dispatcher": "^4.4|^5.0", 2756 | "symfony/finder": "^4.4|^5.0", 2757 | "symfony/messenger": "^4.4|^5.0", 2758 | "symfony/service-contracts": "^1.1|^2", 2759 | "symfony/yaml": "^4.4|^5.0" 2760 | }, 2761 | "suggest": { 2762 | "symfony/yaml": "To use the yaml reference dumper" 2763 | }, 2764 | "type": "library", 2765 | "autoload": { 2766 | "psr-4": { 2767 | "Symfony\\Component\\Config\\": "" 2768 | }, 2769 | "exclude-from-classmap": [ 2770 | "/Tests/" 2771 | ] 2772 | }, 2773 | "notification-url": "https://packagist.org/downloads/", 2774 | "license": [ 2775 | "MIT" 2776 | ], 2777 | "authors": [ 2778 | { 2779 | "name": "Fabien Potencier", 2780 | "email": "fabien@symfony.com" 2781 | }, 2782 | { 2783 | "name": "Symfony Community", 2784 | "homepage": "https://symfony.com/contributors" 2785 | } 2786 | ], 2787 | "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", 2788 | "homepage": "https://symfony.com", 2789 | "support": { 2790 | "source": "https://github.com/symfony/config/tree/v5.2.7" 2791 | }, 2792 | "funding": [ 2793 | { 2794 | "url": "https://symfony.com/sponsor", 2795 | "type": "custom" 2796 | }, 2797 | { 2798 | "url": "https://github.com/fabpot", 2799 | "type": "github" 2800 | }, 2801 | { 2802 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2803 | "type": "tidelift" 2804 | } 2805 | ], 2806 | "time": "2021-04-07T16:07:52+00:00" 2807 | }, 2808 | { 2809 | "name": "symfony/console", 2810 | "version": "v5.2.7", 2811 | "source": { 2812 | "type": "git", 2813 | "url": "https://github.com/symfony/console.git", 2814 | "reference": "90374b8ed059325b49a29b55b3f8bb4062c87629" 2815 | }, 2816 | "dist": { 2817 | "type": "zip", 2818 | "url": "https://api.github.com/repos/symfony/console/zipball/90374b8ed059325b49a29b55b3f8bb4062c87629", 2819 | "reference": "90374b8ed059325b49a29b55b3f8bb4062c87629", 2820 | "shasum": "" 2821 | }, 2822 | "require": { 2823 | "php": ">=7.2.5", 2824 | "symfony/polyfill-mbstring": "~1.0", 2825 | "symfony/polyfill-php73": "^1.8", 2826 | "symfony/polyfill-php80": "^1.15", 2827 | "symfony/service-contracts": "^1.1|^2", 2828 | "symfony/string": "^5.1" 2829 | }, 2830 | "conflict": { 2831 | "symfony/dependency-injection": "<4.4", 2832 | "symfony/dotenv": "<5.1", 2833 | "symfony/event-dispatcher": "<4.4", 2834 | "symfony/lock": "<4.4", 2835 | "symfony/process": "<4.4" 2836 | }, 2837 | "provide": { 2838 | "psr/log-implementation": "1.0" 2839 | }, 2840 | "require-dev": { 2841 | "psr/log": "~1.0", 2842 | "symfony/config": "^4.4|^5.0", 2843 | "symfony/dependency-injection": "^4.4|^5.0", 2844 | "symfony/event-dispatcher": "^4.4|^5.0", 2845 | "symfony/lock": "^4.4|^5.0", 2846 | "symfony/process": "^4.4|^5.0", 2847 | "symfony/var-dumper": "^4.4|^5.0" 2848 | }, 2849 | "suggest": { 2850 | "psr/log": "For using the console logger", 2851 | "symfony/event-dispatcher": "", 2852 | "symfony/lock": "", 2853 | "symfony/process": "" 2854 | }, 2855 | "type": "library", 2856 | "autoload": { 2857 | "psr-4": { 2858 | "Symfony\\Component\\Console\\": "" 2859 | }, 2860 | "exclude-from-classmap": [ 2861 | "/Tests/" 2862 | ] 2863 | }, 2864 | "notification-url": "https://packagist.org/downloads/", 2865 | "license": [ 2866 | "MIT" 2867 | ], 2868 | "authors": [ 2869 | { 2870 | "name": "Fabien Potencier", 2871 | "email": "fabien@symfony.com" 2872 | }, 2873 | { 2874 | "name": "Symfony Community", 2875 | "homepage": "https://symfony.com/contributors" 2876 | } 2877 | ], 2878 | "description": "Eases the creation of beautiful and testable command line interfaces", 2879 | "homepage": "https://symfony.com", 2880 | "keywords": [ 2881 | "cli", 2882 | "command line", 2883 | "console", 2884 | "terminal" 2885 | ], 2886 | "support": { 2887 | "source": "https://github.com/symfony/console/tree/v5.2.7" 2888 | }, 2889 | "funding": [ 2890 | { 2891 | "url": "https://symfony.com/sponsor", 2892 | "type": "custom" 2893 | }, 2894 | { 2895 | "url": "https://github.com/fabpot", 2896 | "type": "github" 2897 | }, 2898 | { 2899 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2900 | "type": "tidelift" 2901 | } 2902 | ], 2903 | "time": "2021-04-19T14:07:32+00:00" 2904 | }, 2905 | { 2906 | "name": "symfony/deprecation-contracts", 2907 | "version": "v2.4.0", 2908 | "source": { 2909 | "type": "git", 2910 | "url": "https://github.com/symfony/deprecation-contracts.git", 2911 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" 2912 | }, 2913 | "dist": { 2914 | "type": "zip", 2915 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", 2916 | "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", 2917 | "shasum": "" 2918 | }, 2919 | "require": { 2920 | "php": ">=7.1" 2921 | }, 2922 | "type": "library", 2923 | "extra": { 2924 | "branch-alias": { 2925 | "dev-main": "2.4-dev" 2926 | }, 2927 | "thanks": { 2928 | "name": "symfony/contracts", 2929 | "url": "https://github.com/symfony/contracts" 2930 | } 2931 | }, 2932 | "autoload": { 2933 | "files": [ 2934 | "function.php" 2935 | ] 2936 | }, 2937 | "notification-url": "https://packagist.org/downloads/", 2938 | "license": [ 2939 | "MIT" 2940 | ], 2941 | "authors": [ 2942 | { 2943 | "name": "Nicolas Grekas", 2944 | "email": "p@tchwork.com" 2945 | }, 2946 | { 2947 | "name": "Symfony Community", 2948 | "homepage": "https://symfony.com/contributors" 2949 | } 2950 | ], 2951 | "description": "A generic function and convention to trigger deprecation notices", 2952 | "homepage": "https://symfony.com", 2953 | "support": { 2954 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" 2955 | }, 2956 | "funding": [ 2957 | { 2958 | "url": "https://symfony.com/sponsor", 2959 | "type": "custom" 2960 | }, 2961 | { 2962 | "url": "https://github.com/fabpot", 2963 | "type": "github" 2964 | }, 2965 | { 2966 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2967 | "type": "tidelift" 2968 | } 2969 | ], 2970 | "time": "2021-03-23T23:28:01+00:00" 2971 | }, 2972 | { 2973 | "name": "symfony/filesystem", 2974 | "version": "v5.2.7", 2975 | "source": { 2976 | "type": "git", 2977 | "url": "https://github.com/symfony/filesystem.git", 2978 | "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0" 2979 | }, 2980 | "dist": { 2981 | "type": "zip", 2982 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/056e92acc21d977c37e6ea8e97374b2a6c8551b0", 2983 | "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0", 2984 | "shasum": "" 2985 | }, 2986 | "require": { 2987 | "php": ">=7.2.5", 2988 | "symfony/polyfill-ctype": "~1.8" 2989 | }, 2990 | "type": "library", 2991 | "autoload": { 2992 | "psr-4": { 2993 | "Symfony\\Component\\Filesystem\\": "" 2994 | }, 2995 | "exclude-from-classmap": [ 2996 | "/Tests/" 2997 | ] 2998 | }, 2999 | "notification-url": "https://packagist.org/downloads/", 3000 | "license": [ 3001 | "MIT" 3002 | ], 3003 | "authors": [ 3004 | { 3005 | "name": "Fabien Potencier", 3006 | "email": "fabien@symfony.com" 3007 | }, 3008 | { 3009 | "name": "Symfony Community", 3010 | "homepage": "https://symfony.com/contributors" 3011 | } 3012 | ], 3013 | "description": "Provides basic utilities for the filesystem", 3014 | "homepage": "https://symfony.com", 3015 | "support": { 3016 | "source": "https://github.com/symfony/filesystem/tree/v5.2.7" 3017 | }, 3018 | "funding": [ 3019 | { 3020 | "url": "https://symfony.com/sponsor", 3021 | "type": "custom" 3022 | }, 3023 | { 3024 | "url": "https://github.com/fabpot", 3025 | "type": "github" 3026 | }, 3027 | { 3028 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3029 | "type": "tidelift" 3030 | } 3031 | ], 3032 | "time": "2021-04-01T10:42:13+00:00" 3033 | }, 3034 | { 3035 | "name": "symfony/polyfill-ctype", 3036 | "version": "v1.22.1", 3037 | "source": { 3038 | "type": "git", 3039 | "url": "https://github.com/symfony/polyfill-ctype.git", 3040 | "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" 3041 | }, 3042 | "dist": { 3043 | "type": "zip", 3044 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", 3045 | "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", 3046 | "shasum": "" 3047 | }, 3048 | "require": { 3049 | "php": ">=7.1" 3050 | }, 3051 | "suggest": { 3052 | "ext-ctype": "For best performance" 3053 | }, 3054 | "type": "library", 3055 | "extra": { 3056 | "branch-alias": { 3057 | "dev-main": "1.22-dev" 3058 | }, 3059 | "thanks": { 3060 | "name": "symfony/polyfill", 3061 | "url": "https://github.com/symfony/polyfill" 3062 | } 3063 | }, 3064 | "autoload": { 3065 | "psr-4": { 3066 | "Symfony\\Polyfill\\Ctype\\": "" 3067 | }, 3068 | "files": [ 3069 | "bootstrap.php" 3070 | ] 3071 | }, 3072 | "notification-url": "https://packagist.org/downloads/", 3073 | "license": [ 3074 | "MIT" 3075 | ], 3076 | "authors": [ 3077 | { 3078 | "name": "Gert de Pagter", 3079 | "email": "BackEndTea@gmail.com" 3080 | }, 3081 | { 3082 | "name": "Symfony Community", 3083 | "homepage": "https://symfony.com/contributors" 3084 | } 3085 | ], 3086 | "description": "Symfony polyfill for ctype functions", 3087 | "homepage": "https://symfony.com", 3088 | "keywords": [ 3089 | "compatibility", 3090 | "ctype", 3091 | "polyfill", 3092 | "portable" 3093 | ], 3094 | "support": { 3095 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" 3096 | }, 3097 | "funding": [ 3098 | { 3099 | "url": "https://symfony.com/sponsor", 3100 | "type": "custom" 3101 | }, 3102 | { 3103 | "url": "https://github.com/fabpot", 3104 | "type": "github" 3105 | }, 3106 | { 3107 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3108 | "type": "tidelift" 3109 | } 3110 | ], 3111 | "time": "2021-01-07T16:49:33+00:00" 3112 | }, 3113 | { 3114 | "name": "symfony/polyfill-intl-grapheme", 3115 | "version": "v1.22.1", 3116 | "source": { 3117 | "type": "git", 3118 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 3119 | "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" 3120 | }, 3121 | "dist": { 3122 | "type": "zip", 3123 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", 3124 | "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", 3125 | "shasum": "" 3126 | }, 3127 | "require": { 3128 | "php": ">=7.1" 3129 | }, 3130 | "suggest": { 3131 | "ext-intl": "For best performance" 3132 | }, 3133 | "type": "library", 3134 | "extra": { 3135 | "branch-alias": { 3136 | "dev-main": "1.22-dev" 3137 | }, 3138 | "thanks": { 3139 | "name": "symfony/polyfill", 3140 | "url": "https://github.com/symfony/polyfill" 3141 | } 3142 | }, 3143 | "autoload": { 3144 | "psr-4": { 3145 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 3146 | }, 3147 | "files": [ 3148 | "bootstrap.php" 3149 | ] 3150 | }, 3151 | "notification-url": "https://packagist.org/downloads/", 3152 | "license": [ 3153 | "MIT" 3154 | ], 3155 | "authors": [ 3156 | { 3157 | "name": "Nicolas Grekas", 3158 | "email": "p@tchwork.com" 3159 | }, 3160 | { 3161 | "name": "Symfony Community", 3162 | "homepage": "https://symfony.com/contributors" 3163 | } 3164 | ], 3165 | "description": "Symfony polyfill for intl's grapheme_* functions", 3166 | "homepage": "https://symfony.com", 3167 | "keywords": [ 3168 | "compatibility", 3169 | "grapheme", 3170 | "intl", 3171 | "polyfill", 3172 | "portable", 3173 | "shim" 3174 | ], 3175 | "support": { 3176 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" 3177 | }, 3178 | "funding": [ 3179 | { 3180 | "url": "https://symfony.com/sponsor", 3181 | "type": "custom" 3182 | }, 3183 | { 3184 | "url": "https://github.com/fabpot", 3185 | "type": "github" 3186 | }, 3187 | { 3188 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3189 | "type": "tidelift" 3190 | } 3191 | ], 3192 | "time": "2021-01-22T09:19:47+00:00" 3193 | }, 3194 | { 3195 | "name": "symfony/polyfill-intl-idn", 3196 | "version": "v1.22.1", 3197 | "source": { 3198 | "type": "git", 3199 | "url": "https://github.com/symfony/polyfill-intl-idn.git", 3200 | "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" 3201 | }, 3202 | "dist": { 3203 | "type": "zip", 3204 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", 3205 | "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", 3206 | "shasum": "" 3207 | }, 3208 | "require": { 3209 | "php": ">=7.1", 3210 | "symfony/polyfill-intl-normalizer": "^1.10", 3211 | "symfony/polyfill-php72": "^1.10" 3212 | }, 3213 | "suggest": { 3214 | "ext-intl": "For best performance" 3215 | }, 3216 | "type": "library", 3217 | "extra": { 3218 | "branch-alias": { 3219 | "dev-main": "1.22-dev" 3220 | }, 3221 | "thanks": { 3222 | "name": "symfony/polyfill", 3223 | "url": "https://github.com/symfony/polyfill" 3224 | } 3225 | }, 3226 | "autoload": { 3227 | "psr-4": { 3228 | "Symfony\\Polyfill\\Intl\\Idn\\": "" 3229 | }, 3230 | "files": [ 3231 | "bootstrap.php" 3232 | ] 3233 | }, 3234 | "notification-url": "https://packagist.org/downloads/", 3235 | "license": [ 3236 | "MIT" 3237 | ], 3238 | "authors": [ 3239 | { 3240 | "name": "Laurent Bassin", 3241 | "email": "laurent@bassin.info" 3242 | }, 3243 | { 3244 | "name": "Trevor Rowbotham", 3245 | "email": "trevor.rowbotham@pm.me" 3246 | }, 3247 | { 3248 | "name": "Symfony Community", 3249 | "homepage": "https://symfony.com/contributors" 3250 | } 3251 | ], 3252 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", 3253 | "homepage": "https://symfony.com", 3254 | "keywords": [ 3255 | "compatibility", 3256 | "idn", 3257 | "intl", 3258 | "polyfill", 3259 | "portable", 3260 | "shim" 3261 | ], 3262 | "support": { 3263 | "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" 3264 | }, 3265 | "funding": [ 3266 | { 3267 | "url": "https://symfony.com/sponsor", 3268 | "type": "custom" 3269 | }, 3270 | { 3271 | "url": "https://github.com/fabpot", 3272 | "type": "github" 3273 | }, 3274 | { 3275 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3276 | "type": "tidelift" 3277 | } 3278 | ], 3279 | "time": "2021-01-22T09:19:47+00:00" 3280 | }, 3281 | { 3282 | "name": "symfony/polyfill-intl-normalizer", 3283 | "version": "v1.22.1", 3284 | "source": { 3285 | "type": "git", 3286 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 3287 | "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" 3288 | }, 3289 | "dist": { 3290 | "type": "zip", 3291 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", 3292 | "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", 3293 | "shasum": "" 3294 | }, 3295 | "require": { 3296 | "php": ">=7.1" 3297 | }, 3298 | "suggest": { 3299 | "ext-intl": "For best performance" 3300 | }, 3301 | "type": "library", 3302 | "extra": { 3303 | "branch-alias": { 3304 | "dev-main": "1.22-dev" 3305 | }, 3306 | "thanks": { 3307 | "name": "symfony/polyfill", 3308 | "url": "https://github.com/symfony/polyfill" 3309 | } 3310 | }, 3311 | "autoload": { 3312 | "psr-4": { 3313 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 3314 | }, 3315 | "files": [ 3316 | "bootstrap.php" 3317 | ], 3318 | "classmap": [ 3319 | "Resources/stubs" 3320 | ] 3321 | }, 3322 | "notification-url": "https://packagist.org/downloads/", 3323 | "license": [ 3324 | "MIT" 3325 | ], 3326 | "authors": [ 3327 | { 3328 | "name": "Nicolas Grekas", 3329 | "email": "p@tchwork.com" 3330 | }, 3331 | { 3332 | "name": "Symfony Community", 3333 | "homepage": "https://symfony.com/contributors" 3334 | } 3335 | ], 3336 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 3337 | "homepage": "https://symfony.com", 3338 | "keywords": [ 3339 | "compatibility", 3340 | "intl", 3341 | "normalizer", 3342 | "polyfill", 3343 | "portable", 3344 | "shim" 3345 | ], 3346 | "support": { 3347 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" 3348 | }, 3349 | "funding": [ 3350 | { 3351 | "url": "https://symfony.com/sponsor", 3352 | "type": "custom" 3353 | }, 3354 | { 3355 | "url": "https://github.com/fabpot", 3356 | "type": "github" 3357 | }, 3358 | { 3359 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3360 | "type": "tidelift" 3361 | } 3362 | ], 3363 | "time": "2021-01-22T09:19:47+00:00" 3364 | }, 3365 | { 3366 | "name": "symfony/polyfill-mbstring", 3367 | "version": "v1.22.1", 3368 | "source": { 3369 | "type": "git", 3370 | "url": "https://github.com/symfony/polyfill-mbstring.git", 3371 | "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" 3372 | }, 3373 | "dist": { 3374 | "type": "zip", 3375 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", 3376 | "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", 3377 | "shasum": "" 3378 | }, 3379 | "require": { 3380 | "php": ">=7.1" 3381 | }, 3382 | "suggest": { 3383 | "ext-mbstring": "For best performance" 3384 | }, 3385 | "type": "library", 3386 | "extra": { 3387 | "branch-alias": { 3388 | "dev-main": "1.22-dev" 3389 | }, 3390 | "thanks": { 3391 | "name": "symfony/polyfill", 3392 | "url": "https://github.com/symfony/polyfill" 3393 | } 3394 | }, 3395 | "autoload": { 3396 | "psr-4": { 3397 | "Symfony\\Polyfill\\Mbstring\\": "" 3398 | }, 3399 | "files": [ 3400 | "bootstrap.php" 3401 | ] 3402 | }, 3403 | "notification-url": "https://packagist.org/downloads/", 3404 | "license": [ 3405 | "MIT" 3406 | ], 3407 | "authors": [ 3408 | { 3409 | "name": "Nicolas Grekas", 3410 | "email": "p@tchwork.com" 3411 | }, 3412 | { 3413 | "name": "Symfony Community", 3414 | "homepage": "https://symfony.com/contributors" 3415 | } 3416 | ], 3417 | "description": "Symfony polyfill for the Mbstring extension", 3418 | "homepage": "https://symfony.com", 3419 | "keywords": [ 3420 | "compatibility", 3421 | "mbstring", 3422 | "polyfill", 3423 | "portable", 3424 | "shim" 3425 | ], 3426 | "support": { 3427 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" 3428 | }, 3429 | "funding": [ 3430 | { 3431 | "url": "https://symfony.com/sponsor", 3432 | "type": "custom" 3433 | }, 3434 | { 3435 | "url": "https://github.com/fabpot", 3436 | "type": "github" 3437 | }, 3438 | { 3439 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3440 | "type": "tidelift" 3441 | } 3442 | ], 3443 | "time": "2021-01-22T09:19:47+00:00" 3444 | }, 3445 | { 3446 | "name": "symfony/polyfill-php72", 3447 | "version": "v1.22.1", 3448 | "source": { 3449 | "type": "git", 3450 | "url": "https://github.com/symfony/polyfill-php72.git", 3451 | "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" 3452 | }, 3453 | "dist": { 3454 | "type": "zip", 3455 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", 3456 | "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", 3457 | "shasum": "" 3458 | }, 3459 | "require": { 3460 | "php": ">=7.1" 3461 | }, 3462 | "type": "library", 3463 | "extra": { 3464 | "branch-alias": { 3465 | "dev-main": "1.22-dev" 3466 | }, 3467 | "thanks": { 3468 | "name": "symfony/polyfill", 3469 | "url": "https://github.com/symfony/polyfill" 3470 | } 3471 | }, 3472 | "autoload": { 3473 | "psr-4": { 3474 | "Symfony\\Polyfill\\Php72\\": "" 3475 | }, 3476 | "files": [ 3477 | "bootstrap.php" 3478 | ] 3479 | }, 3480 | "notification-url": "https://packagist.org/downloads/", 3481 | "license": [ 3482 | "MIT" 3483 | ], 3484 | "authors": [ 3485 | { 3486 | "name": "Nicolas Grekas", 3487 | "email": "p@tchwork.com" 3488 | }, 3489 | { 3490 | "name": "Symfony Community", 3491 | "homepage": "https://symfony.com/contributors" 3492 | } 3493 | ], 3494 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 3495 | "homepage": "https://symfony.com", 3496 | "keywords": [ 3497 | "compatibility", 3498 | "polyfill", 3499 | "portable", 3500 | "shim" 3501 | ], 3502 | "support": { 3503 | "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" 3504 | }, 3505 | "funding": [ 3506 | { 3507 | "url": "https://symfony.com/sponsor", 3508 | "type": "custom" 3509 | }, 3510 | { 3511 | "url": "https://github.com/fabpot", 3512 | "type": "github" 3513 | }, 3514 | { 3515 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3516 | "type": "tidelift" 3517 | } 3518 | ], 3519 | "time": "2021-01-07T16:49:33+00:00" 3520 | }, 3521 | { 3522 | "name": "symfony/polyfill-php73", 3523 | "version": "v1.22.1", 3524 | "source": { 3525 | "type": "git", 3526 | "url": "https://github.com/symfony/polyfill-php73.git", 3527 | "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" 3528 | }, 3529 | "dist": { 3530 | "type": "zip", 3531 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", 3532 | "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", 3533 | "shasum": "" 3534 | }, 3535 | "require": { 3536 | "php": ">=7.1" 3537 | }, 3538 | "type": "library", 3539 | "extra": { 3540 | "branch-alias": { 3541 | "dev-main": "1.22-dev" 3542 | }, 3543 | "thanks": { 3544 | "name": "symfony/polyfill", 3545 | "url": "https://github.com/symfony/polyfill" 3546 | } 3547 | }, 3548 | "autoload": { 3549 | "psr-4": { 3550 | "Symfony\\Polyfill\\Php73\\": "" 3551 | }, 3552 | "files": [ 3553 | "bootstrap.php" 3554 | ], 3555 | "classmap": [ 3556 | "Resources/stubs" 3557 | ] 3558 | }, 3559 | "notification-url": "https://packagist.org/downloads/", 3560 | "license": [ 3561 | "MIT" 3562 | ], 3563 | "authors": [ 3564 | { 3565 | "name": "Nicolas Grekas", 3566 | "email": "p@tchwork.com" 3567 | }, 3568 | { 3569 | "name": "Symfony Community", 3570 | "homepage": "https://symfony.com/contributors" 3571 | } 3572 | ], 3573 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 3574 | "homepage": "https://symfony.com", 3575 | "keywords": [ 3576 | "compatibility", 3577 | "polyfill", 3578 | "portable", 3579 | "shim" 3580 | ], 3581 | "support": { 3582 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" 3583 | }, 3584 | "funding": [ 3585 | { 3586 | "url": "https://symfony.com/sponsor", 3587 | "type": "custom" 3588 | }, 3589 | { 3590 | "url": "https://github.com/fabpot", 3591 | "type": "github" 3592 | }, 3593 | { 3594 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3595 | "type": "tidelift" 3596 | } 3597 | ], 3598 | "time": "2021-01-07T16:49:33+00:00" 3599 | }, 3600 | { 3601 | "name": "symfony/polyfill-php80", 3602 | "version": "v1.22.1", 3603 | "source": { 3604 | "type": "git", 3605 | "url": "https://github.com/symfony/polyfill-php80.git", 3606 | "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" 3607 | }, 3608 | "dist": { 3609 | "type": "zip", 3610 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", 3611 | "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", 3612 | "shasum": "" 3613 | }, 3614 | "require": { 3615 | "php": ">=7.1" 3616 | }, 3617 | "type": "library", 3618 | "extra": { 3619 | "branch-alias": { 3620 | "dev-main": "1.22-dev" 3621 | }, 3622 | "thanks": { 3623 | "name": "symfony/polyfill", 3624 | "url": "https://github.com/symfony/polyfill" 3625 | } 3626 | }, 3627 | "autoload": { 3628 | "psr-4": { 3629 | "Symfony\\Polyfill\\Php80\\": "" 3630 | }, 3631 | "files": [ 3632 | "bootstrap.php" 3633 | ], 3634 | "classmap": [ 3635 | "Resources/stubs" 3636 | ] 3637 | }, 3638 | "notification-url": "https://packagist.org/downloads/", 3639 | "license": [ 3640 | "MIT" 3641 | ], 3642 | "authors": [ 3643 | { 3644 | "name": "Ion Bazan", 3645 | "email": "ion.bazan@gmail.com" 3646 | }, 3647 | { 3648 | "name": "Nicolas Grekas", 3649 | "email": "p@tchwork.com" 3650 | }, 3651 | { 3652 | "name": "Symfony Community", 3653 | "homepage": "https://symfony.com/contributors" 3654 | } 3655 | ], 3656 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 3657 | "homepage": "https://symfony.com", 3658 | "keywords": [ 3659 | "compatibility", 3660 | "polyfill", 3661 | "portable", 3662 | "shim" 3663 | ], 3664 | "support": { 3665 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" 3666 | }, 3667 | "funding": [ 3668 | { 3669 | "url": "https://symfony.com/sponsor", 3670 | "type": "custom" 3671 | }, 3672 | { 3673 | "url": "https://github.com/fabpot", 3674 | "type": "github" 3675 | }, 3676 | { 3677 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3678 | "type": "tidelift" 3679 | } 3680 | ], 3681 | "time": "2021-01-07T16:49:33+00:00" 3682 | }, 3683 | { 3684 | "name": "symfony/service-contracts", 3685 | "version": "v2.4.0", 3686 | "source": { 3687 | "type": "git", 3688 | "url": "https://github.com/symfony/service-contracts.git", 3689 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" 3690 | }, 3691 | "dist": { 3692 | "type": "zip", 3693 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", 3694 | "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", 3695 | "shasum": "" 3696 | }, 3697 | "require": { 3698 | "php": ">=7.2.5", 3699 | "psr/container": "^1.1" 3700 | }, 3701 | "suggest": { 3702 | "symfony/service-implementation": "" 3703 | }, 3704 | "type": "library", 3705 | "extra": { 3706 | "branch-alias": { 3707 | "dev-main": "2.4-dev" 3708 | }, 3709 | "thanks": { 3710 | "name": "symfony/contracts", 3711 | "url": "https://github.com/symfony/contracts" 3712 | } 3713 | }, 3714 | "autoload": { 3715 | "psr-4": { 3716 | "Symfony\\Contracts\\Service\\": "" 3717 | } 3718 | }, 3719 | "notification-url": "https://packagist.org/downloads/", 3720 | "license": [ 3721 | "MIT" 3722 | ], 3723 | "authors": [ 3724 | { 3725 | "name": "Nicolas Grekas", 3726 | "email": "p@tchwork.com" 3727 | }, 3728 | { 3729 | "name": "Symfony Community", 3730 | "homepage": "https://symfony.com/contributors" 3731 | } 3732 | ], 3733 | "description": "Generic abstractions related to writing services", 3734 | "homepage": "https://symfony.com", 3735 | "keywords": [ 3736 | "abstractions", 3737 | "contracts", 3738 | "decoupling", 3739 | "interfaces", 3740 | "interoperability", 3741 | "standards" 3742 | ], 3743 | "support": { 3744 | "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" 3745 | }, 3746 | "funding": [ 3747 | { 3748 | "url": "https://symfony.com/sponsor", 3749 | "type": "custom" 3750 | }, 3751 | { 3752 | "url": "https://github.com/fabpot", 3753 | "type": "github" 3754 | }, 3755 | { 3756 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3757 | "type": "tidelift" 3758 | } 3759 | ], 3760 | "time": "2021-04-01T10:43:52+00:00" 3761 | }, 3762 | { 3763 | "name": "symfony/stopwatch", 3764 | "version": "v5.2.7", 3765 | "source": { 3766 | "type": "git", 3767 | "url": "https://github.com/symfony/stopwatch.git", 3768 | "reference": "d99310c33e833def36419c284f60e8027d359678" 3769 | }, 3770 | "dist": { 3771 | "type": "zip", 3772 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/d99310c33e833def36419c284f60e8027d359678", 3773 | "reference": "d99310c33e833def36419c284f60e8027d359678", 3774 | "shasum": "" 3775 | }, 3776 | "require": { 3777 | "php": ">=7.2.5", 3778 | "symfony/service-contracts": "^1.0|^2" 3779 | }, 3780 | "type": "library", 3781 | "autoload": { 3782 | "psr-4": { 3783 | "Symfony\\Component\\Stopwatch\\": "" 3784 | }, 3785 | "exclude-from-classmap": [ 3786 | "/Tests/" 3787 | ] 3788 | }, 3789 | "notification-url": "https://packagist.org/downloads/", 3790 | "license": [ 3791 | "MIT" 3792 | ], 3793 | "authors": [ 3794 | { 3795 | "name": "Fabien Potencier", 3796 | "email": "fabien@symfony.com" 3797 | }, 3798 | { 3799 | "name": "Symfony Community", 3800 | "homepage": "https://symfony.com/contributors" 3801 | } 3802 | ], 3803 | "description": "Provides a way to profile code", 3804 | "homepage": "https://symfony.com", 3805 | "support": { 3806 | "source": "https://github.com/symfony/stopwatch/tree/v5.3.0-BETA1" 3807 | }, 3808 | "funding": [ 3809 | { 3810 | "url": "https://symfony.com/sponsor", 3811 | "type": "custom" 3812 | }, 3813 | { 3814 | "url": "https://github.com/fabpot", 3815 | "type": "github" 3816 | }, 3817 | { 3818 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3819 | "type": "tidelift" 3820 | } 3821 | ], 3822 | "time": "2021-03-29T15:28:41+00:00" 3823 | }, 3824 | { 3825 | "name": "symfony/string", 3826 | "version": "v5.2.6", 3827 | "source": { 3828 | "type": "git", 3829 | "url": "https://github.com/symfony/string.git", 3830 | "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" 3831 | }, 3832 | "dist": { 3833 | "type": "zip", 3834 | "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", 3835 | "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", 3836 | "shasum": "" 3837 | }, 3838 | "require": { 3839 | "php": ">=7.2.5", 3840 | "symfony/polyfill-ctype": "~1.8", 3841 | "symfony/polyfill-intl-grapheme": "~1.0", 3842 | "symfony/polyfill-intl-normalizer": "~1.0", 3843 | "symfony/polyfill-mbstring": "~1.0", 3844 | "symfony/polyfill-php80": "~1.15" 3845 | }, 3846 | "require-dev": { 3847 | "symfony/error-handler": "^4.4|^5.0", 3848 | "symfony/http-client": "^4.4|^5.0", 3849 | "symfony/translation-contracts": "^1.1|^2", 3850 | "symfony/var-exporter": "^4.4|^5.0" 3851 | }, 3852 | "type": "library", 3853 | "autoload": { 3854 | "psr-4": { 3855 | "Symfony\\Component\\String\\": "" 3856 | }, 3857 | "files": [ 3858 | "Resources/functions.php" 3859 | ], 3860 | "exclude-from-classmap": [ 3861 | "/Tests/" 3862 | ] 3863 | }, 3864 | "notification-url": "https://packagist.org/downloads/", 3865 | "license": [ 3866 | "MIT" 3867 | ], 3868 | "authors": [ 3869 | { 3870 | "name": "Nicolas Grekas", 3871 | "email": "p@tchwork.com" 3872 | }, 3873 | { 3874 | "name": "Symfony Community", 3875 | "homepage": "https://symfony.com/contributors" 3876 | } 3877 | ], 3878 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 3879 | "homepage": "https://symfony.com", 3880 | "keywords": [ 3881 | "grapheme", 3882 | "i18n", 3883 | "string", 3884 | "unicode", 3885 | "utf-8", 3886 | "utf8" 3887 | ], 3888 | "support": { 3889 | "source": "https://github.com/symfony/string/tree/v5.2.6" 3890 | }, 3891 | "funding": [ 3892 | { 3893 | "url": "https://symfony.com/sponsor", 3894 | "type": "custom" 3895 | }, 3896 | { 3897 | "url": "https://github.com/fabpot", 3898 | "type": "github" 3899 | }, 3900 | { 3901 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3902 | "type": "tidelift" 3903 | } 3904 | ], 3905 | "time": "2021-03-17T17:12:15+00:00" 3906 | }, 3907 | { 3908 | "name": "symfony/yaml", 3909 | "version": "v5.2.7", 3910 | "source": { 3911 | "type": "git", 3912 | "url": "https://github.com/symfony/yaml.git", 3913 | "reference": "76546cbeddd0a9540b4e4e57eddeec3e9bb444a5" 3914 | }, 3915 | "dist": { 3916 | "type": "zip", 3917 | "url": "https://api.github.com/repos/symfony/yaml/zipball/76546cbeddd0a9540b4e4e57eddeec3e9bb444a5", 3918 | "reference": "76546cbeddd0a9540b4e4e57eddeec3e9bb444a5", 3919 | "shasum": "" 3920 | }, 3921 | "require": { 3922 | "php": ">=7.2.5", 3923 | "symfony/deprecation-contracts": "^2.1", 3924 | "symfony/polyfill-ctype": "~1.8" 3925 | }, 3926 | "conflict": { 3927 | "symfony/console": "<4.4" 3928 | }, 3929 | "require-dev": { 3930 | "symfony/console": "^4.4|^5.0" 3931 | }, 3932 | "suggest": { 3933 | "symfony/console": "For validating YAML files using the lint command" 3934 | }, 3935 | "bin": [ 3936 | "Resources/bin/yaml-lint" 3937 | ], 3938 | "type": "library", 3939 | "autoload": { 3940 | "psr-4": { 3941 | "Symfony\\Component\\Yaml\\": "" 3942 | }, 3943 | "exclude-from-classmap": [ 3944 | "/Tests/" 3945 | ] 3946 | }, 3947 | "notification-url": "https://packagist.org/downloads/", 3948 | "license": [ 3949 | "MIT" 3950 | ], 3951 | "authors": [ 3952 | { 3953 | "name": "Fabien Potencier", 3954 | "email": "fabien@symfony.com" 3955 | }, 3956 | { 3957 | "name": "Symfony Community", 3958 | "homepage": "https://symfony.com/contributors" 3959 | } 3960 | ], 3961 | "description": "Loads and dumps YAML files", 3962 | "homepage": "https://symfony.com", 3963 | "support": { 3964 | "source": "https://github.com/symfony/yaml/tree/v5.2.7" 3965 | }, 3966 | "funding": [ 3967 | { 3968 | "url": "https://symfony.com/sponsor", 3969 | "type": "custom" 3970 | }, 3971 | { 3972 | "url": "https://github.com/fabpot", 3973 | "type": "github" 3974 | }, 3975 | { 3976 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3977 | "type": "tidelift" 3978 | } 3979 | ], 3980 | "time": "2021-04-29T20:47:09+00:00" 3981 | }, 3982 | { 3983 | "name": "theseer/tokenizer", 3984 | "version": "1.2.0", 3985 | "source": { 3986 | "type": "git", 3987 | "url": "https://github.com/theseer/tokenizer.git", 3988 | "reference": "75a63c33a8577608444246075ea0af0d052e452a" 3989 | }, 3990 | "dist": { 3991 | "type": "zip", 3992 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", 3993 | "reference": "75a63c33a8577608444246075ea0af0d052e452a", 3994 | "shasum": "" 3995 | }, 3996 | "require": { 3997 | "ext-dom": "*", 3998 | "ext-tokenizer": "*", 3999 | "ext-xmlwriter": "*", 4000 | "php": "^7.2 || ^8.0" 4001 | }, 4002 | "type": "library", 4003 | "autoload": { 4004 | "classmap": [ 4005 | "src/" 4006 | ] 4007 | }, 4008 | "notification-url": "https://packagist.org/downloads/", 4009 | "license": [ 4010 | "BSD-3-Clause" 4011 | ], 4012 | "authors": [ 4013 | { 4014 | "name": "Arne Blankerts", 4015 | "email": "arne@blankerts.de", 4016 | "role": "Developer" 4017 | } 4018 | ], 4019 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 4020 | "support": { 4021 | "issues": "https://github.com/theseer/tokenizer/issues", 4022 | "source": "https://github.com/theseer/tokenizer/tree/master" 4023 | }, 4024 | "funding": [ 4025 | { 4026 | "url": "https://github.com/theseer", 4027 | "type": "github" 4028 | } 4029 | ], 4030 | "time": "2020-07-12T23:59:07+00:00" 4031 | }, 4032 | { 4033 | "name": "webmozart/assert", 4034 | "version": "1.10.0", 4035 | "source": { 4036 | "type": "git", 4037 | "url": "https://github.com/webmozarts/assert.git", 4038 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" 4039 | }, 4040 | "dist": { 4041 | "type": "zip", 4042 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", 4043 | "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", 4044 | "shasum": "" 4045 | }, 4046 | "require": { 4047 | "php": "^7.2 || ^8.0", 4048 | "symfony/polyfill-ctype": "^1.8" 4049 | }, 4050 | "conflict": { 4051 | "phpstan/phpstan": "<0.12.20", 4052 | "vimeo/psalm": "<4.6.1 || 4.6.2" 4053 | }, 4054 | "require-dev": { 4055 | "phpunit/phpunit": "^8.5.13" 4056 | }, 4057 | "type": "library", 4058 | "extra": { 4059 | "branch-alias": { 4060 | "dev-master": "1.10-dev" 4061 | } 4062 | }, 4063 | "autoload": { 4064 | "psr-4": { 4065 | "Webmozart\\Assert\\": "src/" 4066 | } 4067 | }, 4068 | "notification-url": "https://packagist.org/downloads/", 4069 | "license": [ 4070 | "MIT" 4071 | ], 4072 | "authors": [ 4073 | { 4074 | "name": "Bernhard Schussek", 4075 | "email": "bschussek@gmail.com" 4076 | } 4077 | ], 4078 | "description": "Assertions to validate method input/output with nice error messages.", 4079 | "keywords": [ 4080 | "assert", 4081 | "check", 4082 | "validate" 4083 | ], 4084 | "support": { 4085 | "issues": "https://github.com/webmozarts/assert/issues", 4086 | "source": "https://github.com/webmozarts/assert/tree/1.10.0" 4087 | }, 4088 | "time": "2021-03-09T10:59:23+00:00" 4089 | }, 4090 | { 4091 | "name": "wp-coding-standards/wpcs", 4092 | "version": "2.3.0", 4093 | "source": { 4094 | "type": "git", 4095 | "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", 4096 | "reference": "7da1894633f168fe244afc6de00d141f27517b62" 4097 | }, 4098 | "dist": { 4099 | "type": "zip", 4100 | "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", 4101 | "reference": "7da1894633f168fe244afc6de00d141f27517b62", 4102 | "shasum": "" 4103 | }, 4104 | "require": { 4105 | "php": ">=5.4", 4106 | "squizlabs/php_codesniffer": "^3.3.1" 4107 | }, 4108 | "require-dev": { 4109 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", 4110 | "phpcompatibility/php-compatibility": "^9.0", 4111 | "phpcsstandards/phpcsdevtools": "^1.0", 4112 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 4113 | }, 4114 | "suggest": { 4115 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." 4116 | }, 4117 | "type": "phpcodesniffer-standard", 4118 | "notification-url": "https://packagist.org/downloads/", 4119 | "license": [ 4120 | "MIT" 4121 | ], 4122 | "authors": [ 4123 | { 4124 | "name": "Contributors", 4125 | "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" 4126 | } 4127 | ], 4128 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", 4129 | "keywords": [ 4130 | "phpcs", 4131 | "standards", 4132 | "wordpress" 4133 | ], 4134 | "support": { 4135 | "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", 4136 | "source": "https://github.com/WordPress/WordPress-Coding-Standards", 4137 | "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" 4138 | }, 4139 | "time": "2020-05-13T23:57:56+00:00" 4140 | }, 4141 | { 4142 | "name": "wpsh/local", 4143 | "version": "0.2.3", 4144 | "source": { 4145 | "type": "git", 4146 | "url": "https://github.com/wpsh/wpsh-local.git", 4147 | "reference": "17338432ed06386273a1ee4db8c8467aa8feab17" 4148 | }, 4149 | "dist": { 4150 | "type": "zip", 4151 | "url": "https://api.github.com/repos/wpsh/wpsh-local/zipball/17338432ed06386273a1ee4db8c8467aa8feab17", 4152 | "reference": "17338432ed06386273a1ee4db8c8467aa8feab17", 4153 | "shasum": "" 4154 | }, 4155 | "type": "library", 4156 | "notification-url": "https://packagist.org/downloads/", 4157 | "license": [ 4158 | "MIT" 4159 | ], 4160 | "description": "A Docker Compose development environment for any project.", 4161 | "support": { 4162 | "issues": "https://github.com/wpsh/wpsh-local/issues", 4163 | "source": "https://github.com/wpsh/wpsh-local/tree/master" 4164 | }, 4165 | "time": "2019-06-12T10:54:32+00:00" 4166 | } 4167 | ], 4168 | "aliases": [], 4169 | "minimum-stability": "dev", 4170 | "stability-flags": [], 4171 | "prefer-stable": true, 4172 | "prefer-lowest": false, 4173 | "platform": { 4174 | "php": ">=7.2" 4175 | }, 4176 | "platform-dev": [], 4177 | "plugin-api-version": "2.0.0" 4178 | } 4179 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | mysql: 6 | image: mysql:5 7 | volumes: 8 | - db_data:/var/lib/mysql 9 | restart: always 10 | environment: 11 | MYSQL_DATABASE: wordpress 12 | MYSQL_USER: wordpress 13 | MYSQL_PASSWORD: password 14 | MYSQL_ROOT_PASSWORD: password 15 | 16 | wordpress: 17 | build: ./scripts/docker/wordpress 18 | depends_on: 19 | - mysql 20 | ports: 21 | - "80:80" 22 | - "443:443" 23 | volumes: 24 | - wp_data:/var/www/html/wp-content 25 | - .:/var/www/html/wp-content/plugins/block-scaffolding-wp 26 | restart: always 27 | environment: 28 | WORDPRESS_DEBUG: 1 29 | WORDPRESS_DB_USER: wordpress 30 | WORDPRESS_DB_PASSWORD: password 31 | 32 | mailhog: 33 | image: mailhog/mailhog 34 | ports: 35 | - "1025:1025" 36 | - "8025:8025" 37 | 38 | volumes: 39 | db_data: {} 40 | wp_data: {} 41 | -------------------------------------------------------------------------------- /init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Usage: ./block-scaffolding-wp/init.sh 3 | 4 | # Check for valid plugin name. 5 | function valid_name () { 6 | valid="^[A-Z][A-Za-z0-9]*( [A-Z][A-Za-z0-9]*)*$" 7 | 8 | if [[ ! "$1" =~ $valid ]]; then 9 | return 1 10 | fi 11 | 12 | return 0 13 | } 14 | 15 | echo 16 | echo "Hello, "$USER"." 17 | echo 18 | echo "This script will automatically generate a new plugin based on the scaffolding." 19 | echo "The way it works is you enter a plugin name like 'Hello World' and the script " 20 | echo "will create a directory 'hello-world' in the current working directory, while " 21 | echo "performing substitutions on the 'block-scaffolding' scaffolding plugin." 22 | echo 23 | 24 | echo -n "Enter your plugin name and press [ENTER]: " 25 | read name 26 | 27 | # Validate plugin name. 28 | if ! valid_name "$name"; then 29 | echo "Malformed name '$name'. Please use title case words separated by spaces. No hyphens. For example, 'Hello World'." 30 | echo 31 | echo -n "Enter a valid plugin name and press [ENTER]: " 32 | read name 33 | 34 | if ! valid_name "$name"; then 35 | echo 36 | echo "The name you entered is invalid, rage quitting." 37 | exit 1 38 | fi 39 | fi 40 | 41 | slug="$( echo "$name" | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g' )" 42 | namespace="$( echo "$name" | sed 's/ //g' )" 43 | repo="$slug" 44 | 45 | echo 46 | echo "The Organization name will be used as the Namespace prefix as-entered and " 47 | echo "converted to lowercase for use in the repository path (i.e. XWP becomes xwp)." 48 | echo -n "Enter your GitHub organization name, and press [ENTER]: " 49 | read org 50 | 51 | org_lower="$( echo "$org" | tr '[:upper:]' '[:lower:]' )" 52 | 53 | echo 54 | echo -n "Do you want to prepend 'wp-' to your repository name? [Y/N]: " 55 | read prepend 56 | 57 | if [[ "$prepend" != Y ]] && [[ "$prepend" != y ]]; then 58 | echo 59 | echo -n "Do you want to append '-wp' to your repository name? [Y/N]: " 60 | read append 61 | 62 | if [[ "$append" == Y ]] || [[ "$append" == y ]]; then 63 | repo="${slug}-wp" 64 | fi 65 | else 66 | repo="wp-${slug}" 67 | fi 68 | 69 | echo 70 | echo -n "Do you want to push the plugin to your GitHub repository? [Y/N]: " 71 | read push 72 | 73 | echo 74 | 75 | cwd="$(pwd)" 76 | cd "$(dirname "$0")" 77 | src_repo_path="$(pwd)" 78 | cd "$cwd" 79 | 80 | if [[ -e $( basename "$0" ) ]]; then 81 | echo 82 | echo "Moving up one directory outside of 'block-scaffolding-wp'" 83 | cd .. 84 | fi 85 | 86 | if [[ -e "$slug" ]]; then 87 | echo 88 | echo "The $slug directory already exists" 89 | exit 1 90 | fi 91 | 92 | echo 93 | 94 | git clone "$src_repo_path" "$repo" 95 | 96 | cd "$repo" 97 | 98 | git mv block-scaffolding.php "$slug.php" 99 | 100 | git grep -lz "xwp" | xargs -0 sed -i '' -e "s/xwp/$org_lower/g" 101 | git grep -lz "block-scaffolding-wp" | xargs -0 sed -i '' -e "s/block-scaffolding-wp/$repo/g" 102 | 103 | git grep -lz "XWP" | xargs -0 sed -i '' -e "s/XWP/$org/g" 104 | git grep -lz "Block Scaffolding" | xargs -0 sed -i '' -e "s/Block Scaffolding/$name/g" 105 | git grep -lz "BlockScaffolding" | xargs -0 sed -i '' -e "s/BlockScaffolding/$namespace/g" 106 | git grep -lz "block-scaffolding" | xargs -0 sed -i '' -e "s/block-scaffolding/$slug/g" 107 | 108 | # Clean slate. 109 | rm -rf .git 110 | rm -rf node_modules 111 | rm -rf vendor 112 | rm -f init.sh 113 | rm -f composer.lock 114 | rm -f package-lock.json 115 | 116 | # Install dependencies. 117 | npm install 118 | 119 | # Setup Git. 120 | git init 121 | git add . 122 | git commit -m "Initial commit" 123 | git remote add origin "git@github.com:$org_lower/$repo.git" 124 | 125 | if [[ "$push" == Y ]] || [[ "$push" == y ]]; then 126 | git push -u origin master 127 | else 128 | echo 129 | echo "Push changes to GitHub with the following command:" 130 | echo "cd $(pwd) && git push -u origin master" 131 | fi 132 | 133 | echo 134 | echo "Plugin is located at:" 135 | pwd 136 | -------------------------------------------------------------------------------- /js/.gitignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | -------------------------------------------------------------------------------- /js/src/editor.js: -------------------------------------------------------------------------------- 1 | // Add the JS code to this file. On running npm run dev, it will compile to js/dist/. 2 | 3 | export function add( to, howMuch ) { 4 | return to + howMuch; 5 | } 6 | -------------------------------------------------------------------------------- /js/src/editor.test.js: -------------------------------------------------------------------------------- 1 | import { add } from './editor'; 2 | 3 | describe( 'ensure setup works', () => { 4 | it( 'should be equal when evaluating two arrays', () => { 5 | expect( add( 1, 2 ) ).toStrictEqual( 3 ); 6 | } ); 7 | } ); 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@xwp/block-scaffolding-wp", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "Block Scaffolding for WordPress.", 6 | "author": "XWP", 7 | "license": "GPL-2.0-or-later", 8 | "bugs": { 9 | "url": "https://github.com/xwp/block-scaffolding-wp/issues" 10 | }, 11 | "homepage": "https://github.com/xwp/block-scaffolding-wp#readme", 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/xwp/block-scaffolding-wp.git" 15 | }, 16 | "engines": { 17 | "node": ">=10", 18 | "npm": ">=6.9" 19 | }, 20 | "scripts": { 21 | "postinstall": "composer install", 22 | "dev": "wp-scripts start", 23 | "build": "wp-scripts build", 24 | "lint": "npm-run-all --parallel lint:*", 25 | "lint:js": "wp-scripts lint-js js/src", 26 | "lint:php": "composer lint", 27 | "test": "npm-run-all --parallel test:js test:php", 28 | "test-with-coverage": "npm-run-all --parallel test:js:coverage test:php:coverage", 29 | "test:js": "wp-scripts test-unit-js", 30 | "test:js:coverage": "wp-scripts test-unit-js --coverage --coverageDirectory=tests/coverage/js", 31 | "test:php": "composer test -- --no-coverage", 32 | "test:php:coverage": "composer test", 33 | "report-coverage": "composer coverage", 34 | "docker": "docker-compose run --workdir=/var/www/html/wp-content/plugins/block-scaffolding-wp wordpress", 35 | "vagrant": "vagrant ssh -- COMPOSE_FILE=/vagrant/docker-compose.yml docker-compose run --workdir=/var/www/html/wp-content/plugins/block-scaffolding-wp wordpress" 36 | }, 37 | "devDependencies": { 38 | "@wordpress/block-editor": "3.6.0", 39 | "@wordpress/eslint-plugin": "3.4.1", 40 | "@wordpress/scripts": "7.0.1", 41 | "npm-run-all": "4.1.5" 42 | }, 43 | "dependencies": {} 44 | } 45 | -------------------------------------------------------------------------------- /php/Plugin.php: -------------------------------------------------------------------------------- 1 | file = $plugin_file_path; 44 | $this->dir = dirname( $plugin_file_path ); 45 | $this->uploads_dir = wp_upload_dir( null, false ); 46 | } 47 | 48 | /** 49 | * Return the absolute path to the plugin directory. 50 | * 51 | * @return string 52 | */ 53 | public function dir() { 54 | return $this->dir; 55 | } 56 | 57 | /** 58 | * Return the absolute path to the plugin file. 59 | * 60 | * @return string 61 | */ 62 | public function file() { 63 | return $this->file; 64 | } 65 | 66 | /** 67 | * Get the file path relative to the WordPress plugin directory. 68 | * 69 | * @param string $file_path Absolute path to any plugin file. 70 | * 71 | * @return string 72 | */ 73 | public function basename( $file_path = null ) { 74 | if ( ! isset( $file_path ) ) { 75 | $file_path = $this->file(); 76 | } 77 | 78 | return plugin_basename( $file_path ); 79 | } 80 | 81 | /** 82 | * Get the public URL to the asset file. 83 | * 84 | * @param string $path_relative Path relative to this plugin directory root. 85 | * @return string The URL to the asset. 86 | */ 87 | public function asset_url( $path_relative ) { 88 | return plugins_url( $path_relative, $this->file() ); 89 | } 90 | 91 | /** 92 | * Get absolute path to a file in the uploads directory. 93 | * 94 | * @param string $path_relative File path relative to the root of the WordPress uploads directory. 95 | * 96 | * @return string 97 | */ 98 | public function uploads_dir( $path_relative = null ) { 99 | if ( isset( $path_relative ) ) { 100 | return sprintf( '%s/%s', $this->uploads_dir['basedir'], $path_relative ); 101 | } 102 | 103 | return $this->uploads_dir['basedir']; 104 | } 105 | 106 | /** 107 | * Get URL to a file in the uploads directory. 108 | * 109 | * @param string $path_relative Path to the file relative to the root of the WordPress uploads directory. 110 | * 111 | * @return string 112 | */ 113 | public function uploads_dir_url( $path_relative = null ) { 114 | if ( isset( $path_relative ) ) { 115 | return sprintf( '%s/%s', $this->uploads_dir['baseurl'], $path_relative ); 116 | } 117 | 118 | return $this->uploads_dir['baseurl']; 119 | } 120 | 121 | /** 122 | * Is WP debug mode enabled. 123 | * 124 | * @return boolean 125 | */ 126 | public function is_debug() { 127 | return ( defined( 'WP_DEBUG' ) && WP_DEBUG ); 128 | } 129 | 130 | /** 131 | * Is WP script debug mode enabled. 132 | * 133 | * @return boolean 134 | */ 135 | public function is_script_debug() { 136 | return ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ); 137 | } 138 | 139 | /** 140 | * Return the current version of the plugin. 141 | * 142 | * @return mixed 143 | */ 144 | public function version() { 145 | return $this->meta( 'Version' ); 146 | } 147 | 148 | /** 149 | * Sync the plugin version with the asset version. 150 | * 151 | * @return string 152 | */ 153 | public function asset_version() { 154 | if ( $this->is_debug() || $this->is_script_debug() ) { 155 | return time(); 156 | } 157 | 158 | return $this->version(); 159 | } 160 | 161 | /** 162 | * Get plugin meta data. 163 | * 164 | * @param string $field Optional field key. 165 | * 166 | * @return array|string|null 167 | */ 168 | public function meta( $field = null ) { 169 | static $meta; 170 | 171 | if ( ! isset( $meta ) ) { 172 | $meta = get_file_data( $this->file ); 173 | } 174 | 175 | if ( isset( $field ) ) { 176 | if ( isset( $meta[ $field ] ) ) { 177 | return $meta[ $field ]; 178 | } 179 | 180 | return null; 181 | } 182 | 183 | return $meta; 184 | } 185 | 186 | } 187 | -------------------------------------------------------------------------------- /php/Router.php: -------------------------------------------------------------------------------- 1 | plugin = $plugin; 29 | } 30 | 31 | /** 32 | * Hook into WP. 33 | * 34 | * @return void 35 | */ 36 | public function init() { 37 | add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_editor_assets' ] ); 38 | } 39 | 40 | /** 41 | * Load our block assets. 42 | * 43 | * @return void 44 | */ 45 | public function enqueue_editor_assets() { 46 | wp_enqueue_script( 47 | 'block-scaffolding-js', 48 | $this->plugin->asset_url( 'js/dist/editor.js' ), 49 | [ 50 | 'lodash', 51 | 'react', 52 | 'wp-block-editor', 53 | ], 54 | $this->plugin->asset_version() 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /phpcs.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | . 18 | 19 | /node_modules/ 20 | /vendor/ 21 | 22 | -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | ./tests/php/ 14 | ./tests/php/TestCase.php 15 | 16 | 17 | 18 | 19 | 20 | ./ 21 | 22 | ./block-scaffolding.php 23 | ./node_modules 24 | ./tests 25 | ./vendor 26 | ./package 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Block Scaffolding for WordPress 2 | 3 | [![Build Status](https://travis-ci.com/xwp/block-scaffolding-wp.svg?branch=master)](https://travis-ci.com/xwp/block-scaffolding-wp) 4 | [![Coverage Status](https://coveralls.io/repos/github/xwp/block-scaffolding-wp/badge.svg?branch=master)](https://coveralls.io/github/xwp/block-scaffolding-wp?branch=master) 5 | 6 | ## Requirements 7 | 8 | - WordPress 5.0+ or the [Gutenberg Plugin](https://wordpress.org/plugins/gutenberg/). 9 | - PHP 7.2 or later, [Composer](https://getcomposer.org) and [Node.js](https://nodejs.org) for dependency management. 10 | - [Docker](https://docs.docker.com/install/) or [Vagrant](https://www.vagrantup.com) with [VirtualBox](https://www.virtualbox.org) for a local development environment. 11 | 12 | We suggest using a software package manager for installing the development dependencies such as [Homebrew](https://brew.sh) on MacOS: 13 | 14 | brew install php composer node docker docker-compose 15 | 16 | or [Chocolatey](https://chocolatey.org) for Windows: 17 | 18 | choco install php composer node nodejs docker-compose 19 | 20 | 21 | ## Development 22 | 23 | 1. Clone the plugin repository. 24 | 25 | 2. Setup the development environment and tools using [Node.js](https://nodejs.org) and [Composer](https://getcomposer.org): 26 | 27 | npm install 28 | 29 | Note that both Node.js and PHP 7.2 or later are required on your computer for running the `npm` scripts. Use `npm run docker -- npm install` to run the installer inside a Docker container if you don't have the required version of PHP installed locally. 30 | 31 | ## Development Environment 32 | 33 | This repository includes a WordPress development environment based on [Docker](https://docs.docker.com/install/) that can be run on your computer or inside a [Vagrant](https://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) wrapper for network isolation and simple `.local` domain names. 34 | 35 | ### Using Vagrant 36 | 37 | To use the Vagrant based environment, run: 38 | 39 | vagrant up 40 | 41 | which will make it available at [block-scaffolding-wp.local](http://block-scaffolding-wp.local). 42 | 43 | Use the included wrapper command for running scripts inside the Docker container running inside Vagrant: 44 | 45 | npm run vagrant -- npm run test:php 46 | 47 | where `npm run test:php` is any of the scripts you would like to run. 48 | 49 | Visit [block-scaffolding-wp.local:8025](http://block-scaffolding-wp.local:8025) to check all emails sent by WordPress. 50 | 51 | 52 | ### Using Native Docker 53 | 54 | To use the Docker based environment with the Docker engine running on your host, run: 55 | 56 | docker-compose up -d 57 | 58 | which will make it available at [localhost](http://localhost). Ensure that no other Docker containers or services are using port 80 on your machine. 59 | 60 | Use the included wrapper command for running scripts inside the Docker container: 61 | 62 | npm run docker -- npm run test:php 63 | 64 | where `npm run test:php` is any of the scripts you would like to run. 65 | 66 | Visit [localhost:8025](http://localhost:8025) to check all emails sent by WordPress. 67 | 68 | 69 | ### Scripts 70 | 71 | We use `npm` as the canonical task runner for the project. Some of the PHP related scripts are defined in `composer.json`. 72 | 73 | All of these commands can be run inside the Docker or Vagrant environments by prefixing the scripts with `npm run docker --` for Docker or with `npm run vagrant --` for Vagrant. 74 | 75 | - `npm run build` to build the plugin JS and CSS assets. Use `npm run dev` to watch and re-build as you work. 76 | 77 | - `npm run lint` to lint both PHP and JS files. Use `npm run lint:js` and `npm run lint:php` to lint JS and PHP seperately. 78 | 79 | - `npm run test` to run both PHP and JS tests without coverage reporting. Use `npm run test:js` and `npm run test:php` to run tests for JS and PHP seperately. 80 | 81 | - `npm run test-with-coverage` to run both PHP and JS tests with coverage reporting. 82 | 83 | 84 | ## Continuous Integration 85 | 86 | We use [Travis CI](https://travis-ci.com) to lint all code, run tests and report test coverage to [Coveralls](https://coveralls.io) as defined in [`.travis.yml`](.travis.yml). 87 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base", 4 | ":preserveSemverRanges" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /scripts/docker/wordpress/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM wordpress:php7.3-apache 2 | 3 | # Development tooling dependencies 4 | RUN apt-get update \ 5 | && apt-get install -y --no-install-recommends \ 6 | bash less default-mysql-client git zip unzip \ 7 | nodejs npm curl \ 8 | msmtp \ 9 | && npm install --global npm@latest \ 10 | && rm -rf /var/lib/apt/lists/* 11 | 12 | RUN curl -s https://getcomposer.org/installer | php \ 13 | && mv composer.phar /usr/local/bin/composer 14 | 15 | # Include our custom config for PHP and Xdebug. 16 | COPY config/php/* /usr/local/etc/php/conf.d/ 17 | 18 | # Setup xdebug. 19 | RUN pecl install xdebug; \ 20 | docker-php-ext-enable xdebug; 21 | -------------------------------------------------------------------------------- /scripts/docker/wordpress/config/php/php.ini: -------------------------------------------------------------------------------- 1 | memory_limit = -1 2 | upload_max_filesize = 1G 3 | post_max_size = 1G 4 | 5 | # Forward mail to the MailHog container. 6 | sendmail_path = "/usr/bin/msmtp --host=mailhog --port=1025 --read-recipients --read-envelope-from --auto-from=on" 7 | -------------------------------------------------------------------------------- /scripts/docker/wordpress/config/php/xdebug.ini: -------------------------------------------------------------------------------- 1 | # Enable remote Xdebug. 2 | xdebug.remote_enable = 1 3 | xdebug.remote_autostart = 1 4 | xdebug.remote_connect_back = 1 5 | xdebug.scream = 1 6 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | once() 27 | ->with( null, false ); 28 | 29 | $plugin = new Plugin( '/absolute/path/to/plugin.php' ); 30 | 31 | $this->assertEquals( '/absolute/path/to/plugin.php', $plugin->file() ); 32 | $this->assertEquals( '/absolute/path/to', $plugin->dir() ); 33 | } 34 | 35 | /** 36 | * Test the plugin setup. 37 | * 38 | * @covers \XWP\BlockScaffolding\Plugin::basename() 39 | */ 40 | public function test_basename() { 41 | // Is there a way to do this using withArgs() and andReturnValues()? 42 | $mock = WP_Mock::userFunction( 'plugin_basename' )->twice(); 43 | 44 | $mock->with( '/any/random/file.js' )->andReturn( 'plugins/any/random/file.js' ); 45 | 46 | $plugin = new Plugin( '/path/to/plugin/file.php' ); 47 | 48 | $this->assertEquals( 49 | 'plugins/any/random/file.js', 50 | $plugin->basename( '/any/random/file.js' ), 51 | 'Asks WP API to return the basename for a file' 52 | ); 53 | 54 | $mock->with( '/path/to/plugin/file.php' )->andReturn( 'plugins/plugin/file.php' ); 55 | 56 | $this->assertEquals( 57 | 'plugins/plugin/file.php', 58 | $plugin->basename(), 59 | 'Defaults to the main plugin file for the basename' 60 | ); 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /tests/php/TestRouter.php: -------------------------------------------------------------------------------- 1 | init(); 29 | } 30 | 31 | /** 32 | * Test enqueue_editor_assets. 33 | * 34 | * @covers \XWP\BlockScaffolding\Router::enqueue_editor_assets() 35 | */ 36 | public function test_enqueue_editor_assets() { 37 | $plugin = Mockery::mock( Plugin::class ); 38 | 39 | $plugin->shouldReceive( 'asset_url' ) 40 | ->once() 41 | ->with( 'js/dist/editor.js' ) 42 | ->andReturn( 'http://example.com/js/dist/editor.js' ); 43 | 44 | $plugin->shouldReceive( 'asset_version' ) 45 | ->once() 46 | ->andReturn( '1.2.3' ); 47 | 48 | WP_Mock::userFunction( 'wp_enqueue_script' ) 49 | ->once() 50 | ->with( 51 | 'block-scaffolding-js', 52 | 'http://example.com/js/dist/editor.js', 53 | Mockery::type( 'array' ), 54 | '1.2.3' 55 | ); 56 | 57 | $block_extend = new Router( $plugin ); 58 | $block_extend->enqueue_editor_assets(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * External dependencies 3 | */ 4 | const path = require( 'path' ); 5 | 6 | /** 7 | * WordPress dependencies 8 | */ 9 | const defaultConfig = require( '@wordpress/scripts/config/webpack.config' ); 10 | 11 | module.exports = { 12 | ...defaultConfig, 13 | entry: { 14 | editor: './js/src/editor.js', 15 | }, 16 | output: { 17 | path: path.resolve( __dirname, 'js/dist' ), 18 | filename: '[name].js', 19 | }, 20 | }; 21 | --------------------------------------------------------------------------------