diff --git a/.ddev/commands/web/satisbuild b/.ddev/commands/web/satisbuild deleted file mode 100755 index 4c366f6f..00000000 --- a/.ddev/commands/web/satisbuild +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -## Description: Run Satis Build Process -## Usage: satisbuild -## Example: "ddev satisbuild" - -/var/www/html/satis/build.sh $@ diff --git a/.ddev/config.yaml b/.ddev/config.yaml index d378d1af..87f5da36 100644 --- a/.ddev/config.yaml +++ b/.ddev/config.yaml @@ -18,7 +18,6 @@ hooks: - exec: cp .env.ddev .env.local - exec: /mnt/ddev_config/scripts/setup-db - composer: install - - composer: install -d satis omit_containers: [db, dba] use_dns_when_possible: true timezone: Europe/Zurich @@ -91,7 +90,7 @@ web_environment: [] # Please take care with this because it can cause great confusion. # upload_dir: custom/upload/dir -# would set the destination path for ddev import-files to /custom/upload/dir +# would set the destination path for ddev import-files to /custom/upload/dir # working_dir: # web: /var/www/html diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 92fce717..815ede9f 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -23,8 +23,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -70,8 +68,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -108,8 +104,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -159,8 +153,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -207,8 +199,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -247,8 +237,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -287,8 +275,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -327,8 +313,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -385,8 +369,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 @@ -464,8 +446,6 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: 'recursive' - name: Setup PHP uses: shivammathur/setup-php@v2 diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 2330a3cb..b8e2c125 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -50,8 +50,6 @@ jobs: - uses: actions/checkout@v3 name: Checkout - with: - submodules: 'recursive' - name: Set up PHP Version uses: shivammathur/setup-php@v2 diff --git a/.gitignore b/.gitignore index 77891f00..9bb4b667 100644 --- a/.gitignore +++ b/.gitignore @@ -4,9 +4,9 @@ /.vscode/ /public/p/ /public/p2/ +/public/satis/ /public/aliases.json /public/packages.json -/public/satis.html /tools/**/vendor /.php-cs-fixer.php /.php-cs-fixer.cache diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 6b2f39f1..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "satis/packages/CmsComposerPackageGenerator"] - path = satis/packages/CmsComposerPackageGenerator - url = https://github.com/GsTYPO3/CmsComposerPackageGenerator.git diff --git a/.mage.yml b/.mage.yml index efd1c3b2..d652f245 100644 --- a/.mage.yml +++ b/.mage.yml @@ -3,12 +3,12 @@ magephp: composer: path: composer exclude: - - ./.* + - ./.[!.e]* - ./public/p - ./public/p2 + - ./public/satis - ./public/aliases.json - ./public/packages.json - - ./public/satis.html - ./stubs - ./tests - ./tools @@ -29,25 +29,26 @@ magephp: pre-deploy: - exec: { cmd: "echo \"APP_ENV=prod\" >> .env.local", desc: "Create .env.local" } - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader' } - - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader --working-dir=satis' } on-deploy: - exec: { cmd: 'mkdir -p var', desc: 'Create var folder' } + - exec: { cmd: 'mkdir -p var/satis', desc: 'Create var/satis folder' } + - exec: { cmd: 'test -d ~/site/shared/public/satis || mkdir -p ~/site/shared/public/satis', desc: 'Create shared/public/satis folder' } - fs/link: { from: "../../../shared/.env.local", to: ".env.local" } - - fs/link: { from: "../../../../shared/public/p", to: "public/p" } - - fs/link: { from: "../../../../shared/public/p2", to: "public/p2" } - - fs/link: { from: "../../../../shared/public/packages.json", to: "public/packages.json" } - - fs/link: { from: "../../../../shared/public/satis.html", to: "public/satis.html" } + - fs/link: { from: "../../../../shared/public/satis", to: "public/satis" } + - fs/link: { from: "satis/p", to: "public/p" } + - fs/link: { from: "satis/p2", to: "public/p2" } + - fs/link: { from: "satis/aliases.json", to: "public/aliases.json" } + - fs/link: { from: "satis/packages.json", to: "public/packages.json" } - exec: { cmd: "sqlite3 ~/site/mage/current/var/gettr.db '.backup var/gettr.db'", desc: "Copy DB" } - exec: { cmd: "php-restart", desc: "Restart PHP and reset OPcache" } - exec: { cmd: "php ./bin/console doctrine:migrations:sync-metadata-storage --no-interaction", desc: "Synchronize DB Migrations" } - exec: { cmd: "php ./bin/console doctrine:migrations:migrate --no-interaction", desc: "Apply DB Migrations" } - on-release: + - exec: { cmd: "php ./bin/console cache:warmup --env=prod", desc: "Cache Warmup", timeout: 600 } + - exec: { cmd: "crontab cnf/crontab-dev.cron", desc: "Install crontab" } - fs/copy: { from: 'cnf/nginx.conf', to: '../../../../cnf/nginx.conf' } + on-release: - exec: { cmd: "nginx-reload", desc: "Reload Nginx Configuration" } post-release: - - exec: { cmd: "php-restart", desc: "Restart PHP and reset OPcache again" } - - exec: { cmd: "php ./bin/console cache:warmup --env=prod", desc: "Cache Warmup", timeout: 600 } - - exec: { cmd: "crontab cnf/crontab-dev", desc: "Install crontab" } post-deploy: production: user: get @@ -59,25 +60,26 @@ magephp: pre-deploy: - exec: { cmd: "echo \"APP_ENV=prod\" >> .env.local", desc: "Create .env.local" } - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader' } - - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader --working-dir=satis' } on-deploy: - exec: { cmd: 'mkdir -p var', desc: 'Create var folder' } + - exec: { cmd: 'mkdir -p var/satis', desc: 'Create var/satis folder' } + - exec: { cmd: 'test -d ~/site/shared/public/satis || mkdir -p ~/site/shared/public/satis', desc: 'Create shared/public/satis folder' } - fs/link: { from: "../../../shared/.env.local", to: ".env.local" } - - fs/link: { from: "../../../../shared/public/p", to: "public/p" } - - fs/link: { from: "../../../../shared/public/p2", to: "public/p2" } - - fs/link: { from: "../../../../shared/public/packages.json", to: "public/packages.json" } - - fs/link: { from: "../../../../shared/public/satis.html", to: "public/satis.html" } + - fs/link: { from: "../../../../shared/public/satis", to: "public/satis" } + - fs/link: { from: "satis/p", to: "public/p" } + - fs/link: { from: "satis/p2", to: "public/p2" } + - fs/link: { from: "satis/aliases.json", to: "public/aliases.json" } + - fs/link: { from: "satis/packages.json", to: "public/packages.json" } - exec: { cmd: "sqlite3 ~/site/mage/current/var/gettr.db '.backup var/gettr.db'", desc: "Copy DB" } - exec: { cmd: "php-restart", desc: "Restart PHP and reset OPcache" } - exec: { cmd: "php ./bin/console doctrine:migrations:sync-metadata-storage --no-interaction", desc: "Synchronize DB Migrations" } - exec: { cmd: "php ./bin/console doctrine:migrations:migrate --no-interaction", desc: "Apply DB Migrations" } - on-release: + - exec: { cmd: "php ./bin/console cache:warmup --env=prod", desc: "Cache Warmup", timeout: 600 } + - exec: { cmd: "crontab cnf/crontab.cron", desc: "Install crontab" } - fs/copy: { from: 'cnf/nginx.conf', to: '../../../../cnf/nginx.conf' } + on-release: - exec: { cmd: "nginx-reload", desc: "Reload Nginx Configuration" } post-release: - - exec: { cmd: "php-restart", desc: "Restart PHP and reset OPcache again" } - - exec: { cmd: "php ./bin/console cache:warmup --env=prod", desc: "Cache Warmup", timeout: 600 } - - exec: { cmd: "crontab cnf/crontab", desc: "Install crontab" } post-deploy: stage: user: get-stage @@ -89,7 +91,6 @@ magephp: pre-deploy: - exec: { cmd: "echo \"APP_ENV=prod\" >> .env.local", desc: "Create .env.local" } - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader' } - - composer/install: { flags: '--no-dev --no-progress --optimize-autoloader --working-dir=satis' } on-deploy: - exec: { cmd: 'test -d ~/site/shared || mkdir -p ~/site/shared', desc: 'Create shared folder' } - exec: { cmd: 'test -d ~/site/shared/public || mkdir -p ~/site/shared/public', desc: 'Create shared/public folder' } @@ -112,5 +113,5 @@ magephp: - symfony/cache-clear: { env: "prod" } - exec: { cmd: "php ./bin/console doctrine:migrations:migrate --no-interaction", desc: "Apply DB Migrations" } - symfony/cache-warmup: { env: "prod" } - - exec: { cmd: "crontab cnf/crontab-stage", desc: "Install crontab" } + - exec: { cmd: "crontab cnf/crontab-stage.cron", desc: "Install crontab" } post-deploy: diff --git a/README.md b/README.md index c49f24ce..ee717188 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,6 @@ and start hacking. To head to the project in the browser run 1. create and edit `.env.local` to overwrite vars from `.env.dist` 1. execute `composer install` -1. execute `composer install -d satis/package-generator` to setup Satis (optional) 1. execute `php ./bin/console doctrine:schema:create` to create database schema ### Database Creation and Migration @@ -75,13 +74,6 @@ branch which is deployed then to the production site. In the dev context you can authorize your requests with the username `developer` and the password `password` by default. -### Satis / TYPO3 Composer Repository - -The Satis application is located at the folder `satis` and contains all relevant -parts for the creation of the TYPO3 Composer Repository at -`https://composer.typo3.org`. This job is started through crontab see `cnf` -folder for the configuration details. - ### Download Link Checker To verify the download links generated by `https://get.typo3.org/json` you can diff --git a/cnf/crontab-dev b/cnf/crontab-dev deleted file mode 100644 index 67fb37ff..00000000 --- a/cnf/crontab-dev +++ /dev/null @@ -1,20 +0,0 @@ - -# Redirect output to syslog. Please do not remove this variable -# unless you set MAILTO to a address of your own. -SHELL=/usr/local/vzscripts/sfoutputtosyslog - -# make sure to source .profile in your jobs to have all settings like environment variables or PHP versions loaded: -# /bin/bash -c 'source ~/.profile && ~/your/original/command' - -# +------------------------------------ minute (0 - 59) -# | +---------------------------- hour (0 - 23) -# | | +-------------------- day of month (1 - 31) -# | | | +------------ month (1 - 12) -# | | | | +---- day of week (0 - 6) (Sunday=0 or 7) -# | | | | | - -# 10 2 * * * - -# The Satis build job is currently not enabled by default, please run -# `~/site/mage/current/satis/build.sh` instead. -# 8-59/15 * * * * ~/site/mage/current/satis/build.sh -q diff --git a/cnf/crontab b/cnf/crontab-dev.cron similarity index 55% rename from cnf/crontab rename to cnf/crontab-dev.cron index a0188b5d..7ed197cb 100644 --- a/cnf/crontab +++ b/cnf/crontab-dev.cron @@ -1,11 +1,5 @@ - -# Redirect output to syslog. Please do not remove this variable -# unless you set MAILTO to a address of your own. SHELL=/usr/local/vzscripts/sfoutputtosyslog -# make sure to source .profile in your jobs to have all settings like environment variables or PHP versions loaded: -# /bin/bash -c 'source ~/.profile && ~/your/original/command' - # +------------------------------------ minute (0 - 59) # | +---------------------------- hour (0 - 23) # | | +-------------------- day of month (1 - 31) @@ -15,4 +9,4 @@ SHELL=/usr/local/vzscripts/sfoutputtosyslog # 10 2 * * * - 0 */3 * * * ~/site/mage/current/satis/build.sh -q + 5-59/15 * * * * ~/site/mage/current/bin/console satis:build --auto diff --git a/cnf/crontab-stage b/cnf/crontab-stage deleted file mode 100644 index 972497c1..00000000 --- a/cnf/crontab-stage +++ /dev/null @@ -1,20 +0,0 @@ - -# Redirect output to syslog. Please do not remove this variable -# unless you set MAILTO to a address of your own. -SHELL=/usr/local/vzscripts/sfoutputtosyslog - -# make sure to source .profile in your jobs to have all settings like environment variables or PHP versions loaded: -# /bin/bash -c 'source ~/.profile && ~/your/original/command' - -# +------------------------------------ minute (0 - 59) -# | +---------------------------- hour (0 - 23) -# | | +-------------------- day of month (1 - 31) -# | | | +------------ month (1 - 12) -# | | | | +---- day of week (0 - 6) (Sunday=0 or 7) -# | | | | | - -# 10 2 * * * - -# The Satis build job is currently not enabled by default, please run -# `~/site/mage/current/satis/build.sh` instead. -# */15 * * * * ~/site/mage/current/satis/build.sh -q diff --git a/cnf/crontab-stage.cron b/cnf/crontab-stage.cron new file mode 100644 index 00000000..cedc544f --- /dev/null +++ b/cnf/crontab-stage.cron @@ -0,0 +1,12 @@ +SHELL=/usr/local/vzscripts/sfoutputtosyslog + +# +------------------------------------ minute (0 - 59) +# | +---------------------------- hour (0 - 23) +# | | +-------------------- day of month (1 - 31) +# | | | +------------ month (1 - 12) +# | | | | +---- day of week (0 - 6) (Sunday=0 or 7) +# | | | | | + +# 10 2 * * * + + */15 * * * * ~/site/mage/current/bin/console satis:build --auto diff --git a/cnf/crontab.cron b/cnf/crontab.cron new file mode 100644 index 00000000..cedc544f --- /dev/null +++ b/cnf/crontab.cron @@ -0,0 +1,12 @@ +SHELL=/usr/local/vzscripts/sfoutputtosyslog + +# +------------------------------------ minute (0 - 59) +# | +---------------------------- hour (0 - 23) +# | | +-------------------- day of month (1 - 31) +# | | | +------------ month (1 - 12) +# | | | | +---- day of week (0 - 6) (Sunday=0 or 7) +# | | | | | + +# 10 2 * * * + + */15 * * * * ~/site/mage/current/bin/console satis:build --auto diff --git a/composer.json b/composer.json index 157ca0f2..39a7db04 100644 --- a/composer.json +++ b/composer.json @@ -30,10 +30,14 @@ }, "require": { "php": ">=8.1", + "ext-SimpleXML": "*", "ext-ctype": "*", "ext-iconv": "*", "ext-json": "*", "ext-sqlite3": "*", + "ext-zlib": "*", + "composer/satis": "^3.0@dev", + "composer/semver": "^3.3", "doctrine/collections": "^1.6", "doctrine/dbal": "^3.3", "doctrine/doctrine-bundle": "^2.7", @@ -115,8 +119,6 @@ "symfony/polyfill-php56": "*", "symfony/polyfill-php70": "*", "symfony/polyfill-php71": "*", - "symfony/polyfill-php72": "*", - "symfony/polyfill-php73": "*", "symfony/polyfill-php74": "*", "symfony/polyfill-php80": "*", "symfony/polyfill-php81": "*" diff --git a/composer.lock b/composer.lock index ce2e0341..9d9f8ab7 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b14f32d97a9b54ecc80261dfbb605622", + "content-hash": "d1405b77e44b29933bc9d6a1ba30c49f", "packages": [ { "name": "composer/ca-bundle", @@ -82,6 +82,561 @@ ], "time": "2022-07-20T07:14:26+00:00" }, + { + "name": "composer/composer", + "version": "2.2.17", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "a8ab5070fb99396e4710baee286478ad697724c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/a8ab5070fb99396e4710baee286478ad697724c2", + "reference": "a8ab5070fb99396e4710baee286478ad697724c2", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/metadata-minifier": "^1.0", + "composer/pcre": "^1.0", + "composer/semver": "^3.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.2.11", + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0 || ^2.0", + "react/promise": "^1.2 || ^2.7", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0", + "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpspec/prophecy": "^1.10", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" + }, + "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.2-dev" + } + }, + "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", + "source": "https://github.com/composer/composer/tree/2.2.17" + }, + "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-07-13T13:27:38+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": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.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/1.0.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": "2022-01-21T20:24:37+00:00" + }, + { + "name": "composer/satis", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/composer/satis.git", + "reference": "3156283c1333d569de46e46fd72fb06b04f5ebbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/satis/zipball/3156283c1333d569de46e46fd72fb06b04f5ebbd", + "reference": "3156283c1333d569de46e46fd72fb06b04f5ebbd", + "shasum": "" + }, + "require": { + "composer/composer": "^2.2.12, < 2.3", + "php": "^7.4||^8.0", + "symfony/console": "^4.4||^5.0", + "twig/html-extra": "^3.3", + "twig/twig": "^3.3" + }, + "replace": { + "symfony/polyfill-php72": "*", + "symfony/polyfill-php73": "*" + }, + "require-dev": { + "ext-json": "*", + "mikey179/vfsstream": "^1.6.8", + "phpunit/phpunit": "^9.5" + }, + "default-branch": true, + "bin": [ + "bin/satis" + ], + "type": "project", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Satis\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + }, + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "https://www.naderman.de" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "https://robbast.nl" + } + ], + "description": "Simple Repository Generator", + "homepage": "https://github.com/composer/satis", + "keywords": [ + "composer", + "generator", + "package", + "repository", + "static" + ], + "support": { + "forum": "https://gitter.com/composer/satis", + "irc": "irc://freenode.net/composer", + "issues": "https://github.com/composer/satis", + "source": "https://github.com/composer/satis" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + } + ], + "time": "2022-05-31T07:38:51+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "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": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "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-04-01T19:23:25+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.7", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "c848241796da2abf65837d51dce1fae55a960149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", + "reference": "c848241796da2abf65837d51dce1fae55a960149", + "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": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/spdx-licenses/issues", + "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" + }, + "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-05-23T07:37:50+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": "doctrine/annotations", "version": "1.13.3", @@ -2221,6 +2776,76 @@ ], "time": "2021-12-01T12:22:07+00:00" }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.12", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "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/5.2.12" + }, + "time": "2022-04-13T08:02:27+00:00" + }, { "name": "knplabs/knp-components", "version": "v3.5.0", @@ -3432,36 +4057,184 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/link", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/link.git", + "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/link/zipball/846c25f58a1f02b93a00f2404e3626b6bf9b7807", + "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Link\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for HTTP links", + "homepage": "https://github.com/php-fig/link", + "keywords": [ + "http", + "http-link", + "link", + "psr", + "psr-13", + "rest" + ], + "support": { + "source": "https://github.com/php-fig/link/tree/1.1.1" + }, + "time": "2021-03-11T22:59:13+00:00" + }, + { + "name": "psr/log", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.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/2.0.0" + }, + "time": "2021-07-14T16:41:46+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "time": "2016-08-06T14:39:51+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "psr/link", - "version": "1.1.1", + "name": "react/promise", + "version": "v2.9.0", "source": { "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807" + "url": "https://github.com/reactphp/promise.git", + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/846c25f58a1f02b93a00f2404e3626b6bf9b7807", - "reference": "846c25f58a1f02b93a00f2404e3626b6bf9b7807", + "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=5.4.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" }, + "type": "library", "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Psr\\Link\\": "src/" + "React\\Promise\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3470,51 +4243,75 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "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": "Common interfaces for HTTP links", - "homepage": "https://github.com/php-fig/link", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" + "promise", + "promises" ], "support": { - "source": "https://github.com/php-fig/link/tree/1.1.1" + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.9.0" }, - "time": "2021-03-11T22:59:13+00:00" + "funding": [ + { + "url": "https://github.com/WyriHaximus", + "type": "github" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-02-11T10:27:51+00:00" }, { - "name": "psr/log", - "version": "2.0.0", + "name": "seld/jsonlint", + "version": "1.9.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "4211420d25eba80712bff236a98960ef68b866b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", + "reference": "4211420d25eba80712bff236a98960ef68b866b7", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": "^5.3 || ^7.0 || ^8.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } + "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": { - "Psr\\Log\\": "src" + "Seld\\JsonLint\\": "src/Seld/JsonLint/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3523,48 +4320,61 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "JSON Linter", "keywords": [ - "log", - "psr", - "psr-3" + "json", + "linter", + "parser", + "validator" ], "support": { - "source": "https://github.com/php-fig/log/tree/2.0.0" + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" }, - "time": "2021-07-14T16:41:46+00:00" + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2022-04-01T13:37:23+00:00" }, { - "name": "ralouphie/getallheaders", - "version": "3.0.3", + "name": "seld/phar-utils", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "9f3452c93ff423469c0d56450431562ca423dcee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/9f3452c93ff423469c0d56450431562ca423dcee", + "reference": "9f3452c93ff423469c0d56450431562ca423dcee", "shasum": "" }, "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" + "php": ">=5.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, "autoload": { - "files": [ - "src/getallheaders.php" - ] + "psr-4": { + "Seld\\PharUtils\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3572,16 +4382,19 @@ ], "authors": [ { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" } ], - "description": "A polyfill for getallheaders.", + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phar" + ], "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" + "issues": "https://github.com/Seldaek/phar-utils/issues", + "source": "https://github.com/Seldaek/phar-utils/tree/1.2.0" }, - "time": "2019-03-08T08:55:37+00:00" + "time": "2021-12-10T11:20:11+00:00" }, { "name": "sensio/framework-extra-bundle", @@ -8552,6 +9365,75 @@ ], "time": "2022-01-04T13:58:53+00:00" }, + { + "name": "twig/html-extra", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/html-extra.git", + "reference": "f31c6296b1f0797118c142cf9c9bddf1d8e0acea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/html-extra/zipball/f31c6296b1f0797118c142cf9c9bddf1d8e0acea", + "reference": "f31c6296b1f0797118c142cf9c9bddf1d8e0acea", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/mime": "^4.4|^5.0|^6.0", + "twig/twig": "^2.7|^3.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Twig\\Extra\\Html\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + } + ], + "description": "A Twig extension for HTML", + "homepage": "https://twig.symfony.com", + "keywords": [ + "html", + "twig" + ], + "support": { + "source": "https://github.com/twigphp/html-extra/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2022-01-02T10:02:25+00:00" + }, { "name": "twig/twig", "version": "v3.4.1", @@ -9385,76 +10267,6 @@ }, "time": "2022-07-20T13:12:54+00:00" }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.12", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "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/5.2.12" - }, - "time": "2022-04-13T08:02:27+00:00" - }, { "name": "localheinz/diff", "version": "1.1.1", @@ -10711,16 +11523,19 @@ "aliases": [], "minimum-stability": "stable", "stability-flags": { + "composer/satis": 20, "roave/security-advisories": 20 }, "prefer-stable": true, "prefer-lowest": false, "platform": { "php": ">=8.1", + "ext-simplexml": "*", "ext-ctype": "*", "ext-iconv": "*", "ext-json": "*", - "ext-sqlite3": "*" + "ext-sqlite3": "*", + "ext-zlib": "*" }, "platform-dev": [], "plugin-api-version": "2.3.0" diff --git a/rector.php b/rector.php index de23f50f..b9e01ff7 100644 --- a/rector.php +++ b/rector.php @@ -21,6 +21,7 @@ * The TYPO3 project - inspiring people to share! */ +use Rector\CodingStyle\Rector\Class_\AddArrayDefaultToArrayPropertyRector; use Rector\Config\RectorConfig; use Rector\Doctrine\Set\DoctrineSetList; use Rector\PHPUnit\Set\PHPUnitLevelSetList; @@ -99,5 +100,9 @@ PHPUnitSetList::PHPUNIT_YIELD_DATA_PROVIDER, ]); + $rectorConfig->skip([ + AddArrayDefaultToArrayPropertyRector::class => [__DIR__ . '/src/Model/SatisJson.php'], + ]); + $rectorConfig->symfonyContainerXml(__DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml'); }; diff --git a/satis/.gitignore b/satis/.gitignore deleted file mode 100644 index 0d5103f9..00000000 --- a/satis/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -/bin/ -/build.lock -/vendor/ -/Web/* -!/Web/.gitkeep -/satis.json diff --git a/satis/Web/.gitkeep b/satis/Web/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/satis/build.sh b/satis/build.sh deleted file mode 100755 index c91317a0..00000000 --- a/satis/build.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash - -# Defaults -ALL= -DEBUG=yes - -# Parse arguments -for arg in $@ -do - case $arg in - -q) - DEBUG= - ;; - -a) - ALL=yes - ;; - *) - echo "Unknown parameter '$arg'" - ;; - esac -done - -# Output options -if [ -n "$DEBUG" ]; then - set -x -fi - -# Calculate directories -APP_DIR="`dirname \"$0\"`" -APP_DIR="`( cd \"$APP_DIR\" && pwd )`" -LOCKFILE=$APP_DIR/build.lock - -if [ -n "$IS_DDEV_PROJECT" ]; then - WEB_DIR="`dirname \"$0\"`/../public" -else - WEB_DIR="`dirname \"$0\"`/../../../../shared/public" -fi - -WEB_DIR="`( cd \"$WEB_DIR\" && pwd )`" - -# Check for already running processes -CURPID=$$ - -if [ -f "$LOCKFILE" ]; then - # Check if the process is more than 1 hour old. - if [ -n "$(find $LOCKFILE -mmin +60)" ]; then - OLDPID=$(pgrep -o -f ${0##*/}) - - if [ ! $CURPID -eq $OLDPID ]; then - # In this case we assume that it's hanging, the task will be killed. - echo "Process $OLDPID seems to be hanging. Killing it." >&2 - kill $OLDPID - fi - else - echo "Lockfile $LOCKFILE present, skipping…" - exit 0 - fi -fi - -# Create lock file -touch $LOCKFILE - -# Start repository creation -BIN_DIR=$APP_DIR/bin - -cd $WEB_DIR/../satis - -# Run full build once a day only at 3 am or on request -CURRENT_TIME=$(date +%H:%M) -if [ "$CURRENT_TIME" = "03:00" ] || [ -n "$ALL" ]; then - BUILD_PARAM=--all -else - BUILD_PARAM= -fi - -if [ -n "$DEBUG" ]; then - php -d memory_limit=-1 $BIN_DIR/typo3-cms-package-generator satis:build $WEB_DIR $BUILD_PARAM -else - php -d memory_limit=-1 $BIN_DIR/typo3-cms-package-generator satis:build $WEB_DIR $BUILD_PARAM > /dev/null -fi - -# Remove lock file -rm -f $LOCKFILE - -if [ -n "$DEBUG" ]; then - set -x -fi diff --git a/satis/composer.json b/satis/composer.json deleted file mode 100644 index 9d897492..00000000 --- a/satis/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "typo3/cms-composer-repository", - "description": "TYPO3 CMS Composer Repository", - "type": "project", - "keywords": [ - "TYPO3 CMS", - "composer" - ], - "homepage": "http://composer.typo3.org", - "authors": [ - { - "name": "Simon Gilli", - "email": "typo3@gilbertsoft.org" - } - ], - "require": { - "php": "^7.4.23", - "typo3/cms-composer-package-generator": "@dev" - }, - "require-dev": { - "roave/security-advisories": "dev-master" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "repositories": [ - { "type": "path", "url": "packages/*" } - ], - "config": { - "bin-dir": "bin", - "optimize-autoloader": true, - "platform": { - "php": "7.4.23" - }, - "sort-packages": true - } -} diff --git a/satis/composer.lock b/satis/composer.lock deleted file mode 100644 index 98d01091..00000000 --- a/satis/composer.lock +++ /dev/null @@ -1,3073 +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": "345aa338051409dac8ca9fea43cf5a9b", - "packages": [ - { - "name": "composer/ca-bundle", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", - "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", - "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" - }, - "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.3.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": "2021-10-28T20:44:15+00:00" - }, - { - "name": "composer/composer", - "version": "2.1.14", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "cd28fc05b0c9d3beaf58b57018725c4dc15a6446" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/cd28fc05b0c9d3beaf58b57018725c4dc15a6446", - "reference": "cd28fc05b0c9d3beaf58b57018725c4dc15a6446", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/semver": "^3.0", - "composer/spdx-licenses": "^1.2", - "composer/xdebug-handler": "^2.0", - "justinrainbow/json-schema": "^5.2.11", - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0 || ^2.0", - "react/promise": "^1.2 || ^2.7", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.0", - "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0", - "symfony/filesystem": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", - "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "phpspec/prophecy": "^1.10", - "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" - }, - "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.1-dev" - } - }, - "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", - "source": "https://github.com/composer/composer/tree/2.1.14" - }, - "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-11-30T09:51:43+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/satis", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/composer/satis.git", - "reference": "59ef7f6f03bea226d2a801e0ea737cf36306e0e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/satis/zipball/59ef7f6f03bea226d2a801e0ea737cf36306e0e9", - "reference": "59ef7f6f03bea226d2a801e0ea737cf36306e0e9", - "shasum": "" - }, - "require": { - "composer/composer": "^2.1.9", - "php": "^7.3||^8.0", - "symfony/console": "^4.4||^5.0", - "twig/html-extra": "^3.3", - "twig/twig": "^3.3" - }, - "replace": { - "symfony/polyfill-php72": "*", - "symfony/polyfill-php73": "*" - }, - "require-dev": { - "ext-json": "*", - "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^9.5" - }, - "default-branch": true, - "bin": [ - "bin/satis" - ], - "type": "project", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Satis\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - }, - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "https://robbast.nl" - } - ], - "description": "Simple Repository Generator", - "homepage": "https://github.com/composer/satis", - "keywords": [ - "composer", - "generator", - "package", - "repository", - "static" - ], - "support": { - "forum": "https://gitter.com/composer/satis", - "irc": "irc://freenode.net/composer", - "issues": "https://github.com/composer/satis", - "source": "https://github.com/composer/satis" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - } - ], - "time": "2021-11-08T12:26:33+00:00" - }, - { - "name": "composer/semver", - "version": "3.2.6", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "83e511e247de329283478496f7a1e114c9517506" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", - "reference": "83e511e247de329283478496f7a1e114c9517506", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.54", - "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": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.6" - }, - "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-10-25T11:34:17+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.6", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "a30d487169d799745ca7280bc90fdfa693536901" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a30d487169d799745ca7280bc90fdfa693536901", - "reference": "a30d487169d799745ca7280bc90fdfa693536901", - "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": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.6" - }, - "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-11-18T10:14:14+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", - "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "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/2.0.2" - }, - "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-07-31T17:03:58+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.5", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5" - }, - "time": "2020-06-16T21:01:06+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.5-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2021-10-22T20:56:57+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", - "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2021-10-05T13:56:00+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.11", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ab6744b7296ded80f8cc4f9509abbff393399aa", - "reference": "2ab6744b7296ded80f8cc4f9509abbff393399aa", - "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/5.2.11" - }, - "time": "2021-07-22T09:24:00+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "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/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "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/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "react/promise", - "version": "v2.8.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "reference": "f3cff96a19736714524ca0dd1d4130de73dbbbc4", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^6.5 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "psr-4": { - "React\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com" - } - ], - "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/v2.8.0" - }, - "time": "2020-05-12T15:16:56+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.8.3", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "reference": "9ad6ce79c342fbd44df10ea95511a1b24dee5b57", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" - }, - "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": "http://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.8.3" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2020-11-11T09:19:24+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/749042a2315705d2dfbbc59234dd9ceb22bf3ff0", - "reference": "749042a2315705d2dfbbc59234dd9ceb22bf3ff0", - "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.1.2" - }, - "time": "2021-08-19T21:01:38+00:00" - }, - { - "name": "symfony/console", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ec3661faca1d110d6c307e124b44f99ac54179e3", - "reference": "ec3661faca1d110d6c307e124b44f99ac54179e3", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "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/v5.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": "2021-11-29T15:30:56+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-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/v2.5.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": "2021-07-12T14:48:14+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/731f917dc31edcffec2c6a777f3698c33bea8f01", - "reference": "731f917dc31edcffec2c6a777f3698c33bea8f01", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "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/v5.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": "2021-10-28T13:39:27+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "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/v5.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": "2021-11-28T15:25:38+00:00" - }, - { - "name": "symfony/mime", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "d4365000217b67c01acff407573906ff91bcfb34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34", - "reference": "d4365000217b67c01acff407573906ff91bcfb34", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "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 manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v5.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": "2021-11-23T10:19:22+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "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.23.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": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.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": "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.23.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": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.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": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.23.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": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.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": "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.23.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": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.23.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "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.23.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": "2021-07-28T13:41:28+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "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/v5.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": "2021-11-28T15:25:38+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "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/v2.5.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": "2021-11-04T16:48:04+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "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/v5.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": "2021-11-24T10:02:00+00:00" - }, - { - "name": "twig/html-extra", - "version": "v3.3.4", - "source": { - "type": "git", - "url": "https://github.com/twigphp/html-extra.git", - "reference": "ce33ea51bb0df393d2bc9945d08e2ce7fbe808c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/html-extra/zipball/ce33ea51bb0df393d2bc9945d08e2ce7fbe808c5", - "reference": "ce33ea51bb0df393d2bc9945d08e2ce7fbe808c5", - "shasum": "" - }, - "require": { - "php": ">=7.1.3", - "symfony/mime": "^4.4|^5.0|^6.0", - "twig/twig": "^2.7|^3.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "psr-4": { - "Twig\\Extra\\Html\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - } - ], - "description": "A Twig extension for HTML", - "homepage": "https://twig.symfony.com", - "keywords": [ - "html", - "twig" - ], - "support": { - "source": "https://github.com/twigphp/html-extra/tree/v3.3.4" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2021-11-13T16:20:21+00:00" - }, - { - "name": "twig/twig", - "version": "v3.3.4", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "65cb6f0b956485e1664f13d023c55298a4bb59ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/65cb6f0b956485e1664f13d023c55298a4bb59ca", - "reference": "65cb6f0b956485e1664f13d023c55298a4bb59ca", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.3.4" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "time": "2021-11-25T13:46:55+00:00" - }, - { - "name": "typo3/cms-composer-package-generator", - "version": "dev-compatibility-updates", - "dist": { - "type": "path", - "url": "packages/CmsComposerPackageGenerator", - "reference": "b7a81b269e5a53ecefcdb331460617d45d21f0f7" - }, - "require": { - "composer/satis": "^2.0@dev || ^3.0@dev", - "ext-json": "*", - "ext-simplexml": "*", - "ext-zlib": "*", - "guzzlehttp/guzzle": "^6.3.3", - "php": "^7.4 || ^8.0", - "symfony/console": "^3.4.47 || ^4.4 || ^5.3" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4", - "ergebnis/composer-normalize": "^2.15", - "symfony/var-dumper": "^3.2.4 || ^4.4 || ^5.3" - }, - "bin": [ - "bin/typo3-cms-package-generator" - ], - "type": "library", - "extra": { - "bamarni-bin": { - "target-directory": "tools" - } - }, - "autoload": { - "psr-4": { - "TYPO3\\Composer\\": "src/Classes/" - } - }, - "autoload-dev": { - "classmap": [ - "Tests/" - ] - }, - "scripts": { - "post-install-cmd": [ - "@composer bin all install --ansi" - ], - "post-update-cmd": [ - "@composer bin all update --ansi" - ], - "bin": [ - "echo 'bin not installed'" - ], - "ci": [ - "@ci:composer", - "@ci:php" - ], - "ci:composer": [ - "@ci:composer:validate", - "@ci:composer:normalize", - "@ci:composer:require-checker" - ], - "ci:composer:normalize": [ - "@composer normalize --dry-run" - ], - "ci:composer:require-checker": [ - "composer-require-checker" - ], - "ci:composer:validate": [ - "@composer validate" - ], - "ci:php": [ - "@ci:php:cs", - "@ci:php:lint", - "@ci:php:unit" - ], - "ci:php:cs": [ - "php-cs-fixer fix -v --dry-run --using-cache no --diff --diff-format=udiff" - ], - "ci:php:lint": [ - "phplint --no-progress" - ], - "ci:php:unit": [ - "phpunit -c ./Build/UnitTests.xml --log-junit var/log/phpunit-unit.xml --testsuite \"Core tests\" --colors" - ], - "fix": [ - "@fix:composer", - "@fix:php" - ], - "fix:composer": [ - "@fix:composer:normalize" - ], - "fix:composer:normalize": [ - "@composer normalize" - ], - "fix:php": [ - "@fix:php:cs" - ], - "fix:php:cs": [ - "php-cs-fixer fix" - ] - }, - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Lars Peipmann", - "email": "lars@peipmann.de" - }, - { - "name": "Fabien Udriot", - "email": "fabien.udriot@typo3.org" - }, - { - "name": "Simon Gilli", - "email": "simon.gilli@typo3.org" - } - ], - "description": "Script for generating TYPO3 CMS packages", - "homepage": "http://composer.typo3.org", - "keywords": [ - "composer", - "typo3" - ], - "transport-options": { - "relative": true - } - } - ], - "packages-dev": [ - { - "name": "roave/security-advisories", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "6f99479932347855a56d07958f3ac52e8261dda3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/6f99479932347855a56d07958f3ac52e8261dda3", - "reference": "6f99479932347855a56d07958f3ac52e8261dda3", - "shasum": "" - }, - "conflict": { - "3f/pygmentize": "<1.2", - "adodb/adodb-php": "<5.20.12", - "akaunting/akaunting": "<2.1.13", - "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", - "amazing/media2click": ">=1,<1.3.3", - "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", - "amphp/http-client": ">=4,<4.4", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6", - "area17/twill": "<=2.5.2", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", - "aws/aws-sdk-php": ">=3,<3.2.1", - "bagisto/bagisto": "<0.1.5", - "barrelstrength/sprout-base-email": "<1.2.7", - "barrelstrength/sprout-forms": "<3.9", - "baserproject/basercms": "<=4.5", - "billz/raspap-webgui": "<=2.6.6", - "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", - "bolt/bolt": "<3.7.2", - "bolt/core": "<4.1.13", - "brightlocal/phpwhois": "<=4.2.5", - "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": ">=2,<2.0.2", - "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": ">=1.3,<1.3.18|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=2.7,<2.7.6|>=3,<3.5.18|>=3.6,<3.6.15|>=3.7,<3.7.7", - "cardgate/magento2": "<2.0.33", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", - "catfan/medoo": "<1.7.5", - "centreon/centreon": "<20.10.7", - "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", - "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.23|>=2-alpha.1,<2.1.9", - "concrete5/concrete5": "<8.5.5", - "concrete5/core": "<8.5.7", - "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/core": ">=2,<3.5.39", - "contao/core-bundle": ">=4,<4.4.56|>=4.5,<4.9.18|>=4.10,<4.11.7|= 4.10.0", - "contao/listing-bundle": ">=4,<4.4.8", - "craftcms/cms": "<3.7.14", - "croogo/croogo": "<3.0.7", - "datadog/dd-trace": ">=0.30,<0.30.2", - "david-garcia/phpwhois": "<=4.3.1", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", - "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", - "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", - "doctrine/doctrine-bundle": "<1.5.2", - "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<14|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": ">=0.6,<0.6.2", - "drupal/core": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", - "dweeves/magmi": "<=0.7.24", - "ecodev/newsletter": "<=4", - "endroid/qr-code-bundle": "<3.4.2", - "enshrined/svg-sanitize": "<0.13.1", - "erusev/parsedown": "<1.7.2", - "ether/logs": "<3.0.4", - "ezsystems/demobundle": ">=5.4,<5.4.6.1", - "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", - "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<=1.3.1", - "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<=7.5.15.1", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", - "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1", - "ezyang/htmlpurifier": "<4.1.1", - "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=0.1.3", - "firebase/php-jwt": "<2", - "flarum/core": ">=1,<=1.0.1", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", - "fluidtypo3/vhs": "<5.1.1", - "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<=5.9.2", - "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<6.5.1", - "friendsofsymfony/oauth2-php": "<1.3", - "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", - "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "froala/wysiwyg-editor": "<3.2.7", - "fuel/core": "<1.8.1", - "getgrav/grav": "<=1.7.24", - "getkirby/cms": "<3.5.8", - "getkirby/panel": "<2.5.14", - "gilacms/gila": "<=1.11.4", - "globalpayments/php-sdk": "<2", - "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", - "gree/jose": "<=2.2", - "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<5.6.3", - "guzzlehttp/guzzle": ">=4-rc.2,<4.2.4|>=5,<5.3.1|>=6,<6.2.1", - "helloxz/imgurl": "<=2.31", - "hjue/justwriting": "<=1", - "hov/jobfair": "<1.0.13|>=2,<2.0.2", - "ibexa/post-install": "<=1.0.4", - "icecoder/icecoder": "<=8", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", - "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", - "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", - "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", - "illuminate/view": ">=7,<7.1.2", - "impresscms/impresscms": "<=1.4.2", - "in2code/femanager": "<5.5.1|>=6,<6.3.1", - "intelliants/subrion": "<=4.2.1", - "ivankristianto/phpwhois": "<=4.3", - "james-heinrich/getid3": "<1.9.21", - "joomla/archive": "<1.1.10", - "joomla/session": "<1.3.1", - "jsmitty12/phpwhois": "<5.1", - "kazist/phpwhois": "<=4.2.6", - "kevinpapst/kimai2": "<1.16.2", - "kitodo/presentation": "<3.1.2", - "klaviyo/magento2-extension": ">=1,<3", - "kreait/firebase-php": ">=3.2,<3.8.1", - "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-http": "<2.14.2", - "laravel/framework": "<6.20.26|>=7,<7.30.5|>=8,<8.40", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", - "lavalite/cms": "<=5.8", - "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", - "league/flysystem": "<1.1.4|>=2,<2.1.1", - "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<=21.10.2", - "limesurvey/limesurvey": "<3.27.19", - "livewire/livewire": ">2.2.4,<2.2.6", - "lms/routes": "<2.1.1", - "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", - "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", - "magento/magento1ce": "<1.9.4.3", - "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", - "marcwillmann/turn": "<0.3.3", - "mautic/core": "<4|= 2.13.1", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", - "microweber/microweber": "<1.2.8", - "miniorange/miniorange-saml": "<1.4.3", - "mittwald/typo3_forum": "<1.2.1", - "modx/revolution": "<2.8", - "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<3.5.17|>=3.7,<3.7.9|>=3.8,<3.8.8|>=3.9,<3.9.5|>=3.10-beta,<3.10.2", - "namshi/jose": "<2.2", - "neoan3-apps/template": "<1.1.1", - "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", - "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", - "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<=2.1.27.36", - "nukeviet/nukeviet": "<4.3.4", - "nystudio107/craft-seomatic": "<3.3", - "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", - "october/backend": "<1.1.2", - "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.472|>=1.1.1,<1.1.5|>=2.1,<2.1.12", - "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", - "opencart/opencart": "<=3.0.3.2", - "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.15|>=20,<20.0.13", - "orchid/platform": ">=9,<9.4.4", - "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4", - "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", - "pagekit/pagekit": "<=1.0.18", - "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<2.11", - "paypal/merchant-sdk-php": "<3.12", - "pear/archive_tar": "<1.4.14", - "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", - "personnummer/personnummer": "<3.0.2", - "phanan/koel": "<5.1.4", - "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", - "phpmailer/phpmailer": "<6.5", - "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<4.9.6|>=5,<5.0.3", - "phpoffice/phpexcel": "<1.8.2", - "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.7", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", - "phpwhois/phpwhois": "<=4.2.5", - "phpxmlrpc/extras": "<0.6.1", - "pimcore/pimcore": "<10.1.3", - "pocketmine/pocketmine-mp": "<3.15.4", - "pressbooks/pressbooks": "<5.18", - "prestashop/autoupgrade": ">=4,<4.10.1", - "prestashop/contactform": ">1.0.1,<4.3", - "prestashop/gamification": "<2.3.2", - "prestashop/productcomments": ">=4,<4.2.1", - "prestashop/ps_emailsubscription": "<2.6.1", - "prestashop/ps_facetedsearch": "<3.4.1", - "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.2.2|>=1.3,<1.3.2", - "propel/propel": ">=2-alpha.1,<=2-alpha.7", - "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.6.6", - "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", - "rainlab/debugbar-plugin": "<3.1", - "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", - "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", - "sensiolabs/connect": "<4.2.3", - "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.6", - "shopware/platform": "<=6.4.6", - "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<5.7.6", - "showdoc/showdoc": "<=2.9.12", - "silverstripe/admin": "<4.8.1", - "silverstripe/assets": ">=1,<1.4.7|>=1.5,<1.5.2", - "silverstripe/cms": "<4.3.6|>=4.4,<4.4.4", - "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", - "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.7.4", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2", - "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", - "silverstripe/subsites": ">=2,<2.1.1", - "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3", - "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", - "simplesamlphp/simplesamlphp": "<1.18.6", - "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", - "simplito/elliptic-php": "<1.0.6", - "slim/slim": "<2.6", - "smarty/smarty": "<3.1.39", - "snipe/snipe-it": "<5.3.2", - "socalnick/scn-social-auth": "<1.15.2", - "socialiteproviders/steam": "<1.1", - "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<21.0.3", - "stormpath/sdk": ">=0,<9.9.99", - "studio-42/elfinder": "<2.1.59", - "subrion/cms": "<=4.2.1", - "sulu/sulu": "<1.6.43|>=2,<2.0.10|>=2.1,<2.1.1", - "swiftmailer/swiftmailer": ">=4,<5.4.5", - "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/grid-bundle": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.6.9|>=1.7,<1.7.9|>=1.8,<1.8.3|>=1.9,<1.9.5", - "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", - "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", - "symbiote/silverstripe-versionedfiles": "<=2.0.3", - "symfont/process": ">=0,<4", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", - "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", - "symfony/http-kernel": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.4.13|>=5,<5.1.5|>=5.2,<5.3.12", - "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", - "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", - "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", - "symfony/polyfill-php55": ">=1,<1.10", - "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11|>=5.3,<5.3.12", - "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", - "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8|>=5.3,<5.3.2", - "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<3.4.49|>=4,<4.4.35|>=5,<5.3.12", - "symfony/translation": ">=2,<2.0.17", - "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", - "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": ">=2.2,<2.6.2", - "t3g/svg-sanitizer": "<1.0.3", - "tecnickcom/tcpdf": "<6.2.22", - "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1-beta.1,<2.1.3", - "theonedemon/phpwhois": "<=4.2.5", - "tinymce/tinymce": "<5.10", - "titon/framework": ">=0,<9.9.99", - "topthink/think": "<=6.0.9", - "topthink/thinkphp": "<=3.2.3", - "tribalsystems/zenario": "<8.8.53370", - "truckersmp/phpwhois": "<=4.3.1", - "twig/twig": "<1.38|>=2,<2.7", - "typo3/cms": ">=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": ">=6.2,<=6.2.56|>=7,<=7.6.52|>=8,<=8.7.41|>=9,<9.5.29|>=10,<10.4.19|>=11,<11.5", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", - "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", - "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", - "ua-parser/uap-php": "<3.8", - "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", - "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", - "vrana/adminer": "<4.7.9", - "wallabag/tcpdf": "<6.2.22", - "wanglelecc/laracms": "<=1.0.3", - "web-auth/webauthn-framework": ">=3.3,<3.3.4", - "webcoast/deferred-image-processing": "<1.0.2", - "wikimedia/parsoid": "<0.12.2", - "willdurand/js-translation-bundle": "<2.1.1", - "wp-cli/wp-cli": "<2.5", - "yidashi/yii2cmf": "<=2", - "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": ">=1.1.14,<1.1.15", - "yiisoft/yii2": "<2.0.38", - "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.43", - "yiisoft/yii2-elasticsearch": "<2.0.5", - "yiisoft/yii2-gii": "<2.0.4", - "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.8", - "yoast-seo-for-typo3/yoast_seo": "<7.2.3", - "yourls/yourls": "<=1.8.2", - "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", - "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", - "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", - "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", - "zendframework/zend-diactoros": ">=1,<1.8.4", - "zendframework/zend-feed": ">=1,<2.10.3", - "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-http": ">=1,<2.8.1", - "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", - "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", - "zendframework/zend-validator": ">=2.3,<2.3.6", - "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zendframework": "<=3", - "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": ">=2,<2.0.2", - "zendframework/zendxml": ">=1,<1.0.1", - "zetacomponents/mail": "<1.8.2", - "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", - "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "role": "maintainer" - }, - { - "name": "Ilya Tribusean", - "email": "slash3b@gmail.com", - "role": "maintainer" - } - ], - "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "support": { - "issues": "https://github.com/Roave/SecurityAdvisories/issues", - "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", - "type": "tidelift" - } - ], - "time": "2021-11-24T20:15:37+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "typo3/cms-composer-package-generator": 20, - "roave/security-advisories": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^7.4.23" - }, - "platform-dev": [], - "platform-overrides": { - "php": "7.4.23" - }, - "plugin-api-version": "2.1.0" -} diff --git a/satis/packages/CmsComposerPackageGenerator b/satis/packages/CmsComposerPackageGenerator deleted file mode 160000 index ea3e80cb..00000000 --- a/satis/packages/CmsComposerPackageGenerator +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea3e80cb99229b698b5ebf5a29c578870016c1eb diff --git a/src/Command/CoreExtensionsRedirectsCommand.php b/src/Command/CoreExtensionsRedirectsCommand.php index fce60d15..662519a7 100644 --- a/src/Command/CoreExtensionsRedirectsCommand.php +++ b/src/Command/CoreExtensionsRedirectsCommand.php @@ -28,6 +28,9 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +/** + * @codeCoverageIgnore + */ final class CoreExtensionsRedirectsCommand extends Command { /** diff --git a/src/Command/ExtensionsTerJsonCreateCommand.php b/src/Command/ExtensionsTerJsonCreateCommand.php new file mode 100644 index 00000000..7a6bcf4f --- /dev/null +++ b/src/Command/ExtensionsTerJsonCreateCommand.php @@ -0,0 +1,607 @@ + + */ + protected array $extensions = []; + + /** + * @var array + */ + protected array $extensionKeys = []; + + /** + * Extensions in this array are marked as abandoned when users install + * them with typo3-ter/ext-key. This array is autocreated with the + * information fetched from TER. Extensions providing a composer.json + * will be listed here and as result the author's version will be + * prefered over the package created here. + * + * Do not create pull requests for this list, simply provide a + * composer.json and register the composer name at TER for your extension. + * + * @var array + */ + protected static $abandonedExtensionKeys = [ + 'news' => 'georgringer/news', + 'typo3_console' => 'helhum/typo3-console', + ]; + + /** + * Core extensions. + * + * @var array + */ + protected static $coreExtensions = [ + 'about' => 'typo3/cms-about', + 'adminpanel' => 'typo3/cms-adminpanel', + 'backend' => 'typo3/cms-backend', + 'belog' => 'typo3/cms-belog', + 'beuser' => 'typo3/cms-beuser', + 'context_help' => 'typo3/cms-context-help', + 'core' => 'typo3/cms-core', + 'cshmanual' => 'typo3/cms-cshmanual', + 'css_styled_content' => 'typo3/cms-css-styled-content', + 'documentation' => 'typo3/cms-documentation', + 'dashboard' => 'typo3/cms-dashboard', + 'extbase' => 'typo3/cms-extbase', + 'extensionmanager' => 'typo3/cms-extensionmanager', + 'feedit' => 'typo3/cms-feedit', + 'felogin' => 'typo3/cms-felogin', + 'filelist' => 'typo3/cms-filelist', + 'filemetadata' => 'typo3/cms-filemetadata', + 'fluid' => 'typo3/cms-fluid', + 'fluid_styled_content' => 'typo3/cms-fluid-styled-content', + 'form' => 'typo3/cms-form', + 'frontend' => 'typo3/cms-frontend', + 'func' => 'typo3/cms-func', + 'impexp' => 'typo3/cms-impexp', + 'indexed_search' => 'typo3/cms-indexed-search', + 'info' => 'typo3/cms-info', + 'info_pagetsconfig' => 'typo3/cms-info-pagetsconfig', + 'install' => 'typo3/cms-install', + 'lang' => 'typo3/cms-lang', + 'linkvalidator' => 'typo3/cms-linkvalidator', + 'lowlevel' => 'typo3/cms-lowlevel', + 'opendocs' => 'typo3/cms-opendocs', + 'recordlist' => 'typo3/cms-recordlist', + 'recycler' => 'typo3/cms-recycler', + 'redirects' => 'typo3/cms-redirects', + 'reports' => 'typo3/cms-reports', + 'rsaauth' => 'typo3/cms-rsaauth', + 'rte_ckeditor' => 'typo3/cms-rte-ckeditor', + 'saltedpasswords' => 'typo3/cms-saltedpasswords', + 'scheduler' => 'typo3/cms-scheduler', + 'seo' => 'typo3/cms-seo', + 'setup' => 'typo3/cms-setup', + 'sv' => 'typo3/cms-sv', + 'sys_action' => 'typo3/cms-sys-action', + 'sys_note' => 'typo3/cms-sys-note', + 't3editor' => 'typo3/cms-t3editor', + 'taskcenter' => 'typo3/cms-taskcenter', + 'tstemplate' => 'typo3/cms-tstemplate', + 'version' => 'typo3/cms-version', + 'viewpage' => 'typo3/cms-viewpage', + 'wizard_crpages' => 'typo3/cms-wizard-crpages', + 'wizard_sortpages' => 'typo3/cms-wizard-sortpages', + 'workspaces' => 'typo3/cms-workspaces', + ]; + + /** + * Location where to output built files. + * + * @var string + */ + protected $outputDir; + + private static ?VersionParser $versionParser = null; + + protected function configure(): void + { + $this->setDescription('Creates packages.json files from ' . static::TER_XML_PATH) + ->setDefinition([ + new InputArgument( + 'output-dir', + InputArgument::OPTIONAL, + 'Location where to output built files', + __DIR__ . '/../../var/satis' + ), + ]); + } + + /** + * @return int 0 if everything went fine, or an exit code + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + /** @var string $outputDir */ + $outputDir = $input->getArgument('output-dir'); + if (($outputPath = realpath($outputDir)) === false) { + throw new RuntimeException(\sprintf('Path "%s" not found.', $outputDir), 1_660_250_640); + } + + $this->outputDir = $outputPath; + + $this->fetchComposerNames(); + $this->saveAliases(); + $extensions = $this->getExtensions(); + $packages = $this->getPackages($extensions); + + foreach ($packages as $type => $content) { + $output->writeln(sprintf('Successfully created "%s"', $this->save($type, ['packages' => $content]))); + } + + return 0; + } + + /** + * @param array $extensionKeys + */ + protected function registerComposerAlias(array $extensionKeys, string $composerName): void + { + foreach ($extensionKeys as $extKey) { + if (!isset(self::$abandonedExtensionKeys[$extKey])) { + self::$abandonedExtensionKeys[$extKey] = $composerName; + } + } + } + + protected function fetchComposerNames(): void + { + $client = new Client(); + $response = $client->request( + 'GET', + static::COMPOSER_NAMES_URL, + [ + 'connect_timeout' => 2, + 'allow_redirects' => false, + ] + ); + $responseBody = $response->getBody()->getContents(); + + if (!is_array($json = \json_decode($responseBody, true, 512, JSON_THROW_ON_ERROR))) { + throw new RuntimeException('Invalid response.', 1_660_251_247); + } + + if ($json['meta'] !== null) { + throw new RuntimeException($json['meta']['error']); + } + + if (is_array($json['data'])) { + // Assign core extensions + foreach (self::$coreExtensions as $extKey => $composerName) { + $json['data'][$extKey]['composer_name'] = $composerName; + } + + foreach ($json['data'] as $extKey => $settings) { + if (!is_string($extKey)) { + throw new RuntimeException('Invalid extension key.', 1_660_251_470); + } + + if (!is_string($settings['composer_name'])) { + throw new RuntimeException('Invalid package name.', 1_660_251_471); + } + + self::$abandonedExtensionKeys[$extKey] = $settings['composer_name']; + + if (str_contains($extKey, '_')) { + $this->registerComposerAlias([ + \str_replace('_', '-', $extKey), + \str_replace('_', '', $extKey), + ], $settings['composer_name']); + } + } + + ksort(self::$abandonedExtensionKeys, SORT_STRING); + } + } + + protected function saveAliases(): string + { + $fileName = $this->outputDir . '/' . self::ALIASES_FILE; + file_put_contents($fileName, json_encode(self::$abandonedExtensionKeys, JSON_THROW_ON_ERROR)); + + return $fileName; + } + + /** + * @return SimpleXMLElement[] + */ + protected function getExtensions(): array + { + if ($this->extensions === []) { + $client = new Client(); + $response = $client->request( + 'GET', + static::TER_XML_PATH, + [ + 'connect_timeout' => 2, + 'allow_redirects' => false, + ] + ); + if (($extensionsXml = gzdecode($response->getBody()->getContents())) === false) { + throw new RuntimeException('Invalid response.', 1_660_251_597); + } + + $extensionsObject = new SimpleXMLElement($extensionsXml); + $this->extensions = $extensionsObject->xpath('/extensions/extension'); + $this->initExtensionKeys($this->extensions); + } + + return $this->extensions; + } + + /** + * @param SimpleXMLElement[] $extensions + */ + protected function initExtensionKeys(array $extensions): void + { + foreach ($extensions as $extension) { + if ($extension['extensionkey'] === null) { + continue; + } + + $this->extensionKeys[(string)$extension['extensionkey']] = $extension['extensionkey']; + } + } + + /** + * @param SimpleXMLElement[] $extensions + * + * @return array&mixed[]>&mixed[]> + */ + protected function getPackages(array $extensions): array + { + $packages = []; + //$quarter = mktime(0, 0, 0, floor((date('m') - 1) / 3) * 3 + 1, 1, date('Y')); + $dateTimeToday = new DateTimeImmutable(); + $new = $dateTimeToday->modify('yesterday')->getTimestamp(); + + foreach ($extensions as $extension) { + foreach ($extension->version as $version) { + if (preg_match('#^[\d]+\.[\d]+\.[\d]+$#', (string)$version['version']) !== 1) { + // Ignore extensions with invalid version numbers + //echo 'Extension ' . (string) $extension['extensionkey'] . ' has invalid version number "' . (string) $version['version'] . '"' . PHP_EOL; + continue; + } + + $package = $this->getPackageArray($extension, $version); + + if (!isset($package['require']['typo3/cms-core'])) { + // Ignore extensions with missing dependency to TYPO3 + continue; + } + + if ($package['require']['typo3/cms-core'] === '*') { + // Ignore extensions with "any" dependency to TYPO3 + continue; + } + + if (self::$versionParser === null) { + self::$versionParser = new VersionParser(); + } + + $versionParser = self::$versionParser; + $parsedConstraints = $versionParser->parseConstraints($package['require']['typo3/cms-core']); + + if ( + Semver::satisfies($parsedConstraints->getLowerBound()->getVersion(), '<8.7') + && ( + $parsedConstraints->getUpperBound()->isPositiveInfinity() + || $parsedConstraints->getUpperBound()->getVersion() + === $parsedConstraints->getLowerBound()->getVersion() + || Semver::satisfies($parsedConstraints->getUpperBound()->getVersion(), '<8.7') + ) + ) { + // Ignore extensions with dependency to TYPO3 lower than 8.7 + continue; + } + + //if ($quarter < (int)$version->lastuploaddate) { + if ($new < (int)$version->lastuploaddate) { + //$packages['quarter'][$package['name']][$package['version']] = $package; + $packages['new'][$package['name']][$package['version']] = $package; + } else { + $packages['archive'][$package['name']][$package['version']] = $package; + } + } + } + + return $packages; + } + + /** + * @return array{ + * name: string, + * description: string, + * version: string, + * type: string, + * homepage: string, + * time: string, + * authors: array, + * require: array, + * conflict: array, + * replace: array, + * suggest: array, + * autoload: array>, + * extra: array{'typo3/cms': array{extension-key: string}}, + * dist: array + * }|array{} + */ + protected function getPackageArray(SimpleXMLElement $extension, SimpleXMLElement $version): array + { + $extKey = (string)$extension['extensionkey']; + $autoload = [ + 'classmap' => [''], + 'exclude-from-classmap' => [ + 'Migrations', + 'Tests', + 'tests', + 'class.ext_update.php', + ], + ]; + if ($version->composerinfo !== null) { + $composerInfo = json_decode((string)$version->composerinfo, true, 512); + if (is_array($composerInfo) && is_array($composerInfo['autoload'] ?? null)) { + $autoload = $composerInfo['autoload']; + } + } + + $packageArray = [ + 'name' => $this->getPackageName($extKey), + 'description' => (string)$version->description, + 'version' => (string)$version['version'], + 'type' => self::PACKAGE_TYPE, + 'time' => date('Y-m-d H:i:s', (int)$version->lastuploaddate), + 'homepage' => sprintf(self::TER_HOME, $extKey), + 'authors' => [ + [ + 'name' => (string)$version->authorname, + 'email' => (string)$version->authoremail, + 'company' => (string)$version->authorcompany, + 'username' => (string)$version->ownerusername, + ], + ], + 'dist' => [ + 'url' => 'https://extensions.typo3.org/extension/download/' . $extKey . '/' . $version['version'] . '/zip/', + 'type' => 'zip', + ], + 'autoload' => $autoload, + 'extra' => [ + 'typo3/cms' => [ + 'extension-key' => $extKey, + ], + ], + ]; + + $packageArray = array_merge( + $packageArray, + $this->evaluateExtensionState($extKey, (int)$version->reviewstate, (string)$version->ownerusername) + ); + + $dependencies = unserialize((string)$version->dependencies); + + if (!is_array($dependencies)) { + // Ignore extensions with invalid dependencies + return []; + } + + $packageArray = array_merge( + $packageArray, + $this->getPackageLinks($dependencies) + ); + + $alternativeName = self::PACKAGE_NAME_PREFIX . $extKey; + if ($alternativeName !== $packageArray['name']) { + $packageArray['replace'] = [$alternativeName => 'self.version']; + } + + return $packageArray; + } + + /** + * @param array> $dependencies + * + * @return array> + */ + protected function getPackageLinks(array $dependencies): array + { + $packageLinks = []; + foreach ($dependencies as $dependency) { + $linkType = ''; + switch ($dependency['kind']) { + case 'depends': + $linkType = 'require'; + break; + case 'conflicts': + $linkType = 'conflict'; + break; + case 'suggests': + $linkType = 'suggest'; + break; + default: + continue 2; + } + + if ( + $dependency['extensionKey'] !== 'php' + && $dependency['extensionKey'] !== 'typo3' + && !isset($this->extensionKeys[$dependency['extensionKey']]) + ) { + continue; + } + + $requiredVersion = explode('-', $dependency['versionRange']); + $minVersion = trim($requiredVersion[0]); + $maxVersion = (isset($requiredVersion[1]) ? trim($requiredVersion[1]) : ''); + + if ( + ( + ($minVersion === '' || $minVersion === '0.0.0' || $minVersion === '*') + && ($maxVersion === '' || $maxVersion === '0.0.0' || $maxVersion === '*') + ) + || preg_match('#^([\d]+\.[\d]+\.[\d]+)*(\-)*([\d]+\.[\d]+\.[\d]+)*$#', $dependency['versionRange']) !== 1 + ) { + $versionConstraint = '*'; + } elseif ($maxVersion === '0.0.0' || $maxVersion === '') { + $versionConstraint = '>= ' . $minVersion; + } elseif ($minVersion === '' || $minVersion === '0.0.0') { + $versionConstraint = '<= ' . $maxVersion; + } elseif ($minVersion === $maxVersion) { + $versionConstraint = $minVersion; + } else { + $versionConstraint = '>= ' . $minVersion . ', <= ' . $maxVersion; + } + + $packageLinks[$linkType][$this->getPackageName($dependency['extensionKey'])] = $versionConstraint; + } + + return $packageLinks; + } + + /** + * @param array $content + */ + protected function save(string $type, array $content): string + { + $fileName = $this->getJsonFilePath($type); + file_put_contents($fileName, json_encode($content, JSON_THROW_ON_ERROR)); + + return $fileName; + } + + protected function getJsonFilePath(string $type): string + { + $jsonFilePath = $this->outputDir . '/' . self::JSON_FILE; + + return str_replace('{type}', $type, $jsonFilePath); + } + + protected function getPackageName(string $extensionKey): string + { + return match ($extensionKey) { + 'php' => 'php', + 'typo3' => 'typo3/cms-core', + default => self::PACKAGE_NAME_PREFIX . str_replace('_', '-', $extensionKey), + }; + } + + /** + * @return array{abandoned: bool|string} + */ + protected function evaluateExtensionState(mixed $extKey, int $reviewState, mixed $owner): array + { + $packageArray = []; + + if ($reviewState === -1) { + $packageArray['extra'] = [ + 'typo3/ter' => [ + 'review-state' => 'insecure', + ], + ]; + } + + if ($reviewState === -2) { + $packageArray['extra'] = [ + 'typo3/ter' => [ + 'review-state' => 'outdated', + ], + ]; + } + + if ($owner === 'abandoned_extensions' || $owner === 'abandon') { + $packageArray['abandoned'] = true; + } + + if (isset(self::$abandonedExtensionKeys[$extKey])) { + $packageArray['abandoned'] = self::$abandonedExtensionKeys[$extKey]; + } else { + // Abandon all extensions because this repository is deprecated at all + $packageArray['abandoned'] = true; + } + + return $packageArray; + } +} diff --git a/src/Command/ListMissingDownloadsCommand.php b/src/Command/ListMissingDownloadsCommand.php index 8306a05e..011dd70f 100644 --- a/src/Command/ListMissingDownloadsCommand.php +++ b/src/Command/ListMissingDownloadsCommand.php @@ -32,6 +32,9 @@ use Symfony\Component\Yaml\Yaml; use Exception; +/** + * @codeCoverageIgnore + */ class ListMissingDownloadsCommand extends Command { /** diff --git a/src/Command/SatisBuildCommand.php b/src/Command/SatisBuildCommand.php new file mode 100644 index 00000000..a1dfccc1 --- /dev/null +++ b/src/Command/SatisBuildCommand.php @@ -0,0 +1,173 @@ +setDescription('Build Composer Repository. By default changed extension since yesterday are rebuilt.') + ->setDefinition([ + new InputArgument( + 'output-dir', + InputArgument::OPTIONAL, + 'Location where to output built files', + __DIR__ . '/../../public/satis' + ), + new InputArgument( + 'file', + InputArgument::OPTIONAL, + 'Json file to create and use', + __DIR__ . '/../../var/satis/satis.json' + ), + new InputArgument( + 'repository-dir', + InputArgument::OPTIONAL, + 'Location where to output and search for repository files', + __DIR__ . '/../../var/satis' + ), + new InputOption( + 'all', + null, + InputOption::VALUE_NONE, + 'Build all repositories' + ), + new InputOption( + 'auto', + null, + InputOption::VALUE_NONE, + 'Build all repositories automatically' + ), + ]); + } + + /** + * @return int 0 if everything went fine, or an exit code + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + $timeStart = microtime(true); + + /** @var string $repositoryDir */ + $repositoryDir = $input->getArgument('repository-dir'); + /** @var string $configFile */ + $configFile = $input->getArgument('file'); + /** @var string $outputDir */ + $outputDir = $input->getArgument('output-dir'); + /** @var bool $buildAll */ + $buildAll = $input->getOption('all'); + /** @var bool $autoBuildAll */ + $autoBuildAll = $input->getOption('auto'); + + if ($autoBuildAll && (new DateTimeImmutable())->format('G') === '3') { + $buildAll = \true; + } + + if (!($application = $this->getApplication()) instanceof Application) { + throw new RuntimeException('Application is not initialized.', 1_660_125_012); + } + + // Run extensions:ter:json:create + $command = $application->find('extensions:ter:json:create'); + + $arguments = [ + 'command' => 'extensions:ter:json:create', + 'output-dir' => $repositoryDir, + ]; + + $commandInput = new ArrayInput($arguments); + $output->writeln(sprintf('Running "%s"...', $arguments['command'])); + $returnCode = $command->run($commandInput, $output); + + // Copy Aliases + if ($returnCode === 0) { + $output->writeln('Copy aliases.json...'); + copy(realpath($repositoryDir) . '/aliases.json', realpath($outputDir) . '/aliases.json'); + } + + // Run satis:json:create + if ($returnCode === 0) { + $command = $application->find('satis:json:create'); + + $arguments = [ + 'command' => 'satis:json:create', + 'file' => $configFile, + 'repository-dir' => $repositoryDir, + ]; + + $commandInput = new ArrayInput($arguments); + $output->writeln(sprintf('Running "%s"...', $arguments['command'])); + $returnCode = $command->run($commandInput, $output); + } + + // Run satis build + if ($returnCode === 0) { + $application = new \Composer\Satis\Console\Application(); + $application->setAutoExit(false); + + $arguments = [ + 'command' => 'build', + 'file' => $configFile, + 'output-dir' => $outputDir, + '--skip-errors' => true, + ]; + + if (!$buildAll) { + $arguments += [ + '--repository-url' => ['file://' . realpath($repositoryDir) . '/packages-TYPO3Extensions-new.json'], + ]; + } + + $commandInput = new ArrayInput($arguments); + $output->writeln(sprintf('Running "%s" (%s)...', $arguments['command'], $buildAll ? 'full' : 'new')); + $returnCode = $application->run($commandInput, $output); + } + + // Output processing duration + $timeEnd = microtime(true); + $time = $timeEnd - $timeStart; + + $output->writeln(sprintf('Finished in %f seconds', $time)); + + return $returnCode; + } +} diff --git a/src/Command/SatisJsonCreateCommand.php b/src/Command/SatisJsonCreateCommand.php new file mode 100644 index 00000000..b949fb2e --- /dev/null +++ b/src/Command/SatisJsonCreateCommand.php @@ -0,0 +1,106 @@ +setDescription('Create a satis.json') + ->setDefinition([ + new InputArgument( + 'file', + InputArgument::OPTIONAL, + 'Json file to create', + __DIR__ . '/../../var/satis/satis.json' + ), + new InputArgument( + 'repository-dir', + InputArgument::OPTIONAL, + 'Location where to search for repository files', + __DIR__ . '/../../var/satis' + ), + ]); + } + + /** + * @return int 0 if everything went fine, or an exit code + */ + protected function execute(InputInterface $input, OutputInterface $output): int + { + /** @var string $configFile */ + $configFile = $input->getArgument('file'); + /** @var string $repositoryDir */ + $repositoryDir = $input->getArgument('repository-dir'); + $repositoryDir = realpath($repositoryDir); + + if (!file_exists($configFile)) { + touch($configFile); + } + + if (!is_writable($configFile)) { + throw new RuntimeException(sprintf('File "%s" is not writable', $configFile), 1_438_441_994); + } + + $repositories = [ + [ + 'type' => 'composer', + 'url' => 'file://' . $repositoryDir . '/packages-TYPO3Extensions-archive.json', + ], + [ + 'type' => 'composer', + 'url' => 'file://' . $repositoryDir . '/packages-TYPO3Extensions-new.json', + ], + ]; + + $satis = new SatisJson('typo3/cms-extensions'); + $satis->setHomepage('https://composer.typo3.org'); + $satis->setRepositories($repositories); + $satis->requireAll(); + $satis->useProviders(); + + if (file_put_contents($configFile, (string)$satis) === false) { + throw new RuntimeException(sprintf('File "%s" could not be written, reason unknown', $configFile), 1_438_442_238); + } + + $output->writeln(sprintf('Successfully created "%s" with repository dir "%s"', $configFile, $repositoryDir)); + + return 0; + } +} diff --git a/src/Model/SatisJson.php b/src/Model/SatisJson.php new file mode 100644 index 00000000..b11b4b9f --- /dev/null +++ b/src/Model/SatisJson.php @@ -0,0 +1,126 @@ +>|array{}, + * require: array|array{}, + * require-all: bool, + * require-dependencies: bool, + * require-dev-dependencies: bool + * } + */ + protected array $data; + + /** + * @param string $name + */ + public function __construct($name) + { + if (!is_string($name)) { + throw new InvalidArgumentException(sprintf( + 'Argument "$name" must be of type "string", "%s" given', + gettype($name) + )); + } + + $this->data = [ + 'name' => $name, + 'homepage' => null, + 'repositories' => [], + 'require' => [], + 'require-all' => false, + 'require-dependencies' => false, + 'require-dev-dependencies' => false, + 'output-html' => false, + ]; + } + + public function setHomepage(string $homepage): void + { + $this->data['homepage'] = $homepage; + } + + /** + * @param array>|array{} $repositories + */ + public function setRepositories(array $repositories): void + { + $this->data['repositories'] = $repositories; + } + + /** + * @param array $repository + */ + public function addRepository(array $repository): void + { + $this->data['repositories'][] = $repository; + } + + public function requireAll(): void + { + $this->data['require-all'] = true; + } + + public function requireDependencies(): void + { + $this->data['require-dependencies'] = true; + } + + public function requireDevDependencies(): void + { + $this->data['require-dev-dependencies'] = true; + } + + public function useProviders(): void + { + $this->data['providers'] = true; + } + + public function __toString(): string + { + if ($this->data['repositories'] === []) { + unset($this->data['repositories']); + } + + if ($this->data['require'] === []) { + unset($this->data['require']); + } + + return (string)json_encode($this->data, JSON_PRETTY_PRINT); + } +} diff --git a/templates/default/composer-repository.html.twig b/templates/default/composer-repository.html.twig index c13f0b08..0fbea630 100644 --- a/templates/default/composer-repository.html.twig +++ b/templates/default/composer-repository.html.twig @@ -18,17 +18,16 @@ {% endframe %} {% frame with { color: 'light', id: 'what', title: "What Is It?" } %} -

TYPO3 offers a Composer repository, enabling you to install TYPO3 extensions from the TYPO3 Extension Repository (TER) including their TER dependencies via Composer. The packages are updated once every 3 hours.

+

TYPO3 offers a Composer repository, enabling you to install TYPO3 extensions from the TYPO3 Extension Repository (TER) including their TER dependencies via Composer. The packages are updated once every 15 minutes.

This repository includes only the following TYPO3 CMS extensions:

    -
  • All TYPO3 extensions that are uploaded to TER, including insecure versions. +
  • All TYPO3 extensions compatible with TYPO3 v8.7 or later that are uploaded to TER, including insecure versions.
      -
    • Insecure versions are marked in th extra section with "extra""typo3/ter""reviewstate" = "insecure" in the Composer extra section
    • -
    • All these extensions are in the typo3-ter/ namespace
    • +
    • Insecure versions are marked in the extra section "extra.typo3/ter.reviewstate" = "insecure" in the composer.json.
    • +
    • All these extensions have the typo3-ter vendor name set.
-

You can list and search for available extension packages.

{% endframe %} {% frame with { id: 'usage', title: "How to use it?" } %}