diff --git a/.drevops/.ahoy.yml b/.drevops/.ahoy.yml index e820e762b..40d31f7f9 100644 --- a/.drevops/.ahoy.yml +++ b/.drevops/.ahoy.yml @@ -10,7 +10,6 @@ commands: ahoy lint-dockerfiles ahoy lint-spelling ahoy lint-docs - ahoy lint-devtool lint-scripts: cmd: ./tests/lint.scripts.sh @@ -24,15 +23,11 @@ commands: lint-docs: cmd: ahoy docs lint - lint-devtool: - cmd: ahoy devtool lint - test: name: Test DrevOps project. cmd: | ahoy test-common ahoy test-docs - ahoy test-devtool test-common: cmd: ./tests/test.common.sh @@ -46,9 +41,6 @@ commands: test-docs: cmd: ahoy docs build && ahoy docs test - test-devtool: - cmd: ahoy devtool test - # If there are changes to the fixtures - this command will re-run twice reporting error the first time. update-fixtures: cmd: | @@ -60,12 +52,6 @@ commands: usage: Custom docs commands. cmd: ahoy -f "docs/.ahoy.yml" "$@" - devtool: - usage: Custom devtool commands. - cmd: | - [ ! -d "./devtool/vendor" ] && composer --working-dir=devtool install -n --ansi --no-progress --no-interaction --no-suggest --prefer-dist --optimize-autoloader - composer --working-dir=devtool "$@" - entrypoint: - bash - "-c" diff --git a/.drevops/devtool/.gitignore b/.drevops/devtool/.gitignore deleted file mode 100644 index 07b6ae07c..000000000 --- a/.drevops/devtool/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# To ignore OS temporary files use global .gitignore -# https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer - -.build -/.coverage-html -/.phpunit.cache -/cobertura.xml -/vendor diff --git a/.drevops/devtool/README.md b/.drevops/devtool/README.md deleted file mode 100644 index 0250ffa73..000000000 --- a/.drevops/devtool/README.md +++ /dev/null @@ -1,8 +0,0 @@ -

devtool

- -A development tool for DrevOps project. - - -## Usage - - vendor/bin/devtool diff --git a/.drevops/devtool/composer.json b/.drevops/devtool/composer.json deleted file mode 100644 index fede0286d..000000000 --- a/.drevops/devtool/composer.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "drevops/devtool", - "type": "library", - "description": "A development tool for DrevOps project.", - "license": "GPL-2.0-or-later", - "authors": [ - { - "name": "Alex Skrypnyk", - "email": "alex@drevops.com", - "role": "Maintainer" - } - ], - "require": { - "php": ">=8.2", - "symfony/console": "^6.3", - "symfony/http-client": "^6.3", - "composer/composer": "^2.6", - "composer/semver": "^3.4" - }, - "require-dev": { - "phpunit/phpunit": "^10", - "dealerdirect/phpcodesniffer-composer-installer": "^1", - "drupal/coder": "^8.3", - "phpmd/phpmd": "^2.13", - "phpstan/phpstan": "^1.10", - "mikey179/vfsstream": "^1.6", - "opis/closure": "^3.6", - "helmich/phpunit-json-assert": "^3.5", - "rector/rector": "^0.19" - }, - "autoload": { - "psr-4": { - "DrevOps\\DevTool\\": "src/" - }, - "classmap": [ - "src/Scaffold" - ] - }, - "autoload-dev": { - "psr-4": { - "DrevOps\\DevTool\\Tests\\": "tests/phpunit" - }, - "classmap": [ - "tests/phpunit" - ] - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true, - "bamarni/composer-bin-plugin": true - } - }, - "scripts": { - "lint": [ - "phpcs", - "phpstan", - "rector --dry-run" - ], - "lint-fix": [ - "rector", - "phpcbf" - ], - "test": "phpunit --no-coverage", - "test:coverage": "XDEBUG_MODE=coverage phpunit" - }, - "bin": [ - "devtool" - ] -} diff --git a/.drevops/devtool/composer.lock b/.drevops/devtool/composer.lock deleted file mode 100644 index 7e0c6be6a..000000000 --- a/.drevops/devtool/composer.lock +++ /dev/null @@ -1,5115 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "3f85583a1e70567fbe18dec8954ebb7a", - "packages": [ - { - "name": "composer/ca-bundle", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "b66d11b7479109ab547f9405b97205640b17d385" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b66d11b7479109ab547f9405b97205640b17d385", - "reference": "b66d11b7479109ab547f9405b97205640b17d385", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-12-18T12:05:55+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", - "shasum": "" - }, - "require": { - "composer/pcre": "^2.1 || ^3.1", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-06-30T13:58:57+00:00" - }, - { - "name": "composer/composer", - "version": "2.7.1", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc", - "reference": "aaf6ed5ccd27c23f79a545e351b4d7842a99d0bc", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.2.5", - "composer/spdx-licenses": "^1.5.7", - "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8 || ^3", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.2", - "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11 || ^7", - "symfony/filesystem": "^5.4 || ^6.0 || ^7", - "symfony/finder": "^5.4 || ^6.0 || ^7", - "symfony/polyfill-php73": "^1.24", - "symfony/polyfill-php80": "^1.24", - "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.9.3", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.4.1 || ^7.0.1" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.7-dev" - }, - "phpstan": { - "includes": [ - "phpstan/rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/composer/issues", - "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.7.1" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-02-09T14:26:28+00:00" - }, - { - "name": "composer/metadata-minifier", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "composer/composer": "^2", - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\MetadataMinifier\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Small utility library that handles metadata minification and expansion.", - "keywords": [ - "composer", - "compression" - ], - "support": { - "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-04-07T13:37:33+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-10-11T07:11:09+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-08-31T09:50:34+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.8", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", - "reference": "560bdcf8deb88ae5d611c80a2de8ea9d0358cc0a", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.8" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-11-20T07:44:33+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "v5.2.13", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", - "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/v5.2.13" - }, - "time": "2023-09-26T02:20:38+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - }, - { - "name": "react/promise", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", - "shasum": "" - }, - "require": { - "php": ">=7.1.0" - }, - "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", - "phpunit/phpunit": "^9.6 || ^7.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.1.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2023-11-16T16:21:57+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9bb7db07b5d66d90f6ebf542f09fc67d800e5259", - "reference": "9bb7db07b5d66d90f6ebf542f09fc67d800e5259", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.10.2" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2024-02-07T12:57:50+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phar" - ], - "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" - }, - "time": "2022-08-31T10:31:18+00:00" - }, - { - "name": "seld/signal-handler", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", - "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "psr/log": "^1 || ^2 || ^3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\Signal\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", - "keywords": [ - "posix", - "sigint", - "signal", - "sigterm", - "unix" - ], - "support": { - "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" - }, - "time": "2023-09-03T09:24:00+00:00" - }, - { - "name": "symfony/console", - "version": "v6.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e", - "reference": "2aaf83b4de5b9d43b93e4aec6f2f8b676f7c567e", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.4.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T14:51:35+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-23T14:45:45+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", - "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", - "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v7.0.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-10-31T17:59:56+00:00" - }, - { - "name": "symfony/http-client", - "version": "v6.4.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client.git", - "reference": "a9034bc119fab8238f76cf49c770f3135f3ead86" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/a9034bc119fab8238f76cf49c770f3135f3ead86", - "reference": "a9034bc119fab8238f76cf49c770f3135f3ead86", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.3" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "3.0" - }, - "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "amphp/socket": "^1.1", - "guzzlehttp/promises": "^1.4", - "nyholm/psr7": "^1.0", - "php-http/httplug": "^1.0|^2.0", - "psr/http-client": "^1.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", - "homepage": "https://symfony.com", - "keywords": [ - "http" - ], - "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T15:01:07+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "1ee70e699b41909c209a0c930f11034b93578654" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", - "reference": "1ee70e699b41909c209a0c930f11034b93578654", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-30T20:28:31+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", - "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.29.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T20:11:03+00:00" - }, - { - "name": "symfony/process", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "937a195147e0c27b2759ade834169ed006d0bc74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/937a195147e0c27b2759ade834169ed006d0bc74", - "reference": "937a195147e0c27b2759ade834169ed006d0bc74", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.4.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", - "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-12-26T14:02:43+00:00" - }, - { - "name": "symfony/string", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "524aac4a280b90a4420d8d6a040718d0586505ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/524aac4a280b90a4420d8d6a040718d0586505ac", - "reference": "524aac4a280b90a4420d8d6a040718d0586505ac", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-29T15:41:16+00:00" - } - ], - "packages-dev": [ - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "4be43904336affa5c2f70744a348312336afd0da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", - "reference": "4be43904336affa5c2f70744a348312336afd0da", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "ext-json": "*", - "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/PHPCSStandards/composer-installer/issues", - "source": "https://github.com/PHPCSStandards/composer-installer" - }, - "time": "2023-01-05T11:28:13+00:00" - }, - { - "name": "drupal/coder", - "version": "8.3.23", - "source": { - "type": "git", - "url": "https://github.com/pfrenssen/coder.git", - "reference": "1a1613d83c08dac5be593f2775c9eccae1b41805" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pfrenssen/coder/zipball/1a1613d83c08dac5be593f2775c9eccae1b41805", - "reference": "1a1613d83c08dac5be593f2775c9eccae1b41805", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1 || ^1.0.0", - "ext-mbstring": "*", - "php": ">=7.2", - "sirbrillig/phpcs-variable-analysis": "^2.11.7", - "slevomat/coding-standard": "^8.11", - "squizlabs/php_codesniffer": "^3.7.1", - "symfony/yaml": ">=3.4.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.7.12", - "phpunit/phpunit": "^8.0" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "Drupal\\": "coder_sniffer/Drupal/", - "DrupalPractice\\": "coder_sniffer/DrupalPractice/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "description": "Coder is a library to review Drupal code.", - "homepage": "https://www.drupal.org/project/coder", - "keywords": [ - "code review", - "phpcs", - "standards" - ], - "support": { - "issues": "https://www.drupal.org/project/issues/coder", - "source": "https://www.drupal.org/project/coder" - }, - "time": "2024-01-27T18:13:12+00:00" - }, - { - "name": "helmich/phpunit-json-assert", - "version": "v3.5.1", - "source": { - "type": "git", - "url": "https://github.com/martin-helmich/phpunit-json-assert.git", - "reference": "5a3a53e46f4d1f1b324c5cc2e33d87ad2d37260c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/martin-helmich/phpunit-json-assert/zipball/5a3a53e46f4d1f1b324c5cc2e33d87ad2d37260c", - "reference": "5a3a53e46f4d1f1b324c5cc2e33d87ad2d37260c", - "shasum": "" - }, - "require": { - "justinrainbow/json-schema": "^5.0", - "php": "^8.0", - "softcreatr/jsonpath": "^0.8" - }, - "conflict": { - "phpunit/phpunit": "<8.0 || >= 11.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Helmich\\JsonAssert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Martin Helmich", - "email": "m.helmich@mittwald.de" - } - ], - "description": "PHPUnit assertions for JSON documents", - "support": { - "issues": "https://github.com/martin-helmich/phpunit-json-assert/issues", - "source": "https://github.com/martin-helmich/phpunit-json-assert/tree/v3.5.1" - }, - "funding": [ - { - "url": "https://donate.helmich.me", - "type": "custom" - }, - { - "url": "https://github.com/martin-helmich", - "type": "github" - } - ], - "time": "2023-03-03T14:09:38+00:00" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.11", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2022-02-23T02:02:42+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.0.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", - "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" - }, - "time": "2024-01-07T17:17:35+00:00" - }, - { - "name": "opis/closure", - "version": "3.6.3", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", - "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Opis\\Closure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.3" - }, - "time": "2022-01-27T09:35:39+00:00" - }, - { - "name": "pdepend/pdepend", - "version": "2.16.2", - "source": { - "type": "git", - "url": "https://github.com/pdepend/pdepend.git", - "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", - "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", - "shasum": "" - }, - "require": { - "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", - "symfony/polyfill-mbstring": "^1.19" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0|^1.2.3", - "gregwar/rst": "^1.0", - "squizlabs/php_codesniffer": "^2.0.0" - }, - "bin": [ - "src/bin/pdepend" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "PDepend\\": "src/main/php/PDepend" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Official version of pdepend to be handled with Composer", - "keywords": [ - "PHP Depend", - "PHP_Depend", - "dev", - "pdepend" - ], - "support": { - "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.16.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend", - "type": "tidelift" - } - ], - "time": "2023-12-17T18:09:59+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpmd/phpmd", - "version": "2.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpmd/phpmd.git", - "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", - "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", - "shasum": "" - }, - "require": { - "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", - "ext-xml": "*", - "pdepend/pdepend": "^2.16.1", - "php": ">=5.3.9" - }, - "require-dev": { - "easy-doc/easy-doc": "0.0.0 || ^1.3.2", - "ext-json": "*", - "ext-simplexml": "*", - "gregwar/rst": "^1.0", - "mikey179/vfsstream": "^1.6.8", - "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" - }, - "bin": [ - "src/bin/phpmd" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPMD\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Manuel Pichler", - "email": "github@manuel-pichler.de", - "homepage": "https://github.com/manuelpichler", - "role": "Project Founder" - }, - { - "name": "Marc Würth", - "email": "ravage@bluewin.ch", - "homepage": "https://github.com/ravage84", - "role": "Project Maintainer" - }, - { - "name": "Other contributors", - "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", - "role": "Contributors" - } - ], - "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", - "homepage": "https://phpmd.org/", - "keywords": [ - "dev", - "mess detection", - "mess detector", - "pdepend", - "phpmd", - "pmd" - ], - "support": { - "irc": "irc://irc.freenode.org/phpmd", - "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.15.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd", - "type": "tidelift" - } - ], - "time": "2023-12-11T08:22:20+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.25.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", - "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" - }, - "time": "2024-01-04T17:06:16+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.10.58", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "a23518379ec4defd9e47cbf81019526861623ec2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a23518379ec4defd9e47cbf81019526861623ec2", - "reference": "a23518379ec4defd9e47cbf81019526861623ec2", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2024-02-12T20:02:57+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "10.1.11", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", - "reference": "78c3b7625965c2513ee96569a4dbb62601784145", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.1" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T15:38:30+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "4.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T06:24:48+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:56:09+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-31T14:07:24+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:57:52+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "10.5.10", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c", - "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "10.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2024-02-04T09:07:51+00:00" - }, - { - "name": "rector/rector", - "version": "0.19.8", - "source": { - "type": "git", - "url": "https://github.com/rectorphp/rector.git", - "reference": "de3b3bb159abd704b144aa86fb244f7f1f4ac947" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/de3b3bb159abd704b144aa86fb244f7f1f4ac947", - "reference": "de3b3bb159abd704b144aa86fb244f7f1f4ac947", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.10.56" - }, - "conflict": { - "rector/rector-doctrine": "*", - "rector/rector-downgrade-php": "*", - "rector/rector-phpunit": "*", - "rector/rector-symfony": "*" - }, - "bin": [ - "bin/rector" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Instant Upgrade and Automated Refactoring of any PHP code", - "keywords": [ - "automation", - "dev", - "migration", - "refactoring" - ], - "support": { - "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/0.19.8" - }, - "funding": [ - { - "url": "https://github.com/tomasvotruba", - "type": "github" - } - ], - "time": "2024-02-05T10:59:13+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:15+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" - }, - { - "name": "sebastian/comparator", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-14T13:18:12+00:00" - }, - { - "name": "sebastian/complexity", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:37:17+00:00" - }, - { - "name": "sebastian/diff", - "version": "5.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", - "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-22T10:55:06+00:00" - }, - { - "name": "sebastian/environment", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", - "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-04-11T05:39:26+00:00" - }, - { - "name": "sebastian/exporter", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", - "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-09-24T13:22:09+00:00" - }, - { - "name": "sebastian/global-state", - "version": "6.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", - "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-07-19T07:19:23+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-12-21T08:38:20+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:08:32+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:06:18+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:05:40+00:00" - }, - { - "name": "sebastian/type", - "version": "4.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T07:10:45+00:00" - }, - { - "name": "sebastian/version", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-07T11:34:05+00:00" - }, - { - "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.11.17", - "source": { - "type": "git", - "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "3b71162a6bf0cde2bff1752e40a1788d8273d049" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/3b71162a6bf0cde2bff1752e40a1788d8273d049", - "reference": "3b71162a6bf0cde2bff1752e40a1788d8273d049", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "squizlabs/php_codesniffer": "^3.5.6" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", - "phpcsstandards/phpcsdevcs": "^1.1", - "phpstan/phpstan": "^1.7", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0", - "sirbrillig/phpcs-import-detection": "^1.1", - "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0@beta" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "VariableAnalysis\\": "VariableAnalysis/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Sam Graham", - "email": "php-codesniffer-variableanalysis@illusori.co.uk" - }, - { - "name": "Payton Swick", - "email": "payton@foolord.com" - } - ], - "description": "A PHPCS sniff to detect problems with variables.", - "keywords": [ - "phpcs", - "static analysis" - ], - "support": { - "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", - "source": "https://github.com/sirbrillig/phpcs-variable-analysis", - "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" - }, - "time": "2023-08-05T23:46:11+00:00" - }, - { - "name": "slevomat/coding-standard", - "version": "8.14.1", - "source": { - "type": "git", - "url": "https://github.com/slevomat/coding-standard.git", - "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fea1fd6f137cc84f9cba0ae30d549615dbc6a926", - "reference": "fea1fd6f137cc84f9cba0ae30d549615dbc6a926", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", - "php": "^7.2 || ^8.0", - "phpstan/phpdoc-parser": "^1.23.1", - "squizlabs/php_codesniffer": "^3.7.1" - }, - "require-dev": { - "phing/phing": "2.17.4", - "php-parallel-lint/php-parallel-lint": "1.3.2", - "phpstan/phpstan": "1.10.37", - "phpstan/phpstan-deprecation-rules": "1.1.4", - "phpstan/phpstan-phpunit": "1.3.14", - "phpstan/phpstan-strict-rules": "1.5.1", - "phpunit/phpunit": "8.5.21|9.6.8|10.3.5" - }, - "type": "phpcodesniffer-standard", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "keywords": [ - "dev", - "phpcs" - ], - "support": { - "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.14.1" - }, - "funding": [ - { - "url": "https://github.com/kukulich", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", - "type": "tidelift" - } - ], - "time": "2023-10-08T07:28:08+00:00" - }, - { - "name": "softcreatr/jsonpath", - "version": "0.8.3", - "source": { - "type": "git", - "url": "https://github.com/SoftCreatR/JSONPath.git", - "reference": "fc12dee0b46f3fa3a175c4051dbab60984acef4b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SoftCreatR/JSONPath/zipball/fc12dee0b46f3fa3a175c4051dbab60984acef4b", - "reference": "fc12dee0b46f3fa3a175c4051dbab60984acef4b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=8.0" - }, - "replace": { - "flow/jsonpath": "*" - }, - "require-dev": { - "phpunit/phpunit": "^9.6", - "roave/security-advisories": "dev-latest" - }, - "type": "library", - "autoload": { - "psr-4": { - "Flow\\JSONPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Stephen Frank", - "email": "stephen@flowsa.com", - "homepage": "https://prismaticbytes.com", - "role": "Developer" - }, - { - "name": "Sascha Greuel", - "email": "hello@1-2.dev", - "homepage": "https://1-2.dev", - "role": "Developer" - } - ], - "description": "JSONPath implementation for parsing, searching and flattening arrays", - "support": { - "email": "hello@1-2.dev", - "forum": "https://github.com/SoftCreatR/JSONPath/discussions", - "issues": "https://github.com/SoftCreatR/JSONPath/issues", - "source": "https://github.com/SoftCreatR/JSONPath" - }, - "funding": [ - { - "url": "https://ecologi.com/softcreatr?r=61212ab3fc69b8eb8a2014f4", - "type": "custom" - }, - { - "url": "https://github.com/softcreatr", - "type": "github" - } - ], - "time": "2023-08-17T20:14:00+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.8.1", - "source": { - "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/14f5fff1e64118595db5408e946f3a22c75807f7", - "reference": "14f5fff1e64118595db5408e946f3a22c75807f7", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" - }, - "bin": [ - "bin/phpcbf", - "bin/phpcs" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "Former lead" - }, - { - "name": "Juliette Reinders Folmer", - "role": "Current lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards", - "static analysis" - ], - "support": { - "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", - "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" - }, - "funding": [ - { - "url": "https://github.com/PHPCSStandards", - "type": "github" - }, - { - "url": "https://github.com/jrfnl", - "type": "github" - }, - { - "url": "https://opencollective.com/php_codesniffer", - "type": "open_collective" - } - ], - "time": "2024-01-11T20:47:48+00:00" - }, - { - "name": "symfony/config", - "version": "v7.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/8789646600f4e7e451dde9e1dc81cfa429f3857a", - "reference": "8789646600f4e7e451dde9e1dc81cfa429f3857a", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^6.4|^7.0", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v7.0.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-11-09T08:30:23+00:00" - }, - { - "name": "symfony/dependency-injection", - "version": "v7.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/bd25ef7c937b9da12510bdc4f1c66728f19620e3", - "reference": "bd25ef7c937b9da12510bdc4f1c66728f19620e3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^3.3", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<6.4", - "symfony/finder": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "symfony/service-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "symfony/config": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-12-28T19:18:20+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v7.0.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/345c62fefe92243c3a06fc0cc65f2ec1a47e0764", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-12-27T08:42:13+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.0.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", - "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.0.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-01-23T15:02:46+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2023-11-20T00:12:19+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=8.2" - }, - "platform-dev": [], - "plugin-api-version": "2.6.0" -} diff --git a/.drevops/devtool/devtool b/.drevops/devtool/devtool deleted file mode 100755 index 1c6c8d452..000000000 --- a/.drevops/devtool/devtool +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env php - - - Custom PHPCS standard. - - - - - - - - - - - src - tests/phpunit - - - - *.Test\.php - *.TestCase\.php - *.test - - - - - *.Test\.php - *.TestCase\.php - *.test - - - - - *.Test\.php - *.TestCase\.php - *.test - - diff --git a/.drevops/devtool/phpmd.xml b/.drevops/devtool/phpmd.xml deleted file mode 100644 index 7d3cedb37..000000000 --- a/.drevops/devtool/phpmd.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - diff --git a/.drevops/devtool/phpstan.neon b/.drevops/devtool/phpstan.neon deleted file mode 100644 index 53eed2191..000000000 --- a/.drevops/devtool/phpstan.neon +++ /dev/null @@ -1,26 +0,0 @@ -## -# Configuration file for PHPStan static code checking, see https://phpstan.org . -# - -parameters: - - level: 3 - - paths: - - src - - tests/phpunit - - excludePaths: - - vendor/* - - node_modules/* - - # Do not report on ignored errors that do not occur in the results. - reportUnmatchedIgnoredErrors: false - - ignoreErrors: - - - # Since tests and data providers do not have to have parameter docblocks, - # it is not possible to specify the type of the parameter, so we ignore - # this error. - message: '#.*no value type specified in iterable type array.#' - path: tests/phpunit/* diff --git a/.drevops/devtool/phpunit.xml b/.drevops/devtool/phpunit.xml deleted file mode 100644 index a64ad6068..000000000 --- a/.drevops/devtool/phpunit.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - tests/phpunit - - - - - - src - - - - - - - - - - diff --git a/.drevops/devtool/rector.php b/.drevops/devtool/rector.php deleted file mode 100644 index a158b559c..000000000 --- a/.drevops/devtool/rector.php +++ /dev/null @@ -1,65 +0,0 @@ -paths([ - __DIR__ . '/**', - ]); - - $rectorConfig->sets([ - SetList::PHP_80, - SetList::PHP_81, - SetList::CODE_QUALITY, - SetList::CODING_STYLE, - SetList::DEAD_CODE, - SetList::INSTANCEOF, - SetList::TYPE_DECLARATION, - ]); - - $rectorConfig->skip([ - // Rules added by Rector's rule sets. - ArraySpreadInsteadOfArrayMergeRector::class, - CountArrayToEmptyArrayComparisonRector::class, - DisallowedEmptyRuleFixerRector::class, - InlineArrayReturnAssignRector::class, - NewlineAfterStatementRector::class, - NewlineBeforeNewAssignSetRector::class, - PostIncDecToPreIncDecRector::class, - RemoveAlwaysTrueIfConditionRector::class, - SimplifyEmptyCheckOnEmptyArrayRector::class, - // Dependencies. - '*/vendor/*', - '*/node_modules/*', - ]); - - $rectorConfig->fileExtensions([ - 'php', - 'inc', - ]); - - $rectorConfig->importNames(TRUE, FALSE); - $rectorConfig->importShortClasses(FALSE); -}; diff --git a/.drevops/devtool/src/Command/DevToolCommand.php b/.drevops/devtool/src/Command/DevToolCommand.php deleted file mode 100644 index c47eaf1a7..000000000 --- a/.drevops/devtool/src/Command/DevToolCommand.php +++ /dev/null @@ -1,65 +0,0 @@ -io = $this->initIo($input, $output); - - $exit_code = $this->doExecute($input); - - $this->io->success('Finished ' . strtolower($this->getDescription())); - - return $exit_code; - } - - /** - * Execute command's business logic. - * - * @return int - * Command exit code. - */ - abstract protected function doExecute(InputInterface $input): int; - - /** - * Initialize IO. - * - * @param \Symfony\Component\Console\Input\InputInterface $input - * Input. - * @param \Symfony\Component\Console\Output\OutputInterface $output - * Output. - * - * @return \Symfony\Component\Console\Style\SymfonyStyle - * IO. - */ - protected function initIo(InputInterface $input, OutputInterface $output): SymfonyStyle { - // Add support for ''. - $output->getFormatter()->setStyle('code', new OutputFormatterStyle('yellow')); - - // Add support for ''. - $output->getFormatter()->setStyle('bold', new OutputFormatterStyle(NULL, NULL, ['bold'])); - - return new SymfonyStyle($input, $output); - } - -} diff --git a/.drevops/devtool/src/Command/ScaffoldUpdateCommand.php b/.drevops/devtool/src/Command/ScaffoldUpdateCommand.php deleted file mode 100644 index c4fe96506..000000000 --- a/.drevops/devtool/src/Command/ScaffoldUpdateCommand.php +++ /dev/null @@ -1,58 +0,0 @@ -setDescription('Update scaffold files') - ->addOption('root', 'r', InputOption::VALUE_REQUIRED, 'Path to the root of the project', getcwd()); - } - - /** - * {@inheritdoc} - */ - protected function doExecute(InputInterface $input): int { - $root = $input->getOption('root'); - if (!is_string($root)) { - throw new \InvalidArgumentException('Root must be a string'); - } - $this->root = $root; - - $this->io->write('Updating composer.json... '); - (new ScaffoldManager($this->root))->update(); - $this->io->write('OK'); - - return Command::SUCCESS; - } - -} diff --git a/.drevops/devtool/src/Composer/ComposerJsonManipulator.php b/.drevops/devtool/src/Composer/ComposerJsonManipulator.php deleted file mode 100644 index 39e4ee101..000000000 --- a/.drevops/devtool/src/Composer/ComposerJsonManipulator.php +++ /dev/null @@ -1,208 +0,0 @@ -getContents()); - } - - /** - * Save to file. - * - * @param string $path - * Path to file. - */ - public function save(string $path): void { - file_put_contents($path, JsonFile::encode(json_decode($this->getContents()), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . $this->getNewline()); - } - - /** - * Add repository. - * - * @param string $name - * Repository name. - * @param mixed $config - * Repository config. - * @param bool $append - * Append to existing repositories. - * - * @return bool - * TRUE if added. - * - * @SuppressWarnings(PHPMD.UnusedFormalParameter) - */ - public function addRepository(string $name, mixed $config, bool $append = TRUE): bool { - $json = $this->getFormattedData(); - - if (!empty($json['repositories'])) { - if ($append) { - $json['repositories'][] = $config; - } - else { - $json['repositories'] = [$config]; - } - } - else { - $json['repositories'] = [$config]; - } - - return $this->addProperty('repositories', $json['repositories']); - } - - /** - * Add dependency. - * - * @param string $package - * Package name. - * @param string $version - * Package version. - * @param bool $is_dev - * Is dev dependency. - * - * @return bool - * TRUE if added. - */ - public function addDependency(string $package, string $version, bool $is_dev = FALSE): bool { - $this->validatePackageName($package); - $this->validatePackageVersion($version); - - return $this->addLink($is_dev ? 'require-dev' : 'require', $package, $version, TRUE); - } - - /** - * Add a dev dependency. - * - * @param string $package - * Package name. - * @param string $version - * Package version. - * - * @return bool - * TRUE if added. - */ - public function addDevDependency(string $package, string $version): bool { - return $this->addDependency($package, $version, TRUE); - } - - /** - * Add property after a specified property. - * - * @param string $name - * Property name. - * @param mixed $value - * Property value. - * @param string $after - * Property name after which the value should be added. - */ - public function addPropertyAfter(string $name, mixed $value, string $after): void { - $json = $this->getFormattedData(); - - $name_parents = explode('.', $name); - $name_single = array_pop($name_parents); - - $after_parents = explode('.', $after); - $after_single = array_pop($after_parents); - - $existing_value_parent = Arrays::getValue($json, $after_parents); - if (!is_null($existing_value_parent)) { - $existing_value_parent = Arrays::insertAfterKey($existing_value_parent, $after_single, $name_single, $value); - - Arrays::setValue($json, $name_parents, $existing_value_parent); - - $this->refreshContents($json); - } - } - - /** - * Merge property. - * - * @param string $name - * Property name. - * @param array $value - * Property value. - * @param bool $sort - * Should sort after merge. - */ - public function mergeProperty(string $name, array $value, bool $sort = FALSE): void { - $json = $this->getFormattedData(); - - $existing_value = Arrays::getValue($json, $name); - $existing_value = $existing_value ?: []; - $existing_value = Arrays::mergeDeep($existing_value, $value); - - if ($sort) { - ksort($existing_value); - } - - Arrays::setValue($json, $name, $existing_value); - - $this->refreshContents($json); - } - - /** - * Refresh contents with new data. - */ - protected function refreshContents(mixed $data): void { - $reflection = new \ReflectionClass($this); - $property = $reflection->getParentClass()->getProperty('contents'); - $property->setAccessible(TRUE); - $property->setValue($this, $this->format($data)); - } - - /** - * Get newline. - */ - protected function getNewline(): string { - $reflection = new \ReflectionClass($this); - $property = $reflection->getParentClass()->getProperty('newline'); - $property->setAccessible(TRUE); - - return $property->getValue($this); - } - - /** - * Validate package name. - */ - protected function validatePackageName($name) { - // Regular expression for standard package names. - $standardPattern = '/^[a-z0-9_.-]+\/[a-z0-9_.-]+$/i'; - - // List of special package names. - $specialPackages = ['php', 'ext-', 'lib-']; - - // Check if package name matches any special package patterns. - $isSpecialPackage = array_reduce($specialPackages, static function ($carry, $item) use ($name) : bool { - return $carry || str_starts_with((string) $name, $item); - }, FALSE); - - if (!$isSpecialPackage && !preg_match($standardPattern, (string) $name)) { - throw new \InvalidArgumentException(sprintf('Invalid package name "%s", should be in the form vendor/package or a special package (php, ext-*, lib-*)', $name)); - } - } - - /** - * Validate package version. - */ - protected function validatePackageVersion($version) { - $versionParser = new VersionParser(); - $versionParser->parseConstraints($version); - } - -} diff --git a/.drevops/devtool/src/Docker/DockerCommand.php b/.drevops/devtool/src/Docker/DockerCommand.php deleted file mode 100644 index ccdf96303..000000000 --- a/.drevops/devtool/src/Docker/DockerCommand.php +++ /dev/null @@ -1,72 +0,0 @@ -keyword = $keyword; - } - - /** - * Get the command keyword. - */ - public function getKeyword(): string { - return $this->keyword; - } - - /** - * Get the command arguments. - */ - public function getArguments(): string { - return $this->arguments; - } - -} diff --git a/.drevops/devtool/src/Docker/DockerfileParser.php b/.drevops/devtool/src/Docker/DockerfileParser.php deleted file mode 100644 index 0f8202818..000000000 --- a/.drevops/devtool/src/Docker/DockerfileParser.php +++ /dev/null @@ -1,54 +0,0 @@ - - * An array of DockerCommand objects. - */ - public static function parse(string $path): array { - $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - $commands = []; - $currentCommand = ''; - - foreach ($lines as $line) { - // Check for continuation lines. - if (preg_match('/\\\\\s*$/', $line)) { - $currentCommand .= preg_replace('/\\\\\s*$/', ' ', $line); - continue; - } - - $currentCommand .= $line; - - // Split the command into keyword and arguments. - if (preg_match('/^(\w+)\s+(.*)$/', $currentCommand, $matches)) { - try { - $command = new DockerCommand($matches[1], $matches[2]); - } - catch (\Exception) { - continue; - } - $commands[] = $command; - } - - $currentCommand = ''; - } - - return $commands; - } - -} diff --git a/.drevops/devtool/src/Scaffold/AbstractScaffoldComponent.php b/.drevops/devtool/src/Scaffold/AbstractScaffoldComponent.php deleted file mode 100644 index 6dae55e87..000000000 --- a/.drevops/devtool/src/Scaffold/AbstractScaffoldComponent.php +++ /dev/null @@ -1,69 +0,0 @@ -resourceUrls() as $root_file => $remote_file) { - $this->files[$root_file] = $this->downloader->download($remote_file, $this->stubDir . DIRECTORY_SEPARATOR . basename($root_file)); - } - - $this->processResources(); - } - - /** - * Return an array of resource files. - */ - abstract protected function resourceUrls(): array; - - /** - * Process resources. - */ - abstract protected function processResources(); - -} diff --git a/.drevops/devtool/src/Scaffold/ComposerJsonScaffoldComponent.php b/.drevops/devtool/src/Scaffold/ComposerJsonScaffoldComponent.php deleted file mode 100644 index a1a221680..000000000 --- a/.drevops/devtool/src/Scaffold/ComposerJsonScaffoldComponent.php +++ /dev/null @@ -1,169 +0,0 @@ - 'https://raw.githubusercontent.com/drupal-composer/drupal-project/10.x/composer.json', - ]; - } - - /** - * {@inheritdoc} - */ - protected function processResources() { - $manipulator = new ComposerJsonManipulator(file_get_contents($this->files['composer.json'])); - - $this->alter($manipulator); - - $manipulator->save($this->files['composer.json']); - } - - /** - * Alter composer.json. - * - * @param \DrevOps\DevTool\Composer\ComposerJsonManipulator $m - * ComposerJsonManipulator instance. - */ - protected function alter(ComposerJsonManipulator $m) { - $m->addProperty('name', 'your_org/your_site'); - $m->addProperty('description', 'Drupal 10 implementation of YOURSITE for YOURORG'); - $m->addProperty('license', 'proprietary'); - $m->removeProperty('authors'); - - $m->addRepository('asset-packagist', [ - 'type' => 'composer', - 'url' => 'https://asset-packagist.org', - ]); - - $m->addDependency('php', '>=8.2'); - $m->addDependency('drupal/admin_toolbar', '^3.1'); - $m->addDependency('drupal/clamav', '^2.0.2'); - $m->addDependency('drupal/coffee', '^1.2'); - $m->addDependency('drupal/config_split', '^1'); - $m->addDependency('drupal/config_update', '^2@alpha'); - $m->addDependency('drupal/environment_indicator', '^4.0'); - $m->addDependency('drupal/pathauto', '^1.10'); - $m->addDependency('drupal/redirect', '^1.7'); - $m->addDependency('drupal/redis', '^1.6'); - $m->addDependency('drupal/search_api', '^1.29'); - $m->addDependency('drupal/search_api_solr', '^4.2'); - $m->addDependency('drupal/shield', '^1.6'); - $m->addDependency('drupal/stage_file_proxy', '^2'); - $m->addDependency('drush/drush', '^12'); - $m->addDependency('oomphinc/composer-installers-extender', '^2.0'); - - $m->addDevDependency('behat/behat', '^3.10'); - $m->addDevDependency('dealerdirect/phpcodesniffer-composer-installer', '^0.7'); - $m->addDevDependency('drevops/behat-format-progress-fail', '^1'); - $m->addDevDependency('drevops/behat-screenshot', '^1'); - $m->addDevDependency('drevops/behat-steps', '^2'); - $m->addDevDependency('drupal/drupal-extension', '^5@rc'); - $m->addDevDependency('friendsoftwig/twigcs', '^6.2'); - $m->addDevDependency('mglaman/phpstan-drupal', '^1.2'); - $m->addDevDependency('palantirnet/drupal-rector', '^0.19'); - $m->addDevDependency('phpcompatibility/php-compatibility', '^9.3'); - $m->addDevDependency('phpmd/phpmd', '^2.13'); - $m->addDevDependency('phpspec/prophecy-phpunit', '^2.0'); - $m->addDevDependency('phpstan/extension-installer', '^1.3'); - $m->addDevDependency('pyrech/composer-changelogs', '^1.8'); - - $m->addProperty('minimum-stability', 'stable'); - - $m->addConfigSetting('platform', ['php' => $this->getPlatformPhpVersion() ?: '8.2.13']); - - $m->mergeProperty('config.allow-plugins', [ - 'oomphinc/composer-installers-extender' => TRUE, - 'pyrech/composer-changelogs' => TRUE, - ], TRUE); - - // @see https://github.com/drevops/drevops/issues/806 - $m->removeSubNode('autoload', 'files'); - - $m->addPropertyAfter('autoload-dev', [ - 'classmap' => [ - 'tests/phpunit/', - ], - ], 'autoload'); - - $m->mergeProperty('extra.drupal-scaffold', [ - 'file-mapping' => [ - '[project-root]/.editorconfig' => FALSE, - '[project-root]/.gitattributes' => FALSE, - '[web-root]/.htaccess' => FALSE, - '[web-root]/.ht.router.php' => FALSE, - '[web-root]/example.gitignore' => FALSE, - '[web-root]/INSTALL.txt' => FALSE, - '[web-root]/README.txt' => FALSE, - '[web-root]/sites/example.settings.local.php' => FALSE, - '[web-root]/sites/example.sites.php' => FALSE, - '[web-root]/web.config' => FALSE, - ], - ]); - - $m->mergeProperty('extra.installer-paths', [ - 'web/libraries/{$name}' => [ - 'type:bower-asset', - 'type:npm-asset', - ], - 'web/modules/custom/{$name}' => [ - 'type:drupal-custom-module', - ], - 'web/themes/custom/{$name}' => [ - 'type:drupal-custom-theme', - ], - ]); - - $m->addPropertyAfter('extra.installer-types', [ - "bower-asset", - "npm-asset", - "drupal-library", - ], 'extra.installer-paths'); - } - - /** - * Get the PHP version from the platform. - */ - protected function getPlatformPhpVersion() { - $version = NULL; - - // Parse the CLI Dockerfile for commands. - $commands = DockerfileParser::parse($this->rootDir . '/.docker/cli.dockerfile'); - $from_commands = array_filter($commands, static function (DockerCommand $command) : bool { - return $command->getKeyword() === 'FROM'; - }); - - if (!empty($from_commands)) { - $from_command = reset($from_commands); - $image_name = $from_command->getArguments(); - - // Get the PHP version from the image. - $output = shell_exec('docker run --rm ' . $image_name . ' bash -c "echo \$PHP_VERSION"'); - - // Parse the version number from the output. - if (!empty($output) && !preg_match('/\b\d+\.\d+\.\d+\b/', $output, $matches)) { - // Returns the first match which should be the version number. - $version = $matches[0]; - } - } - - return $version; - } - -} diff --git a/.drevops/devtool/src/Scaffold/ScaffoldManager.php b/.drevops/devtool/src/Scaffold/ScaffoldManager.php deleted file mode 100644 index 1031ec52d..000000000 --- a/.drevops/devtool/src/Scaffold/ScaffoldManager.php +++ /dev/null @@ -1,70 +0,0 @@ -fs = new Filesystem(); - $this->stubDir = sys_get_temp_dir() . '/temp_' . uniqid(); - $this->fs->mkdir($this->stubDir); - } - - /** - * Update root using scaffold. - */ - public function update(): void { - $component_classes = ClassLoader::load(__DIR__, AbstractScaffoldComponent::class); - usort($component_classes, static function ($a, $b) : int { - return $a::$weight <=> $b::$weight; - }); - - $downloader = new Downloader(); - foreach ($component_classes as $component_class) { - $component = new $component_class($this->root, $this->stubDir, $downloader); - $component->process(); - } - - if (!empty($component_classes)) { - $this->updateRoot(); - } - } - - /** - * Update root directory. - */ - protected function updateRoot() { - $this->fs->mirror($this->stubDir, $this->root); - } - -} diff --git a/.drevops/devtool/src/Utils/Arrays.php b/.drevops/devtool/src/Utils/Arrays.php deleted file mode 100644 index be46ab306..000000000 --- a/.drevops/devtool/src/Utils/Arrays.php +++ /dev/null @@ -1,216 +0,0 @@ - $value) { - $newArray[$currentKey] = $value; - - if ($currentKey === $key) { - $newArray[$new_key] = $new_value; - $inserted = TRUE; - } - } - - if (!$inserted) { - $newArray[$new_key] = $new_value; - } - - return $newArray; - } - - /** - * Get a value from an array using a string of dot-separated keys. - * - * @param array $array - * The array from which to get the value. - * @param array|string $parents - * An array of parent keys of the value, starting with the outermost key. - * @param null $key_exists - * (optional) If given, an already defined variable that is altered by - * reference. - * - * @return mixed - * The value specified by the parents or NULL if the parents are not found. - */ - public static function &getValue(array &$array, array|string $parents, &$key_exists = NULL): mixed { - $ref = &$array; - - $parents = is_array($parents) ? $parents : explode('.', $parents); - - foreach ($parents as $parent) { - if (is_array($ref) && \array_key_exists($parent, $ref)) { - $ref = &$ref[$parent]; - } - else { - $key_exists = FALSE; - $null = NULL; - - return $null; - } - } - $key_exists = TRUE; - - return $ref; - } - - /** - * Set a value in an array using a string of dot-separated keys. - * - * @param array $array - * The array in which to set the value. - * @param array|string $parents - * An array of parent keys of the value, starting with the outermost key. - * @param mixed $value - * The value to set. - * @param bool $force - * (optional) If TRUE, any non-array parents will be converted to an array. - */ - public static function setValue(array &$array, array|string $parents, mixed $value, bool $force = FALSE): void { - $ref = &$array; - - $parents = is_array($parents) ? $parents : explode('.', $parents); - - foreach ($parents as $parent) { - // PHP auto-creates container arrays and NULL entries without error if - // $ref is NULL, but throws an error if $ref is set, but not an array. - if ($force && isset($ref) && !is_array($ref)) { - $ref = []; - } - $ref = &$ref[$parent]; - } - $ref = $value; - } - - /** - * Merges multiple arrays, recursively, and returns the merged array. - * - * This function is similar to PHP's array_merge_recursive() function, but it - * handles non-array values differently. When merging values that are not both - * arrays, the latter value replaces the former rather than merging with it. - * - * Example: - * - * @code - * - * $link_options_1 = [ - * 'fragment' => 'x', - * 'attributes' => ['title' => t('X'), 'class' => ['a', 'b']], - * ]; - * $link_options_2 = [ - * 'fragment' => 'y', - * 'attributes' => ['title' => t('Y'), 'class' => ['c', 'd']], - * ]; - * - * // This results in - * [ - * 'fragment' => ['x', 'y'], - * 'attributes' => [ - * 'title' => [t('X'), t('Y')], - * 'class' => ['a', 'b', 'c', 'd'] - * ] - * ] - * $incorrect = array_merge_recursive($link_options_1, $link_options_2); - * - * // This results in - * [ - * 'fragment' => 'y', - * 'attributes' => [ - * 'title' => t('Y'), - * 'class' => ['a', 'b', 'c', 'd'] - * ] - * ] - * $correct = Arrays::mergeDeep($link_options_1, $link_options_2); - * @endcode - * - * @param array ... - * Arrays to merge. - * - * @return array - * The merged array. - * - * @see Arrays::mergeDeepArray() - * @phpstan-ignore-next-line - */ - public static function mergeDeep(): array { - return self::mergeDeepArray(func_get_args()); - } - - /** - * Merges multiple arrays, recursively, and returns the merged array. - * - * This function is equivalent to Arrays::mergeDeep(), except the - * input arrays are passed as a single array parameter rather than a variable - * parameter list. - * - * The following are equivalent: - * - Arrays::mergeDeep($a, $b); - * - Arrays::mergeDeepArray(array($a, $b)); - * - * The following are also equivalent: - * - call_user_func_array('Arrays::mergeDeep', $arrays_to_merge); - * - Arrays::mergeDeepArray($arrays_to_merge); - * - * @param array $arrays - * An arrays of arrays to merge. - * @param bool $preserve_integer_keys - * (optional) If given, integer keys will be preserved and merged instead of - * appended. Defaults to FALSE. - * - * @return array - * The merged array. - * - * @see Arrays::mergeDeep() - */ - public static function mergeDeepArray(array $arrays, bool $preserve_integer_keys = FALSE): array { - $result = []; - foreach ($arrays as $array) { - foreach ($array as $key => $value) { - // Renumber integer keys as array_merge_recursive() does unless - // $preserve_integer_keys is set to TRUE. Note that PHP automatically - // converts array keys that are integer strings (e.g., '1') to integers. - if (is_int($key) && !$preserve_integer_keys) { - $result[] = $value; - } - // Recurse when both values are arrays. - elseif (isset($result[$key]) && is_array($result[$key]) && is_array($value)) { - $result[$key] = self::mergeDeepArray([$result[$key], $value], $preserve_integer_keys); - } - // Otherwise, use the latter value, overriding any previous value. - else { - $result[$key] = $value; - } - } - } - - return $result; - } - -} diff --git a/.drevops/devtool/src/Utils/ClassLoader.php b/.drevops/devtool/src/Utils/ClassLoader.php deleted file mode 100644 index 61383b13a..000000000 --- a/.drevops/devtool/src/Utils/ClassLoader.php +++ /dev/null @@ -1,97 +0,0 @@ - $class) { - if (!is_subclass_of($class, $parent_class) || (new \ReflectionClass($class))->isAbstract()) { - unset($classes[$k]); - } - } - - return $classes; - } - - /** - * Glob files. - * - * @param string $directory - * Directory to scan. - * @param string $pattern - * Pattern to match. - * - * @return array - * Array of files. - */ - protected static function glob(string $directory, string $pattern): array { - $files = []; - - foreach (scandir($directory) as $filename) { - // @phpcs:disable Drupal.Functions.DiscouragedFunctions.Discouraged - if (fnmatch($pattern, $filename)) { - $files[] = $directory . '/' . $filename; - } - } - - return $files; - } - -} diff --git a/.drevops/devtool/src/Utils/Downloader.php b/.drevops/devtool/src/Utils/Downloader.php deleted file mode 100644 index d253e4dbb..000000000 --- a/.drevops/devtool/src/Utils/Downloader.php +++ /dev/null @@ -1,56 +0,0 @@ -httpClient = $client ?: HttpClient::create(); - $this->fs = $fs ?: new Filesystem(); - } - - /** - * Download file. - * - * @param string $src - * Source URL. - * @param string $dst - * Destination path. - */ - public function download(string $src, string $dst): string { - $response = $this->httpClient->request('GET', $src); - - if ($response->getStatusCode() !== 200) { - throw new \Exception(sprintf('Failed to download the file from %s.', $src)); - } - - $this->fs->appendToFile($dst, $response->getContent()); - - return $dst; - } - -} diff --git a/.drevops/devtool/src/app.php b/.drevops/devtool/src/app.php deleted file mode 100644 index 90ef7ae6f..000000000 --- a/.drevops/devtool/src/app.php +++ /dev/null @@ -1,19 +0,0 @@ -setName('DrevOps development tool'); - -$command = new ScaffoldUpdateCommand(); -$application->add($command); - -$application->run(); -// @codeCoverageIgnoreEnd diff --git a/.drevops/devtool/tests/.gitkeep b/.drevops/devtool/tests/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/.drevops/devtool/tests/phpunit/Fixtures/.gitkeep b/.drevops/devtool/tests/phpunit/Fixtures/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/.drevops/devtool/tests/phpunit/Fixtures/root_dir/.docker/cli.dockerfile b/.drevops/devtool/tests/phpunit/Fixtures/root_dir/.docker/cli.dockerfile deleted file mode 100644 index 12bbb3bfd..000000000 --- a/.drevops/devtool/tests/phpunit/Fixtures/root_dir/.docker/cli.dockerfile +++ /dev/null @@ -1,86 +0,0 @@ -# CLI container. -# -# All CLI operations performed in this container. -# -# @see https://hub.docker.com/r/uselagoon/php-8.2-cli-drupal/tags -# @see https://github.com/uselagoon/lagoon-images/tree/main/images/php-cli-drupal -FROM uselagoon/php-8.2-cli-drupal:24.1.0 - -# Add missing variables. -# @todo Remove once https://github.com/uselagoon/lagoon/issues/3121 is resolved. -ARG LAGOON_PR_HEAD_BRANCH="" -ENV LAGOON_PR_HEAD_BRANCH=${LAGOON_PR_HEAD_BRANCH} -ARG LAGOON_PR_HEAD_SHA="" -ENV LAGOON_PR_HEAD_SHA=${LAGOON_PR_HEAD_SHA} - -# Webroot is used for Drush aliases. -ARG WEBROOT=web - -ARG GITHUB_TOKEN="" -ENV GITHUB_TOKEN=${GITHUB_TOKEN} - -# Set default values for environment variables. -# These values will be overridden if set in docker-compose.yml or .env file -# during build stage. -ENV WEBROOT=${WEBROOT} \ - COMPOSER_ALLOW_SUPERUSER=1 \ - COMPOSER_CACHE_DIR=/tmp/.composer/cache \ - SIMPLETEST_DB=mysql://drupal:drupal@mariadb/drupal \ - SIMPLETEST_BASE_URL=http://nginx:8080 \ - SYMFONY_DEPRECATIONS_HELPER=disabled - -# Strating from this line, Docker will add result of each command into a -# separate layer. These layers are then cached and re-used when the project is -# rebuilt. -# Note that layers are only rebuilt if files added into the image with `ADD` -# have changed since the last build. So, adding files that are unlikely to -# change earlier in the build process (closer to the start of this file) -# reduce build time. - -# Adding more tools. -RUN apk add --no-cache ncurses=6.4_p20231125-r0 pv=1.8.5-r0 tzdata=2023c-r1 - -# Adding patches and scripts. -COPY patches /app/patches -COPY scripts /app/scripts - -# Copy files required for PHP dependencies resolution. -# Note that composer.lock is not explicitly copied, allowing to run the stack -# without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). composer.lock should be comitted to the -# repository. -# File .env (and other environment files) is copied into image as it may be -# required by composer scripts to get some additions variables. -COPY composer.json composer.* .env* auth* /app/ - -# Install PHP dependencies without including development dependencies. This is -# crucial as it prevents potential security vulnerabilities from being exposed -# to the production environment. -RUN if [ -n "${GITHUB_TOKEN}" ]; then export COMPOSER_AUTH="{\"github-oauth\": {\"github.com\": \"${GITHUB_TOKEN}\"}}"; fi && \ - COMPOSER_MEMORY_LIMIT=-1 composer install -n --no-dev --ansi --prefer-dist --optimize-autoloader - -# Install NodeJS dependencies. -# Note that package-lock.json is not explicitly copied, allowing to run the -# stack without existing lock file (this is not advisable, but allows to build -# using latest versions of packages). package-lock.json should be comitted to -# the repository. -# File Gruntfile.js is copied into image as it is required to generate -# front-end assets. -COPY ${WEBROOT}/themes/custom/your_site_theme/Gruntfile.js ${WEBROOT}/themes/custom/your_site_theme/.eslintrc.json ${WEBROOT}/themes/custom/your_site_theme/package.json ${WEBROOT}/themes/custom/your_site_theme/package* /app/${WEBROOT}/themes/custom/your_site_theme/ -COPY ${WEBROOT}/themes/custom/your_site_theme/patches /app/${WEBROOT}/themes/custom/your_site_theme/patches - -# Install NodeJS dependencies. -# Since Drupal does not use NodeJS for production, it does not matter if we -# install development dependencnies here - they are not exposed in any way. -RUN npm --prefix /app/${WEBROOT}/themes/custom/your_site_theme install --no-audit --no-progress --unsafe-perm - -# Copy all files into appllication source directory. Existing files are always -# overridden. -COPY . /app - -# Compile front-end assets. Running this after copying all files as we need -# sources to compile assets. -WORKDIR /app/${WEBROOT}/themes/custom/your_site_theme -RUN npm run build - -WORKDIR /app diff --git a/.drevops/devtool/tests/phpunit/Fixtures/root_dir/composer.json b/.drevops/devtool/tests/phpunit/Fixtures/root_dir/composer.json deleted file mode 100644 index 33a6e54aa..000000000 --- a/.drevops/devtool/tests/phpunit/Fixtures/root_dir/composer.json +++ /dev/null @@ -1,159 +0,0 @@ -{ - "name": "your_org/your_site", - "description": "Drupal 10 implementation of YOURSITE for YOURORG", - "type": "project", - "license": "proprietary", - "repositories": [ - { - "type": "composer", - "url": "https://packages.drupal.org/8" - }, - { - "type": "composer", - "url": "https://asset-packagist.org" - } - ], - "require": { - "php": ">=8.1", - "composer/installers": "^2.1", - "cweagans/composer-patches": "^1.7", - "drupal/admin_toolbar": "^3.1", - "drupal/clamav": "^2.0.2", - "drupal/coffee": "^1.2", - "drupal/config_split": "^1", - "drupal/config_update": "^2@alpha", - "drupal/core-composer-scaffold": "^10.0.0", - "drupal/core-recommended": "^10.0.0", - "drupal/environment_indicator": "^4.0", - "drupal/pathauto": "^1.10", - "drupal/redirect": "^1.7", - "drupal/redis": "^1.6", - "drupal/search_api": "^1.29", - "drupal/search_api_solr": "^4.2", - "drupal/shield": "^1.6", - "drupal/stage_file_proxy": "^2", - "drush/drush": "^12", - "oomphinc/composer-installers-extender": "^2.0", - "vlucas/phpdotenv": "^5.1", - "webflo/drupal-finder": "^1.2" - }, - "require-dev": { - "behat/behat": "^3.10", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "drevops/behat-format-progress-fail": "^1", - "drevops/behat-screenshot": "^1", - "drevops/behat-steps": "^2", - "drupal/core-dev": "^10.0.0", - "drupal/drupal-extension": "^5@rc", - "friendsoftwig/twigcs": "^6.2", - "mglaman/phpstan-drupal": "^1.2", - "palantirnet/drupal-rector": "^0.18", - "phpcompatibility/php-compatibility": "^9.3", - "phpmd/phpmd": "^2.13", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.3", - "pyrech/composer-changelogs": "^1.8" - }, - "conflict": { - "drupal/drupal": "*" - }, - "minimum-stability": "stable", - "prefer-stable": true, - "config": { - "discard-changes": true, - "sort-packages": true, - "allow-plugins": { - "composer/installers": true, - "cweagans/composer-patches": true, - "dealerdirect/phpcodesniffer-composer-installer": true, - "drupal/core-composer-scaffold": true, - "oomphinc/composer-installers-extender": true, - "phpstan/extension-installer": true, - "pyrech/composer-changelogs": true - }, - "platform": { - "php": "8.1.0" - } - }, - "autoload": { - "classmap": [ - "scripts/composer/ScriptHandler.php" - ] - }, - "autoload-dev": { - "classmap": [ - "tests/phpunit/" - ] - }, - "scripts": { - "pre-install-cmd": [ - "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" - ], - "pre-update-cmd": [ - "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" - ], - "post-install-cmd": [ - "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" - ], - "post-update-cmd": [ - "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" - ] - }, - "extra": { - "drupal-scaffold": { - "locations": { - "web-root": "web/" - }, - "file-mapping": { - "[project-root]/.editorconfig": false, - "[project-root]/.gitattributes": false, - "[web-root]/.htaccess": false, - "[web-root]/.ht.router.php": false, - "[web-root]/example.gitignore": false, - "[web-root]/INSTALL.txt": false, - "[web-root]/README.txt": false, - "[web-root]/sites/example.settings.local.php": false, - "[web-root]/sites/example.sites.php": false, - "[web-root]/web.config": false - } - }, - "installer-paths": { - "web/core": [ - "type:drupal-core" - ], - "web/libraries/{$name}": [ - "type:drupal-library", - "type:bower-asset", - "type:npm-asset" - ], - "web/modules/contrib/{$name}": [ - "type:drupal-module" - ], - "web/profiles/contrib/{$name}": [ - "type:drupal-profile" - ], - "web/themes/contrib/{$name}": [ - "type:drupal-theme" - ], - "drush/Commands/contrib/{$name}": [ - "type:drupal-drush" - ], - "web/modules/custom/{$name}": [ - "type:drupal-custom-module" - ], - "web/themes/custom/{$name}": [ - "type:drupal-custom-theme" - ] - }, - "installer-types": [ - "bower-asset", - "npm-asset", - "drupal-library" - ], - "composer-exit-on-patch-failure": true, - "patchLevel": { - "drupal/core": "-p2" - }, - "patches": {} - } -} diff --git a/.drevops/devtool/tests/phpunit/Traits/ArrayTrait.php b/.drevops/devtool/tests/phpunit/Traits/ArrayTrait.php deleted file mode 100644 index c699ad161..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/ArrayTrait.php +++ /dev/null @@ -1,31 +0,0 @@ - $item) { - $array[$k] = is_array($item) ? static::arrayReplaceValue($item, $cb) : $cb($item); - } - - return $array; - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/AssertTrait.php b/.drevops/devtool/tests/phpunit/Traits/AssertTrait.php deleted file mode 100644 index 414dd508c..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/AssertTrait.php +++ /dev/null @@ -1,34 +0,0 @@ -addToAssertionCount(1); - - return; - } - } - $this->fail(sprintf('Failed asserting that string "%s" is present in array %s.', $needle, print_r($haystack, TRUE))); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/ClosureWrapperTrait.php b/.drevops/devtool/tests/phpunit/Traits/ClosureWrapperTrait.php deleted file mode 100644 index a79bf102f..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/ClosureWrapperTrait.php +++ /dev/null @@ -1,48 +0,0 @@ -getClosure() : $callback; - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/EnvTrait.php b/.drevops/devtool/tests/phpunit/Traits/EnvTrait.php deleted file mode 100644 index 8b631ef1b..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/EnvTrait.php +++ /dev/null @@ -1,101 +0,0 @@ - $value) { - if (str_starts_with($name, $prefix)) { - static::envSet($name, $value); - if ($remove) { - unset($input[$name]); - } - } - } - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/MockTrait.php b/.drevops/devtool/tests/phpunit/Traits/MockTrait.php deleted file mode 100644 index dc2acc800..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/MockTrait.php +++ /dev/null @@ -1,82 +0,0 @@ - $methods_map - * Optional array of methods and values, keyed by method name. - * @param array|bool $args - * Optional array of constructor arguments. If omitted, a constructor will - * not be called. If TRUE, the original constructor will be called as-is. - * - * @return \PHPUnit\Framework\MockObject\MockObject - * An instance of the mock. - * - * @SuppressWarnings(PHPMD.CyclomaticComplexity) - */ - protected function prepareMock(string $class, array $methods_map = [], array|bool $args = []): MockObject { - $methods = array_filter(array_keys($methods_map), 'is_string'); - - if (!class_exists($class)) { - throw new \InvalidArgumentException(sprintf('Class %s does not exist', $class)); - } - - $reflection_class = new \ReflectionClass($class); - - if ($reflection_class->isAbstract()) { - $mock = $this->getMockForAbstractClass($class, is_array($args) ? $args : [], '', !empty($args), TRUE, TRUE, $methods); - } - else { - $mock = $this->getMockBuilder($class); - if (is_array($args) && !empty($args)) { - $mock = $mock->enableOriginalConstructor() - ->setConstructorArgs($args); - } - elseif ($args === FALSE) { - $mock = $mock->disableOriginalConstructor(); - } - - if (!empty($methods)) { - $mock = $mock->onlyMethods($methods); - } - - $mock = $mock->getMock(); - } - - foreach ($methods_map as $method => $value) { - // Handle callback values differently. - if ($value instanceof Stub) { - $mock->expects($this->any()) - ->method($method) - ->will($value); - } - elseif (is_callable($value)) { - $mock->expects($this->any()) - ->method($method) - ->willReturnCallback($value); - } - else { - $mock->expects($this->any()) - ->method($method) - ->willReturn($value); - } - } - - return $mock; - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/ReflectionTrait.php b/.drevops/devtool/tests/phpunit/Traits/ReflectionTrait.php deleted file mode 100644 index d13fde60c..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/ReflectionTrait.php +++ /dev/null @@ -1,100 +0,0 @@ -hasMethod($name)) { - throw new \InvalidArgumentException(sprintf('Method %s does not exist', $name)); - } - - $method = $class->getMethod($name); - - $original_accessibility = $method->isPublic(); - - // Set method accessibility to true, so it can be invoked. - $method->setAccessible(TRUE); - - // If the method is static, we won't pass an object instance to invokeArgs() - // Otherwise, we ensure to pass the object instance. - $invoke_object = $method->isStatic() ? NULL : (is_object($object) ? $object : NULL); - - // Ensure we have an object for non-static methods. - if (!$method->isStatic() && $invoke_object === NULL) { - throw new \InvalidArgumentException("An object instance is required for non-static methods"); - } - - $result = $method->invokeArgs($invoke_object, $args); - - // Reset the method's accessibility to its original state. - $method->setAccessible($original_accessibility); - - return $result; - } - - /** - * Set protected property value. - * - * @param object $object - * Object to set the value on. - * @param string $property - * Property name to set the value. Property should exists in the object. - * @param mixed $value - * Value to set to the property. - */ - protected static function setProtectedValue($object, $property, mixed $value): void { - $class = new \ReflectionClass($object::class); - $property = $class->getProperty($property); - $property->setAccessible(TRUE); - - $property->setValue($object, $value); - } - - /** - * Get protected value from the object. - * - * @param object $object - * Object to set the value on. - * @param string $property - * Property name to get the value. Property should exists in the object. - * - * @return mixed - * Protected property value. - */ - protected static function getProtectedValue($object, $property) { - $class = new \ReflectionClass($object::class); - $property = $class->getProperty($property); - $property->setAccessible(TRUE); - - return $property->getValue($class); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Traits/VfsTrait.php b/.drevops/devtool/tests/phpunit/Traits/VfsTrait.php deleted file mode 100644 index 7e4d0cdc4..000000000 --- a/.drevops/devtool/tests/phpunit/Traits/VfsTrait.php +++ /dev/null @@ -1,122 +0,0 @@ -testPath = $this->vfsCreateDirectory('somedir')->url(); - * $this->vfsCreateFile($this->testPath . '/file1'); - * $this->vfsCreateFile($this->testPath . '/file2'); - * } - * - * public function testSomething() { - * // The full path will start with 'vfs://' stream wrapper. - * $this->assertFileExists($this->testPath . '/file1'); - * $this->assertFileExists($this->testPath . '/file2'); - * } - * - * @endcode - */ -trait VfsTrait { - - /** - * The root directory for the virtual file system. - * - * @var \org\bovigo\vfs\vfsStreamDirectory - */ - protected static $vfsRootDirectory; - - /** - * Set up the root directory for the virtual file system. - * - * @param string $name - * The name of the root directory. - */ - public static function vfsSetRoot(string $name = 'root'): void { - self::$vfsRootDirectory = vfsStream::setup($name); - } - - /** - * Create a directory. - * - * @param string $path - * The path to the directory. - * - * @return \org\bovigo\vfs\vfsStreamDirectory - * The directory container. - */ - public static function vfsCreateDirectory(string $path): vfsStreamDirectory { - if (!static::$vfsRootDirectory) { - static::vfsSetRoot(); - } - - $path = static::vfsNormalizePath($path); - - $dirs = explode('/', $path); - $container = static::$vfsRootDirectory; - foreach ($dirs as $dir) { - if (!$container->hasChild($dir)) { - $container = vfsStream::newDirectory($dir)->at($container); - } - else { - $container = $container->getChild($dir); - } - } - - return $container; - } - - /** - * Create a file. - * - * @param string $path - * The path to the file. - * @param string|null $contents - * The contents of the file. - * @param int|null $permissions - * The permissions of the file. - * - * @return \org\bovigo\vfs\vfsStreamFile - * The file container. - */ - public static function vfsCreateFile($path, $contents = NULL, $permissions = NULL): vfsStreamFile { - if (!static::$vfsRootDirectory) { - static::vfsSetRoot(); - } - - $path = static::vfsNormalizePath($path); - - $dirs = explode('/', $path); - $filename = array_pop($dirs); - $container = self::vfsCreateDirectory(implode('/', $dirs)); - - $container = vfsStream::newFile($filename, $permissions)->at($container); - - if ($contents) { - $container->withContent($contents); - } - - return $container; - } - - protected static function vfsNormalizePath(string $path): string { - $prefix = static::$vfsRootDirectory ? static::$vfsRootDirectory->url() . '/' : 'vfs://root/'; - - if (str_starts_with($path, $prefix)) { - $path = substr($path, strlen($prefix)); - } - - return $path; - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Command/CommandTestCase.php b/.drevops/devtool/tests/phpunit/Unit/Command/CommandTestCase.php deleted file mode 100644 index 4fd891663..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Command/CommandTestCase.php +++ /dev/null @@ -1,62 +0,0 @@ - $input - * Optional array of input arguments. - * @param array $options - * Optional array of options. See CommandTester::execute() for details. - * - * @return array - * Array of output lines. - */ - protected function runExecute(string|object $object_or_class, array $input = [], array $options = []): array { - $application = new Application(); - /** @var \Symfony\Component\Console\Command\Command $instance */ - $instance = is_object($object_or_class) ? $object_or_class : new $object_or_class(); - $application->add($instance); - - /** @var string $name */ - $name = $this->getProtectedValue($instance, 'defaultName'); - $command = $application->find($name); - $this->commandTester = new CommandTester($command); - - $this->commandTester->execute($input, $options); - - return explode(PHP_EOL, $this->commandTester->getDisplay()); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Command/ScaffoldUpdateCommandTest.php b/.drevops/devtool/tests/phpunit/Unit/Command/ScaffoldUpdateCommandTest.php deleted file mode 100644 index d1cb44905..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Command/ScaffoldUpdateCommandTest.php +++ /dev/null @@ -1,62 +0,0 @@ -vfsCreateDirectory('root_dir'); - $this->rootDir = $root_dir_container->url(); - - vfsStream::copyFromFileSystem($this->fixturesDir . '/root_dir', $root_dir_container, 1024 * 10); - - $this->scaffoldDir = $this->vfsCreateDirectory('scaffold_dir')->url(); - } - - /** - * Test the execute method. - * - * @covers ::execute - * @covers ::doExecute - * @covers ::initIo - * @covers ::configure - * @group command - */ - public function testExecute(): void { - $output = $this->runExecute(ScaffoldUpdateCommand::class, [ - '--root' => $this->rootDir, - ]); - $this->assertArrayContainsString('Updating composer.json', $output); - - $this->assertArrayContainsString('Finished update scaffold files', $output); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Composer/ComposerJsonManipulatorTest.php b/.drevops/devtool/tests/phpunit/Unit/Composer/ComposerJsonManipulatorTest.php deleted file mode 100644 index 3e1d7df3d..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Composer/ComposerJsonManipulatorTest.php +++ /dev/null @@ -1,395 +0,0 @@ -testJsonFilePath = $this->vfsCreateFile('/test.json')->url(); - } - - /** - * @covers ::save - * @covers ::getFormattedData - * @covers ::getNewline - */ - public function testSave(): void { - $m = new ComposerJsonManipulator(json_encode((object) [ - 'string' => 'value', - 'int' => 1, - 'float' => 1.1, - 'array' => ['a', 'b', 'c'], - 'object' => (object) ['a' => 'b'], - ])); - - $m->save($this->testJsonFilePath); - $actual = JsonFile::parseJson(file_get_contents($this->testJsonFilePath)); - - $this->assertJsonValueEquals($actual, '$.string', 'value'); - $this->assertJsonValueEquals($actual, '$.int', 1); - $this->assertJsonValueEquals($actual, '$.float', 1.1); - $this->assertJsonValueEquals($actual, '$.array', ['a', 'b', 'c']); - $this->assertJsonValueEquals($actual, '$.object.a', 'b'); - } - - /** - * @covers ::addRepository - * @dataProvider dataProviderAddRepository - */ - public function testAddRepository(array $structure, array $additions, mixed $expected, bool $append = TRUE): void { - $m = new ComposerJsonManipulator(json_encode((object) $structure)); - - foreach ($additions as $name => $config) { - $m->addRepository($name, $config, $append); - } - - $this->assertEquals($expected, $m->getFormattedData()); - } - - public static function dataProviderAddRepository(): array { - return [ - - [[], [], []], - [ - [], - ['name' => ['type' => 'vcs', 'url' => 'https://example.com/repo.git']], - ['repositories' => [['type' => 'vcs', 'url' => 'https://example.com/repo.git']]], - ], - - [ - [], - [ - 'repo1' => ['type' => 'git', 'url' => 'https://example.com/repo1.git'], - 'repo2' => ['type' => 'composer', 'url' => 'https://example.com/repo2'], - ], - [ - 'repositories' => [ - ['type' => 'git', 'url' => 'https://example.com/repo1.git'], - ['type' => 'composer', 'url' => 'https://example.com/repo2'], - ], - ], - ], - - [ - ['repositories' => [['type' => 'package', 'url' => 'https://example.com/oldrepo']]], - ['new_repo' => ['type' => 'vcs', 'url' => 'https://example.com/newrepo.git']], - [ - 'repositories' => [ - ['type' => 'package', 'url' => 'https://example.com/oldrepo'], - ['type' => 'vcs', 'url' => 'https://example.com/newrepo.git'], - ], - ], - ], - - // Rewrite instead of append. - [ - ['repositories' => [['type' => 'package', 'url' => 'https://example.com/oldrepo']]], - ['new_repo' => ['type' => 'vcs', 'url' => 'https://example.com/newrepo.git']], - [ - 'repositories' => [ - ['type' => 'vcs', 'url' => 'https://example.com/newrepo.git'], - ], - ], - FALSE, - ], - ]; - } - - /** - * @covers ::addDependency - * @covers ::validatePackageName - * @covers ::validatePackageVersion - * @dataProvider dataProviderAddDependency - */ - public function testAddDependency(array $initialData, string $package, string $version, mixed $expected, bool $expect_exception = FALSE): void { - if ($expect_exception) { - $this->expectException(\Exception::class); - } - - $m = new ComposerJsonManipulator(json_encode((object) $initialData)); - $m->addDependency($package, $version); - $this->assertEquals($expected, $m->getFormattedData()); - } - - public static function dataProviderAddDependency(): array { - return [ - // Adding a dependency to an empty require section. - [ - [], - 'example/package', - '^1.0', - ['require' => ['example/package' => '^1.0']], - ], - - // Adding a dependency when require section already has packages. - [ - ['require' => ['existing/package' => '1.0.0']], - 'example/package', - '^1.0', - ['require' => ['existing/package' => '1.0.0', 'example/package' => '^1.0']], - ], - - // Adding a dependency when require section already has packages - order. - [ - ['require' => ['existing/package' => '1.0.0']], - 'an-example/package', - '^1.0', - ['require' => ['an-example/package' => '^1.0', 'existing/package' => '1.0.0']], - ], - - // Adding a dependency that already exists (should update the version) - [ - ['require' => ['example/package' => '1.0.0']], - 'example/package', - '^2.0', - ['require' => ['example/package' => '^2.0']], - ], - - // Adding a dependency with invalid package name. - [ - ['require' => []], - 'invalid/package/name', - '^1.0', - NULL, - TRUE, - - ], - - // Adding a dependency with invalid version. - [ - ['require' => []], - 'example/package', - 'invalid-version', - NULL, - TRUE, - ], - ]; - } - - /** - * @covers ::addDevDependency - * @covers ::validatePackageName - * @covers ::validatePackageVersion - * @dataProvider dataProviderAddDevDependency - */ - public function testAddDevDependency(array $initialData, string $package, string $version, mixed $expected, bool $expect_exception = FALSE): void { - if ($expect_exception) { - $this->expectException(\Exception::class); - } - - $m = new ComposerJsonManipulator(json_encode((object) $initialData)); - $m->addDevDependency($package, $version); - $this->assertEquals($expected, $m->getFormattedData()); - } - - public static function dataProviderAddDevDependency(): array { - return [ - // Adding a dependency to an empty require-dev section. - [ - [], - 'example/package', - '^1.0', - ['require-dev' => ['example/package' => '^1.0']], - ], - - // Adding a dependency when require-dev section already has packages. - [ - ['require-dev' => ['existing/package' => '1.0.0']], - 'example/package', - '^1.0', - ['require-dev' => ['existing/package' => '1.0.0', 'example/package' => '^1.0']], - ], - - // Adding a dependency when require-dev already has packages - order. - [ - ['require-dev' => ['existing/package' => '1.0.0']], - 'an-example/package', - '^1.0', - ['require-dev' => ['an-example/package' => '^1.0', 'existing/package' => '1.0.0']], - ], - - // Adding a dependency that already exists (should update the version) - [ - ['require-dev' => ['example/package' => '1.0.0']], - 'example/package', - '^2.0', - ['require-dev' => ['example/package' => '^2.0']], - ], - - // Adding a dependency with invalid package name. - [ - ['require-dev' => []], - 'invalid/package/name', - '^1.0', - NULL, - TRUE, - - ], - - // Adding a dependency with invalid version. - [ - ['require-dev' => []], - 'example/package', - 'invalid-version', - NULL, - TRUE, - ], - ]; - } - - /** - * @covers ::mergeProperty - * @covers ::refreshContents - * @dataProvider dataProviderMergeProperty - */ - public function testMergeProperty(array $initialData, string $propertyName, array $valueToMerge, bool $sort, mixed $expected): void { - $m = new ComposerJsonManipulator(json_encode((object) $initialData)); - - $m->mergeProperty($propertyName, $valueToMerge, $sort); - - $this->assertEquals($expected, $m->getFormattedData()); - } - - public static function dataProviderMergeProperty(): array { - return [ - // Merging into an empty property. - [ - [], - 'extra', - ['branch-alias' => ['dev-master' => '1.0-dev']], - FALSE, - ['extra' => ['branch-alias' => ['dev-master' => '1.0-dev']]], - ], - - // Merging into an existing property. - [ - ['extra' => ['branch-alias' => ['dev-master' => '1.0-dev']]], - 'extra', - ['branch-alias' => ['dev-feature' => '2.0-dev']], - FALSE, - ['extra' => ['branch-alias' => ['dev-master' => '1.0-dev', 'dev-feature' => '2.0-dev']]], - ], - - // Merging and sorting. - [ - ['extra' => ['b' => 'value1', 'a' => 'value2']], - 'extra', - ['c' => 'value3'], - TRUE, - ['extra' => ['a' => 'value2', 'b' => 'value1', 'c' => 'value3']], - ], - - // Merging with an empty array. - [ - ['extra' => ['some-key' => 'some-value']], - 'extra', - [], - FALSE, - ['extra' => ['some-key' => 'some-value']], - ], - - ]; - } - - /** - * @covers ::addPropertyAfter - * @covers ::refreshContents - * @dataProvider dataProviderAddPropertyAfter - */ - public function testAddPropertyAfter(array $initialData, string $name, mixed $value, string $after, mixed $expected): void { - $m = new ComposerJsonManipulator(json_encode((object) $initialData)); - - $m->addPropertyAfter($name, $value, $after); - - $this->assertEquals($expected, $m->getFormattedData()); - } - - public static function dataProviderAddPropertyAfter(): array { - return [ - // Adding a property at the root level. - [ - ['property1' => 'value1', 'property2' => 'value2'], - 'newProperty', - 'newValue', - 'property1', - ['property1' => 'value1', 'newProperty' => 'newValue', 'property2' => 'value2'], - ], - - // Adding a nested property. - [ - ['parent' => ['child1' => 'value1', 'child2' => 'value2']], - 'parent.newChild', - 'newValue', - 'parent.child1', - ['parent' => ['child1' => 'value1', 'newChild' => 'newValue', 'child2' => 'value2']], - ], - - // Adding a property when the 'after' property doesn't exist. - [ - ['property1' => 'value1'], - 'newProperty', - 'newValue', - 'nonExistingProperty', - // Adjust based on actual behavior. - ['property1' => 'value1', 'newProperty' => 'newValue'], - ], - - // Adding a property when the target parent in 'after' does not exist. - [ - ['existingProperty' => 'value'], - 'newProperty', - 'newValue', - 'nonExistingParent.afterProperty', - [ - 'existingProperty' => 'value', - ], - ], - - // Adding a property to an empty JSON structure. - [ - [], - 'newProperty', - 'newValue', - 'afterProperty', - [ - 'newProperty' => 'newValue', - ], - ], - - // Adding a deeply nested new property. - [ - ['level1' => ['level2' => ['existingProperty' => 'value']]], - 'level1.level2.newProperty', - 'newValue', - 'level1.level2.existingProperty', - [ - 'level1' => [ - 'level2' => [ - 'existingProperty' => 'value', - 'newProperty' => 'newValue', - ], - ], - ], - ], - - ]; - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Docker/DockerCommandTest.php b/.drevops/devtool/tests/phpunit/Unit/Docker/DockerCommandTest.php deleted file mode 100644 index 1aa017b15..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Docker/DockerCommandTest.php +++ /dev/null @@ -1,43 +0,0 @@ -assertEquals('RUN', $command->getKeyword()); - $this->assertEquals('apt-get update', $command->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getKeyword - * @covers ::getArguments - */ - public function testInvalidCommandCreation(): void { - $this->expectException(Exception::class); - new DockerCommand('INVALIDKEYWORD', 'some arguments'); - } - - /** - * @covers ::__construct - * @covers ::getKeyword - * @covers ::getArguments - */ - public function testValidCommandWithMultipleArguments(): void { - $command = new DockerCommand('ADD', '/source /destination'); - $this->assertEquals('ADD', $command->getKeyword()); - $this->assertEquals('/source /destination', $command->getArguments()); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Docker/DockerfileParserTest.php b/.drevops/devtool/tests/phpunit/Unit/Docker/DockerfileParserTest.php deleted file mode 100644 index 727227c95..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Docker/DockerfileParserTest.php +++ /dev/null @@ -1,85 +0,0 @@ -assertCount(2, $commands); - $this->assertEquals('FROM', $commands[0]->getKeyword()); - $this->assertEquals('php:7.4-cli', $commands[0]->getArguments()); - $this->assertEquals('RUN', $commands[1]->getKeyword()); - $this->assertEquals('apt-get update', $commands[1]->getArguments()); - - unlink($dockerfile); - } - - /** - * @covers ::parse - */ - public function testParseMultilineCommands(): void { - $dockerfile = __DIR__ . '/Dockerfile.test'; - file_put_contents($dockerfile, "RUN apt-get update \\\n && apt-get install -y git"); - - $commands = DockerfileParser::parse($dockerfile); - $this->assertCount(1, $commands); - $this->assertEquals('RUN', $commands[0]->getKeyword()); - $this->assertEquals('apt-get update && apt-get install -y git', $commands[0]->getArguments()); - - unlink($dockerfile); - } - - /** - * @covers ::parse - */ - public function testParseWithInvalidCommands(): void { - $dockerfile = __DIR__ . '/Dockerfile.test'; - file_put_contents($dockerfile, "INVALID INSTRUCTION\nRUN apt-get update"); - - $commands = DockerfileParser::parse($dockerfile); - $this->assertCount(0, $commands); - - unlink($dockerfile); - } - - /** - * @covers ::parse - */ - public function testParseWithEmptyFile(): void { - $dockerfile = __DIR__ . '/Dockerfile.test'; - file_put_contents($dockerfile, ""); - - $commands = DockerfileParser::parse($dockerfile); - $this->assertEmpty($commands); - - unlink($dockerfile); - } - - /** - * @covers ::parse - */ - public function testParseWithIncorrectFormat(): void { - $dockerfile = __DIR__ . '/Dockerfile.test'; - file_put_contents($dockerfile, "RUNwithoutSpace apt-get update"); - - $commands = DockerfileParser::parse($dockerfile); - $this->assertEmpty($commands); - - unlink($dockerfile); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Utils/ArraysTest.php b/.drevops/devtool/tests/phpunit/Unit/Utils/ArraysTest.php deleted file mode 100644 index 86c4f9d63..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Utils/ArraysTest.php +++ /dev/null @@ -1,284 +0,0 @@ -form['details']['element'] = [ - '#value' => 'Nested element', - ]; - - // Set up parent array. - $this->parents = ['details', 'element']; - } - - /** - * @covers ::insertAfterKey - * @dataProvider providerForInsertAfterKey - */ - public function testInsertAfterKey(array $originalArray, string $key, string $newKey, mixed $newValue, mixed $expectedArray): void { - $result = Arrays::insertAfterKey($originalArray, $key, $newKey, $newValue); - $this->assertEquals($expectedArray, $result); - } - - public static function providerForInsertAfterKey(): array { - return [ - // Test insertion in the middle of array. - [ - ['a' => 1, 'b' => 2, 'c' => 3], - 'a', - 'newKey', - 'newValue', - ['a' => 1, 'newKey' => 'newValue', 'b' => 2, 'c' => 3], - ], - // Test insertion at the end. - [ - ['a' => 1, 'b' => 2], - 'b', - 'newKey', - 'newValue', - ['a' => 1, 'b' => 2, 'newKey' => 'newValue'], - ], - // Test insertion when key does not exist. - [ - ['a' => 1, 'b' => 2], - 'nonExistingKey', - 'newKey', - 'newValue', - ['a' => 1, 'b' => 2, 'newKey' => 'newValue'], - ], - // Test insertion in an empty array. - [ - [], - 'anyKey', - 'newKey', - 'newValue', - ['newKey' => 'newValue'], - ], - - // Test with object as new value. - [ - ['a' => 1, 'b' => 2], - 'a', - 'newKey', - (object) ['property' => 'value'], - ['a' => 1, 'newKey' => (object) ['property' => 'value'], 'b' => 2], - ], - // Test with array as new value. - [ - ['a' => 1, 'b' => 2], - 'b', - 'newKey', - ['nestedKey' => 'nestedValue'], - ['a' => 1, 'b' => 2, 'newKey' => ['nestedKey' => 'nestedValue']], - ], - ]; - } - - /** - * Tests getting nested array values. - * - * @covers ::getValue - */ - public function testGetValue(): void { - // Verify getting a value of a nested element. - $value = Arrays::getValue($this->form, $this->parents); - $this->assertSame('Nested element', $value['#value'], 'Nested element value found.'); - - // Verify changing a value of a nested element by reference. - $value = &Arrays::getValue($this->form, $this->parents); - $value['#value'] = 'New value'; - $value = Arrays::getValue($this->form, $this->parents); - $this->assertSame('New value', $value['#value'], 'Nested element value was changed by reference.'); - $this->assertSame('New value', $this->form['details']['element']['#value'], 'Nested element value was changed by reference.'); - - // Verify that an existing key is reported back. - $key_exists = NULL; - Arrays::getValue($this->form, $this->parents, $key_exists); - $this->assertTrue($key_exists, 'Existing key found.'); - - // Verify that a non-existing key is reported back and throws no errors. - $key_exists = NULL; - $parents = $this->parents; - $parents[] = 'foo'; - Arrays::getValue($this->form, $parents, $key_exists); - $this->assertFalse($key_exists, 'Non-existing key not found.'); - } - - /** - * Tests setting nested array values. - * - * @covers ::setValue - */ - public function testSetValue(): void { - $new_value = [ - '#value' => 'New value', - '#required' => TRUE, - ]; - - // Verify setting the value of a nested element. - Arrays::setValue($this->form, $this->parents, $new_value); - $this->assertSame('New value', $this->form['details']['element']['#value'], 'Changed nested element value found.'); - $this->assertTrue($this->form['details']['element']['#required'], 'New nested element value found.'); - } - - /** - * Tests force-setting values. - * - * @covers ::setValue - */ - public function testSetValueForce(): void { - $new_value = [ - 'one', - ]; - $this->form['details']['non-array-parent'] = 'string'; - $parents = ['details', 'non-array-parent', 'child']; - Arrays::setValue($this->form, $parents, $new_value, TRUE); - $this->assertSame($new_value, $this->form['details']['non-array-parent']['child'], 'The nested element was not forced to the new value.'); - } - - /** - * Tests Arrays::mergeDeepArray(). - * - * @covers ::mergeDeep - * @covers ::mergeDeepArray - */ - public function testMergeDeepArray(): void { - $link_options_1 = [ - 'fragment' => 'x', - 'attributes' => ['title' => 'X', 'class' => ['a', 'b']], - 'language' => 'en', - ]; - $link_options_2 = [ - 'fragment' => 'y', - 'attributes' => ['title' => 'Y', 'class' => ['c', 'd']], - 'absolute' => TRUE, - ]; - $expected = [ - 'fragment' => 'y', - 'attributes' => ['title' => 'Y', 'class' => ['a', 'b', 'c', 'd']], - 'language' => 'en', - 'absolute' => TRUE, - ]; - $this->assertSame($expected, Arrays::mergeDeepArray([$link_options_1, $link_options_2]), 'Arrays::mergeDeepArray() returned a properly merged array.'); - // Test wrapper function, Arrays::mergeDeep(). - $this->assertSame($expected, Arrays::mergeDeep($link_options_1, $link_options_2), 'Arrays::mergeDeep() returned a properly merged array.'); - } - - /** - * Tests that arrays with implicit keys are appended, not merged. - * - * @covers ::mergeDeepArray - */ - public function testMergeImplicitKeys(): void { - $a = [ - 'subkey' => ['X', 'Y'], - ]; - $b = [ - 'subkey' => ['X'], - ]; - - // Drupal core behavior. - $expected = [ - 'subkey' => ['X', 'Y', 'X'], - ]; - $actual = Arrays::mergeDeepArray([$a, $b]); - $this->assertSame($expected, $actual, 'drupal_array_merge_deep() creates new numeric keys in the implicit sequence.'); - } - - /** - * Tests that even with explicit keys, values are appended, not merged. - * - * @covers ::mergeDeepArray - */ - public function testMergeExplicitKeys(): void { - $a = [ - 'subkey' => [ - 0 => 'A', - 1 => 'B', - ], - ]; - $b = [ - 'subkey' => [ - 0 => 'C', - 1 => 'D', - ], - ]; - - // Drupal core behavior. - $expected = [ - 'subkey' => [ - 0 => 'A', - 1 => 'B', - 2 => 'C', - 3 => 'D', - ], - ]; - $actual = Arrays::mergeDeepArray([$a, $b]); - $this->assertSame($expected, $actual, 'drupal_array_merge_deep() creates new numeric keys in the explicit sequence.'); - } - - /** - * Tests that array keys values on the first array are ignored when merging. - * - * Even if the initial ordering would place the data from the second array - * before those in the first one, they are still appended, and the keys on - * the first array are deleted and regenerated. - * - * @covers ::mergeDeepArray - */ - public function testMergeOutOfSequenceKeys(): void { - $a = [ - 'subkey' => [ - 10 => 'A', - 30 => 'B', - ], - ]; - $b = [ - 'subkey' => [ - 20 => 'C', - 0 => 'D', - ], - ]; - - // Drupal core behavior. - $expected = [ - 'subkey' => [ - 0 => 'A', - 1 => 'B', - 2 => 'C', - 3 => 'D', - ], - ]; - $actual = Arrays::mergeDeepArray([$a, $b]); - $this->assertSame($expected, $actual, 'drupal_array_merge_deep() ignores numeric key order when merging.'); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Utils/ClassLoaderTest.php b/.drevops/devtool/tests/phpunit/Unit/Utils/ClassLoaderTest.php deleted file mode 100644 index 2678e62d9..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Utils/ClassLoaderTest.php +++ /dev/null @@ -1,80 +0,0 @@ -testPath = $this->vfsCreateDirectory('classLoaderTest')->url(); - - $this->vfsCreateFile($this->testPath . '/AbstractTestClass.php', <<<'EOD' -vfsCreateFile($this->testPath . '/Test1Class.php', <<<'EOD' -vfsCreateFile($this->testPath . '/Test2Class.php', <<<'EOD' -testPath); - $this->assertContains('DrevOps\DevTool\Utils\Tests\AbstractTestClass', $classes); - $this->assertContains('DrevOps\DevTool\Utils\Tests\Test1Class', $classes); - $this->assertContains('DrevOps\DevTool\Utils\Tests\Test2Class', $classes); - } - - /** - * @covers ::load - * @covers ::glob - */ - public function testLoadClassesFromPathFilterByParent(): void { - $classes = ClassLoader::load($this->testPath, 'DrevOps\DevTool\Utils\Tests\AbstractTestClass'); - $this->assertNotContains('DrevOps\DevTool\Utils\Tests\AbstractTestClass', $classes); - $this->assertContains('DrevOps\DevTool\Utils\Tests\Test1Class', $classes); - $this->assertNotContains('DrevOps\DevTool\Utils\Tests\Test2Class', $classes); - } - - /** - * @covers ::filterByClass - */ - public function testFilterByClass(): void { - $classes = [ - 'DrevOps\DevTool\Utils\Tests\TestClass', - 'DrevOps\DevTool\Utils\AnotherClass', - ]; - $filtered = ClassLoader::filterByClass(TestCase::class, $classes); - $this->assertNotContains('DrevOps\DevTool\Utils\Tests\TestClass', $filtered); - } - -} diff --git a/.drevops/devtool/tests/phpunit/Unit/Utils/DownloaderTest.php b/.drevops/devtool/tests/phpunit/Unit/Utils/DownloaderTest.php deleted file mode 100644 index 1393c6dc7..000000000 --- a/.drevops/devtool/tests/phpunit/Unit/Utils/DownloaderTest.php +++ /dev/null @@ -1,52 +0,0 @@ - 200]); - $client = new MockHttpClient($response); - - $downloader = new Downloader($client); - $result = $downloader->download($src, $dst); - - $this->assertEquals($dst, $result); - $this->assertStringEqualsFile($dst, $content); - unlink($dst); - } - - /** - * @covers ::__construct - * @covers ::download - */ - public function testFailedDownload(): void { - $this->expectException(\Exception::class); - - $src = 'http://example.com/invalidfile.txt'; - $dst = 'path/to/local/file.txt'; - - $response = new MockResponse('', ['http_code' => 404]); - $client = new MockHttpClient($response); - - $downloader = new Downloader($client); - $downloader->download($src, $dst); - } - -}