From e0ccc9d22bd851872e548432f9a5bc57d2c7aa16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20H=C3=A4u=C3=9Fler?= Date: Fri, 1 Mar 2024 11:20:15 +0100 Subject: [PATCH] Initial commit --- .crowdin.yaml | 3 + .editorconfig | 47 + .gitattributes | 19 + .github/ISSUE_TEMPLATE/bug_report.yml | 76 + .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature_request.yml | 39 + .github/release.yml | 31 + .github/workflows/cgl.yaml | 58 + .github/workflows/release.yaml | 76 + .github/workflows/tests.yaml | 131 + .gitignore | 5 + .php-cs-fixer.php | 27 + CODE_OF_CONDUCT.md | 7 + CONTRIBUTING.md | 93 + Classes/Command/ListQueueCommand.php | 293 + .../Controller/MailqueueModuleController.php | 188 + Classes/Enums/MailState.php | 39 + Classes/Exception/Exception.php | 32 + Classes/Exception/FileDoesNotExist.php | 41 + .../SerializedFailureMetadataIsInvalid.php | 41 + .../Exception/SerializedMessageIsInvalid.php | 41 + Classes/Extension.php | 82 + Classes/Mail/Iterator/FileIterator.php | 50 + Classes/Mail/Queue/MailQueue.php | 92 + Classes/Mail/Queue/MailQueueItem.php | 46 + .../Mail/Transport/QueueableFileTransport.php | 270 + .../Transport/QueueableMemoryTransport.php | 89 + Classes/Mail/Transport/QueueableTransport.php | 50 + Classes/Mail/TransportFailure.php | 75 + Classes/Traits/TranslatableTrait.php | 53 + .../ViewHelpers/DateIntervalViewHelper.php | 58 + .../Format/HumanDateViewHelper.php | 104 + Configuration/Backend/Modules.php | 40 + Configuration/Icons.php | 29 + Configuration/Services.yaml | 25 + .../Images/ScreenshotBackendModule.png | Bin 0 -> 103141 bytes .../Images/ScreenshotConsoleCommand.png | Bin 0 -> 188110 bytes LICENSE.md | 294 + README.md | 161 + Resources/Private/Language/locallang.xlf | 130 + .../Language/locallang_mod_mailqueue.xlf | 17 + Resources/Private/Layouts/Default.html | 8 + Resources/Private/Partials/Date.html | 9 + Resources/Private/Partials/List/Queue.html | 85 + .../Private/Partials/List/QueueItem.html | 95 + Resources/Private/Partials/Mail/Address.html | 16 + .../Modal/TransportFailureDetails.html | 40 + Resources/Private/Templates/List.html | 27 + Resources/Public/Icons/Extension.svg | 6 + Resources/Public/Icons/module.svg | 6 + Tests/Build/console-application.php | 41 + Tests/Functional/.gitkeep | 0 Tests/Unit/.gitkeep | 0 codecov.yml | 2 + composer.json | 107 + composer.lock | 9424 +++++++++++++++++ ext_emconf.php | 39 + ext_localconf.php | 24 + ext_tables.php | 24 + packaging_exclude.php | 55 + phpstan-baseline.neon | 6 + phpstan.neon | 14 + phpunit.functional.xml | 26 + phpunit.unit.xml | 26 + rector.php | 48 + renovate.json | 13 + 66 files changed, 13094 insertions(+) create mode 100644 .crowdin.yaml create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/release.yml create mode 100644 .github/workflows/cgl.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 .github/workflows/tests.yaml create mode 100644 .gitignore create mode 100644 .php-cs-fixer.php create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 Classes/Command/ListQueueCommand.php create mode 100644 Classes/Controller/MailqueueModuleController.php create mode 100644 Classes/Enums/MailState.php create mode 100644 Classes/Exception/Exception.php create mode 100644 Classes/Exception/FileDoesNotExist.php create mode 100644 Classes/Exception/SerializedFailureMetadataIsInvalid.php create mode 100644 Classes/Exception/SerializedMessageIsInvalid.php create mode 100644 Classes/Extension.php create mode 100644 Classes/Mail/Iterator/FileIterator.php create mode 100644 Classes/Mail/Queue/MailQueue.php create mode 100644 Classes/Mail/Queue/MailQueueItem.php create mode 100644 Classes/Mail/Transport/QueueableFileTransport.php create mode 100644 Classes/Mail/Transport/QueueableMemoryTransport.php create mode 100644 Classes/Mail/Transport/QueueableTransport.php create mode 100644 Classes/Mail/TransportFailure.php create mode 100644 Classes/Traits/TranslatableTrait.php create mode 100644 Classes/ViewHelpers/DateIntervalViewHelper.php create mode 100644 Classes/ViewHelpers/Format/HumanDateViewHelper.php create mode 100644 Configuration/Backend/Modules.php create mode 100644 Configuration/Icons.php create mode 100644 Configuration/Services.yaml create mode 100644 Documentation/Images/ScreenshotBackendModule.png create mode 100644 Documentation/Images/ScreenshotConsoleCommand.png create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 Resources/Private/Language/locallang.xlf create mode 100644 Resources/Private/Language/locallang_mod_mailqueue.xlf create mode 100644 Resources/Private/Layouts/Default.html create mode 100644 Resources/Private/Partials/Date.html create mode 100644 Resources/Private/Partials/List/Queue.html create mode 100644 Resources/Private/Partials/List/QueueItem.html create mode 100644 Resources/Private/Partials/Mail/Address.html create mode 100644 Resources/Private/Partials/Modal/TransportFailureDetails.html create mode 100644 Resources/Private/Templates/List.html create mode 100644 Resources/Public/Icons/Extension.svg create mode 100644 Resources/Public/Icons/module.svg create mode 100644 Tests/Build/console-application.php create mode 100644 Tests/Functional/.gitkeep create mode 100644 Tests/Unit/.gitkeep create mode 100644 codecov.yml create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 ext_emconf.php create mode 100644 ext_localconf.php create mode 100644 ext_tables.php create mode 100644 packaging_exclude.php create mode 100644 phpstan-baseline.neon create mode 100644 phpstan.neon create mode 100644 phpunit.functional.xml create mode 100644 phpunit.unit.xml create mode 100644 rector.php create mode 100644 renovate.json diff --git a/.crowdin.yaml b/.crowdin.yaml new file mode 100644 index 0000000..420e99a --- /dev/null +++ b/.crowdin.yaml @@ -0,0 +1,3 @@ +files: + - source: /Resources/Private/Language/ + translation: /%original_path%/%two_letters_code%.%original_file_name% diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4bcbdab --- /dev/null +++ b/.editorconfig @@ -0,0 +1,47 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + +# TS/JS-Files +[*.{ts,js}] +indent_size = 2 + +# JSON-Files +[*.json] +indent_style = tab + +# YAML-Files +[*.{yaml,yml}] +indent_size = 2 + +# NEON-Files +[*.neon] +indent_size = 2 +indent_style = tab + +# TypoScript +[*.{typoscript,tsconfig}] +indent_size = 2 + +# XLF-Files +[*.xlf] +indent_style = tab + +# SQL-Files +[*.sql] +indent_style = tab +indent_size = 2 + +# .htaccess +[{_.htaccess,.htaccess}] +indent_style = tab diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..86f94b3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,19 @@ +* text=auto +/.github export-ignore +/Tests export-ignore +/.crowdin.yaml export-ignore +/.editorconfig export-ignore +/.gitattributes export-ignore +/.gitignore export-ignore +/.php-cs-fixer.php export-ignore +/CODE_OF_CONDUCT.md export-ignore +/codecov.yml export-ignore +/composer.lock export-ignore +/CONTRIBUTING.md export-ignore +/packaging_exclude.php export-ignore +/phpstan.neon export-ignore +/phpstan-baseline.neon export-ignore +/phpunit.functional.xml export-ignore +/phpunit.unit.xml export-ignore +/rector.php export-ignore +/renovate.json export-ignore diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..6c85521 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,76 @@ +name: Bug report +description: Create a report to help improve the extension. +title: "[BUG]" +labels: + - bug +body: + - type: input + id: typo3-version + attributes: + label: TYPO3 version + description: What TYPO3 version are you using? + placeholder: 'e.g. 11.5.25' + validations: + required: true + - type: input + id: php-version + attributes: + label: PHP version + description: What PHP version are you using? + placeholder: 'e.g. 8.1.16' + validations: + required: true + - type: input + id: extension-version + attributes: + label: Extension version + description: What version of EXT:mailqueue are you using? + placeholder: 'e.g. 0.1.0' + validations: + required: true + - type: checkboxes + id: composer-mode + attributes: + label: Composer mode + description: Are you running TYPO3 in composer mode? + options: + - label: I'm running TYPO3 in composer mode. + - type: input + id: operating-system + attributes: + label: Operating system + description: What operating system are you using? + placeholder: 'e.g. macOS 13.2' + validations: + required: true + - type: textarea + attributes: + label: Current behavior + description: A clear and concise description of what the bug is. + - type: textarea + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen. + - type: textarea + attributes: + label: Steps to reproduce + description: If possible, describe steps to reproduce the behavior. + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + - type: textarea + attributes: + label: Additional context + description: Add any other context about the problem here. + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: > + By submitting this issue, you agree to follow our + [Code of Conduct](https://github.com/CPS-IT/mailqueue/blob/main/CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..c85931d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,39 @@ +name: Feature request +description: Suggest an idea for this extension. +title: "[FEATURE]" +labels: + - enhancement +body: + - type: textarea + attributes: + label: Is your feature request related to a problem? + description: A clear and concise description of what the problem is. + placeholder: I'm always frustrated when [...] + validations: + required: true + - type: textarea + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + attributes: + label: Describe alternatives you've considered + description: > + A clear and concise description of any alternative solutions or features + you've considered. + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: > + By submitting this issue, you agree to follow our + [Code of Conduct](https://github.com/CPS-IT/mailqueue/blob/main/CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's Code of Conduct. + required: true diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 0000000..0fd883d --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,31 @@ +changelog: + exclude: + labels: + - duplicate + - 'good first issue' + - 'help wanted' + - invalid + - question + - wontfix + categories: + - title: ⚡ Breaking + labels: + - breaking + - title: 🚀 Improved + labels: + - enhancement + - title: 🚑 Fixed + labels: + - bug + - title: 👷 Changed + labels: + - maintenance + - title: 📖 Documentation + labels: + - documentation + - title: ⚙️ Dependencies + labels: + - dependencies + - title: Other changes + labels: + - "*" diff --git a/.github/workflows/cgl.yaml b/.github/workflows/cgl.yaml new file mode 100644 index 0000000..19ce5e9 --- /dev/null +++ b/.github/workflows/cgl.yaml @@ -0,0 +1,58 @@ +name: CGL +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + cgl: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Prepare environment + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.3 + tools: composer:v2, composer-require-checker, composer-unused + coverage: none + + # Validation + - name: Validate composer.json + run: composer validate + + # Install dependencies + - name: Install Composer dependencies + uses: ramsey/composer-install@v2 + with: + composer-options: --no-plugins + + # Check Composer dependencies + - name: Check dependencies + run: composer-require-checker check + - name: Re-install Composer dependencies + uses: ramsey/composer-install@v2 + - name: Check for unused dependencies + run: composer-unused + + # Linting + - name: Lint composer.json + run: composer lint:composer + - name: Lint Editorconfig + run: composer lint:editorconfig + - name: Lint PHP + run: composer lint:php + + # SCA + - name: SCA PHP + run: composer sca:php -- --error-format github + + # Migration + - name: Run Rector migration + run: composer migration:rector -- --dry-run diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..b084f9f --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,76 @@ +name: Release +on: + push: + tags: + - '*' + +jobs: + # Job: Create release + release: + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + outputs: + release-notes-url: ${{ steps.create-release.outputs.url }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Check if tag is valid + - name: Check tag + run: | + if ! [[ ${{ github.ref }} =~ ^refs/tags/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then + exit 1 + fi + + # Create release + - name: Create release + id: create-release + uses: softprops/action-gh-release@v1 + with: + token: ${{ secrets.RELEASE_TOKEN }} + generate_release_notes: true + + # Job: Publish on TER + ter-publish: + if: startsWith(github.ref, 'refs/tags/') + needs: [release] + runs-on: ubuntu-latest + env: + TYPO3_EXTENSION_KEY: mailqueue + TYPO3_API_TOKEN: ${{ secrets.TYPO3_API_TOKEN }} + TYPO3_EXCLUDE_FROM_PACKAGING: packaging_exclude.php + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Check if tag is valid + - name: Check tag + run: | + if ! [[ ${{ github.ref }} =~ ^refs/tags/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then + exit 1 + fi + + # Prepare version + - id: get-version + run: echo "version=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT + - id: get-comment + run: echo "comment=See release notes at ${{ needs.release.outputs.release-notes-url }}" >> $GITHUB_OUTPUT + + # Prepare environment + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.3 + extensions: intl, mbstring, json, zip, curl + tools: composer:v2, typo3/tailor + + - name: Reset files + run: git reset --hard HEAD && git clean -dfx + + # Release + - name: Publish to TER + run: | + php ~/.composer/vendor/bin/tailor set-version "${{ steps.get-version.outputs.version }}" + php ~/.composer/vendor/bin/tailor ter:publish --comment "${{ steps.get-comment.outputs.comment }}" "${{ steps.get-version.outputs.version }}" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..c9a1eb2 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,131 @@ +name: Tests +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + tests: + name: Tests (PHP ${{ matrix.php-version }}, TYPO3 ${{ matrix.typo3-version }} & ${{ matrix.dependencies }} dependencies) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-version: ["8.1", "8.2", "8.3"] + typo3-version: ["11.5", "12.4"] + dependencies: ["highest", "lowest"] + env: + typo3DatabaseName: typo3 + typo3DatabaseHost: '127.0.0.1' + typo3DatabaseUsername: root + typo3DatabasePassword: root + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Prepare environment + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + tools: composer:v2 + coverage: none + + # Start MySQL service + - name: Start MySQL + run: sudo /etc/init.d/mysql start + + # Install dependencies + - name: Install Composer dependencies + uses: ramsey/composer-install@v2 + with: + dependency-versions: ${{ matrix.dependencies }} + composer-options: --with=typo3/cms-core:"^${{ matrix.typo3-version }}" + + # Run tests + - name: Run tests + run: composer test + + coverage: + name: Test coverage + runs-on: ubuntu-latest + env: + typo3DatabaseName: typo3 + typo3DatabaseHost: '127.0.0.1' + typo3DatabaseUsername: root + typo3DatabasePassword: root + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Prepare environment + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: 8.3 + tools: composer:v2 + coverage: pcov + + # Start MySQL service + - name: Start MySQL + run: sudo /etc/init.d/mysql start + + # Install dependencies + - name: Install Composer dependencies + uses: ramsey/composer-install@v2 + + # Run tests + - name: Run tests + run: composer test:coverage + + # Upload artifact + - name: Fix coverage path + working-directory: .Build/coverage + run: sed -i 's#/home/runner/work/mailqueue/mailqueue#${{ github.workspace }}#g' clover.xml + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage + path: .Build/coverage/clover.xml + retention-days: 7 + + coverage-report: + name: Report test coverage + runs-on: ubuntu-latest + needs: coverage + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Download artifact + - name: Download coverage artifact + id: download + uses: actions/download-artifact@v4 + with: + name: coverage + + # CodeClimate + - name: CodeClimate report + uses: paambaati/codeclimate-action@v5.0.0 + if: env.CC_TEST_REPORTER_ID + env: + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + with: + coverageLocations: | + ${{ steps.download.outputs.download-path }}/clover.xml:clover + + # codecov + - name: codecov report + uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: | + ${{ steps.download.outputs.download-path }}/clover.xml + fail_ci_if_error: true + verbose: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c8ac83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/.Build +/config +/var +/.php-cs-fixer.cache +/.phpunit.result.cache diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php new file mode 100644 index 0000000..03b24fd --- /dev/null +++ b/.php-cs-fixer.php @@ -0,0 +1,27 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +$config = \TYPO3\CodingStandards\CsFixerConfig::create(); +$config->getFinder()->in(__DIR__); + +return $config; diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3538386 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,7 @@ +# Code of Conduct + +This project uses the +[TYPO3 Code of Conduct](https://typo3.org/community/values/code-of-conduct). + +When you contribute to this project or interact with community members, +you agree to adhere to this code of conduct. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..c541fd1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,93 @@ +# Contributing + +Thanks for considering contributing to this extension! Since it is an open source +product, its successful further development depends largely on improving and +optimizing it together. + +The development of this extension follows the official +[TYPO3 coding standards](https://github.com/TYPO3/coding-standards). To ensure the +stability and cleanliness of the code, various code quality tools are used and most +components are covered with test cases. For continuous integration, we use GitHub Actions. + +## Preparation + +```bash +# Clone repository +git clone https://github.com/CPS-IT/mailqueue.git +cd mailqueue + +# Install dependencies +composer install +``` + +## Run linters + +```bash +# All linters +composer lint + +# Specific linters +composer lint:composer +composer lint:editorconfig +composer lint:php + +# Fix all CGL issues +composer fix + +# Fix specific CGL issues +composer fix:composer +composer fix:editorconfig +composer fix:php +``` + +## Run static code analysis + +```bash +# All static code analyzers +composer sca + +# Specific static code analyzers +composer sca:php +``` + +## Run tests + +```bash +# All tests +composer test + +# Specific tests +composer test:functional +composer test:unit + +# All tests with code coverage +composer test:coverage + +# Specific tests with code coverage +composer test:coverage:functional +composer test:coverage:unit + +# Merge code coverage of all test suites +composer test:coverage:merge +``` + +### Test reports + +Code coverage reports are written to `.Build/log/coverage`. You can open the +last merged HTML report like follows: + +```bash +open .Build/coverage/html/_merged/index.html +``` + +💡 Make sure to merge coverage reports as written above. + +## Submit a pull request + +Once you have finished your work, please **submit a pull request** and describe +what you've done. Ideally, your PR references an issue describing the problem +you're trying to solve. + +All described code quality tools are automatically executed on each pull request +for all currently supported PHP versions and TYPO3 versions. Take a look at the +appropriate [workflows](.github/workflows) to get a detailed overview. diff --git a/Classes/Command/ListQueueCommand.php b/Classes/Command/ListQueueCommand.php new file mode 100644 index 0000000..370d5e2 --- /dev/null +++ b/Classes/Command/ListQueueCommand.php @@ -0,0 +1,293 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Command; + +use CPSIT\Typo3Mailqueue\Enums; +use CPSIT\Typo3Mailqueue\Mail; +use Symfony\Component\Console; +use Symfony\Component\Mailer; +use Symfony\Component\Mime; +use TYPO3\CMS\Core; + +/** + * ListQueueCommand + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class ListQueueCommand extends Console\Command\Command +{ + private const WAIT_INTERVAL = 5; + + private Console\Style\SymfonyStyle $io; + + public function __construct( + private readonly Core\Mail\Mailer $mailer, + ) { + parent::__construct(); + } + + protected function configure(): void + { + $this->addOption( + 'strict', + 's', + Console\Input\InputOption::VALUE_NONE, + 'Exit with non-successful status code in case any mail transports are failing', + ); + $this->addOption( + 'watch', + 'w', + Console\Input\InputOption::VALUE_NONE, + sprintf( + 'Watch for changes within mail queue, e.g. if mails are sent (refreshes all %d seconds)', + self::WAIT_INTERVAL, + ), + ); + } + + protected function initialize(Console\Input\InputInterface $input, Console\Output\OutputInterface $output): void + { + $this->io = new Console\Style\SymfonyStyle($input, $output); + } + + protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output): int + { + $strict = $input->getOption('strict'); + $watch = $input->getOption('watch'); + + $transport = $this->mailer->getTransport(); + $hasFailures = false; + + // Early return if unsupported mail transport is configured + if (!($transport instanceof Mail\Transport\QueueableTransport)) { + $this->io->error( + sprintf( + 'The configured mail transport "%s" is not supported. Please configure a mail spooler as mail transport.', + $transport::class, + ), + ); + + return self::INVALID; + } + + if ($watch) { + // Early return if --watch option is used on an unsupported output + if (!($output instanceof Console\Output\ConsoleOutput)) { + $this->io->error('The --watch option can only be used for console outputs.'); + + return self::FAILURE; + } + + $section = $output->section(); + + $this->io = new Console\Style\SymfonyStyle($input, $section); + + $this->watchForQueueUpdates($section, $transport); + } else { + $hasFailures = $this->decorateMailQueue($transport->getMailQueue()); + } + + if ($strict && $hasFailures) { + return self::FAILURE; + } + + return self::SUCCESS; + } + + private function watchForQueueUpdates( + Console\Output\ConsoleSectionOutput $section, + Mail\Transport\QueueableTransport $transport, + ): never { + while (true) { + $section->clear(); + + $this->decorateMailQueue($transport->getMailQueue()); + $this->io->writeln( + sprintf( + 'List is refreshed every %d seconds. Exit with Ctrl+C.', + self::WAIT_INTERVAL, + ), + ); + + sleep(self::WAIT_INTERVAL); + } + } + + private function decorateMailQueue(Mail\Queue\MailQueue $mailQueue): bool + { + $numberOfMailsInQueue = count($mailQueue); + + if ($numberOfMailsInQueue === 0) { + $this->io->success('No mails are currently in queue.'); + + return false; + } + + $this->io->section( + sprintf('Total mails in queue: %d', $numberOfMailsInQueue), + ); + + if ($this->io->isVerbose()) { + return $this->renderAsTable($mailQueue); + } + + return $this->renderAsList($mailQueue); + } + + private function renderAsTable(Mail\Queue\MailQueue $mailQueue): bool + { + $hasDate = false; + $hasFailures = false; + + $headers = ['State', 'Date', 'Subject', 'Recipient(s)', 'Sender']; + $rows = []; + + /** @var Mail\Queue\MailQueueItem $mailQueueItem */ + foreach ($mailQueue as $mailQueueItem) { + if ($mailQueueItem->date !== null) { + $hasDate = true; + } + + $rows[] = [ + $this->decorateState($mailQueueItem->state), + $mailQueueItem->date?->format('Y-m-d H:i:s') ?? 'Unknown', + $this->getMailSubject($mailQueueItem->message), + $this->getMailRecipients($mailQueueItem->message), + $mailQueueItem->message->getEnvelope()->getSender()->getAddress(), + ]; + + if ($mailQueueItem->state === Enums\MailState::Failed) { + $hasFailures = true; + } + } + + if (!$hasDate) { + unset($headers[1]); + + foreach (array_keys($rows) as $number) { + unset($rows[$number][1]); + } + } + + $this->io->createTable() + ->setStyle('default') + ->setHeaders($headers) + ->setRows($rows) + ->render() + ; + + $this->io->newLine(); + + return $hasFailures; + } + + private function renderAsList(Mail\Queue\MailQueue $mailQueue): bool + { + $hasFailures = false; + + /** @var Mail\Queue\MailQueueItem $mailQueueItem */ + foreach ($mailQueue as $mailQueueItem) { + if ($mailQueueItem->date !== null) { + $this->io->writeln( + sprintf( + '%s %s %s (to %s)', + $this->decorateState($mailQueueItem->state), + $mailQueueItem->date->format('Y-m-d H:i:s'), + $this->getMailSubject($mailQueueItem->message, 30), + $this->getMailRecipients($mailQueueItem->message), + ), + ); + } else { + $this->io->writeln( + sprintf( + '%s %s (to %s)', + $this->decorateState($mailQueueItem->state), + $this->getMailSubject($mailQueueItem->message, 50), + $this->getMailRecipients($mailQueueItem->message), + ), + ); + } + + if ($mailQueueItem->state === Enums\MailState::Failed) { + $hasFailures = true; + } + } + + $this->io->newLine(); + + return $hasFailures; + } + + private function decorateState(Enums\MailState $state): string + { + return match ($state) { + Enums\MailState::Failed => ' FAIL ', + Enums\MailState::Queued => ' WAIT ', + Enums\MailState::Sending => ' SEND ', + Enums\MailState::AlreadySent, Enums\MailState::Sent => ' SENT ', + }; + } + + private function getMailSubject(Mailer\SentMessage $message, int $crop = 0): ?string + { + $subject = null; + + if ($message->getMessage() instanceof Mime\Email) { + $subject = $message->getMessage()->getSubject(); + } + + if ($subject === null && $message->getOriginalMessage() instanceof Mime\Email) { + $subject = $message->getOriginalMessage()->getSubject(); + } + + if ($subject === null) { + return null; + } + + if ($crop > 0 && mb_strlen($subject) > $crop) { + return mb_substr($subject, 0, $crop) . '…'; + } + + return $subject; + } + + private function getMailRecipients(Mailer\SentMessage $message): string + { + $allRecipients = $message->getEnvelope()->getRecipients(); + + if ($allRecipients === []) { + return 'None'; + } + + $address = array_shift($allRecipients)->getAddress(); + $recipients = sprintf('%1$s', $address); + + if ($allRecipients !== []) { + $recipients .= sprintf(' +%d more', count($allRecipients)); + } + + return $recipients; + } +} diff --git a/Classes/Controller/MailqueueModuleController.php b/Classes/Controller/MailqueueModuleController.php new file mode 100644 index 0000000..a01d1c2 --- /dev/null +++ b/Classes/Controller/MailqueueModuleController.php @@ -0,0 +1,188 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Controller; + +use CPSIT\Typo3Mailqueue\Enums; +use CPSIT\Typo3Mailqueue\Mail; +use CPSIT\Typo3Mailqueue\Traits; +use Psr\Http\Message; +use Symfony\Component\Mailer; +use TYPO3\CMS\Backend; +use TYPO3\CMS\Core; +use TYPO3\CMS\Fluid; + +/** + * MailqueueModuleController + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class MailqueueModuleController +{ + use Traits\TranslatableTrait; + + private readonly Core\Information\Typo3Version $typo3Version; + + public function __construct( + private readonly Core\Imaging\IconFactory $iconFactory, + private readonly Backend\Template\ModuleTemplateFactory $moduleTemplateFactory, + private readonly Core\Mail\Mailer $mailer, + private readonly Backend\Routing\UriBuilder $uriBuilder, + ) { + $this->typo3Version = new Core\Information\Typo3Version(); + } + + public function __invoke(Message\ServerRequestInterface $request): Message\ResponseInterface + { + $template = $this->moduleTemplateFactory->create($request); + $transport = $this->mailer->getTransport(); + $sendId = $request->getQueryParams()['send'] ?? null; + $templateVariables = []; + + if ($transport instanceof Mail\Transport\QueueableTransport) { + $templateVariables = $this->resolveTemplateVariables($transport, $sendId); + } else { + $templateVariables['unsupportedTransport'] = $transport::class; + } + + // @todo Remove once support for TYPO3 v11 is dropped + $templateVariables['layout'] = $this->typo3Version->getMajorVersion() < 12 ? 'Default' : 'Module'; + + if (Core\Utility\ExtensionManagementUtility::isLoaded('lowlevel')) { + $this->addLinkToConfigurationModule($template); + } + + // @todo Remove once support for TYPO3 v11 is dropped + if ($this->typo3Version->getMajorVersion() < 12) { + return $this->renderLegacyTemplate($template, $templateVariables); + } + + return $template + ->assignMultiple($templateVariables) + ->renderResponse('List') + ; + } + + /** + * @return array{ + * failing: bool, + * longestPendingInterval: non-negative-int, + * sendResult: Enums\MailState|null, + * transport: Mail\Transport\QueueableTransport, + * } + */ + private function resolveTemplateVariables( + Mail\Transport\QueueableTransport $transport, + string $sendId = null, + ): array { + $failing = false; + $longestPendingInterval = 0; + $now = time(); + $sendResult = null; + + if (is_string($sendId)) { + $sendResult = $this->sendMail($transport, $sendId); + } + + foreach ($transport->getMailQueue() as $mailQueueItem) { + if ($mailQueueItem->date !== null) { + $longestPendingInterval = max($longestPendingInterval, $now - $mailQueueItem->date->getTimestamp()); + } + + if ($mailQueueItem->state === Enums\MailState::Failed) { + $failing = true; + } + } + + return [ + 'failing' => $failing, + 'longestPendingInterval' => $longestPendingInterval, + 'sendResult' => $sendResult, + 'transport' => $transport, + ]; + } + + private function sendMail(Mail\Transport\QueueableTransport $transport, string $queueItemId): Enums\MailState + { + $mailQueueItem = null; + + foreach ($transport->getMailQueue() as $item) { + if ($item->id === $queueItemId) { + $mailQueueItem = $item; + break; + } + } + + if ($mailQueueItem === null) { + return Enums\MailState::AlreadySent; + } + + try { + $transport->dequeue($mailQueueItem, $this->mailer->getRealTransport()); + } catch (Mailer\Exception\TransportExceptionInterface) { + return Enums\MailState::Failed; + } + + return Enums\MailState::Sent; + } + + private function addLinkToConfigurationModule(Backend\Template\ModuleTemplate $template): void + { + $buttonBar = $template->getDocHeaderComponent()->getButtonBar(); + + $button = $buttonBar->makeLinkButton(); + $button->setHref( + (string)$this->uriBuilder->buildUriFromRoute( + 'system_config', + ['node' => ['MAIL' => 1], 'tree' => 'confVars'], + ) + ); + $button->setIcon($this->iconFactory->getIcon('actions-cog', Core\Imaging\Icon::SIZE_SMALL)); + $button->setTitle(self::translate('button.config')); + $button->setShowLabelText(true); + + $buttonBar->addButton($button); + } + + /** + * @todo Remove once support for TYPO3 v11 is dropped + * + * @param array $templateVariables + */ + private function renderLegacyTemplate( + Backend\Template\ModuleTemplate $template, + array $templateVariables, + ): Core\Http\HtmlResponse { + $view = Core\Utility\GeneralUtility::makeInstance(Fluid\View\StandaloneView::class); + $view->setTemplateRootPaths(['EXT:mailqueue/Resources/Private/Templates/']); + $view->setPartialRootPaths(['EXT:mailqueue/Resources/Private/Partials/']); + $view->setLayoutRootPaths(['EXT:mailqueue/Resources/Private/Layouts/']); + $view->setTemplate('List'); + $view->assignMultiple($templateVariables); + + $template->setContent($view->render()); + + return new Core\Http\HtmlResponse($template->renderContent()); + } +} diff --git a/Classes/Enums/MailState.php b/Classes/Enums/MailState.php new file mode 100644 index 0000000..1eb22ef --- /dev/null +++ b/Classes/Enums/MailState.php @@ -0,0 +1,39 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Enums; + +/** + * MailState + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +enum MailState: string +{ + case AlreadySent = 'alreadySent'; + case Failed = 'failed'; + case Queued = 'queued'; + case Sending = 'sending'; + case Sent = 'sent'; +} diff --git a/Classes/Exception/Exception.php b/Classes/Exception/Exception.php new file mode 100644 index 0000000..9eb553d --- /dev/null +++ b/Classes/Exception/Exception.php @@ -0,0 +1,32 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Exception; + +/** + * Exception + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +abstract class Exception extends \Exception {} diff --git a/Classes/Exception/FileDoesNotExist.php b/Classes/Exception/FileDoesNotExist.php new file mode 100644 index 0000000..b350ef8 --- /dev/null +++ b/Classes/Exception/FileDoesNotExist.php @@ -0,0 +1,41 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Exception; + +/** + * FileDoesNotExist + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class FileDoesNotExist extends Exception +{ + public function __construct(string $file) + { + parent::__construct( + sprintf('The file "%s" does not exist.', $file), + 1709301996, + ); + } +} diff --git a/Classes/Exception/SerializedFailureMetadataIsInvalid.php b/Classes/Exception/SerializedFailureMetadataIsInvalid.php new file mode 100644 index 0000000..22c16f8 --- /dev/null +++ b/Classes/Exception/SerializedFailureMetadataIsInvalid.php @@ -0,0 +1,41 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Exception; + +/** + * SerializedFailureMetadataIsInvalid + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class SerializedFailureMetadataIsInvalid extends Exception +{ + public function __construct(string $file) + { + parent::__construct( + sprintf('The file "%s" does not contain valid serialized transport failure metadata.', $file), + 1709302090, + ); + } +} diff --git a/Classes/Exception/SerializedMessageIsInvalid.php b/Classes/Exception/SerializedMessageIsInvalid.php new file mode 100644 index 0000000..3312363 --- /dev/null +++ b/Classes/Exception/SerializedMessageIsInvalid.php @@ -0,0 +1,41 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Exception; + +/** + * SerializedMessageIsInvalid + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class SerializedMessageIsInvalid extends Exception +{ + public function __construct(string $file) + { + parent::__construct( + sprintf('The file "%s" does not contain a valid serialized message.', $file), + 1709133596, + ); + } +} diff --git a/Classes/Extension.php b/Classes/Extension.php new file mode 100644 index 0000000..f29e858 --- /dev/null +++ b/Classes/Extension.php @@ -0,0 +1,82 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue; + +use TYPO3\CMS\Core; + +/** + * Extension + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class Extension +{ + public const KEY = 'mailqueue'; + + /** + * Register custom XClasses. + * + * FOR USE IN ext_localconf.php ONLY. + */ + public static function registerXClasses(): void + { + $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][Core\Mail\FileSpool::class] = [ + 'className' => Mail\Transport\QueueableFileTransport::class, + ]; + $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][Core\Mail\MemorySpool::class] = [ + 'className' => Mail\Transport\QueueableMemoryTransport::class, + ]; + } + + /** + * Register custom backend modules. + * + * FOR USE IN ext_tables.php ONLY. + * + * @todo Remove once support for TYPO3 v11 is dropped + */ + public static function registerBackendModules(): void + { + // Backend module configuration in TYPO3 >= v12 is done in Configuration/Backend/Modules.php + if ((new Core\Information\Typo3Version())->getMajorVersion() >= 12) { + return; + } + + Core\Utility\ExtensionManagementUtility::addModule( + 'system', + 'mailqueue', + 'bottom', + null, + [ + 'routeTarget' => \CPSIT\Typo3Mailqueue\Controller\MailqueueModuleController::class, + 'access' => 'admin', + 'id' => 'system_mailqueue', + 'name' => 'system_mailqueue', + 'iconIdentifier' => 'tx-mailqueue-module', + 'labels' => 'LLL:EXT:mailqueue/Resources/Private/Language/locallang_mod_mailqueue.xlf', + ], + ); + } +} diff --git a/Classes/Mail/Iterator/FileIterator.php b/Classes/Mail/Iterator/FileIterator.php new file mode 100644 index 0000000..b5893d1 --- /dev/null +++ b/Classes/Mail/Iterator/FileIterator.php @@ -0,0 +1,50 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Iterator; + +use CPSIT\Typo3Mailqueue\Mail; +use FilterIterator; +use SplFileInfo; +use Traversable; + +/** + * FileIterator + * + * @author Elias Häußler + * @license GPL-2.0-or-later + * + * @template-extends FilterIterator> + */ +final class FileIterator extends FilterIterator +{ + public function accept(): bool + { + $file = $this->getInnerIterator()->current(); + $path = $file->getRealPath(); + + return str_ends_with($path, Mail\Transport\QueueableFileTransport::FILE_SUFFIX_QUEUED) + || str_ends_with($path, Mail\Transport\QueueableFileTransport::FILE_SUFFIX_SENDING) + ; + } +} diff --git a/Classes/Mail/Queue/MailQueue.php b/Classes/Mail/Queue/MailQueue.php new file mode 100644 index 0000000..8e42377 --- /dev/null +++ b/Classes/Mail/Queue/MailQueue.php @@ -0,0 +1,92 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Queue; + +use ArrayIterator; +use Countable; +use IteratorAggregate; +use Traversable; + +/** + * MailQueue + * + * @author Elias Häußler + * @license GPL-2.0-or-later + * + * @implements IteratorAggregate + */ +final class MailQueue implements Countable, IteratorAggregate +{ + /** + * @param callable(): Traversable $readQueueFn + */ + public function __construct( + private $readQueueFn, + ) {} + + /** + * @return list + */ + public function get(): array + { + return array_values(iterator_to_array($this)); + } + + public function count(): int + { + $queue = ($this->readQueueFn)(); + + if (is_countable($queue)) { + return count($queue); + } + + return count(iterator_to_array($queue)); + } + + /** + * @return ArrayIterator + */ + public function getIterator(): ArrayIterator + { + $iterator = ($this->readQueueFn)(); + $queue = iterator_to_array($iterator); + + usort($queue, self::orderQueueItems(...)); + + return new ArrayIterator($queue); + } + + private static function orderQueueItems(MailQueueItem $a, MailQueueItem $b): int + { + if ($a->date < $b->date) { + return -1; + } + + if ($a->date > $b->date) { + return 1; + } + + return 0; + } +} diff --git a/Classes/Mail/Queue/MailQueueItem.php b/Classes/Mail/Queue/MailQueueItem.php new file mode 100644 index 0000000..46e8c09 --- /dev/null +++ b/Classes/Mail/Queue/MailQueueItem.php @@ -0,0 +1,46 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Queue; + +use CPSIT\Typo3Mailqueue\Enums; +use CPSIT\Typo3Mailqueue\Mail; +use DateTimeInterface; +use Symfony\Component\Mailer; + +/** + * MailQueueItem + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class MailQueueItem +{ + public function __construct( + public readonly string $id, + public readonly Mailer\SentMessage $message, + public readonly Enums\MailState $state, + public readonly ?DateTimeInterface $date = null, + public readonly ?Mail\TransportFailure $failure = null, + ) {} +} diff --git a/Classes/Mail/Transport/QueueableFileTransport.php b/Classes/Mail/Transport/QueueableFileTransport.php new file mode 100644 index 0000000..79ff6ea --- /dev/null +++ b/Classes/Mail/Transport/QueueableFileTransport.php @@ -0,0 +1,270 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Transport; + +use CPSIT\Typo3Mailqueue\Enums; +use CPSIT\Typo3Mailqueue\Exception; +use CPSIT\Typo3Mailqueue\Mail; +use DateTimeImmutable; +use DirectoryIterator; +use Generator; +use Psr\Log; +use SplFileInfo; +use Symfony\Component\Mailer; +use Symfony\Component\Mime; +use Symfony\Contracts\EventDispatcher; +use TYPO3\CMS\Core; + +/** + * QueueableFileTransport + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class QueueableFileTransport extends Core\Mail\FileSpool implements QueueableTransport +{ + public const FILE_SUFFIX_QUEUED = '.message'; + public const FILE_SUFFIX_SENDING = '.message.sending'; + public const FILE_SUFFIX_FAILURE_DATA = '.message.failure'; + + private readonly Core\Context\Context $context; + + public function __construct( + string $path, + ?EventDispatcher\EventDispatcherInterface $dispatcher = null, + ?Log\LoggerInterface $logger = null, + ) { + parent::__construct($path, $dispatcher, $logger); + $this->context = Core\Utility\GeneralUtility::makeInstance(Core\Context\Context::class); + } + + public function recover(int $timeout = 900): void + { + $iterator = new DirectoryIterator($this->path); + + // Remove failure metadata + foreach ($iterator as $file) { + $path = (string)$file->getRealPath(); + + if (str_ends_with($path, self::FILE_SUFFIX_FAILURE_DATA)) { + unlink($path); + } + } + + // Recover stuck transports + parent::recover($timeout); + } + + /** + * @throws Exception\SerializedMessageIsInvalid + * @throws Mailer\Exception\TransportExceptionInterface + */ + public function flushQueue(Mailer\Transport\TransportInterface $transport): int + { + $directoryIterator = new DirectoryIterator($this->path); + $execTime = $this->context->getPropertyFromAspect('date', 'timestamp'); + $time = time(); + $count = 0; + + foreach ($directoryIterator as $file) { + $path = (string)$file->getRealPath(); + + if (!str_ends_with($path, self::FILE_SUFFIX_QUEUED)) { + continue; + } + + $item = $this->restoreItem($file); + + if ($this->dequeue($item, $transport)) { + $count++; + } else { + // This message has just been caught by another process + continue; + } + + if ($this->getMessageLimit() && $count >= $this->getMessageLimit()) { + break; + } + + if ($this->getTimeLimit() && ($execTime - $time) >= $this->getTimeLimit()) { + break; + } + } + + return $count; + } + + public function enqueue(Mime\RawMessage $message, ?Mailer\Envelope $envelope = null): ?Mail\Queue\MailQueueItem + { + $sentMessage = $this->send($message, $envelope); + + // Early return if message was rejected + if ($sentMessage === null) { + return null; + } + + // Look up mail in queue + foreach ($this->getMailQueue() as $mailQueueItem) { + // Loose comparison is intended + if ($mailQueueItem->message == $sentMessage) { + return $mailQueueItem; + } + } + + return null; + } + + public function dequeue(Mail\Queue\MailQueueItem $item, Mailer\Transport\TransportInterface $transport): bool + { + $path = $this->path . DIRECTORY_SEPARATOR . $item->id; + $sendingPath = $this->getItemVariant($path, self::FILE_SUFFIX_SENDING); + $failurePath = $this->getItemVariant($path, self::FILE_SUFFIX_FAILURE_DATA); + + // We try a rename, it's an atomic operation, and avoid locking the file + if ($path !== $sendingPath && !rename($path, $sendingPath)) { + return false; + } + + try { + $transport->send($item->message->getMessage(), $item->message->getEnvelope()); + } catch (Mailer\Exception\TransportExceptionInterface $exception) { + $this->flagFailedTransport($sendingPath, $exception); + + throw $exception; + } + + // Remove message from queue + unlink($sendingPath); + + // Remove failure metadata + if (file_exists($failurePath)) { + unlink($failurePath); + } + + return true; + } + + public function getMailQueue(): Mail\Queue\MailQueue + { + return new Mail\Queue\MailQueue( + $this->initializeQueueFromFilePath(...), + ); + } + + private function flagFailedTransport(string $file, Mailer\Exception\TransportExceptionInterface $exception): void + { + $failure = Mail\TransportFailure::fromException($exception); + $failurePath = $this->getItemVariant($file, self::FILE_SUFFIX_FAILURE_DATA); + + file_put_contents($failurePath, serialize($failure)); + } + + /** + * @return Generator + */ + private function initializeQueueFromFilePath(): Generator + { + $iterator = new Mail\Iterator\FileIterator(new DirectoryIterator($this->path)); + + foreach ($iterator as $file) { + yield $this->restoreItem($file); + } + } + + /** + * @throws Exception\SerializedMessageIsInvalid + */ + private function restoreItem(SplFileInfo $file): Mail\Queue\MailQueueItem + { + $path = (string)$file->getRealPath(); + $lastChanged = $file->getMTime(); + + // Unserialize message + $message = unserialize((string)file_get_contents($path), [ + 'allowedClasses' => [ + Mime\RawMessage::class, + Mime\Message::class, + Mime\Email::class, + Mailer\DelayedEnvelope::class, + Mailer\Envelope::class, + ], + ]); + + if (!($message instanceof Mailer\SentMessage)) { + throw new Exception\SerializedMessageIsInvalid($path); + } + + // Define mail state + if (str_ends_with($path, self::FILE_SUFFIX_SENDING)) { + $state = Enums\MailState::Sending; + $failure = $this->findFailureMetadata($path); + } else { + $state = Enums\MailState::Queued; + $failure = null; + } + + // Enforce failure if failure metadata were found + if ($failure !== null) { + $state = Enums\MailState::Failed; + } + + // Add last modification date + if ($lastChanged !== false) { + $date = new DateTimeImmutable('@' . $lastChanged); + } else { + $date = null; + } + + return new Mail\Queue\MailQueueItem($file->getFilename(), $message, $state, $date, $failure); + } + + private function findFailureMetadata(string $file): ?Mail\TransportFailure + { + $failurePath = $this->getItemVariant($file, self::FILE_SUFFIX_FAILURE_DATA); + + try { + return Mail\TransportFailure::fromFile($failurePath); + } catch (Exception\FileDoesNotExist|Exception\SerializedFailureMetadataIsInvalid) { + return null; + } + } + + private function getItemVariant(string $file, string $suffix): string + { + $variants = array_diff( + [ + self::FILE_SUFFIX_FAILURE_DATA, + self::FILE_SUFFIX_QUEUED, + self::FILE_SUFFIX_SENDING, + ], + [$suffix], + ); + + return (string)preg_replace( + sprintf('/(%s)$/', implode('|', array_map('preg_quote', $variants))), + $suffix, + $file, + ); + } +} diff --git a/Classes/Mail/Transport/QueueableMemoryTransport.php b/Classes/Mail/Transport/QueueableMemoryTransport.php new file mode 100644 index 0000000..e332ce8 --- /dev/null +++ b/Classes/Mail/Transport/QueueableMemoryTransport.php @@ -0,0 +1,89 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Transport; + +use CPSIT\Typo3Mailqueue\Enums; +use CPSIT\Typo3Mailqueue\Mail; +use DateTimeImmutable; +use Generator; +use Symfony\Component\Mailer; +use Symfony\Component\Mime; +use TYPO3\CMS\Core; + +/** + * QueueableMemoryTransport + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class QueueableMemoryTransport extends Core\Mail\MemorySpool implements QueueableTransport +{ + public function enqueue(Mime\RawMessage $message, ?Mailer\Envelope $envelope = null): ?Mail\Queue\MailQueueItem + { + $sentMessage = $this->send($message, $envelope); + $id = array_key_last($this->queuedMessages); + + // Early return if message was rejected + if ($sentMessage === null || $id === null) { + return null; + } + + return new Mail\Queue\MailQueueItem( + (string)$id, + $sentMessage, + Enums\MailState::Queued, + new DateTimeImmutable(), + ); + } + + public function dequeue(Mail\Queue\MailQueueItem $item, Mailer\Transport\TransportInterface $transport): bool + { + $transport->send($item->message->getMessage(), $item->message->getEnvelope()); + + unset($this->queuedMessages[$item->id]); + + return true; + } + + public function getMailQueue(): Mail\Queue\MailQueue + { + return new Mail\Queue\MailQueue( + $this->initializeQueue(...), + ); + } + + /** + * @return Generator + */ + private function initializeQueue(): Generator + { + foreach ($this->queuedMessages as $key => $queuedMessage) { + yield new Mail\Queue\MailQueueItem( + $key, + $queuedMessage, + Enums\MailState::Queued, + ); + } + } +} diff --git a/Classes/Mail/Transport/QueueableTransport.php b/Classes/Mail/Transport/QueueableTransport.php new file mode 100644 index 0000000..de2aa3f --- /dev/null +++ b/Classes/Mail/Transport/QueueableTransport.php @@ -0,0 +1,50 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail\Transport; + +use CPSIT\Typo3Mailqueue\Mail; +use Symfony\Component\Mailer; +use Symfony\Component\Mime; +use TYPO3\CMS\Core; + +/** + * QueueableTransport + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +interface QueueableTransport extends Core\Mail\DelayedTransportInterface +{ + public function getMailQueue(): Mail\Queue\MailQueue; + + /** + * @throws Mailer\Exception\TransportExceptionInterface + */ + public function enqueue(Mime\RawMessage $message, ?Mailer\Envelope $envelope = null): ?Mail\Queue\MailQueueItem; + + /** + * @throws Mailer\Exception\TransportExceptionInterface + */ + public function dequeue(Mail\Queue\MailQueueItem $item, Mailer\Transport\TransportInterface $transport): bool; +} diff --git a/Classes/Mail/TransportFailure.php b/Classes/Mail/TransportFailure.php new file mode 100644 index 0000000..e8bf054 --- /dev/null +++ b/Classes/Mail/TransportFailure.php @@ -0,0 +1,75 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Mail; + +use CPSIT\Typo3Mailqueue\Exception; +use DateTimeImmutable; +use Symfony\Component\Mailer; + +/** + * TransportFailure + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class TransportFailure +{ + public function __construct( + public readonly string $exception, + public readonly string $message, + public readonly DateTimeImmutable $date, + ) {} + + public static function fromException(Mailer\Exception\TransportExceptionInterface $exception): self + { + return new self( + $exception::class, + $exception->getMessage(), + new DateTimeImmutable(), + ); + } + + /** + * @throws Exception\FileDoesNotExist + * @throws Exception\SerializedFailureMetadataIsInvalid + */ + public static function fromFile(string $file): self + { + if (!file_exists($file)) { + throw new Exception\FileDoesNotExist($file); + } + + $failure = unserialize((string)file_get_contents($file), [ + 'allowedClasses' => [ + DateTimeImmutable::class, + ], + ]); + + if (!($failure instanceof self)) { + throw new Exception\SerializedFailureMetadataIsInvalid($file); + } + + return $failure; + } +} diff --git a/Classes/Traits/TranslatableTrait.php b/Classes/Traits/TranslatableTrait.php new file mode 100644 index 0000000..95b8e61 --- /dev/null +++ b/Classes/Traits/TranslatableTrait.php @@ -0,0 +1,53 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\Traits; + +use TYPO3\CMS\Core; + +/** + * TranslatableTrait + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +trait TranslatableTrait +{ + private static ?Core\Localization\LanguageService $languageService = null; + + /** + * @param list $arguments + */ + protected static function translate(string $key, array $arguments = []): string + { + self::$languageService ??= Core\Utility\GeneralUtility::makeInstance(Core\Localization\LanguageServiceFactory::class) + ->createFromUserPreferences($GLOBALS['BE_USER']); + + return vsprintf( + self::$languageService->sL( + sprintf('LLL:EXT:mailqueue/Resources/Private/Language/locallang.xlf:%s', $key), + ), + $arguments, + ); + } +} diff --git a/Classes/ViewHelpers/DateIntervalViewHelper.php b/Classes/ViewHelpers/DateIntervalViewHelper.php new file mode 100644 index 0000000..8e36eb5 --- /dev/null +++ b/Classes/ViewHelpers/DateIntervalViewHelper.php @@ -0,0 +1,58 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\ViewHelpers; + +use Closure; +use DateTimeInterface; +use TYPO3Fluid\Fluid; + +/** + * DateIntervalViewHelper + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class DateIntervalViewHelper extends Fluid\Core\ViewHelper\AbstractViewHelper +{ + use Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderStatic; + + public function initializeArguments(): void + { + $this->registerArgument('date', DateTimeInterface::class, 'The date for which to create an interval'); + } + + public static function renderStatic( + array $arguments, + Closure $renderChildrenClosure, + Fluid\Core\Rendering\RenderingContextInterface $renderingContext, + ): ?int { + $date = $renderChildrenClosure(); + + if (!($date instanceof DateTimeInterface)) { + return null; + } + + return time() - $date->getTimestamp(); + } +} diff --git a/Classes/ViewHelpers/Format/HumanDateViewHelper.php b/Classes/ViewHelpers/Format/HumanDateViewHelper.php new file mode 100644 index 0000000..d4f97da --- /dev/null +++ b/Classes/ViewHelpers/Format/HumanDateViewHelper.php @@ -0,0 +1,104 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +namespace CPSIT\Typo3Mailqueue\ViewHelpers\Format; + +use Closure; +use CPSIT\Typo3Mailqueue\Traits; +use DateInterval; +use DateTimeImmutable; +use DateTimeInterface; +use TYPO3Fluid\Fluid; + +/** + * HumanDateViewHelper + * + * @author Elias Häußler + * @license GPL-2.0-or-later + */ +final class HumanDateViewHelper extends Fluid\Core\ViewHelper\AbstractViewHelper +{ + use Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderStatic; + use Traits\TranslatableTrait; + + public function initializeArguments(): void + { + $this->registerArgument('date', DateTimeInterface::class, 'The date to format'); + } + + public static function renderStatic( + array $arguments, + Closure $renderChildrenClosure, + Fluid\Core\Rendering\RenderingContextInterface $renderingContext, + ): ?string { + $date = $renderChildrenClosure(); + + if (!($date instanceof DateTimeInterface)) { + return null; + } + + $now = new DateTimeImmutable(); + $delta = $now->getTimestamp() - $date->getTimestamp(); + $interval = $now->diff($date); + + return self::renderHumanDateInterval($date, $delta, $interval); + } + + private static function renderHumanDateInterval(DateTimeInterface $date, int $delta, DateInterval $interval): string + { + if ($delta <= 30) { + return self::translate('humanDate.now'); + } + if ($delta <= 60) { + return self::translate('humanDate.seconds'); + } + if ($delta <= 60 * 60) { + return self::formatInterval($interval->i, 'minute'); + } + if ($delta <= 60 * 60 * 24) { + return self::formatInterval($interval->h, 'hour'); + } + if ($delta <= 60 * 60 * 24 * 7) { + return self::formatInterval($interval->d, 'day'); + } + + return self::formatDate($date); + } + + private static function formatInterval(int $interval, string $unit): string + { + if ($interval !== 1) { + $unit .= 's'; + } + + return self::translate( + sprintf('humanDate.%s', $unit), + [$interval], + ); + } + + private static function formatDate(DateTimeInterface $date): string + { + return $date->format('Y-m-d H:i:s'); + } +} diff --git a/Configuration/Backend/Modules.php b/Configuration/Backend/Modules.php new file mode 100644 index 0000000..0d81bf4 --- /dev/null +++ b/Configuration/Backend/Modules.php @@ -0,0 +1,40 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +use CPSIT\Typo3Mailqueue\Controller; + +return [ + 'system_mailqueue' => [ + 'parent' => 'system', + 'position' => ['bottom'], + 'access' => 'admin', + 'workspaces' => 'live', + 'iconIdentifier' => 'tx-mailqueue-module', + 'labels' => 'LLL:EXT:mailqueue/Resources/Private/Language/locallang_mod_mailqueue.xlf', + 'routes' => [ + '_default' => [ + 'target' => Controller\MailqueueModuleController::class, + ], + ], + ], +]; diff --git a/Configuration/Icons.php b/Configuration/Icons.php new file mode 100644 index 0000000..ee2ef6b --- /dev/null +++ b/Configuration/Icons.php @@ -0,0 +1,29 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +return [ + 'tx-mailqueue-module' => [ + 'provider' => \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + 'source' => 'EXT:mailqueue/Resources/Public/Icons/module.svg', + ], +]; diff --git a/Configuration/Services.yaml b/Configuration/Services.yaml new file mode 100644 index 0000000..ea7cb99 --- /dev/null +++ b/Configuration/Services.yaml @@ -0,0 +1,25 @@ +services: + _defaults: + autowire: true + autoconfigure: true + public: false + + CPSIT\Typo3Mailqueue\: + resource: '../Classes/*' + exclude: + - '../Classes/Enums/*' + - '../Classes/Exception/*' + - '../Classes/Mail/*' + - '../Classes/Traits/*' + + CPSIT\Typo3Mailqueue\Controller\MailqueueModuleController: + # @todo Replace with #[AsController] attribute once support for TYPO3 v11 is dropped + tags: ['backend.controller'] + + CPSIT\Typo3Mailqueue\Command\ListQueueCommand: + # @todo Replace with #[AsCommand] attribute once support for TYPO3 v11 is dropped + tags: + - name: console.command + command: 'mailqueue:listqueue' + description: 'List all currently enqueued mails' + schedulable: false diff --git a/Documentation/Images/ScreenshotBackendModule.png b/Documentation/Images/ScreenshotBackendModule.png new file mode 100644 index 0000000000000000000000000000000000000000..f54ae8bd1d49b8cabbd6581a5ad683fd10259e95 GIT binary patch literal 103141 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%0Dsv{3fQ{b1rF#CXjD) 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

7uFrF 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 + +![Extension icon](Resources/Public/Icons/Extension.svg) + +# TYPO3 extension `mailqueue` + +[![Coverage](https://codecov.io/gh/CPS-IT/mailqueue/graph/badge.svg?token=kMi9CaL3gV)](https://codecov.io/gh/CPS-IT/mailqueue) +[![Maintainability](https://api.codeclimate.com/v1/badges/75952c5451dea0632fc0/maintainability)](https://codeclimate.com/github/CPS-IT/mailqueue/maintainability) +[![CGL](https://github.com/CPS-IT/mailqueue/actions/workflows/cgl.yaml/badge.svg)](https://github.com/CPS-IT/mailqueue/actions/workflows/cgl.yaml) +[![Release](https://github.com/CPS-IT/mailqueue/actions/workflows/release.yaml/badge.svg)](https://github.com/CPS-IT/mailqueue/actions/workflows/release.yaml) +[![License](http://poser.pugx.org/cpsit/typo3-mailqueue/license)](LICENSE.md)\ +[![Version](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/version/shields)](https://extensions.typo3.org/extension/mailqueue) +[![Downloads](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/downloads/shields)](https://extensions.typo3.org/extension/mailqueue) +[![Supported TYPO3 versions](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/typo3/shields)](https://extensions.typo3.org/extension/mailqueue) +[![Extension stability](https://shields.io/endpoint?url=https://typo3-badges.dev/badge/mailqueue/stability/shields)](https://extensions.typo3.org/extension/mailqueue) + +📦 [Packagist](https://packagist.org/packages/cpsit/typo3-mailqueue) | +🐥 [TYPO3 extension repository](https://extensions.typo3.org/extension/mailqueue) | +💾 [Repository](https://github.com/CPS-IT/mailqueue) | +🐛 [Issue tracker](https://github.com/CPS-IT/mailqueue/issues) + + + +--- + +An extension for TYPO3 CMS that extends TYPO3's mail spooling functionality +with an extended queueable mail transport interface. In addition, it provides +an improved version of TYPO3's `FileSpooler`. In order to make mails in the +mail queue visible, the extension provides an (admin-only) backend module and +a console command. + +## 🚀 Features + +* Extended interface for queueable mail transports +* Improved queueable file transport with failure metadata +* Backend module to list mails in queue +* Console command to list mails in queue +* Compatible with TYPO3 11.5 LTS and 12.4 LTS + +## 🔥 Installation + +### Composer + +```bash +composer require cpsit/typo3-mailqueue +``` + +### TER + +Alternatively, you can download the extension via the +[TYPO3 extension repository (TER)][1]. + +## ⚡ Usage + +> [!NOTE] +> In order to use a queueable mail transport, you need to [configure](#-configuration) +> it in your system settings, along with the required transport settings. + +### Concept + +The extension builds on TYPO3's [mail spooling][2] feature. It provides an extended +interface [`CPSIT\Typo3Mailqueue\Mail\Transport\QueueableTransport`](Classes/Mail/Transport/QueueableTransport.php) +for `TYPO3\CMS\Core\Mail\DelayedTransportInterface` with additional +methods to enqueue and dequeue mails: + +* ```php + public function getMailQueue(): Mail\Queue\MailQueue + ``` + Returns an instance of [`CPSIT\Typo3Mailqueue\Mail\Queue\MailQueue`](Classes/Mail/Queue/MailQueue.php) + that holds all currently enqueued mails as instances of + [`CPSIT\Typo3Mailqueue\Mail\Queue\MailQueueItem`](Classes/Mail/Queue/MailQueueItem.php). + +* ```php + public function enqueue(Mime\RawMessage $message, ?Mailer\Envelope $envelope = null): Mail\Queue\MailQueueItem + ``` + Allows to enqueue a mail to the mail queue. This is basically identical to the `send()` + method provided by the base `Symfony\Component\Mailer\Transport\TransportInterface`. + +* ```php + public function dequeue(Mail\Queue\MailQueueItem $item, Mailer\Transport\TransportInterface $transport): bool + ``` + Sends the message of a given mail queue item with the provided "real" transport, + effectively dequeuing it from the mail queue. This is basically identical to the + `flushQueue()` method provided by the base `TYPO3\CMS\Core\Mail\DelayedTransportInterface` + with the difference that it only dequeues the given mail queue item and leaves the + rest of the queue untouched. + +### Backend module + +> [!NOTE] +> Only administrators can see the backend module. + +![Screenshot backend module](Documentation/Images/ScreenshotBackendModule.png) + +The backend module lists all currently enqueued mails. In addition, for +supported transports it may also show transport failure details. It can +be used to get a quick overview about the health state of the mail queue. +It also allows to dequeue single mails from the mail queue by sending them +with the configured real transport. + +### Console command + +![Screenshot console command](Documentation/Images/ScreenshotConsoleCommand.png) + +The extension provides a console command to list enqueued mails: + +```bash +typo3 mailqueue:listqueue [-s|--strict] [-w|--watch] +``` + +With `--strict` (or `-s`) enabled, the command exits with a non-zero exit +code in case any enqueued mail could not be delivered because of a failure. + +In addition, a watch mode can be enabled with `--watch` (or `-w`) which updates +the list every five seconds. The watch mode can be exited with Ctrl+C. + +### Available transports + +The extension provides two custom implementations as XClasses for TYPO3's +native mail spoolers: + +| TYPO3 core implementation | Custom implementation (XClass) | +|-----------------------------------|-----------------------------------------------------------------------------------------------------------------------| +| `TYPO3\CMS\Core\Mail\FileSpool` | [`CPSIT\Typo3Mailqueue\Mail\Transport\QueueableFileTransport`](Classes/Mail/Transport/QueueableFileTransport.php) | +| `TYPO3\CMS\Core\Mail\MemorySpool` | [`CPSIT\Typo3Mailqueue\Mail\Transport\QueueableMemoryTransport`](Classes/Mail/Transport/QueueableMemoryTransport.php) | + +## 📂 Configuration + +Queueable mail transports are registered the "normal" way as described in the +[official TYPO3 core documentation][3]. Add the following to your system configuration +(e.g. in `additional.php`/`AdditionalConfiguration.php`): + +```php +# Native mail transport +$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] = 'file'; +$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_filepath'] = '/path/to/mailqueue'; + +# Custom mail transport +$GLOBALS['TYPO3_CONF_VARS']['MAIL']['transport_spool_type'] + = \Vendor\Extension\Mail\Transport\CustomQueueableTransport::class; +``` + +## 🧑‍💻 Contributing + +Please have a look at [`CONTRIBUTING.md`](CONTRIBUTING.md). + +## 💎 Credits + +The extension icon ("envelope-open") as well as the icon for the backend module are +modified versions of the original [`actions-envelope-open`][4] icon from TYPO3 core +which is originally licensed under [MIT License][5]. + +## ⭐ License + +This project is licensed under [GNU General Public License 2.0 (or later)](LICENSE.md). + +[1]: https://extensions.typo3.org/extension/mailqueue +[2]: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Mail/Index.html#spooling +[3]: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/Configuration/Typo3ConfVars/MAIL.html#transport-spool-type +[4]: https://typo3.github.io/TYPO3.Icons/icons/actions/actions-envelope-open.html +[5]: https://github.com/TYPO3/TYPO3.Icons/blob/main/LICENSE diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf new file mode 100644 index 0000000..ada91b2 --- /dev/null +++ b/Resources/Private/Language/locallang.xlf @@ -0,0 +1,130 @@ + + + +

+ + + Mail queue + + + Status + + + Mails + + + + Date + + + Subject + + + Recipient(s) + + + Sender + + + + Failed + + + Queued + + + Sending + + + Late + + + Unknown + + + + Unknown + + + + Unsupported mail transport + + + The configured mail transport "%s" is not supported. Please configure a mail spooler as mail transport. + + + Queue is empty + + + There are currently no mails enqueued for further transport. + + + At least one mail could not be sent. You may check your mail transport and verify if everything works as intended. + + + It seems like some mails were not sent for at least 30 minutes. Make sure to periodically flush the mail queue. + + + The mail queue seems to be healthy. Make sure to periodically flush it. + + + Total mails in queue: %d + + + The mail was already sent and is no longer enqueued. + + + The mail could not be sent. + + + The mail was successfully sent. + + + + Transport failure details + + + + now + + + a few seconds ago + + + %d minute ago + + + %d minutes ago + + + %d hour ago + + + %d hours ago + + + %d day ago + + + %d days ago + + + + Close + + + + View info + + + Send mail + + + Try again + + + View mail configuration + + + + diff --git a/Resources/Private/Language/locallang_mod_mailqueue.xlf b/Resources/Private/Language/locallang_mod_mailqueue.xlf new file mode 100644 index 0000000..ece411b --- /dev/null +++ b/Resources/Private/Language/locallang_mod_mailqueue.xlf @@ -0,0 +1,17 @@ + + + +
+ + + Mails + + + Lists all mails currently enqueued for further transport. + + + Mail queue + + + + diff --git a/Resources/Private/Layouts/Default.html b/Resources/Private/Layouts/Default.html new file mode 100644 index 0000000..b840b0e --- /dev/null +++ b/Resources/Private/Layouts/Default.html @@ -0,0 +1,8 @@ + + + + + + + diff --git a/Resources/Private/Partials/Date.html b/Resources/Private/Partials/Date.html new file mode 100644 index 0000000..4dee65c --- /dev/null +++ b/Resources/Private/Partials/Date.html @@ -0,0 +1,9 @@ + + + + + diff --git a/Resources/Private/Partials/List/Queue.html b/Resources/Private/Partials/List/Queue.html new file mode 100644 index 0000000..677f196 --- /dev/null +++ b/Resources/Private/Partials/List/Queue.html @@ -0,0 +1,85 @@ + + +{queue -> f:count() -> f:variable(name: 'count')} + + + + + + + + + + + + + + + + + +

{f:translate(key: 'header.status', extensionName: 'Mailqueue')}

+ + + + + + + + + + + +

{f:translate(key: 'header.mails', extensionName: 'Mailqueue')}

+ +
+
+
+
+ {f:translate(key: 'alert.queueItemCount.message', arguments: '{0: count}', extensionName: 'Mailqueue')} +
+
+
+
+ +
+ + + + + + + + + + + + + + + +
{f:translate(key: 'queue.table.header.date', extensionName: 'Mailqueue')}{f:translate(key: 'queue.table.header.subject', extensionName: 'Mailqueue')}{f:translate(key: 'queue.table.header.recipients', extensionName: 'Mailqueue')}{f:translate(key: 'queue.table.header.sender', extensionName: 'Mailqueue')}
+
+
+ + + +
+ + diff --git a/Resources/Private/Partials/List/QueueItem.html b/Resources/Private/Partials/List/QueueItem.html new file mode 100644 index 0000000..4e8f2b6 --- /dev/null +++ b/Resources/Private/Partials/List/QueueItem.html @@ -0,0 +1,95 @@ + + + + + + + {f:translate(key: 'queueItem.state.failed', extensionName: 'Mailqueue')} + + + + + + + + + {f:translate(key: 'queueItem.state.late', extensionName: 'Mailqueue')} + + + {f:translate(key: 'queueItem.state.queued', extensionName: 'Mailqueue')} + + + + + + + {f:translate(key: 'queueItem.state.late', extensionName: 'Mailqueue')} + + + {f:translate(key: 'queueItem.state.sending', extensionName: 'Mailqueue')} + + + + + {f:translate(key: 'queueItem.state.unknown', extensionName: 'Mailqueue')} + + + + + + + + + + + + {queueItem.message.message.subject} + + + {queueItem.message.originalMessage.subject} + + + {f:translate(key: 'queueItem.subject.unknown', extensionName: 'Mailqueue')} + + + + + +
+
+ + + + + +
+ + + + + + + +
+ + + + + + warning + danger + warning + + + + diff --git a/Resources/Private/Partials/Mail/Address.html b/Resources/Private/Partials/Mail/Address.html new file mode 100644 index 0000000..9bd0685 --- /dev/null +++ b/Resources/Private/Partials/Mail/Address.html @@ -0,0 +1,16 @@ + + + + + + + {address.name} <{address.address}> + + + {address.address} + + + + + diff --git a/Resources/Private/Partials/Modal/TransportFailureDetails.html b/Resources/Private/Partials/Modal/TransportFailureDetails.html new file mode 100644 index 0000000..43de6e4 --- /dev/null +++ b/Resources/Private/Partials/Modal/TransportFailureDetails.html @@ -0,0 +1,40 @@ + + + + + diff --git a/Resources/Private/Templates/List.html b/Resources/Private/Templates/List.html new file mode 100644 index 0000000..05cf9ca --- /dev/null +++ b/Resources/Private/Templates/List.html @@ -0,0 +1,27 @@ + + + + + +

{f:translate(key: 'header.list', extensionName: 'Mailqueue')}

+ + + + + + + + + +
+ + diff --git a/Resources/Public/Icons/Extension.svg b/Resources/Public/Icons/Extension.svg new file mode 100644 index 0000000..64961b9 --- /dev/null +++ b/Resources/Public/Icons/Extension.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/Resources/Public/Icons/module.svg b/Resources/Public/Icons/module.svg new file mode 100644 index 0000000..64961b9 --- /dev/null +++ b/Resources/Public/Icons/module.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/Tests/Build/console-application.php b/Tests/Build/console-application.php new file mode 100644 index 0000000..63a325c --- /dev/null +++ b/Tests/Build/console-application.php @@ -0,0 +1,41 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +use CPSIT\Typo3Mailqueue\Command; +use Symfony\Component\Console; +use Symfony\Component\Mailer; +use TYPO3\CMS\Core; + +require dirname(__DIR__, 2) . '/.Build/vendor/autoload.php'; + +$command = new Command\ListQueueCommand( + new Core\Mail\Mailer( + new Mailer\Transport\NullTransport(), + ), +); +$command->setName('mailqueue:listqueue'); + +$application = new Console\Application(); +$application->add($command); + +return $application; diff --git a/Tests/Functional/.gitkeep b/Tests/Functional/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Tests/Unit/.gitkeep b/Tests/Unit/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..ba6f0b2 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,2 @@ +comment: + require_changes: true diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..4294d51 --- /dev/null +++ b/composer.json @@ -0,0 +1,107 @@ +{ + "name": "cpsit/typo3-mailqueue", + "description": "TYPO3 CMS extension to improve TYPO3's mail spooler with additional components", + "license": "GPL-2.0-or-later", + "type": "typo3-cms-extension", + "authors": [ + { + "name": "Elias Häußler", + "email": "e.haeussler@familie-redlich.de", + "homepage": "https://www.cps-it.de", + "role": "Developer" + } + ], + "require": { + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "ext-mbstring": "*", + "psr/http-message": "^1.0 || ^2.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/mailer": "^5.4 || ^6.4 || ^7.0", + "symfony/mime": "^5.4 || ^6.4 || ^7.0", + "typo3/cms-backend": "^11.5 || ^12.4", + "typo3/cms-core": "^11.5 || ^12.4", + "typo3/cms-fluid": "^11.5 || ^12.4", + "typo3fluid/fluid": "^2.7" + }, + "require-dev": { + "armin/editorconfig-cli": "^1.8 || ^2.0", + "ergebnis/composer-normalize": "^2.42", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-symfony": "^1.3", + "phpunit/phpcov": "^9.0 || ^10.0", + "saschaegerer/phpstan-typo3": "^1.10", + "ssch/typo3-rector": "^2.0", + "typo3/cms-lowlevel": "^11.5 || ^12.4", + "typo3/coding-standards": "^0.7.1", + "typo3/testing-framework": "^7.0.2 || ^8.0.1" + }, + "autoload": { + "psr-4": { + "CPSIT\\Typo3Mailqueue\\": "Classes/" + } + }, + "autoload-dev": { + "psr-4": { + "CPSIT\\Typo3Mailqueue\\Tests\\": "Tests/" + } + }, + "config": { + "allow-plugins": { + "ergebnis/composer-normalize": true, + "phpstan/extension-installer": true, + "typo3/class-alias-loader": true, + "typo3/cms-composer-installers": true + }, + "bin-dir": ".Build/bin", + "sort-packages": true, + "vendor-dir": ".Build/vendor" + }, + "extra": { + "typo3/cms": { + "extension-key": "mailqueue", + "web-dir": ".Build/web" + } + }, + "scripts": { + "fix": [ + "@fix:composer", + "@fix:editorconfig", + "@fix:php" + ], + "fix:composer": "@composer normalize", + "fix:editorconfig": "@lint:editorconfig --fix", + "fix:php": "php-cs-fixer fix", + "lint": [ + "@lint:composer", + "@lint:editorconfig", + "@lint:php" + ], + "lint:composer": "@fix:composer --dry-run", + "lint:editorconfig": "ec", + "lint:php": "@fix:php --dry-run", + "migration": [ + "@migration:rector" + ], + "migration:rector": "rector process -c rector.php", + "sca": [ + "@sca:php" + ], + "sca:php": "phpstan analyse -c phpstan.neon", + "test": [ + "@test:functional", + "@test:unit" + ], + "test:coverage": [ + "@test:coverage:functional", + "@test:coverage:unit", + "@test:coverage:merge" + ], + "test:coverage:functional": "phpunit -c phpunit.functional.xml", + "test:coverage:merge": "phpcov merge --html .Build/coverage/html/_merged --clover .Build/coverage/clover.xml --text php://stdout .Build/coverage/php", + "test:coverage:unit": "phpunit -c phpunit.unit.xml", + "test:functional": "@test:coverage:functional --no-coverage", + "test:unit": "@test:coverage:unit --no-coverage" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..f065301 --- /dev/null +++ b/composer.lock @@ -0,0 +1,9424 @@ +{ + "_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": "9fb3fda18a69a702edd9091fdcad3464", + "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "2.0.8", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22", + "reference": "8674e51bb65af933a5ffaf1c308a660387c35c22", + "shasum": "" + }, + "require": { + "dasprid/enum": "^1.0.3", + "ext-iconv": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phly/keep-a-changelog": "^2.1", + "phpunit/phpunit": "^7 | ^8 | ^9", + "spatie/phpunit-snapshot-assertions": "^4.2.9", + "squizlabs/php_codesniffer": "^3.4" + }, + "suggest": { + "ext-imagick": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-4": { + "BaconQrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "support": { + "issues": "https://github.com/Bacon/BaconQrCode/issues", + "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.8" + }, + "time": "2022-12-07T17:46:57+00:00" + }, + { + "name": "christian-riesen/base32", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/ChristianRiesen/base32.git", + "reference": "2e82dab3baa008e24a505649b0d583c31d31e894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ChristianRiesen/base32/zipball/2e82dab3baa008e24a505649b0d583c31d31e894", + "reference": "2e82dab3baa008e24a505649b0d583c31d31e894", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.17", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.5.13 || ^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Base32\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Riesen", + "email": "chris.riesen@gmail.com", + "homepage": "http://christianriesen.com", + "role": "Developer" + } + ], + "description": "Base32 encoder/decoder according to RFC 4648", + "homepage": "https://github.com/ChristianRiesen/base32", + "keywords": [ + "base32", + "decode", + "encode", + "rfc4648" + ], + "support": { + "issues": "https://github.com/ChristianRiesen/base32/issues", + "source": "https://github.com/ChristianRiesen/base32/tree/1.6.0" + }, + "time": "2021-02-26T10:19:33+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6faf451159fb8ba4126b925ed2d78acfce0dc016", + "reference": "6faf451159fb8ba4126b925ed2d78acfce0dc016", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.5" + }, + "time": "2023-08-25T16:18:39+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.1" + }, + "time": "2023-02-02T22:02:53+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb", + "reference": "a19a1d05ca211f41089dffcc387733a6875196cb", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.57", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.16", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "squizlabs/php_codesniffer": "3.8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.8.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2024-02-12T18:36:36+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + }, + "time": "2024-01-30T19:34:25+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:59:15+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "enshrined/svg-sanitize", + "version": "0.15.4", + "source": { + "type": "git", + "url": "https://github.com/darylldoyle/svg-sanitizer.git", + "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", + "reference": "e50b83a2f1f296ca61394fe88fbfe3e896a84cf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^8.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "enshrined\\svgSanitize\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Daryll Doyle", + "email": "daryll@enshrined.co.uk" + } + ], + "description": "An SVG sanitizer for PHP", + "support": { + "issues": "https://github.com/darylldoyle/svg-sanitizer/issues", + "source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.15.4" + }, + "time": "2022-02-21T09:13:59+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v6.10.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" + }, + "time": "2023-12-01T16:26:39+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "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": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "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": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-12-03T20:35:24+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "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/2.0.2" + }, + "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": "2023-12-03T20:19:20+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "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" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "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/2.6.2" + }, + "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": "2023-12-03T20:05:35+00:00" + }, + { + "name": "lolli42/finediff", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/lolli42/FineDiff.git", + "reference": "8d535de757062fed8412833f5eede7064595ca5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lolli42/FineDiff/zipball/8d535de757062fed8412833f5eede7064595ca5b", + "reference": "8d535de757062fed8412833f5eede7064595ca5b", + "shasum": "" + }, + "require": { + "php": ">=7.2.0", + "symfony/polyfill-mbstring": "^1.23" + }, + "replace": { + "cogpowered/finediff": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.4", + "phpstan/phpstan": "^1.9.14", + "phpunit/phpunit": "^8.5.33 || ^9.6.11 || ^10.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "cogpowered\\FineDiff\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raymond Hill" + }, + { + "name": "Rob Crowe", + "email": "rob@cogpowered.com" + }, + { + "name": "Christian Kuhn", + "email": "lolli@schwarzbu.ch", + "role": "maintainer" + } + ], + "description": "PHP implementation of a Fine granularity Diff engine", + "homepage": "https://github.com/lolli42/FineDiff", + "keywords": [ + "diff", + "finediff", + "opcode", + "string", + "text" + ], + "support": { + "issues": "https://github.com/lolli42/FineDiff/issues", + "source": "https://github.com/lolli42/FineDiff/tree/1.0.3" + }, + "time": "2024-02-06T13:56:20+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.8.1", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f47dcf3c70c584de14f21143c55d9939631bc6cf", + "reference": "f47dcf3c70c584de14f21143c55d9939631bc6cf", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.8.1" + }, + "time": "2023-05-10T11:58:31+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "153ae662783729388a584b4361f2545e4d841e3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", + "reference": "153ae662783729388a584b4361f2545e4d841e3c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" + }, + "time": "2024-02-23T11:10:43+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.26.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/231e3186624c03d7e7c890ec662b81e6b0405227", + "reference": "231e3186624c03d7e7c890ec662b81e6b0405227", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.26.0" + }, + "time": "2024-02-23T16:05:55+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.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": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://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/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/http-server-handler", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-handler.git", + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/84c4fb66179be4caaf8e97bd239203245302e7d4", + "reference": "84c4fb66179be4caaf8e97bd239203245302e7d4", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side request handler", + "keywords": [ + "handler", + "http", + "http-interop", + "psr", + "psr-15", + "psr-7", + "request", + "response", + "server" + ], + "support": { + "source": "https://github.com/php-fig/http-server-handler/tree/1.0.2" + }, + "time": "2023-04-10T20:06:20+00:00" + }, + { + "name": "psr/http-server-middleware", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-server-middleware.git", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "reference": "c1481f747daaa6a0782775cd6a8c26a1bf4a3829", + "shasum": "" + }, + "require": { + "php": ">=7.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/http-server-handler": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "http-interop", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "support": { + "issues": "https://github.com/php-fig/http-server-middleware/issues", + "source": "https://github.com/php-fig/http-server-middleware/tree/1.0.2" + }, + "time": "2023-04-11T06:14:47+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "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": "symfony/cache", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "0ef36534694c572ff526d91c7181f3edede176e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/0ef36534694c572ff526d91c7181f3edede176e7", + "reference": "0ef36534694c572ff526d91c7181f3edede176e7", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^2.0|^3.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3", + "symfony/var-exporter": "^6.3.6|^7.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/var-dumper": "<5.4" + }, + "provide": { + "psr/cache-implementation": "2.0|3.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0", + "symfony/cache-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "classmap": [ + "Traits/ValueWrapper.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 extended PSR-6, PSR-16 (and tags) implementations", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-22T20:27:10+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "1d74b127da04ffa87aa940abe15446fa89653778" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778", + "reference": "1d74b127da04ffa87aa940abe15446fa89653778", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "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 caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-09-25T12:52:38+00:00" + }, + { + "name": "symfony/clock", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "f48770105c544001da00b8d745873a628e0de198" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/f48770105c544001da00b8d745873a628e0de198", + "reference": "f48770105c544001da00b8d745873a628e0de198", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "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": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/config", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/6ea4affc27f2086c9d16b92ab5429ce1e3c38047", + "reference": "6ea4affc27f2086c9d16b92ab5429ce1e3c38047", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/finder": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "require-dev": { + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-26T07:52:26+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-22T20:27:10+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "6236e5e843cb763e9d0f74245678b994afea5363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/6236e5e843cb763e9d0f74245678b994afea5363", + "reference": "6236e5e843cb763e9d0f74245678b994afea5363", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.2.10|^7.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<6.1", + "symfony/finder": "<5.4", + "symfony/proxy-manager-bridge": "<6.3", + "symfony/yaml": "<5.4" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "symfony/service-implementation": "1.1|2.0|3.0" + }, + "require-dev": { + "symfony/config": "^6.1|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-22T20:27:10+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/doctrine-messenger", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/doctrine-messenger.git", + "reference": "0de4778d66169d65a4fa7fb5cb8742e6e924505b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/0de4778d66169d65a4fa7fb5cb8742e6e924505b", + "reference": "0de4778d66169d65a4fa7fb5cb8742e6e924505b", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.13|^3|^4", + "php": ">=8.1", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/persistence": "<1.3" + }, + "require-dev": { + "doctrine/persistence": "^1.3|^2|^3", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" + }, + "type": "symfony-messenger-bridge", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" + }, + "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": "Symfony Doctrine Messenger Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/doctrine-messenger/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-22T20:27:10+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "reference": "ae9d3a6f3003a6caf56acd7466d8d52378d44fef", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "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 tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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 dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4", + "reference": "b4a4ae33fbb33a99d23c5698faaecadb76ad0fe4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "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 an engine that can compile and evaluate expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/expression-language/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", + "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-10-31T17:30:12+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.3" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "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": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-08T15:01:18+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-03T21:33:47+00:00" + }, + { + "name": "symfony/messenger", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/messenger.git", + "reference": "443b2644a3f43678adb5281a4e3fae6fbf2473c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/messenger/zipball/443b2644a3f43678adb5281a4e3fae6fbf2473c7", + "reference": "443b2644a3f43678adb5281a4e3fae6fbf2473c7", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/clock": "^6.3|^7.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/console": "<6.3", + "symfony/event-dispatcher": "<5.4", + "symfony/event-dispatcher-contracts": "<2.5", + "symfony/framework-bundle": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/serializer": "<5.4" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/console": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/validator": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Messenger\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Samuel Roze", + "email": "samuel.roze@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps applications send and receive messages to/from other applications or via message queues", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/messenger/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-26T07:52:26+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "5017e0a9398c77090b7694be46f20eb796262a34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", + "reference": "5017e0a9398c77090b7694be46f20eb796262a34", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.3.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.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/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-30T08:32:12+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "22301f0e7fdeaacc14318928612dee79be99860e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22301f0e7fdeaacc14318928612dee79be99860e", + "reference": "22301f0e7fdeaacc14318928612dee79be99860e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "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 an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-08-08T10:16:24+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "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": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "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.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/property-access", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-access.git", + "reference": "c0664db266024013e31446dd690b6bfcf218ad93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-access/zipball/c0664db266024013e31446dd690b6bfcf218ad93", + "reference": "c0664db266024013e31446dd690b6bfcf218ad93", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/property-info": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "symfony/cache": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyAccess\\": "" + }, + "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 functions to read and write from/to an object or array using a simple string notation", + "homepage": "https://symfony.com", + "keywords": [ + "access", + "array", + "extraction", + "index", + "injection", + "object", + "property", + "property-path", + "reflection" + ], + "support": { + "source": "https://github.com/symfony/property-access/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-16T13:31:43+00:00" + }, + { + "name": "symfony/property-info", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/property-info.git", + "reference": "e96d740ab5ac39aa530c8eaa0720ea8169118e26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/property-info/zipball/e96d740ab5ac39aa530c8eaa0720ea8169118e26", + "reference": "e96d740ab5ac39aa530c8eaa0720ea8169118e26", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/string": "^5.4|^6.0|^7.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "<5.2", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/dependency-injection": "<5.4", + "symfony/serializer": "<6.4" + }, + "require-dev": { + "phpdocumentor/reflection-docblock": "^5.2", + "phpstan/phpdoc-parser": "^1.0", + "symfony/cache": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\PropertyInfo\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kévin Dunglas", + "email": "dunglas@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Extracts information about PHP class' properties using metadata of popular sources", + "homepage": "https://symfony.com", + "keywords": [ + "doctrine", + "phpdoc", + "property", + "symfony", + "type", + "validator" + ], + "support": { + "source": "https://github.com/symfony/property-info/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/rate-limiter", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/rate-limiter.git", + "reference": "5b8689fd55becd6b376ec49a542773c98985a7df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/5b8689fd55becd6b376ec49a542773c98985a7df", + "reference": "5b8689fd55becd6b376ec49a542773c98985a7df", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/options-resolver": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/lock": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\RateLimiter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Wouter de Jong", + "email": "wouter@wouterj.nl" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a Token Bucket implementation to rate limit input and output in your application", + "homepage": "https://symfony.com", + "keywords": [ + "limiter", + "rate-limiter" + ], + "support": { + "source": "https://github.com/symfony/rate-limiter/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/3b2957ad54902f0f544df83e3d58b38d7e8e5842", + "reference": "3b2957ad54902f0f544df83e3d58b38d7e8e5842", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "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": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-30T13:55:02+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.4.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-12-26T14:02:43+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-01T13:16:41+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "0bd342e24aef49fc82a21bd4eedd3e665d177e5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/0bd342e24aef49fc82a21bd4eedd3e665d177e5b", + "reference": "0bd342e24aef49fc82a21bd4eedd3e665d177e5b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "lazy-loading", + "proxy", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-26T08:37:45+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/d75715985f0f94f978e3a8fa42533e10db921b90", + "reference": "d75715985f0f94f978e3a8fa42533e10db921b90", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:51:35+00:00" + }, + { + "name": "typo3/class-alias-loader", + "version": "v1.1.4", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/class-alias-loader.git", + "reference": "f6fc1f5fb04c42195e8e663b43aced4919ef318f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/f6fc1f5fb04c42195e8e663b43aced4919ef318f", + "reference": "f6fc1f5fb04c42195e8e663b43aced4919ef318f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3.7" + }, + "replace": { + "helhum/class-alias-loader": "*" + }, + "require-dev": { + "composer/composer": "^1.1@dev || ^2.0@dev", + "mikey179/vfsstream": "~1.4.0@dev", + "phpunit/phpunit": ">4.8 <9" + }, + "type": "composer-plugin", + "extra": { + "class": "TYPO3\\ClassAliasLoader\\Plugin", + "branch-alias": { + "dev-main": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\ClassAliasLoader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Helmut Hummel", + "email": "info@helhum.io" + } + ], + "description": "Amends the composer class loader to support class aliases to provide backwards compatibility for packages", + "homepage": "http://github.com/TYPO3/class-alias-loader", + "keywords": [ + "alias", + "autoloader", + "classloader", + "composer" + ], + "support": { + "issues": "https://github.com/TYPO3/class-alias-loader/issues", + "source": "https://github.com/TYPO3/class-alias-loader/tree/v1.1.4" + }, + "time": "2022-08-07T14:48:42+00:00" + }, + { + "name": "typo3/cms-backend", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/backend.git", + "reference": "90c4ad8f78086ba93fe3d03b89a3ea09302c30c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/backend/zipball/90c4ad8f78086ba93fe3d03b89a3ea09302c30c3", + "reference": "90c4ad8f78086ba93fe3d03b89a3ea09302c30c3", + "shasum": "" + }, + "require": { + "psr/event-dispatcher": "^1.0", + "typo3/cms-core": "12.4.11" + }, + "conflict": { + "typo3/cms": "*" + }, + "replace": { + "typo3/cms-about": "self.version", + "typo3/cms-context-help": "self.version", + "typo3/cms-cshmanual": "self.version", + "typo3/cms-func-wizards": "self.version", + "typo3/cms-recordlist": "self.version", + "typo3/cms-wizard-crpages": "self.version", + "typo3/cms-wizard-sortpages": "self.version" + }, + "suggest": { + "typo3/cms-install": "To generate url to install tool in environment toolbar" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Backend\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "backend" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Backend\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS backend", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/cms-cli", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/cms-cli.git", + "reference": "d8947732ff5a6dc52829e88cb1c761124475c0e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/cms-cli/zipball/d8947732ff5a6dc52829e88cb1c761124475c0e8", + "reference": "d8947732ff5a6dc52829e88cb1c761124475c0e8", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "bin": [ + "typo3" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "description": "TYPO3 command line binary", + "homepage": "https://typo3.org", + "support": { + "issues": "https://github.com/TYPO3/cms-cli/issues", + "source": "https://github.com/TYPO3/cms-cli/tree/3.1.1" + }, + "time": "2023-08-15T10:14:53+00:00" + }, + { + "name": "typo3/cms-composer-installers", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/CmsComposerInstallers.git", + "reference": "71356484e6ccadf45acdde6489823c7af925b144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/71356484e6ccadf45acdde6489823c7af925b144", + "reference": "71356484e6ccadf45acdde6489823c7af925b144", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.1.0", + "php": "^8.1" + }, + "replace": { + "lw/typo3cms-installers": "*", + "netresearch/composer-installers": "*" + }, + "require-dev": { + "composer/composer": "^2.1", + "friendsofphp/php-cs-fixer": "^2.18", + "overtrue/phplint": "^2.0", + "phpunit/phpunit": "^8.5" + }, + "type": "composer-plugin", + "extra": { + "class": "TYPO3\\CMS\\Composer\\Installer\\Plugin", + "branch-alias": { + "dev-main": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 CMS Core Team", + "homepage": "https://forge.typo3.org/projects/typo3cms-core", + "role": "Developer" + }, + { + "name": "The TYPO3 Community", + "homepage": "https://typo3.org/community/", + "role": "Contributor" + } + ], + "description": "TYPO3 CMS Installers", + "homepage": "https://github.com/TYPO3/CmsComposerInstallers", + "keywords": [ + "cms", + "core", + "extension", + "installer", + "typo3" + ], + "support": { + "general": "https://typo3.org/support/", + "issues": "https://github.com/TYPO3/CmsComposerInstallers/issues", + "source": "https://github.com/TYPO3/CmsComposerInstallers/tree/v5.0.0" + }, + "time": "2022-09-30T14:36:05+00:00" + }, + { + "name": "typo3/cms-core", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/core.git", + "reference": "5d9f3b7770ec3500adad7b5db04c9402664cb9ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/core/zipball/5d9f3b7770ec3500adad7b5db04c9402664cb9ed", + "reference": "5d9f3b7770ec3500adad7b5db04c9402664cb9ed", + "shasum": "" + }, + "require": { + "bacon/bacon-qr-code": "^2.0.7", + "christian-riesen/base32": "^1.6", + "composer-runtime-api": "^2.1", + "doctrine/annotations": "^1.13.3 || ^2.0", + "doctrine/dbal": "^3.8.1", + "doctrine/event-manager": "^2.0", + "doctrine/lexer": "^2.0 || ^3.0", + "egulias/email-validator": "^4.0", + "enshrined/svg-sanitize": "^0.15.4", + "ext-dom": "*", + "ext-intl": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "firebase/php-jwt": "^6.4.0", + "guzzlehttp/guzzle": "^7.7.0", + "guzzlehttp/psr7": "^2.5.0", + "lolli42/finediff": "^1.0.2", + "masterminds/html5": "^2.7.6", + "php": "^8.1", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^2.0 || ^3.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/event-dispatcher-contracts": "^3.1", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/filesystem": "^6.4 || ^7.0", + "symfony/finder": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "symfony/mailer": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/mime": "^6.4 || ^7.0", + "symfony/options-resolver": "^6.4 || ^7.0", + "symfony/rate-limiter": "^6.4 || ^7.0", + "symfony/routing": "^6.4 || ^7.0", + "symfony/uid": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "typo3/class-alias-loader": "^1.1.4", + "typo3/cms-cli": "^3.1", + "typo3/cms-composer-installers": "^5.0", + "typo3/html-sanitizer": "^2.1.4", + "typo3fluid/fluid": "^2.9.2" + }, + "conflict": { + "hoa/core": "*", + "typo3/cms": "*" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "replace": { + "typo3/cms-lang": "self.version", + "typo3/cms-saltedpasswords": "self.version", + "typo3/cms-sv": "self.version" + }, + "suggest": { + "ext-apcu": "Needed when non-default APCU based cache backends are used", + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "OpenSSL is required for sending SMTP mails over an encrypted channel endpoint", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Core\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "core" + } + }, + "autoload": { + "files": [ + "Resources/PHP/GlobalDebugFunctions.php" + ], + "psr-4": { + "TYPO3\\CMS\\Core\\": "Classes/" + }, + "classmap": [ + "Resources/PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Core", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/cms-extbase", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/extbase.git", + "reference": "7a6a784fbdc959bdddbd9bae18a4d42b41be6152" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/extbase/zipball/7a6a784fbdc959bdddbd9bae18a4d42b41be6152", + "reference": "7a6a784fbdc959bdddbd9bae18a4d42b41be6152", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5 || ^2.0", + "phpdocumentor/reflection-docblock": "^5.2", + "phpdocumentor/type-resolver": "^1.7.1", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/property-access": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.11" + }, + "conflict": { + "typo3/cms": "*" + }, + "suggest": { + "typo3/cms-scheduler": "Additional scheduler tasks" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Extbase\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "extbase" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Extbase\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Extbase - Extension framework to create TYPO3 frontend plugins and TYPO3 backend modules.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/cms-fluid", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/fluid.git", + "reference": "1507cac779b3d7dd49a84349b1d115206a7f25da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/fluid/zipball/1507cac779b3d7dd49a84349b1d115206a7f25da", + "reference": "1507cac779b3d7dd49a84349b1d115206a7f25da", + "shasum": "" + }, + "require": { + "symfony/dependency-injection": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.11", + "typo3/cms-extbase": "12.4.11", + "typo3fluid/fluid": "^2.9.2" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Fluid\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "fluid" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Fluid\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Fluid Integration - Integration of the Fluid templating engine into TYPO3.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org/other/typo3/view-helper-reference/main/en-us/", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/html-sanitizer", + "version": "v2.1.4", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/html-sanitizer.git", + "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/html-sanitizer/zipball/b8f90717251d968c49dc77f8c1e5912e2fbe0dff", + "reference": "b8f90717251d968c49dc77f8c1e5912e2fbe0dff", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "masterminds/html5": "^2.7.6", + "php": "^7.2 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\HtmlSanitizer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Hader", + "email": "oliver@typo3.org" + } + ], + "description": "HTML sanitizer aiming to provide XSS-safe markup based on explicitly allowed tags, attributes and values.", + "support": { + "issues": "https://github.com/TYPO3/html-sanitizer/issues", + "source": "https://github.com/TYPO3/html-sanitizer/tree/v2.1.4" + }, + "time": "2023-11-14T07:41:08+00:00" + }, + { + "name": "typo3fluid/fluid", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/Fluid.git", + "reference": "567a16691beedbcbefa5c12f35c5e71661cfbf53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/Fluid/zipball/567a16691beedbcbefa5c12f35c5e71661cfbf53", + "reference": "567a16691beedbcbefa5c12f35c5e71661cfbf53", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1" + }, + "require-dev": { + "ext-json": "*", + "friendsofphp/php-cs-fixer": "^3.37.1", + "phpstan/phpstan": "^1.10.14", + "phpstan/phpstan-phpunit": "^1.3.11", + "phpunit/phpunit": "^10.2.6" + }, + "suggest": { + "ext-json": "PHP JSON is needed when using JSONVariableProvider: A relatively rare use case" + }, + "bin": [ + "bin/fluid" + ], + "type": "library", + "autoload": { + "psr-4": { + "TYPO3Fluid\\Fluid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "description": "The TYPO3 Fluid template rendering engine", + "homepage": "https://github.com/TYPO3/Fluid", + "support": { + "docs": "https://docs.typo3.org/other/typo3fluid/fluid/main/en-us/", + "issues": "https://github.com/TYPO3/Fluid/issues", + "source": "https://github.com/TYPO3/Fluid" + }, + "time": "2023-12-11T13:07:39+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + } + ], + "packages-dev": [ + { + "name": "armin/editorconfig-cli", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/a-r-m-i-n/editorconfig-cli.git", + "reference": "c15a733467c2540bd7d4bc054d05c64c80b0b39c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/a-r-m-i-n/editorconfig-cli/zipball/c15a733467c2540bd7d4bc054d05c64c80b0b39c", + "reference": "c15a733467c2540bd7d4bc054d05c64c80b0b39c", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-json": "*", + "idiosyncratic/editorconfig": "^0.1.1", + "php": "^7.4 || ^8.0", + "symfony/console": "^4 || ^5 || ^6", + "symfony/finder": "^4.4 || ^5 || ^6", + "symfony/mime": "^4 || ^5 || ^6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "3.4.0", + "jangregor/phpstan-prophecy": "1.0.0", + "phpstan/phpstan": "1.4.0", + "phpunit/phpunit": "^9.6.8 || ^10.1", + "seld/phar-utils": "^1.1" + }, + "bin": [ + "bin/ec" + ], + "type": "library", + "autoload": { + "psr-4": { + "Armin\\EditorconfigCli\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Armin Vieweg", + "email": "info@v.ieweg.de", + "homepage": "https://v.ieweg.de" + } + ], + "description": "EditorConfigCLI is a free CLI tool (written in PHP) to validate and auto-fix text files based on given .editorconfig declarations.", + "homepage": "https://github.com/a-r-m-i-n/editorconfig-cli", + "support": { + "issues": "https://github.com/a-r-m-i-n/editorconfig-cli/issues", + "source": "https://github.com/a-r-m-i-n/editorconfig-cli" + }, + "time": "2023-12-28T15:51:57+00:00" + }, + { + "name": "bnf/phpstan-psr-container", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/bnf/phpstan-psr-container.git", + "reference": "38242e71616aa677a0fdd08af8edc4a730a24f67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bnf/phpstan-psr-container/zipball/38242e71616aa677a0fdd08af8edc4a730a24f67", + "reference": "38242e71616aa677a0fdd08af8edc4a730a24f67", + "shasum": "" + }, + "require": { + "php": "^7.0|^8.0", + "phpstan/phpstan": "^1.0", + "psr/container": "^1.0|^2.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Bnf\\PhpstanPsrContainer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Benjamin Franzke", + "email": "benjaminfranzke@gmail.com", + "homepage": "https://bnfr.net", + "role": "Developer" + } + ], + "description": "PHPStan dynamic return type extension for PSR-11 ContainerInterface", + "keywords": [ + "PHPStan", + "PSR-11", + "service-provider", + "static" + ], + "support": { + "issues": "https://github.com/bnf/phpstan-psr-container/issues", + "source": "https://github.com/bnf/phpstan-psr-container/tree/1.0.1" + }, + "time": "2022-04-26T04:03:19+00:00" + }, + { + "name": "composer/pcre", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-10-11T07:11:09+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-08-31T09:50:34+00:00" + }, + { + "name": "composer/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": "ergebnis/composer-normalize", + "version": "2.42.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/composer-normalize.git", + "reference": "02cf2b69ad2a74c6f11a8c3f5f054b8f949df910" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/02cf2b69ad2a74c6f11a8c3f5f054b8f949df910", + "reference": "02cf2b69ad2a74c6f11a8c3f5f054b8f949df910", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "ergebnis/json": "^1.2.0", + "ergebnis/json-normalizer": "^4.5.0", + "ergebnis/json-printer": "^3.5.0", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.12", + "localheinz/diff": "^1.1.1", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "composer/composer": "^2.6.6", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "symfony/filesystem": "^5.4.25", + "vimeo/psalm": "^5.20.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin", + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + }, + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Ergebnis\\Composer\\Normalize\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a composer plugin for normalizing composer.json.", + "homepage": "https://github.com/ergebnis/composer-normalize", + "keywords": [ + "composer", + "normalize", + "normalizer", + "plugin" + ], + "support": { + "issues": "https://github.com/ergebnis/composer-normalize/issues", + "security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/composer-normalize" + }, + "time": "2024-01-30T11:54:02+00:00" + }, + { + "name": "ergebnis/json", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json.git", + "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json/zipball/a457f25a5ba7ea11fc94f84d53678c5211abfce0", + "reference": "a457f25a5ba7ea11fc94f84d53678c5211abfce0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a Json value object for representing a valid JSON string.", + "homepage": "https://github.com/ergebnis/json", + "keywords": [ + "json" + ], + "support": { + "issues": "https://github.com/ergebnis/json/issues", + "security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json" + }, + "time": "2024-01-29T15:09:24+00:00" + }, + { + "name": "ergebnis/json-normalizer", + "version": "4.5.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json-normalizer.git", + "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/f0ee9e70739f121b27fac8b743e4a52b23de2152", + "reference": "f0ee9e70739f121b27fac8b743e4a52b23de2152", + "shasum": "" + }, + "require": { + "ergebnis/json": "^1.2.0", + "ergebnis/json-pointer": "^3.4.0", + "ergebnis/json-printer": "^3.5.0", + "ergebnis/json-schema-validator": "^4.2.0", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.12", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "composer/semver": "^3.4.0", + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.4", + "vimeo/psalm": "^5.20.0" + }, + "suggest": { + "composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ergebnis\\Json\\Normalizer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides generic and vendor-specific normalizers for normalizing JSON documents.", + "homepage": "https://github.com/ergebnis/json-normalizer", + "keywords": [ + "json", + "normalizer" + ], + "support": { + "issues": "https://github.com/ergebnis/json-normalizer/issues", + "security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-normalizer" + }, + "time": "2024-01-30T09:10:15+00:00" + }, + { + "name": "ergebnis/json-pointer", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json-pointer.git", + "reference": "b654757d873050622c2166f55ab25d04685261c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/b654757d873050622c2166f55ab25d04685261c5", + "reference": "b654757d873050622c2166f55ab25d04685261c5", + "shasum": "" + }, + "require": { + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\Json\\Pointer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides an abstraction of a JSON pointer.", + "homepage": "https://github.com/ergebnis/json-pointer", + "keywords": [ + "RFC6901", + "json", + "pointer" + ], + "support": { + "issues": "https://github.com/ergebnis/json-pointer/issues", + "security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-pointer" + }, + "time": "2024-01-29T16:37:15+00:00" + }, + { + "name": "ergebnis/json-printer", + "version": "3.5.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json-printer.git", + "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/549e16fe6de34b8c3aee7b421be12caa552f3ced", + "reference": "549e16fe6de34b8c3aee7b421be12caa552f3ced", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Ergebnis\\Json\\Printer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a JSON printer, allowing for flexible indentation.", + "homepage": "https://github.com/ergebnis/json-printer", + "keywords": [ + "formatter", + "json", + "printer" + ], + "support": { + "issues": "https://github.com/ergebnis/json-printer/issues", + "security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-printer" + }, + "time": "2024-01-29T15:33:37+00:00" + }, + { + "name": "ergebnis/json-schema-validator", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json-schema-validator.git", + "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef", + "reference": "10ed514fdc3f9b71f8a92c567afea21a2f6fa1ef", + "shasum": "" + }, + "require": { + "ergebnis/json": "^1.2.0", + "ergebnis/json-pointer": "^3.4.0", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.12", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + }, + "require-dev": { + "ergebnis/data-provider": "^3.2.0", + "ergebnis/license": "^2.4.0", + "ergebnis/php-cs-fixer-config": "^6.20.0", + "ergebnis/phpunit-slow-test-detector": "^2.9.0", + "fakerphp/faker": "^1.23.1", + "infection/infection": "~0.26.6", + "phpunit/phpunit": "^9.6.16", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.19.2", + "vimeo/psalm": "^5.20.0" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\Json\\SchemaValidator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Provides a JSON schema validator, building on top of justinrainbow/json-schema.", + "homepage": "https://github.com/ergebnis/json-schema-validator", + "keywords": [ + "json", + "schema", + "validator" + ], + "support": { + "issues": "https://github.com/ergebnis/json-schema-validator/issues", + "security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md", + "source": "https://github.com/ergebnis/json-schema-validator" + }, + "time": "2024-01-29T16:50:15+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.51.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "127fa74f010da99053e3f5b62672615b72dd6efd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/127fa74f010da99053e3f5b62672615b72dd6efd", + "reference": "127fa74f010da99053e3f5b62672615b72dd6efd", + "shasum": "" + }, + "require": { + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", + "symfony/polyfill-mbstring": "^1.28", + "symfony/polyfill-php80": "^1.28", + "symfony/polyfill-php81": "^1.28", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "facile-it/paraunit": "^1.3 || ^2.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.1", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.7", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4", + "phpunit/phpunit": "^9.6 || ^10.5.5 || ^11.0.2", + "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.51.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2024-02-28T19:50:06+00:00" + }, + { + "name": "idiosyncratic/editorconfig", + "version": "0.1.3", + "source": { + "type": "git", + "url": "https://github.com/idiosyncratic-code/editorconfig-php.git", + "reference": "3445fa4a1e00f95630d4edc729c2effb116db19b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/idiosyncratic-code/editorconfig-php/zipball/3445fa4a1e00f95630d4edc729c2effb116db19b", + "reference": "3445fa4a1e00f95630d4edc729c2effb116db19b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "idiosyncratic/coding-standard": "^2.0", + "php-parallel-lint/php-console-highlighter": "^0.5", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phploc/phploc": "^7.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^9.5", + "sebastian/phpcpd": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Idiosyncratic\\EditorConfig\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Jason Silkey", + "email": "jason@jasonsilkey.com" + } + ], + "description": "PHP implementation of EditorConfig", + "support": { + "issues": "https://github.com/idiosyncratic-code/editorconfig-php/issues", + "source": "https://github.com/idiosyncratic-code/editorconfig-php/tree/0.1.3" + }, + "time": "2021-06-02T16:24:34+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "v5.2.13", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793", + "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "support": { + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/v5.2.13" + }, + "time": "2023-09-26T02:20:38+00:00" + }, + { + "name": "localheinz/diff", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/localheinz/diff.git", + "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/localheinz/diff/zipball/851bb20ea8358c86f677f5f111c4ab031b1c764c", + "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Fork of sebastian/diff for use with ergebnis/composer-normalize", + "homepage": "https://github.com/localheinz/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "source": "https://github.com/localheinz/diff/tree/main" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-07-06T04:49:32+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.4", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.4" + }, + "time": "2024-01-17T16:50:36+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" + }, + "time": "2023-12-10T21:03:43+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/f45734bfb9984c6c56c4486b71230355f066a58a", + "reference": "f45734bfb9984c6c56c4486b71230355f066a58a", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.3.1" + }, + "time": "2023-05-24T08:59:17+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.10.59", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "e607609388d3a6d418a50a49f7940e8086798281" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281", + "reference": "e607609388d3a6d418a50a49f7940e8086798281", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2024-02-20T13:59:13+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "1.3.16", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "d5242a59d035e46774f2e634b374bc39ff62cb95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d5242a59d035e46774f2e634b374bc39ff62cb95", + "reference": "d5242a59d035e46774f2e634b374bc39ff62cb95", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.16" + }, + "time": "2024-02-23T09:51:20+00:00" + }, + { + "name": "phpstan/phpstan-symfony", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-symfony.git", + "reference": "ef7db637be9b85fa00278fc3477ac66abe8eb7d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/ef7db637be9b85fa00278fc3477ac66abe8eb7d1", + "reference": "ef7db637be9b85fa00278fc3477ac66abe8eb7d1", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10.36" + }, + "conflict": { + "symfony/framework-bundle": "<3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^1.3.11", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^8.5.29 || ^9.5", + "psr/container": "1.0 || 1.1.1", + "symfony/config": "^5.4 || ^6.1", + "symfony/console": "^5.4 || ^6.1", + "symfony/dependency-injection": "^5.4 || ^6.1", + "symfony/form": "^5.4 || ^6.1", + "symfony/framework-bundle": "^5.4 || ^6.1", + "symfony/http-foundation": "^5.4 || ^6.1", + "symfony/messenger": "^5.4", + "symfony/polyfill-php80": "^1.24", + "symfony/serializer": "^5.4", + "symfony/service-contracts": "^2.2.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lukáš Unger", + "email": "looky.msc@gmail.com", + "homepage": "https://lookyman.net" + } + ], + "description": "Symfony Framework extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-symfony/issues", + "source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.7" + }, + "time": "2024-01-10T21:54:42+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T15:38:30+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpcov", + "version": "9.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpcov.git", + "reference": "05307478b8f4b2a50c508d6f4eca15704cf7c1fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpcov/zipball/05307478b8f4b2a50c508d6f4eca15704cf7c1fd", + "reference": "05307478b8f4b2a50c508d6f4eca15704cf7c1fd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/phpunit": "^10.0", + "sebastian/cli-parser": "^2.0", + "sebastian/diff": "^5.0", + "sebastian/version": "^4.0" + }, + "bin": [ + "phpcov" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "CLI frontend for php-code-coverage", + "homepage": "https://github.com/sebastianbergmann/phpcov", + "support": { + "issues": "https://github.com/sebastianbergmann/phpcov/issues", + "source": "https://github.com/sebastianbergmann/phpcov/tree/9.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-12T14:47:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", + "reference": "0d968f6323deb3dbfeba5bfd4929b9415eb7a9a4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.5", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.1", + "sebastian/global-state": "^6.0.1", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.11" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2024-02-25T14:05:00+00:00" + }, + { + "name": "rector/rector", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/rectorphp/rector.git", + "reference": "258b775511e62a7188f8ce114d44acaf244d9a7d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/258b775511e62a7188f8ce114d44acaf244d9a7d", + "reference": "258b775511e62a7188f8ce114d44acaf244d9a7d", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "phpstan/phpstan": "^1.10.57" + }, + "conflict": { + "rector/rector-doctrine": "*", + "rector/rector-downgrade-php": "*", + "rector/rector-phpunit": "*", + "rector/rector-symfony": "*" + }, + "bin": [ + "bin/rector" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Instant Upgrade and Automated Refactoring of any PHP code", + "keywords": [ + "automation", + "dev", + "migration", + "refactoring" + ], + "support": { + "issues": "https://github.com/rectorphp/rector/issues", + "source": "https://github.com/rectorphp/rector/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/tomasvotruba", + "type": "github" + } + ], + "time": "2024-02-16T07:53:23+00:00" + }, + { + "name": "saschaegerer/phpstan-typo3", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/sascha-egerer/phpstan-typo3.git", + "reference": "0cecc8fc6c4de39e42cc92a0676a66a5ae867312" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sascha-egerer/phpstan-typo3/zipball/0cecc8fc6c4de39e42cc92a0676a66a5ae867312", + "reference": "0cecc8fc6c4de39e42cc92a0676a66a5ae867312", + "shasum": "" + }, + "require": { + "bnf/phpstan-psr-container": "^1.0", + "composer/semver": "^3.3", + "nikic/php-parser": "^4.15.1", + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.10.9", + "typo3/cms-core": "^10.4 || ^11.5 || ^12.4 || ^13.0", + "typo3/cms-extbase": "^10.4 || ^11.5 || ^12.4 || ^13.0" + }, + "require-dev": { + "consistence-community/coding-standard": "^3.11.1", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "phing/phing": "^2.17.4", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpstan/phpstan-strict-rules": "^1.5.1", + "phpunit/phpunit": "^9.6.16", + "slevomat/coding-standard": "^7.2.1", + "symfony/polyfill-php80": "^1.28.0" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "SaschaEgerer\\PhpstanTypo3\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "TYPO3 CMS class reflection extension for PHPStan", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/sascha-egerer/phpstan-typo3/issues", + "source": "https://github.com/sascha-egerer/phpstan-typo3/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/sascha-egerer", + "type": "github" + }, + { + "url": "https://liberapay.com/sascha.egerer", + "type": "liberapay" + } + ], + "time": "2024-01-30T12:31:53+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-14T13:18:12+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T10:55:06+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-24T13:22:09+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-07-19T07:19:23+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "ssch/typo3-rector", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sabbelasichon/typo3-rector.git", + "reference": "bb3f8a1d567cd033a0ce4862b4d7eb51b2a4801d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabbelasichon/typo3-rector/zipball/bb3f8a1d567cd033a0ce4862b4d7eb51b2a4801d", + "reference": "bb3f8a1d567cd033a0ce4862b4d7eb51b2a4801d", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2.10 || ^4.0.4", + "nikic/php-parser": "^4.18.0", + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.10.56", + "rector/rector": "^1.0", + "symfony/console": "^5.4 || ^6.4 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", + "symfony/finder": "^5.4 || ^6.4 || ^7.0", + "symfony/polyfill-php80": "^1.28.0", + "symfony/polyfill-php81": "^1.28.0", + "symfony/string": "^5.4 || ^6.4 || ^7.0", + "symfony/yaml": "^5.4 || ^6.4 || ^7.0", + "webmozart/assert": "^1.11.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.28", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan-deprecation-rules": "^1.1", + "phpstan/phpstan-phpunit": "^1.3.15", + "phpunit/phpunit": "^9.6.16 || ^10.0", + "symfony/config": "^5.0 || ^6.0 || ^7.0", + "symfony/dependency-injection": "^5.4.34 || ^6.4.2 || ^7.0.2", + "symfony/http-kernel": "^5.4.34 || ^6.4.2 || ^7.0.2", + "symplify/easy-coding-standard": "^12.1.8" + }, + "suggest": { + "ssch/typo3-debug-dump-pass": "^0.0.1" + }, + "bin": [ + "bin/typo3-init" + ], + "type": "rector-extension", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + }, + "rector": { + "includes": [ + "config/config.php" + ] + } + }, + "autoload": { + "psr-4": { + "Ssch\\TYPO3Rector\\": [ + "src", + "rules" + ], + "Ssch\\TYPO3Rector\\PHPStan\\": "utils/phpstan/src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian Schreiber", + "email": "breakpoint@schreibersebastian.de" + }, + { + "name": "Henrik Elsner" + }, + { + "name": "Simon Schaufelberger" + } + ], + "description": "Instant fixes for your TYPO3 code by using Rector.", + "homepage": "https://packagist.org/packages/ssch/typo3-rector", + "keywords": [ + "dev" + ], + "support": { + "chat": "https://typo3.slack.com/archives/C019R5LAA6A", + "docs": "https://github.com/sabbelasichon/typo3-rector/tree/main/docs", + "issues": "https://github.com/sabbelasichon/typo3-rector/issues", + "source": "https://github.com/sabbelasichon/typo3-rector" + }, + "funding": [ + { + "url": "https://paypal.me/schreiberten", + "type": "custom" + }, + { + "url": "https://github.com/sabbelasichon", + "type": "github" + } + ], + "time": "2024-02-26T13:04:24+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", + "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "710e27879e9be3395de2b98da3f52a946039f297" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "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/v6.4.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-20T12:31:00+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/416596166641f1f728b0a64f5b9dd07cceb410c1", + "reference": "416596166641f1f728b0a64f5b9dd07cceb410c1", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "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 a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-23T14:35:58+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2023-11-20T00:12:19+00:00" + }, + { + "name": "typo3/cms-frontend", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/frontend.git", + "reference": "defbe57b5f91c4b2f9602b44b257582b1d78ebd0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/frontend/zipball/defbe57b5f91c4b2f9602b44b257582b1d78ebd0", + "reference": "defbe57b5f91c4b2f9602b44b257582b1d78ebd0", + "shasum": "" + }, + "require": { + "ext-libxml": "*", + "typo3/cms-core": "12.4.11" + }, + "conflict": { + "typo3/cms": "*" + }, + "suggest": { + "typo3/cms-adminpanel": "Provides additional information and functionality for backend users in the frontend." + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Frontend\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "frontend" + }, + "typo3/class-alias-loader": { + "class-alias-maps": [ + "Migrations/Code/ClassAliasMap.php" + ] + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Frontend\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Frontend", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/cms-install", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/install.git", + "reference": "251e30d160e3e679114699281b8debc986d09efe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/install/zipball/251e30d160e3e679114699281b8debc986d09efe", + "reference": "251e30d160e3e679114699281b8debc986d09efe", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^3.8.1", + "guzzlehttp/promises": "^1.5.2 || ^2.0", + "nikic/php-parser": "^4.15.4", + "symfony/finder": "^6.4 || ^7.0", + "symfony/http-foundation": "^6.4 || ^7.0", + "typo3/cms-core": "12.4.11", + "typo3/cms-extbase": "12.4.11", + "typo3/cms-fluid": "12.4.11" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "serviceProvider": "TYPO3\\CMS\\Install\\ServiceProvider", + "protected": true, + "partOfFactoryDefault": true, + "partOfMinimalUsableSystem": true + }, + "extension-key": "install" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Install\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Install Tool - The Install Tool is used for installation, upgrade, system administration and setup tasks.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/cms-lowlevel", + "version": "v12.4.11", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-CMS/lowlevel.git", + "reference": "0841b6e0d2b81c27be86503553de8f038916f5de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-CMS/lowlevel/zipball/0841b6e0d2b81c27be86503553de8f038916f5de", + "reference": "0841b6e0d2b81c27be86503553de8f038916f5de", + "shasum": "" + }, + "require": { + "typo3/cms-core": "12.4.11" + }, + "conflict": { + "typo3/cms": "*" + }, + "type": "typo3-cms-framework", + "extra": { + "branch-alias": { + "dev-main": "12.4.x-dev" + }, + "typo3/cms": { + "Package": { + "partOfFactoryDefault": true + }, + "extension-key": "lowlevel" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Lowlevel\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 Core Team", + "email": "typo3cms@typo3.org", + "role": "Developer" + } + ], + "description": "TYPO3 CMS Lowlevel - Technical analysis of the system. This includes raw database search, checking relations, counting pages and records etc.", + "homepage": "https://typo3.org", + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://forge.typo3.org", + "source": "https://github.com/typo3/typo3" + }, + "time": "2024-02-13T09:54:21+00:00" + }, + { + "name": "typo3/coding-standards", + "version": "v0.7.1", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/coding-standards.git", + "reference": "b53fc46dc3fc997f98c96bc630d24c1e12028646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/coding-standards/zipball/b53fc46dc3fc997f98c96bc630d24c1e12028646", + "reference": "b53fc46dc3fc997f98c96bc630d24c1e12028646", + "shasum": "" + }, + "require": { + "ext-json": "*", + "friendsofphp/php-cs-fixer": "^3.11", + "php": "^8.0", + "symfony/console": "^4.4.30 || ^5.3.7 || ^6.0", + "symfony/filesystem": "^4.4 || ^5.0 || ^6.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11.99.4", + "ergebnis/composer-normalize": "*", + "keradus/cli-executor": "^1.5", + "maglnet/composer-require-checker": "*", + "nikic/php-parser": "^4.13.1", + "overtrue/phplint": "^3.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpstan/phpstan-symfony": "^1.0", + "phpunit/phpunit": "^9.5.18", + "symfony/finder": ">=4.4", + "symfony/process": ">=4.4" + }, + "bin": [ + "t3-cs", + "typo3-coding-standards" + ], + "type": "coding-standards", + "extra": { + "branch-alias": { + "dev-main": "0.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CodingStandards\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benni Mack", + "email": "benni@typo3.org" + }, + { + "name": "Simon Gilli", + "email": "simon.gilli@typo3.org" + } + ], + "description": "A set of coding guidelines for any TYPO3-related project or extension", + "homepage": "https://typo3.org/", + "keywords": [ + "Code style", + "cms", + "editorconfig", + "php-cs-fixer", + "typo3" + ], + "support": { + "chat": "https://typo3.org/help", + "docs": "https://docs.typo3.org", + "issues": "https://github.com/TYPO3/coding-standards/issues", + "source": "https://github.com/TYPO3/coding-standards" + }, + "time": "2022-12-20T16:02:01+00:00" + }, + { + "name": "typo3/testing-framework", + "version": "8.0.9", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/testing-framework.git", + "reference": "7f4a539b3ad90b935741fe4d260561de4595de0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/testing-framework/zipball/7f4a539b3ad90b935741fe4d260561de4595de0b", + "reference": "7f4a539b3ad90b935741fe4d260561de4595de0b", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^2.5.0", + "php": "^8.1", + "phpunit/phpunit": "^10.1", + "psr/container": "^1.1.0 || ^2.0.0", + "typo3/cms-backend": "12.*.*@dev || 13.*.*@dev", + "typo3/cms-core": "12.*.*@dev || 13.*.*@dev", + "typo3/cms-extbase": "12.*.*@dev || 13.*.*@dev", + "typo3/cms-fluid": "12.*.*@dev || 13.*.*@dev", + "typo3/cms-frontend": "12.*.*@dev || 13.*.*@dev", + "typo3/cms-install": "12.*.*@dev || 13.*.*@dev" + }, + "replace": { + "sbuerk/typo3-cmscomposerinstallers-testingframework-bridge": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.37.1", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-phpunit": "^1.1.1", + "typo3/cms-workspaces": "12.*.*@dev || 13.*.*@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "TYPO3\\JsonResponse\\": "Resources/Core/Functional/Extensions/json_response/Classes/", + "TYPO3\\PrivateContainer\\": "Resources/Core/Functional/Extensions/private_container/Classes/", + "TYPO3\\TestingFramework\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "TYPO3 CMS Core Team", + "homepage": "https://forge.typo3.org/projects/typo3cms-core", + "role": "Developer" + }, + { + "name": "The TYPO3 Community", + "homepage": "https://typo3.org/community/", + "role": "Contributor" + } + ], + "description": "The TYPO3 testing framework provides base classes for unit, functional and acceptance testing.", + "homepage": "https://typo3.org/", + "keywords": [ + "testing", + "tests", + "typo3" + ], + "support": { + "general": "https://typo3.org/support/", + "issues": "https://github.com/TYPO3/testing-framework/issues", + "source": "https://github.com/TYPO3/testing-framework/tree/8.0.9" + }, + "time": "2024-01-31T12:14:00+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "ext-mbstring": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/ext_emconf.php b/ext_emconf.php new file mode 100644 index 0000000..41b9cc4 --- /dev/null +++ b/ext_emconf.php @@ -0,0 +1,39 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** @noinspection PhpUndefinedVariableInspection */ +$EM_CONF[$_EXTKEY] = [ + 'title' => 'Mailqueue', + 'description' => 'Extension to improve TYPO3\'s mail spooler with additional components', + 'category' => 'be', + 'version' => '0.1.0', + 'state' => 'beta', + 'clearCacheOnLoad' => true, + 'author' => 'Elias Häußler', + 'author_email' => 'e.haeussler@familie-redlich.de', + 'author_company' => 'coding. powerful. systems. CPS GmbH', + 'constraints' => [ + 'depends' => [ + 'typo3' => '11.5.0-13.0.99', + 'php' => '8.1.0-8.3.99', + ], + ], +]; diff --git a/ext_localconf.php b/ext_localconf.php new file mode 100644 index 0000000..2116224 --- /dev/null +++ b/ext_localconf.php @@ -0,0 +1,24 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +\CPSIT\Typo3Mailqueue\Extension::registerXClasses(); diff --git a/ext_tables.php b/ext_tables.php new file mode 100644 index 0000000..8c255b8 --- /dev/null +++ b/ext_tables.php @@ -0,0 +1,24 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +\CPSIT\Typo3Mailqueue\Extension::registerBackendModules(); diff --git a/packaging_exclude.php b/packaging_exclude.php new file mode 100644 index 0000000..f2e5bcb --- /dev/null +++ b/packaging_exclude.php @@ -0,0 +1,55 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +return [ + 'directories' => [ + '.build', + '.git', + '.github', + 'bin', + 'build', + 'public', + 'tailor-version-upload', + 'tests', + 'vendor', + ], + 'files' => [ + 'DS_Store', + 'CODE_OF_CONDUCT.md', + 'codecov.yml', + 'composer.lock', + 'CONTRIBUTING.md', + 'crowdin.yaml', + 'editorconfig', + 'gitattributes', + 'gitignore', + 'packaging_exclude.php', + 'php-cs-fixer.php', + 'phpstan.neon', + 'phpstan-baseline.neon', + 'phpunit.functional.xml', + 'phpunit.unit.xml', + 'rector.php', + 'renovate.json', + ], +]; diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..41cd111 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,6 @@ +parameters: + ignoreErrors: + - + message: "#^While loop condition is always true\\.$#" + count: 1 + path: Classes/Command/ListQueueCommand.php diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..1f74bf1 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,14 @@ +includes: + - .Build/vendor/phpstan/phpstan/conf/bleedingEdge.neon + - phpstan-baseline.neon +parameters: + level: max + paths: + - Classes + - Configuration + - Tests + featureToggles: + # Avoids errors with $GLOBALS['TYPO3_CONF_VARS'] access + explicitMixedForGlobalVariables: false + symfony: + consoleApplicationLoader: Tests/Build/console-application.php diff --git a/phpunit.functional.xml b/phpunit.functional.xml new file mode 100644 index 0000000..31c1a46 --- /dev/null +++ b/phpunit.functional.xml @@ -0,0 +1,26 @@ + + + + + Classes + + + + + + + + + + Tests/Functional + + + + + + diff --git a/phpunit.unit.xml b/phpunit.unit.xml new file mode 100644 index 0000000..ed45dc8 --- /dev/null +++ b/phpunit.unit.xml @@ -0,0 +1,26 @@ + + + + + Classes + + + + + + + + + + Tests/Unit + + + + + + diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..c98b631 --- /dev/null +++ b/rector.php @@ -0,0 +1,48 @@ + + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +use Rector\Config\RectorConfig; +use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector; +use Rector\PostRector\Rector\NameImportingPostRector; +use Rector\Set\ValueObject\LevelSetList; +use Rector\ValueObject\PhpVersion; +use Ssch\TYPO3Rector\Set\Typo3LevelSetList; + +return static function (RectorConfig $rectorConfig): void { + $rectorConfig->paths([ + __DIR__ . '/Classes', + __DIR__ . '/Configuration', + ]); + + $rectorConfig->skip([ + AddLiteralSeparatorToNumberRector::class, + NameImportingPostRector::class, + ]); + + $rectorConfig->phpVersion(PhpVersion::PHP_81); + + $rectorConfig->sets([ + LevelSetList::UP_TO_PHP_81, + Typo3LevelSetList::UP_TO_TYPO3_11, + ]); +}; diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..2fcb363 --- /dev/null +++ b/renovate.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>CPS-IT/renovate-config", + "local>CPS-IT/renovate-config:typo3-extension" + ], + "assignees": [ + "eliashaeussler" + ], + "constraints": { + "php": "8.1.*" + } +}