diff --git a/.env.dist b/.env.dist new file mode 100644 index 000000000..291308b17 --- /dev/null +++ b/.env.dist @@ -0,0 +1,7 @@ +COMPOSE_PROJECT_NAME=yii-demo + +REGISTRY=localhost +DOMAIN=yii-demo.localhost +SUPPORT_EMAIL=team@yiiframework.com +# Get short image tag git rev-parse --short HEAD +IMAGE_TAG=00001 diff --git a/.env.test b/.env.test deleted file mode 100644 index 454ab1431..000000000 --- a/.env.test +++ /dev/null @@ -1,3 +0,0 @@ -YII_ENV=test -YII_DEBUG=false -SENTRY_DSN= diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index 803e0007b..eb64a8811 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -61,7 +61,7 @@ the project's leadership. This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4.0, available at -[http://contributor-covenant.org/version/1/4/][version] +[https://contributor-covenant.org/version/1/4/][version] -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ +[homepage]: https://contributor-covenant.org +[version]: https://contributor-covenant.org/version/1/4/ diff --git a/.github/workflows/blog-api_build.yml b/.github/workflows/blog-api_build.yml new file mode 100644 index 000000000..efe9c8cc2 --- /dev/null +++ b/.github/workflows/blog-api_build.yml @@ -0,0 +1,99 @@ +defaults: + run: + working-directory: blog-api +on: + pull_request: + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/infection.json.dist' + - 'blog-api/psalm.xml' + + push: + branches: ['master'] + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/infection.json.dist' + - 'blog-api/psalm.xml' + + schedule: + - cron: '0 0 * * *' + +name: blog-api build + +jobs: + tests: + name: PHP ${{ matrix.php }}-${{ matrix.os }} + + env: + extensions: fileinfo, pdo, pdo_sqlite, intl, pcntl + key: cache-v1 + YII_C3: true + working_directory: blog-api + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: + - ubuntu-latest + - windows-latest + + php: + - 8.3 + + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + working-directory: ${{ env.working_directory }} + + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: ${{ env.extensions }} + ini-values: date.timezone='UTC' + tools: composer:v2 + coverage: pcov + working-directory: ${{ env.working_directory }} + + - name: Determine composer cache directory on Linux + if: matrix.os == 'ubuntu-latest' + run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} + + - name: Determine composer cache directory on Windows + if: matrix.os == 'windows-latest' + run: echo "COMPOSER_CACHE_DIR=~\AppData\Local\Composer" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + working-directory: ${{ env.working_directory }} + + - name: Cache dependencies installed with composer + uses: actions/cache@v3 + with: + path: ${{ env.COMPOSER_CACHE_DIR }} + key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} + + - name: Update composer + run: composer self-update + working-directory: ${{ env.working_directory }} + + - name: Install dependencies with composer + run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + working-directory: ${{ env.working_directory }} + + - name: Run tests codeception + run: vendor/bin/codecept run + working-directory: ${{ env.working_directory }} diff --git a/.github/workflows/blog-api_dependency.yml b/.github/workflows/blog-api_dependency.yml new file mode 100644 index 000000000..d526f88f4 --- /dev/null +++ b/.github/workflows/blog-api_dependency.yml @@ -0,0 +1,87 @@ +defaults: + run: + working-directory: blog-api +on: + pull_request: + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/phpunit.xml.dist' + - 'blog-api/psalm.xml' + + push: + branches: ['master'] + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/phpunit.xml.dist' + - 'blog-api/psalm.xml' + + schedule: + - cron: '0 0 * * *' + +name: blog-api dependency checker + +jobs: + mutation: + name: PHP ${{ matrix.php }}-${{ matrix.os }} + + env: + working_directory: blog-api + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: + - ubuntu-latest + + php: + - 8.3 + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + working-directory: ${{ env.working_directory }} + + - name: Install PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: composer:v2, cs2pr + coverage: none + working-directory: ${{ env.working_directory }} + + - name: Determine composer cache directory + run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} + + - name: Cache dependencies installed with composer + uses: actions/cache@v3 + with: + path: ${{ env.COMPOSER_CACHE_DIR }} + key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} + + - name: Update composer + run: composer self-update + working-directory: ${{ env.working_directory }} + + - name: Install maglnet/composer-require-checker + run: composer require maglnet/composer-require-checker:^4.0 + working-directory: ${{ env.working_directory }} + + - name: Check dependency + run: vendor/bin/composer-require-checker + working-directory: ${{ env.working_directory }} diff --git a/.github/workflows/blog-api_static.yml b/.github/workflows/blog-api_static.yml new file mode 100644 index 000000000..a03440643 --- /dev/null +++ b/.github/workflows/blog-api_static.yml @@ -0,0 +1,87 @@ +defaults: + run: + working-directory: blog-api +on: + pull_request: + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/infection.json.dist' + - 'blog-api/phpunit.xml.dist' + + push: + branches: ['master'] + paths-ignore: + - 'blog-api/docs/**' + - 'blog-api/README.md' + - 'blog-api/CHANGELOG.md' + - 'blog-api/.gitignore' + - 'blog-api/.env.example' + - 'blog-api/.gitattributes' + - 'blog-api/infection.json.dist' + - 'blog-api/phpunit.xml.dist' + + schedule: + - cron: '0 0 * * *' + +name: blog-api static analysis + +jobs: + mutation: + name: PHP ${{ matrix.php }}-${{ matrix.os }} + + env: + working_directory: blog-api + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: + - ubuntu-latest + + php: + - 8.3 + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + working-directory: ${{ env.working_directory }} + + - name: Install PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + tools: composer:v2, cs2pr + coverage: none + working-directory: ${{ env.working_directory }} + + - name: Determine composer cache directory + run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} + + - name: Cache dependencies installed with composer + uses: actions/cache@v3 + with: + path: ${{ env.COMPOSER_CACHE_DIR }} + key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: | + php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} + + - name: Update composer + run: composer self-update + working-directory: ${{ env.working_directory }} + + - name: Install dependencies with composer + run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + working-directory: ${{ env.working_directory }} + + - name: Static analysis + run: vendor/bin/psalm --shepherd --stats --output-format=checkstyle | cs2pr --graceful-warnings --colorize + working-directory: ${{ env.working_directory }} diff --git a/.github/workflows/build.yml b/.github/workflows/blog_build.yml similarity index 60% rename from .github/workflows/build.yml rename to .github/workflows/blog_build.yml index 743df91c1..2a5d99df1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/blog_build.yml @@ -1,30 +1,34 @@ +defaults: + run: + working-directory: blog on: pull_request: paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'infection.json.dist' - - 'psalm.xml' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/infection.json.dist' + - 'blog/psalm.xml' push: + branches: ['master'] paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'infection.json.dist' - - 'psalm.xml' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/infection.json.dist' + - 'blog/psalm.xml' schedule: - cron: '0 0 * * *' -name: build +name: blog build jobs: tests: @@ -34,6 +38,7 @@ jobs: extensions: fileinfo, pdo, pdo_sqlite, intl key: cache-v1 YII_C3: true + working_directory: blog runs-on: ${{ matrix.os }} @@ -44,12 +49,13 @@ jobs: - windows-latest php: - - 8.1 - - 8.2 + - 8.3 steps: - name: Checkout uses: actions/checkout@v3 + with: + working-directory: ${{ env.working_directory }} - name: Install PHP with extensions uses: shivammathur/setup-php@v2 @@ -59,14 +65,17 @@ jobs: ini-values: date.timezone='UTC' tools: composer:v2 coverage: pcov + working-directory: ${{ env.working_directory }} - name: Determine composer cache directory on Linux if: matrix.os == 'ubuntu-latest' run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} - name: Determine composer cache directory on Windows if: matrix.os == 'windows-latest' run: echo "COMPOSER_CACHE_DIR=~\AppData\Local\Composer" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + working-directory: ${{ env.working_directory }} - name: Cache dependencies installed with composer uses: actions/cache@v3 @@ -75,21 +84,20 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} + - name: Update composer run: composer self-update + working-directory: ${{ env.working_directory }} - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + working-directory: ${{ env.working_directory }} + + - name: Install dependencies with npm + run: npm update + working-directory: ${{ env.working_directory }} - name: Run tests codeception - if: matrix.os != 'ubuntu-latest' || matrix.php != '8.0' run: vendor/bin/codecept run - - name: Run tests codeception with coverage - if: matrix.os == 'ubuntu-latest' && matrix.php == '8.0' - run: vendor/bin/codecept run --coverage-xml - - - name: Upload coverage to codecov - if: matrix.os == 'ubuntu-latest' && matrix.php == '8.0' - uses: codecov/codecov-action@v3 - with: - file: tests/_output/coverage.xml + working-directory: ${{ env.working_directory }} diff --git a/.github/workflows/dependency.yml b/.github/workflows/blog_dependency.yml similarity index 55% rename from .github/workflows/dependency.yml rename to .github/workflows/blog_dependency.yml index f8854bcfa..ba23cc45e 100644 --- a/.github/workflows/dependency.yml +++ b/.github/workflows/blog_dependency.yml @@ -1,35 +1,42 @@ +defaults: + run: + working-directory: blog on: pull_request: paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'phpunit.xml.dist' - - 'psalm.xml' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/phpunit.xml.dist' + - 'blog/psalm.xml' push: + branches: ['master'] paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'phpunit.xml.dist' - - 'psalm.xml' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/phpunit.xml.dist' + - 'blog/psalm.xml' schedule: - cron: '0 0 * * *' -name: dependency checker +name: blog dependency checker jobs: mutation: name: PHP ${{ matrix.php }}-${{ matrix.os }} + env: + working_directory: blog + runs-on: ${{ matrix.os }} strategy: @@ -38,11 +45,13 @@ jobs: - ubuntu-latest php: - - 8.1 + - 8.3 steps: - name: Checkout uses: actions/checkout@v2 + with: + working-directory: ${{ env.working_directory }} - name: Install PHP uses: shivammathur/setup-php@v2 @@ -50,9 +59,11 @@ jobs: php-version: ${{ matrix.php }} tools: composer:v2, cs2pr coverage: none + working-directory: ${{ env.working_directory }} - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} - name: Cache dependencies installed with composer uses: actions/cache@v3 @@ -61,12 +72,16 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} - name: Update composer run: composer self-update + working-directory: ${{ env.working_directory }} - name: Install maglnet/composer-require-checker run: composer require maglnet/composer-require-checker:^4.0 + working-directory: ${{ env.working_directory }} - name: Check dependency run: vendor/bin/composer-require-checker + working-directory: ${{ env.working_directory }} diff --git a/.github/workflows/static.yml b/.github/workflows/blog_static.yml similarity index 56% rename from .github/workflows/static.yml rename to .github/workflows/blog_static.yml index 8198ef9cc..7307f85d2 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/blog_static.yml @@ -1,35 +1,42 @@ +defaults: + run: + working-directory: blog on: pull_request: paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'infection.json.dist' - - 'phpunit.xml.dist' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/infection.json.dist' + - 'blog/phpunit.xml.dist' push: + branches: ['master'] paths-ignore: - - 'docs/**' - - 'README.md' - - 'CHANGELOG.md' - - '.gitignore' - - '.env.example' - - '.gitattributes' - - 'infection.json.dist' - - 'phpunit.xml.dist' + - 'blog/docs/**' + - 'blog/README.md' + - 'blog/CHANGELOG.md' + - 'blog/.gitignore' + - 'blog/.env.example' + - 'blog/.gitattributes' + - 'blog/infection.json.dist' + - 'blog/phpunit.xml.dist' schedule: - cron: '0 0 * * *' -name: static analysis +name: blog static analysis jobs: mutation: name: PHP ${{ matrix.php }}-${{ matrix.os }} + env: + working_directory: blog + runs-on: ${{ matrix.os }} strategy: @@ -38,11 +45,13 @@ jobs: - ubuntu-latest php: - - 8.1 + - 8.3 steps: - name: Checkout uses: actions/checkout@v2 + with: + working-directory: ${{ env.working_directory }} - name: Install PHP uses: shivammathur/setup-php@v2 @@ -50,9 +59,11 @@ jobs: php-version: ${{ matrix.php }} tools: composer:v2, cs2pr coverage: none + working-directory: ${{ env.working_directory }} - name: Determine composer cache directory run: echo "COMPOSER_CACHE_DIR=$(composer config cache-dir)" >> $GITHUB_ENV + working-directory: ${{ env.working_directory }} - name: Cache dependencies installed with composer uses: actions/cache@v3 @@ -61,12 +72,16 @@ jobs: key: php${{ matrix.php }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: | php${{ matrix.php }}-composer- + working-directory: ${{ env.working_directory }} - name: Update composer run: composer self-update + working-directory: ${{ env.working_directory }} - name: Install dependencies with composer run: composer update --prefer-dist --no-interaction --no-progress --optimize-autoloader --ansi + working-directory: ${{ env.working_directory }} - name: Static analysis run: vendor/bin/psalm --shepherd --stats --output-format=checkstyle | cs2pr --graceful-warnings --colorize + working-directory: ${{ env.working_directory }} diff --git a/.gitignore b/.gitignore index 94819d1f3..d4be79aef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,10 @@ -# IDE & OS files -.*.swp -.DS_Store -.buildpath -.idea -.project -.settings -Thumbs.db -nbproject - -# Binaries -chkipper.phar -composer.phar -ocular.phar -php-cs-fixer.phar -phpstan.phar -phpunit-skelgen.phar -phpunit.phar - -# local config -/.env -/docker-compose.override.yml - -# evolving files -/vendor -/composer.lock -/node_modules - -# Codeception -c3.php +# IDE & OS files +.*.swp +.DS_Store +.buildpath +.idea +.project +.settings +Thumbs.db +nbproject +.env diff --git a/.styleci.yml b/.styleci.yml index 63e26a594..76e29ece8 100644 --- a/.styleci.yml +++ b/.styleci.yml @@ -1,20 +1,16 @@ preset: psr12 risky: true -version: 8 +version: 8.1 finder: exclude: - - docs - - vendor - - resources - - views - - public - - templates - not-name: - - UnionCar.php - - TimerUnionTypes.php - - schema1.php + - "*/docs" + - "*/vendor" + - "*/resources" + - "*/views" + - "*/public" + - "*/templates" enabled: - alpha_ordered_traits @@ -64,7 +60,6 @@ enabled: - phpdoc_order - phpdoc_property - phpdoc_scalar - - phpdoc_separation - phpdoc_singular_inheritdoc - phpdoc_trim - phpdoc_trim_consecutive_blank_line_separation @@ -86,3 +81,9 @@ enabled: - trailing_comma_in_multiline_array - unalign_double_arrow - unalign_equals + - empty_loop_body_braces + - integer_literal_case + - union_type_without_spaces + +disabled: + - function_declaration diff --git a/README.md b/README.md index 37c278ed9..9332a3e38 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,12 @@ -

- - Yii Framework - -

Yii Framework Demo Project

-
-

+Yii 3 Demo Code +=============== -[Yii Framework] is a modern framework designed to be a solid foundation for your PHP application. +This repository contains the code for the Yii 3 demo projects: -It's intended to show and test all Yii features. +Deployment +---------- -[![Latest Stable Version](https://poser.pugx.org/yiisoft/demo/v/stable.png)](https://packagist.org/packages/yiisoft/demo) -[![Total Downloads](https://poser.pugx.org/yiisoft/demo/downloads.png)](https://packagist.org/packages/yiisoft/demo) -[![build](https://github.com/yiisoft/demo/workflows/build/badge.svg)](https://github.com/yiisoft/demo/actions) -[![Code Coverage](https://codecov.io/gh/yiisoft/demo/branch/master/graph/badge.svg?token=dWuz2uAVU2)](https://codecov.io/gh/yiisoft/demo) -[![static analysis](https://github.com/yiisoft/demo/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/demo/actions?query=workflow%3A%22static+analysis%22) -[![type-coverage](https://shepherd.dev/github/yiisoft/demo/coverage.svg)](https://shepherd.dev/github/yiisoft/demo) +### Manually Renew SSL Cert -## Installation - -You'll need at least PHP 8.1. - -1. Clone this repository. -2. Run `composer install` in your project root directory. -3. Run `./yii serve` (on Windows `yii serve`). The application will be started on http://localhost:8080/. -4. Go to the index page. Cycle ORM will create tables, indexes and relations automatically in the configured DB for you. - If you want to disable this behavior then comment out the line with the `Generator\SyncTables::class` in the `config/packges/yiisoft/yii-cycle/params.php`. - In this case you should create migrations to sync changes that you have made to entities with the DB. -5. Run `./yii fixture/add 20` to create some random data. - -## Console - -Console works out of the box and could be executed with `./yii`. - -Some commands: - -```bash -user/create -fixture/add [count] -``` - -In order to register your own commands, add them to `console/params.php`, `console` → `commands` section. - -## Web application - -In order to run the web application, you can either use the built-in web server by running `./yii serve` or you could use a -real web server by pointing it to `/public/index.php`. - -More routes could be added by editing `src/Factory/AppRouterFactory`. - -## Testing - -The template comes with a ready to use [Codeception](https://codeception.com/) configuration. -In order to execute tests run the following command: - -``` -composer run serve 127.0.0.1:8080 > ./runtime/yii.log 2>&1 & -vendor/bin/codecept run -``` - -### Static analysis - -The code is statically analyzed with [Psalm](https://psalm.dev/). To run static analysis: - -```shell -./vendor/bin/psalm -``` - -### Support the project - -[![Open Collective](https://img.shields.io/badge/Open%20Collective-sponsor-7eadf1?logo=open%20collective&logoColor=7eadf1&labelColor=555555)](https://opencollective.com/yiisoft) - -### Follow updates - -[![Official website](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](https://www.yiiframework.com/) -[![Twitter](https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555?style=flat)](https://twitter.com/yiiframework) -[![Telegram](https://img.shields.io/badge/telegram-join-1DA1F2?style=flat&logo=telegram)](https://t.me/yii3en) -[![Facebook](https://img.shields.io/badge/facebook-join-1DA1F2?style=flat&logo=facebook&logoColor=ffffff)](https://www.facebook.com/groups/yiitalk) -[![Slack](https://img.shields.io/badge/slack-join-1DA1F2?style=flat&logo=slack)](https://yiiframework.com/go/slack) - -## License - -The Yii Framework Demo Project is free software. It is released under the terms of the BSD License. -Please see [`LICENSE`](./LICENSE.md) for more information. - -Maintained by [Yii Software](https://www.yiiframework.com/). + docker-compose run certbot + docker-compose restart gateway diff --git a/ansible/.gitignore b/ansible/.gitignore new file mode 100644 index 000000000..1ba9c4b7b --- /dev/null +++ b/ansible/.gitignore @@ -0,0 +1 @@ +hosts.yml diff --git a/ansible/Makefile b/ansible/Makefile new file mode 100644 index 000000000..bc2067bb2 --- /dev/null +++ b/ansible/Makefile @@ -0,0 +1,11 @@ +server: + python3 -m ansible playbook -i hosts.yml server.yml -vv + +deploy: + python3 -m ansible playbook -i hosts.yml deploy.yml -vv + +authorize: + python3 -m ansible playbook -i hosts.yml authorize.yml + +certbot: + python3 -m ansible playbook -i hosts.yml certbot.yml diff --git a/ansible/authorize.yml b/ansible/authorize.yml new file mode 100644 index 000000000..eaf41823d --- /dev/null +++ b/ansible/authorize.yml @@ -0,0 +1,14 @@ +--- +- name: Add authorized key + hosts: all + remote_user: root + tasks: + - name: Add user authorized key + authorized_key: + user: deploy + key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" + +- name: Add deploy user to the sudoers + copy: + dest: "/etc/sudoers.d/deploy" + content: "deploy ALL=(ALL) NOPASSWD: ALL" diff --git a/ansible/certbot.yml b/ansible/certbot.yml new file mode 100644 index 000000000..3f8894e00 --- /dev/null +++ b/ansible/certbot.yml @@ -0,0 +1,6 @@ +--- +- name: Renew certificates + hosts: all + remote_user: root + roles: + - certbot diff --git a/ansible/deploy.yml b/ansible/deploy.yml new file mode 100644 index 000000000..870ca3e5c --- /dev/null +++ b/ansible/deploy.yml @@ -0,0 +1,6 @@ +--- +- name: Deploy services + hosts: all + remote_user: root + roles: + - deploy diff --git a/ansible/hosts.yml.dist b/ansible/hosts.yml.dist new file mode 100644 index 000000000..9a86cca33 --- /dev/null +++ b/ansible/hosts.yml.dist @@ -0,0 +1,7 @@ +all: + hosts: + demo.yiiframework.com: + ansible_connection: ssh + ansible_user: root + ansible_host: 0.0.0.0 + ansible_port: 22 diff --git a/ansible/roles/certbot/tasks/generate_dhparam.yml b/ansible/roles/certbot/tasks/generate_dhparam.yml new file mode 100644 index 000000000..c2f2f22d7 --- /dev/null +++ b/ansible/roles/certbot/tasks/generate_dhparam.yml @@ -0,0 +1,12 @@ +--- +- name: Create folder + file: + path: /home/deploy/demo.yiiframework.com/var/ssl/dhparam + state: directory + recurse: true + +- name: Generate dhparam + command: openssl dhparam -out ./var/ssl/dhparam/dhparam-2048.pem 2048 + args: + chdir: /home/deploy/demo.yiiframework.com + creates: ./var/ssl/dhparam/dhparam-2048.pem \ No newline at end of file diff --git a/ansible/roles/certbot/tasks/main.yml b/ansible/roles/certbot/tasks/main.yml new file mode 100644 index 000000000..1d3a88704 --- /dev/null +++ b/ansible/roles/certbot/tasks/main.yml @@ -0,0 +1,2 @@ +- import_tasks: generate_dhparam.yml +- import_tasks: update_certificates.yml diff --git a/ansible/roles/certbot/tasks/update_certificates.yml b/ansible/roles/certbot/tasks/update_certificates.yml new file mode 100644 index 000000000..7dc919a9f --- /dev/null +++ b/ansible/roles/certbot/tasks/update_certificates.yml @@ -0,0 +1,38 @@ +--- +- name: Up docker services + become: true + become_user: deploy + args: + chdir: /home/deploy/demo.yiiframework.com + shell: docker-compose -f docker-compose.yml up certbot + register: output + +- debug: + var: output.stdout_lines + +- name: Reload nginx service + become: true + become_user: deploy + args: + chdir: /home/deploy/demo.yiiframework.com + shell: docker-compose -f docker-compose.yml exec gateway nginx -t && docker-compose -f docker-compose.yml exec gateway nginx -s reload + +# Crontab file location is /var/spool/cron/crontabs/deploy +# Every 2nd month on 15th day of month +# See https://crontab.guru/#0_0_15_*/2_* +- name: Set periodic certificates update + cron: + name: certbot-renew + user: deploy + minute: '0' + hour: '0' + day: '15' + month: '*/2' + job: > + /bin/bash -c " + cd /home/deploy/demo.yiiframework.com && + docker-compose -f docker-compose.yml up certbot && + sleep 180 && + docker-compose -f docker-compose.yml exec -T gateway nginx -t && + docker-compose -f docker-compose.yml exec -T gateway nginx -s reload + " diff --git a/ansible/roles/deploy/tasks/deploy.yml b/ansible/roles/deploy/tasks/deploy.yml new file mode 100644 index 000000000..7dbdcea21 --- /dev/null +++ b/ansible/roles/deploy/tasks/deploy.yml @@ -0,0 +1,17 @@ +--- +- name: Chown + file: + path: "{{ item }}" + recurse: true + owner: deploy + group: deploy + loop: + - /home/deploy/demo.yiiframework.com/blog + - /home/deploy/demo.yiiframework.com/blog-api + +- name: Run `docker-compose up` + become: true + become_user: deploy + args: + chdir: ~/demo.yiiframework.com + shell: docker-compose -f docker-compose.yml up -d --build diff --git a/ansible/roles/deploy/tasks/main.yml b/ansible/roles/deploy/tasks/main.yml new file mode 100644 index 000000000..b647b2e4c --- /dev/null +++ b/ansible/roles/deploy/tasks/main.yml @@ -0,0 +1 @@ +- import_tasks: deploy.yml diff --git a/ansible/roles/server/handlers/main.yml b/ansible/roles/server/handlers/main.yml new file mode 100644 index 000000000..96f76bca7 --- /dev/null +++ b/ansible/roles/server/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: Start docker on system boot + systemd: + name: docker + state: started + enabled: yes diff --git a/ansible/roles/server/tasks/create_user.yml b/ansible/roles/server/tasks/create_user.yml new file mode 100644 index 000000000..e4458e1d4 --- /dev/null +++ b/ansible/roles/server/tasks/create_user.yml @@ -0,0 +1,14 @@ +--- +- name: Create deploy user + vars: + newpassword: "SomEP@$$w0rd" + user: + name: deploy + password: "{{ newpassword }}" + update_password: always + groups: + - docker + - www-data + state: present + shell: /bin/bash + diff --git a/ansible/roles/server/tasks/install_dependencies.yml b/ansible/roles/server/tasks/install_dependencies.yml new file mode 100644 index 000000000..3628608e3 --- /dev/null +++ b/ansible/roles/server/tasks/install_dependencies.yml @@ -0,0 +1,12 @@ +--- +- name: Install `passlib` for Python + pip: + name: + - passlib + state: present + +- name: Install `composer` into system + apt: + name: + - composer + state: present \ No newline at end of file diff --git a/ansible/roles/server/tasks/install_docker.yml b/ansible/roles/server/tasks/install_docker.yml new file mode 100644 index 000000000..72a904348 --- /dev/null +++ b/ansible/roles/server/tasks/install_docker.yml @@ -0,0 +1,56 @@ +--- +- name: Install `docker` dependencies + apt: + name: + - apt-transport-https + - ca-certificates + - curl + - software-properties-common + state: present + update_cache: yes + +- name: Add GPG key + apt_key: + url: https://download.docker.com/linux/debian/gpg + state: present + +- name: Verify fingerprint + apt_key: + id: 0EBFCD88 + state: present + +- name: Set up the repository + apt_repository: + repo: deb [arch=amd64] https://download.docker.com/linux/debian stretch stable + state: present + filename: docker + update_cache: yes + +- name: Install `docker` + apt: + name: docker-ce + state: present + update_cache: yes + notify: Start docker on boot + +- name: Install `docker-compose` + get_url: + url: https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }} + dest: /usr/local/bin/docker-compose + group: docker + mode: 'u+x,g+x' + +- name: Set periodic Docker prune + cron: + name: docker-prune + job: 'docker system prune -af --filter "until=$((30*24))h"' + minute: '0' + hour: '1' + +- name: Remove useless packages + apt: + autoclean: yes + +- name: Remove useless dependencies + apt: + autoremove: yes diff --git a/ansible/roles/server/tasks/install_docker_sdk.yml b/ansible/roles/server/tasks/install_docker_sdk.yml new file mode 100644 index 000000000..9f4446707 --- /dev/null +++ b/ansible/roles/server/tasks/install_docker_sdk.yml @@ -0,0 +1,16 @@ +--- +- name: Install Docker SDK dependencies + apt: + name: + - python3-pip + - python-setuptools + - virtualenv + state: present + update_cache: yes + +- name: Install Docker SDK for Python + pip: + name: + - docker + state: present + diff --git a/ansible/roles/server/tasks/main.yml b/ansible/roles/server/tasks/main.yml new file mode 100644 index 000000000..aca866440 --- /dev/null +++ b/ansible/roles/server/tasks/main.yml @@ -0,0 +1,5 @@ +- import_tasks: swap.yml +- import_tasks: install_dependencies.yml +- import_tasks: install_docker.yml +- import_tasks: install_docker_sdk.yml +- import_tasks: create_user.yml diff --git a/ansible/roles/server/tasks/swap.yml b/ansible/roles/server/tasks/swap.yml new file mode 100644 index 000000000..f407a3f2a --- /dev/null +++ b/ansible/roles/server/tasks/swap.yml @@ -0,0 +1,39 @@ +--- +- name: Check whether swap is already enabled or not + shell: cat /etc/sysctl.conf + register: swap_enabled + +- block: + - name: create swap file + command: dd if=/dev/zero of=/swapfile bs=1G count=8 + + - name: change permission type + file: path=/swapfile mode=600 state=file + + - name: setup swap + command: mkswap /swapfile + + - name: create swap + command: swapon /swapfile + + - name: Add to fstab + lineinfile: + path: /etc/fstab + regexp: "swapfile" + line: "/swapfile none swap sw 0 0" + state: present + + - name: start swap + command: swapon -a + + - name: set swapiness + sysctl: + name: vm.swappiness + value: "10" + + - name: set swapiness + sysctl: + name: vm.vfs_cache_pressure + value: "50" + + when: swap_enabled.stdout.find('swappiness') == -1 \ No newline at end of file diff --git a/ansible/server.yml b/ansible/server.yml new file mode 100644 index 000000000..cdd26f9b8 --- /dev/null +++ b/ansible/server.yml @@ -0,0 +1,6 @@ +--- +- name: Setup server + hosts: all + remote_user: root + roles: + - server diff --git a/blog-api/.dockerignore b/blog-api/.dockerignore new file mode 100644 index 000000000..24e04c973 --- /dev/null +++ b/blog-api/.dockerignore @@ -0,0 +1,3 @@ +runtime/ +!runtime/.gitignore +vendor/ diff --git a/.editorconfig b/blog-api/.editorconfig similarity index 69% rename from .editorconfig rename to blog-api/.editorconfig index 5e9a93ea5..8802775ba 100644 --- a/.editorconfig +++ b/blog-api/.editorconfig @@ -10,6 +10,10 @@ indent_style = space indent_size = 4 trim_trailing_whitespace = true +[*.php] +ij_php_space_before_short_closure_left_parenthesis = false +ij_php_space_after_type_cast = true + [*.md] trim_trailing_whitespace = false diff --git a/blog-api/.env.example b/blog-api/.env.example new file mode 100644 index 000000000..430164434 --- /dev/null +++ b/blog-api/.env.example @@ -0,0 +1,3 @@ +YII_ENV= +YII_DEBUG=true +BASE_URL=/blog-api diff --git a/blog-api/.env.test b/blog-api/.env.test new file mode 100644 index 000000000..881657317 --- /dev/null +++ b/blog-api/.env.test @@ -0,0 +1,3 @@ +YII_ENV=test +YII_DEBUG=true +BASE_URL=/ diff --git a/.gitattributes b/blog-api/.gitattributes similarity index 100% rename from .gitattributes rename to blog-api/.gitattributes diff --git a/blog-api/.gitignore b/blog-api/.gitignore new file mode 100644 index 000000000..c1cab5794 --- /dev/null +++ b/blog-api/.gitignore @@ -0,0 +1,37 @@ +# phpstorm project files +.idea + +# netbeans project files +nbproject + +# zend studio for eclipse project files +.buildpath +.project +.settings + +# windows thumbnail cache +Thumbs.db + +# composer vendor dir +/vendor + +# composer itself is not needed +composer.phar + +# Mac DS_Store Files +.DS_Store + +# phpunit itself is not needed +phpunit.phar +# local phpunit config +/phpunit.xml +# phpunit cache +.phpunit.result.cache + +# Codeception +c3.php + +#tests +tests/Support/Data/database.db_snapshot + +.env diff --git a/.phpunit-watcher.yml b/blog-api/.phpunit-watcher.yml similarity index 100% rename from .phpunit-watcher.yml rename to blog-api/.phpunit-watcher.yml diff --git a/blog-api/CHANGELOG.md b/blog-api/CHANGELOG.md new file mode 100644 index 000000000..b3d52d63f --- /dev/null +++ b/blog-api/CHANGELOG.md @@ -0,0 +1,5 @@ +# Change Log + +## 1.0.0 under development + +- Initial release. diff --git a/LICENSE.md b/blog-api/LICENSE.md similarity index 100% rename from LICENSE.md rename to blog-api/LICENSE.md diff --git a/blog-api/Makefile b/blog-api/Makefile new file mode 100644 index 000000000..ea6f8e855 --- /dev/null +++ b/blog-api/Makefile @@ -0,0 +1,19 @@ +init: composer-update up + +up: + docker-compose up -d +down: + docker-compose down + +composer: + docker-compose run php composer $(filter-out $@, $(MAKECMDGOALS)) +composer-update: + docker-compose run php composer update + +yii3: + docker-compose run php ./yii $(filter-out $@, $(MAKECMDGOALS)) + +test: + docker-compose run php ./vendor/bin/codecept run +psalm: + docker-compose run php ./vendor/bin/psalm diff --git a/blog-api/README.md b/blog-api/README.md new file mode 100644 index 000000000..ddb3136d6 --- /dev/null +++ b/blog-api/README.md @@ -0,0 +1,64 @@ +

+ + Yii + +

Yii Framework API Demo Project

+
+

+ +[![Latest Stable Version](https://poser.pugx.org/yiisoft/demo-api/v/stable.png)](https://packagist.org/packages/yiisoft/demo-api) +[![Total Downloads](https://poser.pugx.org/yiisoft/demo-api/downloads.png)](https://packagist.org/packages/yiisoft/demo-api) +[![Build status](https://github.com/yiisoft/demo-api/workflows/build/badge.svg)](https://github.com/yiisoft/demo-api/actions?query=workflow%3Abuild) +[![static analysis](https://github.com/yiisoft/demo-api/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/demo-api/actions?query=workflow%3A%22static+analysis%22) + +API Demo application for Yii 3. + +## Installation + +Install docker: + +```bash +docker-compose up -d +``` + +Enter into the container: + +```bash +docker exec -it yii-php bash +``` + +Install packages: + +```bash +composer install +``` + +Change ownership of the app directory to web group: + +```bash +chown -R :www-data . +``` + +Usually the application is available at . + +Authorization is performed via the `X-Api-Key` header. + +## API documentation + +API documentation is available at `/docs`. It is built from OpenAPI attributes (`#[OA\ ... ]`). +See [Swagger-PHP documentation](https://zircote.github.io/swagger-php/Getting-started.html#write-annotations) for details +on how to annotate your code. + +## Codeception testing + +```php +./vendor/bin/codecept run +``` + +## Static analysis + +The code is statically analyzed with [Psalm](https://psalm.dev/). To run static analysis: + +```php +./vendor/bin/psalm +``` diff --git a/autoload.php b/blog-api/autoload.php similarity index 83% rename from autoload.php rename to blog-api/autoload.php index 2e5eee2a3..ccfe29cdb 100644 --- a/autoload.php +++ b/blog-api/autoload.php @@ -9,7 +9,7 @@ $dotenv = Dotenv::createImmutable(__DIR__); $dotenv->load(); -$_ENV['YII_ENV'] = empty($_ENV['YII_ENV']) ? null : (string)$_ENV['YII_ENV']; +$_ENV['YII_ENV'] = empty($_ENV['YII_ENV']) ? null : (string) $_ENV['YII_ENV']; $_SERVER['YII_ENV'] = $_ENV['YII_ENV']; $_ENV['YII_DEBUG'] = filter_var( diff --git a/blog-api/codeception.yml b/blog-api/codeception.yml new file mode 100644 index 000000000..15aeb36eb --- /dev/null +++ b/blog-api/codeception.yml @@ -0,0 +1,24 @@ +namespace: App\Tests +support_namespace: Support +paths: + tests: tests + output: runtime/tests/_output + data: tests/Support/Data + support: tests/Support + envs: tests/Support/Envs +actor_suffix: Tester +extensions: + enabled: + - Codeception\Extension\RunFailed +settings: + suite_class: \PHPUnit_Framework_TestSuite + memory_limit: 1024M + colors: true +coverage: + enabled: true + whitelist: + include: + - src/* +params: + - .env + - .env.test diff --git a/blog-api/composer.json b/blog-api/composer.json new file mode 100644 index 000000000..b0d568068 --- /dev/null +++ b/blog-api/composer.json @@ -0,0 +1,138 @@ +{ + "name": "yiisoft/demo-api", + "type": "project", + "description": "Yii Framework API project template", + "keywords": [ + "yii3", + "app", + "api", + "rest" + ], + "homepage": "https://github.com/yiisoft/demo-api/", + "license": "BSD-3-Clause", + "support": { + "issues": "https://github.com/yiisoft/demo-api/issues?state=open", + "forum": "https://www.yiiframework.com/forum/", + "wiki": "https://www.yiiframework.com/wiki/", + "irc": "ircs://irc.libera.chat:6697/yii", + "source": "https://github.com/yiisoft/demo-api" + }, + "minimum-stability": "dev", + "prefer-stable": true, + "require": { + "php": "8.3.*", + "ext-intl": "*", + "cebe/markdown": "^1.2@dev", + "cycle/annotated": "^3.5", + "cycle/database": "^2.0", + "cycle/entity-behavior": "^1.0", + "cycle/orm": "^2.0", + "doctrine/collections": "^2.0", + "httpsoft/http-message": "^1.1", + "myclabs/php-enum": "^1.7", + "psr/container": "^1.0|^2.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": "^3.0", + "vlucas/phpdotenv": "^5.3", + "yiisoft/access": "^1.0", + "yiisoft/auth": "^3.0", + "yiisoft/cache": "^3.0", + "yiisoft/cache-file": "^3.0", + "yiisoft/config": "^1.0", + "yiisoft/data": "dev-master", + "yiisoft/data-cycle": "dev-master", + "yiisoft/data-response": "^2.0", + "yiisoft/definitions": "^3.0", + "yiisoft/di": "^1.0", + "yiisoft/error-handler": "^3.0", + "yiisoft/factory": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/http": "^1.2", + "yiisoft/hydrator-validator": "^2.0", + "yiisoft/injector": "^1.0", + "yiisoft/input-http": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/middleware-dispatcher": "^5.1", + "yiisoft/request-body-parser": "^1.1", + "yiisoft/router": "^3.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/security": "^1.0", + "yiisoft/translator": "^3.0", + "yiisoft/translator-message-php": "^1.1", + "yiisoft/user": "^2.0", + "yiisoft/validator": "^2.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-cycle": "^1.0", + "yiisoft/yii-debug": "dev-master", + "yiisoft/yii-event": "^2.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-middleware": "^1.0", + "yiisoft/queue": "3.0.x-dev", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0", + "yiisoft/yii-swagger": "^2.0", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "codeception/c3": "^2.6", + "codeception/codeception": "^5.0", + "codeception/lib-innerbrowser": "^3.1", + "codeception/module-asserts": "^3.0", + "codeception/module-cli": "^2.0", + "codeception/module-db": "^3.0", + "codeception/module-phpbrowser": "^3.0", + "codeception/module-rest": "^3.1", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "roave/security-advisories": "dev-latest", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18", + "yiisoft/json": "^1.0", + "yiisoft/yii-debug-api": "^3.0@dev", + "yiisoft/yii-debug-viewer": "^3.0@dev", + "yiisoft/yii-gii": "dev-master", + "yiisoft/yii-testing": "dev-master" + }, + "autoload": { + "psr-4": { + "App\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests/", + "App\\Tests\\Acceptance\\": "tests/acceptance/" + } + }, + "scripts": { + "serve": "./yii serve", + "post-update-cmd": [ + "App\\Installer::postUpdate", + "App\\Installer::copyEnvFile" + ], + "post-create-project-cmd": [ + "App\\Installer::copyEnvFile" + ], + "test": "codecept run", + "test-watch": "phpunit-watcher watch" + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + }, + "config-plugin-file": "configuration.php" + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "codeception/c3": true, + "infection/extension-installer": true, + "composer/package-versions-deprecated": true, + "yiisoft/config": true + } + } +} diff --git a/blog-api/composer.lock b/blog-api/composer.lock new file mode 100644 index 000000000..455cc220c --- /dev/null +++ b/blog-api/composer.lock @@ -0,0 +1,16826 @@ +{ + "_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": "dc4fd69b5a2310f8fdc45cd66be2b5ee", + "packages": [ + { + "name": "alexkart/curl-builder", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/alexkart/curl-builder.git", + "reference": "626cf95a84a37b6e1643675f7fc4acfc2f90dbfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alexkart/curl-builder/zipball/626cf95a84a37b6e1643675f7fc4acfc2f90dbfb", + "reference": "626cf95a84a37b6e1643675f7fc4acfc2f90dbfb", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/http-message": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.3", + "phan/phan": "^5.4", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Alexkart\\CurlBuilder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Kartavenko", + "email": "askemailbox@gmail.com" + } + ], + "description": "PSR-7 compatible curl builder.", + "support": { + "issues": "https://github.com/alexkart/curl-builder/issues", + "source": "https://github.com/alexkart/curl-builder/tree/1.0.8" + }, + "time": "2023-05-29T13:44:51+00:00" + }, + { + "name": "cebe/markdown", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/cebe/markdown.git", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "shasum": "" + }, + "require": { + "lib-pcre": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "cebe/indent": "*", + "facebook/xhprof": "*@dev", + "phpunit/phpunit": "4.1.*" + }, + "bin": [ + "bin/markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "cebe\\markdown\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Creator" + } + ], + "description": "A super fast, highly extensible markdown parser for PHP", + "homepage": "https://github.com/cebe/markdown#readme", + "keywords": [ + "extensible", + "fast", + "gfm", + "markdown", + "markdown-extra" + ], + "support": { + "issues": "https://github.com/cebe/markdown/issues", + "source": "https://github.com/cebe/markdown" + }, + "time": "2018-03-26T11:24:36+00:00" + }, + { + "name": "cycle/annotated", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/annotated.git", + "reference": "4024d2ea9b5656cdd0bf4e79acc485dc063b8273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/annotated/zipball/4024d2ea9b5656cdd0bf4e79acc485dc063b8273", + "reference": "4024d2ea9b5656cdd0bf4e79acc485dc063b8273", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "doctrine/annotations": "^1.14.3 || ^2.0.1", + "doctrine/inflector": "^2.0", + "php": ">=8.0", + "spiral/attributes": "^2.8|^3.0", + "spiral/tokenizer": "^2.8|^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Annotated\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Annotated Entities generator", + "support": { + "issues": "https://github.com/cycle/annotated/issues", + "source": "https://github.com/cycle/annotated/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://github.com/cycle", + "type": "github" + } + ], + "time": "2024-02-08T21:32:45+00:00" + }, + { + "name": "cycle/database", + "version": "2.11.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/database.git", + "reference": "5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/database/zipball/5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7", + "reference": "5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "php": ">=8.0", + "psr/log": "1 - 3", + "spiral/core": "^2.8 || ^3.0", + "spiral/pagination": "^2.8 || ^3.0", + "symfony/polyfill-php83": "^1.28" + }, + "conflict": { + "spiral/database": "*" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.42", + "infection/infection": "^0.26.10", + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5", + "spiral/tokenizer": "^2.14 || ^3.0", + "vimeo/psalm": "^5.18" + }, + "type": "library", + "autoload": { + "files": [ + "src/polyfill.php", + "src/functions_polyfill.php" + ], + "psr-4": { + "Cycle\\Database\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + } + ], + "description": "DBAL, schema introspection, migration and pagination", + "homepage": "https://cycle-orm.dev", + "keywords": [ + "database", + "dbal", + "mssql", + "mysql", + "orm", + "postgresql", + "query-builder", + "sql", + "sqlite" + ], + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/database/issues", + "source": "https://github.com/cycle/database" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-06-11T11:30:02+00:00" + }, + { + "name": "cycle/entity-behavior", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/cycle/entity-behavior.git", + "reference": "9b7ad13a68a0ea0dca0399b7f44f20b691a18120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/entity-behavior/zipball/9b7ad13a68a0ea0dca0399b7f44f20b691a18120", + "reference": "9b7ad13a68a0ea0dca0399b7f44f20b691a18120", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "php": ">=8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "cycle/annotated": "^3.0", + "phpunit/phpunit": "^9.5", + "ramsey/uuid": "^4.5", + "spiral/tokenizer": "^2.8 || ^3.0", + "vimeo/psalm": "^5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\ORM\\Entity\\Behavior\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Provides a collection of attributes that add behaviors to Cycle ORM entities", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/entity-behavior/issues", + "source": "https://github.com/cycle/entity-behavior" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-08-09T11:47:14+00:00" + }, + { + "name": "cycle/migrations", + "version": "v4.2.3", + "source": { + "type": "git", + "url": "https://github.com/cycle/migrations.git", + "reference": "434b08be175bf87f920651b9f6d91fc1cb7ed3ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/migrations/zipball/434b08be175bf87f920651b9f6d91fc1cb7ed3ba", + "reference": "434b08be175bf87f920651b9f6d91fc1cb7ed3ba", + "shasum": "" + }, + "require": { + "cycle/database": "^2.7.0", + "php": ">=8.1", + "spiral/core": "^3.0", + "spiral/files": "^3.0", + "spiral/reactor": "^3.0", + "spiral/tokenizer": "^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Migrations\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Database migrations, migration scaffolding", + "support": { + "issues": "https://github.com/cycle/migrations/issues", + "source": "https://github.com/cycle/migrations/tree/v4.2.3" + }, + "time": "2024-01-25T10:49:43+00:00" + }, + { + "name": "cycle/orm", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/orm.git", + "reference": "23023be5e8452c1e5b05417f9c4539db71d60927" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/orm/zipball/23023be5e8452c1e5b05417f9c4539db71d60927", + "reference": "23023be5e8452c1e5b05417f9c4539db71d60927", + "shasum": "" + }, + "require": { + "cycle/database": "^2.8.1", + "doctrine/instantiator": "^1.3.1 || ^2.0", + "ext-pdo": "*", + "php": ">=8.0", + "spiral/core": "^2.8 || ^3.0" + }, + "require-dev": { + "doctrine/collections": "^1.6 || ^2.0", + "illuminate/collections": "^8.0", + "loophp/collection": "^6.0 || ^7.0", + "mockery/mockery": "^1.1", + "phpunit/phpunit": "^9.5", + "ramsey/uuid": "^4.0", + "spiral/tokenizer": "^2.8 || ^3.0", + "symfony/var-dumper": "^5.2 || ^6.0 || ^7.0", + "vimeo/psalm": "5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\ORM\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "PHP DataMapper ORM and Data Modelling Engine", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/orm/issues", + "source": "https://github.com/cycle/orm" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-06-05T13:14:36+00:00" + }, + { + "name": "cycle/schema-builder", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-builder.git", + "reference": "413af8fc8f93c6e48cebc76ab6c37c65fe2cab63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-builder/zipball/413af8fc8f93c6e48cebc76ab6c37c65fe2cab63", + "reference": "413af8fc8f93c6e48cebc76ab6c37c65fe2cab63", + "shasum": "" + }, + "require": { + "cycle/database": "^2.7.1", + "cycle/orm": "^2.7", + "php": ">=8.0", + "yiisoft/friendly-exception": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "spiral/tokenizer": "^2.8", + "symfony/console": "^6.0 || ^7.0", + "vimeo/psalm": "^5.12" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cycle\\Schema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Schema Builder", + "support": { + "issues": "https://github.com/cycle/schema-builder/issues", + "source": "https://github.com/cycle/schema-builder/tree/v2.9.0" + }, + "time": "2024-07-10T16:20:17+00:00" + }, + { + "name": "cycle/schema-migrations-generator", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-migrations-generator.git", + "reference": "94cb613ec77376cf880c9488daa3668b1f856e80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-migrations-generator/zipball/94cb613ec77376cf880c9488daa3668b1f856e80", + "reference": "94cb613ec77376cf880c9488daa3668b1f856e80", + "shasum": "" + }, + "require": { + "cycle/database": "^2.4.1", + "cycle/migrations": "^4.2", + "cycle/schema-builder": "^2.0", + "php": ">=8.1" + }, + "require-dev": { + "cycle/annotated": "^3.0", + "cycle/orm": "^2.0", + "phpunit/phpunit": "^9.5", + "spiral/debug": "^3.0", + "spiral/framework": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Generator\\Migrations\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Migration generation", + "support": { + "issues": "https://github.com/cycle/schema-migrations-generator/issues", + "source": "https://github.com/cycle/schema-migrations-generator/tree/2.2.0" + }, + "time": "2023-11-02T09:24:12+00:00" + }, + { + "name": "cycle/schema-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-provider.git", + "reference": "d6e800d6cd498cf1053522b6c2348f6eea587aae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-provider/zipball/d6e800d6cd498cf1053522b6c2348f6eea587aae", + "reference": "d6e800d6cd498cf1053522b6c2348f6eea587aae", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.0", + "cycle/schema-renderer": "^1.2", + "php": ">=8.0", + "psr/container": "^1.0 || ^2.0", + "psr/simple-cache": "^2.0 || ^3.0", + "spiral/files": "^2.14 || ^3.11", + "webmozart/glob": "^4.6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.48", + "phpunit/phpunit": "^9.6", + "roave/security-advisories": "dev-latest", + "vimeo/psalm": "^4.30.0 || ^5.21", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Provider\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Buchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Cycle ORM Schema providers", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/schema-provider/issues", + "source": "https://github.com/cycle/schema-provider" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-02-05T13:58:34+00:00" + }, + { + "name": "cycle/schema-renderer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-renderer.git", + "reference": "5c2b7977c2803c6c9bacc56064abda5ea2b273a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-renderer/zipball/5c2b7977c2803c6c9bacc56064abda5ea2b273a3", + "reference": "5c2b7977c2803c6c9bacc56064abda5ea2b273a3", + "shasum": "" + }, + "require": { + "cycle/orm": "1.2 - 2", + "php": ">=7.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "spiral/code-style": "^1.0", + "vimeo/psalm": "^4.10|^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Renderer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Utils for Cycle ORM Schema rendering", + "support": { + "issues": "https://github.com/cycle/schema-renderer/issues", + "source": "https://github.com/cycle/schema-renderer/tree/1.2.0" + }, + "time": "2022-12-15T16:14:14+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "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.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "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.2" + }, + "time": "2024-09-05T10:17:24+00:00" + }, + { + "name": "doctrine/collections", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", + "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1", + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ext-json": "*", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "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" + } + ], + "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/2.2.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%2Fcollections", + "type": "tidelift" + } + ], + "time": "2024-04-18T06:56:21+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/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "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 Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "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%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+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": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "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.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "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.7.0" + }, + "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": "2024-07-18T11:15:46+00:00" + }, + { + "name": "httpsoft/http-message", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-message.git", + "reference": "f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-message/zipball/f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19", + "reference": "f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1|^2.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "php-http/psr7-integration-tests": "^1.3", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Strict and fast implementation of PSR-7 and PSR-17", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "php", + "psr-17", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/message", + "issues": "https://github.com/httpsoft/http-message/issues", + "source": "https://github.com/httpsoft/http-message" + }, + "time": "2024-08-09T07:13:21+00:00" + }, + { + "name": "jetbrains/phpstorm-attributes", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/JetBrains/phpstorm-attributes.git", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/22fb28d679deceedba8366dbae65cc8ebfc17e26", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "JetBrains\\PhpStorm\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "JetBrains", + "homepage": "https://www.jetbrains.com" + } + ], + "description": "PhpStorm specific attributes", + "keywords": [ + "attributes", + "jetbrains", + "phpstorm" + ], + "support": { + "issues": "https://youtrack.jetbrains.com/newIssue?project=WI", + "source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.1" + }, + "time": "2023-09-01T08:50:25+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "nette/php-generator", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "c90961e782ae86e517fe5ed732eb2b512945565b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/c90961e782ae86e517fe5ed732eb2b512945565b", + "reference": "c90961e782ae86e517fe5ed732eb2b512945565b", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2.9 || ^4.0", + "php": "8.0 - 8.4" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "nikic/php-parser": "^4.18 || ^5.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.8" + }, + "suggest": { + "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-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 PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "support": { + "issues": "https://github.com/nette/php-generator/issues", + "source": "https://github.com/nette/php-generator/tree/v4.1.6" + }, + "time": "2024-09-10T09:31:55+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "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.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "FastRoute\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+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/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.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "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": "PSR-17: 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" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+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.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "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.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "spiral/attributes", + "version": "v3.1.7", + "source": { + "type": "git", + "url": "https://github.com/spiral/attributes.git", + "reference": "fc6657de4ed83913c7f02241e5fe4e8e799af8fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/attributes/zipball/fc6657de4ed83913c7f02241e5fe4e8e799af8fa", + "reference": "fc6657de4ed83913c7f02241e5fe4e8e799af8fa", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "1 - 3", + "psr/simple-cache": "1 - 3" + }, + "require-dev": { + "doctrine/annotations": "^1.14 || ^2.0", + "jetbrains/phpstorm-attributes": "^1.0", + "phpunit/phpunit": "^9.5.20", + "vimeo/psalm": "^5.17" + }, + "type": "library", + "autoload": { + "files": [ + "src/polyfill.php" + ], + "psr-4": { + "Spiral\\Attributes\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + }, + { + "name": "Kirill Nesmeyanov (SerafimArts)", + "email": "kirill.nesmeyanov@spiralscout.com" + } + ], + "description": "PHP attributes reader", + "homepage": "https://spiral.dev", + "keywords": [ + "annotations", + "attributes", + "metadata" + ], + "support": { + "chat": "https://discord.gg/V6EK4he", + "docs": "https://spiral.dev/docs", + "forum": "https://forum.spiral.dev", + "issues": "https://github.com/spiral/attributes/issues", + "source": "https://github.com/spiral/attributes" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-08-22T10:18:52+00:00" + }, + { + "name": "spiral/core", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/spiral/core.git", + "reference": "53bec6e433d709f59ef6c0ce966f4a640c4d1bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/core/zipball/53bec6e433d709f59ef6c0ce966f4a640c4d1bad", + "reference": "53bec6e433d709f59ef6c0ce966f4a640c4d1bad", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0" + }, + "provide": { + "psr/container-implementation": "^1.1|^2.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Core\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "IoC container, IoC scopes, factory, memory, configuration interfaces", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/core" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-10T16:54:43+00:00" + }, + { + "name": "spiral/files", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/files.git", + "reference": "0c394e058ee994b6d18a229dcbe310e4de3a2b7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/files/zipball/0c394e058ee994b6d18a229dcbe310e4de3a2b7a", + "reference": "0c394e058ee994b6d18a229dcbe310e4de3a2b7a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Files\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "File Toolkit: atomic file manager", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/files" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-03T16:58:09+00:00" + }, + { + "name": "spiral/logger", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/logger.git", + "reference": "146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/logger/zipball/146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e", + "reference": "146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "1 - 3", + "spiral/core": "^3.14.3" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Logger\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "LogFactory and global log listeners", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/logger" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:26+00:00" + }, + { + "name": "spiral/pagination", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/pagination.git", + "reference": "93c9d93c811b4ec6037491e516c3e194fdc94848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/pagination/zipball/93c9d93c811b4ec6037491e516c3e194fdc94848", + "reference": "93c9d93c811b4ec6037491e516c3e194fdc94848", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Pagination\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Common pagination interfaces", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/pagination" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-03T16:59:10+00:00" + }, + { + "name": "spiral/reactor", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/reactor.git", + "reference": "74639a44ced7eb289820fdcca96ff9322f79f882" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/reactor/zipball/74639a44ced7eb289820fdcca96ff9322f79f882", + "reference": "74639a44ced7eb289820fdcca96ff9322f79f882", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "nette/php-generator": "^4.1.2", + "php": ">=8.1", + "spiral/files": "^3.14.3" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "psr/container": "^1.1|^2.0", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Reactor\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Reactor: Code Scaffolding", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/reactor" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:25+00:00" + }, + { + "name": "spiral/tokenizer", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/tokenizer.git", + "reference": "b5bf2ed89880d91c228bf1e3ebfda2b508c008ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/tokenizer/zipball/b5bf2ed89880d91c228bf1e3ebfda2b508c008ff", + "reference": "b5bf2ed89880d91c228bf1e3ebfda2b508c008ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=8.1", + "spiral/core": "^3.14.3", + "spiral/logger": "^3.14.3", + "symfony/finder": "^5.3.7 || ^6.0 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "phpunit/phpunit": "^10.1", + "spiral/attributes": "^2.8|^3.0", + "spiral/boot": "^3.14.3", + "spiral/files": "^3.14.3", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Tokenizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Static Analysis: Class and Invocation locators", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/tokenizer" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:38+00:00" + }, + { + "name": "swagger-api/swagger-ui", + "version": "v5.17.14", + "source": { + "type": "git", + "url": "https://github.com/swagger-api/swagger-ui.git", + "reference": "74ed0adebfc9c8dd0de2bf8e81495b022a66c083" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/74ed0adebfc9c8dd0de2bf8e81495b022a66c083", + "reference": "74ed0adebfc9c8dd0de2bf8e81495b022a66c083", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Anna Bodnia", + "email": "anna.bodnia@gmail.com" + }, + { + "name": "Buu Nguyen", + "email": "buunguyen@gmail.com" + }, + { + "name": "Josh Ponelat", + "email": "jponelat@gmail.com" + }, + { + "name": "Kyle Shockey", + "email": "kyleshockey1@gmail.com" + }, + { + "name": "Robert Barnwell", + "email": "robert@robertismy.name" + }, + { + "name": "Sahar Jafari", + "email": "shr.jafari@gmail.com" + } + ], + "description": " Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.", + "homepage": "http://swagger.io", + "keywords": [ + "api", + "documentation", + "openapi", + "specification", + "swagger", + "ui" + ], + "support": { + "issues": "https://github.com/swagger-api/swagger-ui/issues", + "source": "https://github.com/swagger-api/swagger-ui/tree/v5.17.14" + }, + "time": "2024-05-28T05:24:40+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", + "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.12" + }, + "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-09-20T08:15:52+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-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.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.43", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ae25a9145a900764158d439653d5630191155ca0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.43" + }, + "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-08-13T14:03:51+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-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.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/string", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.1.5" + }, + "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-09-20T08:28:38+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "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 mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" + }, + "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-08-30T16:03:21+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "762ee56b2649659380e0ef4d592d807bc17b7971" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/762ee56b2649659380e0ef4d592d807bc17b7971", + "reference": "762ee56b2649659380e0ef4d592d807bc17b7971", + "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.12" + }, + "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-09-17T12:47:12+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "webmozart/glob", + "version": "4.7.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/glob.git", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Glob\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A PHP implementation of Ant's glob.", + "support": { + "issues": "https://github.com/webmozarts/glob/issues", + "source": "https://github.com/webmozarts/glob/tree/4.7.0" + }, + "time": "2024-03-07T20:33:40+00:00" + }, + { + "name": "yiisoft/access", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/access.git", + "reference": "7a8ac9c4802d31cf47789c742575232c7fb1ae8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/access/zipball/7a8ac9c4802d31cf47789c742575232c7fb1ae8b", + "reference": "7a8ac9c4802d31cf47789c742575232c7fb1ae8b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Access\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "An interface for checking access", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "access", + "interface", + "rbac", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/access/issues?state=open", + "source": "https://github.com/yiisoft/access", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2022-04-05T17:21:55+00:00" + }, + { + "name": "yiisoft/aliases", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/aliases.git", + "reference": "2ed5e38d6ac503ec4c1af39115361097b6449135" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/aliases/zipball/2ed5e38d6ac503ec4c1af39115361097b6449135", + "reference": "2ed5e38d6ac503ec4c1af39115361097b6449135", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Aliases\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Named paths and URLs storage", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "alias" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/aliases/issues?state=open", + "source": "https://github.com/yiisoft/aliases", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-13T10:14:03+00:00" + }, + { + "name": "yiisoft/arrays", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/arrays.git", + "reference": "e07c7268bd53903108ed556df93ef75b4bac6760" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/arrays/zipball/e07c7268bd53903108ed556df93ef75b4bac6760", + "reference": "e07c7268bd53903108ed556df93ef75b4bac6760", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/strings": "^2.1" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.20" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Arrays\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Array Helper", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "array", + "helper", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/arrays/issues", + "source": "https://github.com/yiisoft/arrays", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-04-04T11:07:18+00:00" + }, + { + "name": "yiisoft/assets", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/assets.git", + "reference": "14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/assets/zipball/14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc", + "reference": "14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/files": "^2.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Assets\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Asset bundles and asset manager", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "assets", + "library", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/assets/issues?state=open", + "source": "https://github.com/yiisoft/assets", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-13T11:15:18+00:00" + }, + { + "name": "yiisoft/auth", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/auth.git", + "reference": "497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/auth/zipball/497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee", + "reference": "497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.8", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii auth", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "auth", + "middleware" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/auth/issues?state=open", + "source": "https://github.com/yiisoft/auth", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-05-06T12:26:49+00:00" + }, + { + "name": "yiisoft/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cache.git", + "reference": "67ae4b40d3aefd193dfd9a3f458f3e145adb0d84" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cache/zipball/67ae4b40d3aefd193dfd9a3f458f3e145adb0d84", + "reference": "67ae4b40d3aefd193dfd9a3f458f3e145adb0d84", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "provide": { + "psr/simple-cache-implementation": "2.0|3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.2" + }, + "suggest": { + "yiisoft/cache-apcu": "Allows to store cache using APCu PECL extension", + "yiisoft/cache-db": "Allows storing cache to the database", + "yiisoft/cache-file": "Allows storing cache to the files", + "yiisoft/cache-memcached": "Allows to store cache using Memcached PECL extension", + "yiisoft/cache-redis": "Allows storing cache to the Redis", + "yiisoft/cache-wincache": "Allows to store cache using WinCache PECL extension" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Caching Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cache", + "psr-16", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cache/issues?state=open", + "source": "https://github.com/yiisoft/cache", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-15T14:30:56+00:00" + }, + { + "name": "yiisoft/cache-file", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cache-file.git", + "reference": "226ff0731adabc884c149f711190a7ac8b14800d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cache-file/zipball/226ff0731adabc884c149f711190a7ac8b14800d", + "reference": "226ff0731adabc884c149f711190a7ac8b14800d", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "provide": { + "psr/simple-cache-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "php-mock/php-mock-phpunit": "^2.6", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Cache\\File\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Caching Library - File Handler", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cache", + "file", + "framework", + "psr-16", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cache-file/issues?state=open", + "source": "https://github.com/yiisoft/cache-file", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-10-09T14:49:20+00:00" + }, + { + "name": "yiisoft/config", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/config.git", + "reference": "8cd32f003af59303f3ba8dd520eb85f830689575" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/config/zipball/8cd32f003af59303f3ba8dd520eb85f830689575", + "reference": "8cd32f003af59303f3ba8dd520eb85f830689575", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^8.0", + "yiisoft/arrays": "^3.0", + "yiisoft/strings": "^2.0", + "yiisoft/var-dumper": "^1.1" + }, + "require-dev": { + "composer/composer": "^2.0", + "ext-json": "*", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6" + }, + "suggest": { + "symfony/console": "To use composer commands `yii-config-copy` and `yii-config-rebuild`." + }, + "type": "composer-plugin", + "extra": { + "class": "Yiisoft\\Config\\Composer\\EventHandler" + }, + "autoload": { + "psr-4": { + "Yiisoft\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Composer plugin and a library for config assembling", + "homepage": "https://github.com/yiisoft/config", + "keywords": [ + "composer", + "config", + "plugin" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/config/issues?state=open", + "source": "https://github.com/yiisoft/config", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-12-25T17:12:50+00:00" + }, + { + "name": "yiisoft/cookies", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cookies.git", + "reference": "ceba1d0647f1210331d90372ca83a8ecc952ebef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cookies/zipball/ceba1d0647f1210331d90372ca83a8ecc952ebef", + "reference": "ceba1d0647f1210331d90372ca83a8ecc952ebef", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/http": "^1.2", + "yiisoft/security": "^1.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Cookies\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Convenient way to use cookies with PSR-7", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cookie", + "cookies", + "psr-7" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cookies/issues?state=open", + "source": "https://github.com/yiisoft/cookies", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-04-05T07:20:16+00:00" + }, + { + "name": "yiisoft/csrf", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/csrf.git", + "reference": "2168b5f83ec9ce65e9d0ca08fa88613e6778d377" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/csrf/zipball/2168b5f83ec9ce65e9d0ca08fa88613e6778d377", + "reference": "2168b5f83ec9ce65e9d0ca08fa88613e6778d377", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "php": "^7.4|^8.0", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/security": "^1.0", + "yiisoft/session": "^1.0|^2.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.24", + "yiisoft/di": "^1.1" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Csrf\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii CSRF Protection Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "breach", + "csrf", + "hmac", + "middleware", + "psr-15", + "stateless", + "synchronizer" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/csrf/issues?state=open", + "source": "https://github.com/yiisoft/csrf", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-05-08T09:48:50+00:00" + }, + { + "name": "yiisoft/data", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data.git", + "reference": "714ca834858bea280ce8781fc5915fa8775f780b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data/zipball/714ca834858bea280ce8781fc5915fa8775f780b", + "reference": "714ca834858bea280ce8781fc5915fa8775f780b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "yiisoft/arrays": "^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.20" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Data\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Data providers, pagination and related abstractions", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "data processor", + "data provider", + "data reader", + "data writer", + "filter", + "pagination" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data/issues?state=open", + "source": "https://github.com/yiisoft/data", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-10T17:50:47+00:00" + }, + { + "name": "yiisoft/data-cycle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data-cycle.git", + "reference": "708074a77942ab1d7f424bc21a6912b7d62641da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data-cycle/zipball/708074a77942ab1d7f424bc21a6912b7d62641da", + "reference": "708074a77942ab1d7f424bc21a6912b7d62641da", + "shasum": "" + }, + "require": { + "cycle/database": "^2.10", + "cycle/orm": "^2.7.1", + "php": "^8.1", + "yiisoft/data": "dev-master" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.21", + "vlucas/phpdotenv": "^5.6" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Data\\Cycle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Cycle ORM query adapter for yiisoft/data", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cycle", + "data provider", + "database", + "db", + "orm" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data-cycle/issues?state=open", + "source": "https://github.com/yiisoft/data-cycle", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-11T18:58:59+00:00" + }, + { + "name": "yiisoft/data-response", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data-response.git", + "reference": "7de8c880d0d6629867a51c5c2529c984e50dfbc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data-response/zipball/7de8c880d0d6629867a51c5c2529c984e50dfbc3", + "reference": "7de8c880d0d6629867a51c5c2529c984e50dfbc3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^8.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/json": "^1.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/di": "^1.1" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\DataResponse\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Allows responding with data that is automatically converted into PSR-7 response", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "data", + "psr-7", + "response" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data-response/issues?state=open", + "source": "https://github.com/yiisoft/data-response", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-03T06:01:50+00:00" + }, + { + "name": "yiisoft/definitions", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/definitions.git", + "reference": "5cb53d07afab3336705a52ddc90c37237cc4b316" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/definitions/zipball/5cb53d07afab3336705a52ddc90c37237cc4b316", + "reference": "5cb53d07afab3336705a52ddc90c37237cc4b316", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^1.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Definitions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "The package provides definition syntax", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "definitions" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/definitions/issues?state=open", + "source": "https://github.com/yiisoft/definitions", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-16T13:31:21+00:00" + }, + { + "name": "yiisoft/di", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/di.git", + "reference": "a6d889f74030a381dad337f1bd1ea9de7341bc9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/di/zipball/a6d889f74030a381dad337f1bd1ea9de7341bc9b", + "reference": "a6d889f74030a381dad337f1bd1ea9de7341bc9b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "psr/container": "^1.1|^2.0", + "yiisoft/definitions": "^3.0" + }, + "provide": { + "psr/container-implementation": "1.0.0" + }, + "require-dev": { + "league/container": "^4.2", + "maglnet/composer-require-checker": "^4.2", + "phpbench/phpbench": "^1.2.0", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.3", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.29", + "yiisoft/injector": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "phpbench/phpbench": "To run benchmarks.", + "yiisoft/injector": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Di\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii DI container", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "Autowiring", + "PSR-11", + "container", + "dependency", + "di", + "injection", + "injector" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/di/issues?state=open", + "source": "https://github.com/yiisoft/di", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-12-23T16:12:56+00:00" + }, + { + "name": "yiisoft/error-handler", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/error-handler.git", + "reference": "a263c9dea48d5a42022dd7df76706cff39e3e960" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/error-handler/zipball/a263c9dea48d5a42022dd7df76706cff39e3e960", + "reference": "a263c9dea48d5a42022dd7df76706cff39e3e960", + "shasum": "" + }, + "require": { + "alexkart/curl-builder": "^1.0", + "cebe/markdown": "^1.2", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0.9", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/di": "^1.1", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\ErrorHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Error Handling Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "PSR-11", + "error-handler", + "psr-15", + "psr-3", + "psr-7", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/error-handler/issues?state=open", + "source": "https://github.com/yiisoft/error-handler", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-11T12:16:20+00:00" + }, + { + "name": "yiisoft/event-dispatcher", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/event-dispatcher.git", + "reference": "2b1262a56260030aaac386bf8ef75ec072abc7e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/event-dispatcher/zipball/2b1262a56260030aaac386bf8ef75ec072abc7e3", + "reference": "2b1262a56260030aaac386bf8ef75ec072abc7e3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\EventDispatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Event Dispatcher", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "event", + "event dispatcher", + "psr-14" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/event-dispatcher/issues?state=open", + "source": "https://github.com/yiisoft/event-dispatcher", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-10-27T12:02:21+00:00" + }, + { + "name": "yiisoft/factory", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/factory.git", + "reference": "4537a78ae1a3b49bd86e83d09f0772034e45f193" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/factory/zipball/4537a78ae1a3b49bd86e83d09f0772034e45f193", + "reference": "4537a78ae1a3b49bd86e83d09f0772034e45f193", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/definitions": "^1.0|^2.0|^3.0.1" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Factory\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Factory", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "factory" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/factory/issues", + "source": "https://github.com/yiisoft/factory", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-03T05:59:14+00:00" + }, + { + "name": "yiisoft/files", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/files.git", + "reference": "129a8f8220e1cd2530f424951b8c24f426bd219c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/files/zipball/129a8f8220e1cd2530f424951b8c24f426bd219c", + "reference": "129a8f8220e1cd2530f424951b8c24f426bd219c", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Files\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Helper to manage files and directories", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "files" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/files/issues?state=open", + "source": "https://github.com/yiisoft/files", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-07-05T06:43:38+00:00" + }, + { + "name": "yiisoft/friendly-exception", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/friendly-exception.git", + "reference": "4b4a19edff251791e3c92d4d83435d2716351ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/friendly-exception/zipball/4b4a19edff251791e3c92d4d83435d2716351ff4", + "reference": "4b4a19edff251791e3c92d4d83435d2716351ff4", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.4", + "roave/infection-static-analysis-plugin": "^1.5", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\FriendlyException\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "An interface for friendlier exception", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "error handling", + "exception", + "exceptions", + "friendly" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/friendly-exception/issues?state=open", + "source": "https://github.com/yiisoft/friendly-exception", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2021-10-26T21:43:25+00:00" + }, + { + "name": "yiisoft/html", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/html.git", + "reference": "968aa8b336135242bdaef9646fa3d53c3c0731f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/html/zipball/968aa8b336135242bdaef9646fa3d53c3c0731f7", + "reference": "968aa8b336135242bdaef9646fa3d53c3c0731f7", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.26.19", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Html\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Handy library to generate HTML", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "html" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/html/issues?state=open", + "source": "https://github.com/yiisoft/html", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-18T11:48:50+00:00" + }, + { + "name": "yiisoft/http", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/http.git", + "reference": "7967b2c45dbf6af785dea4ea481af23da6d49c5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/http/zipball/7967b2c45dbf6af785dea4ea481af23da6d49c5d", + "reference": "7967b2c45dbf6af785dea4ea481af23da6d49c5d", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.10", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Constants and PSR-7 PhpStorm meta for HTTP protocol headers, methods and statuses", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "header", + "http", + "method", + "psr-17", + "psr-7", + "status" + ], + "support": { + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/http/issues?state=open", + "source": "https://github.com/yiisoft/http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2021-11-09T09:42:11+00:00" + }, + { + "name": "yiisoft/hydrator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/hydrator.git", + "reference": "9bfde0c99fc35b182d1b74433e9316c9b67c5fc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/hydrator/zipball/9bfde0c99fc35b182d1b74433e9316c9b67c5fc1", + "reference": "9bfde0c99fc35b182d1b74433e9316c9b67c5fc1", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^2.0", + "yiisoft/injector": "^1.1", + "yiisoft/strings": "^2.3" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.23", + "yiisoft/di": "^1.2", + "yiisoft/dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "ext-intl": "Allows using `ToDateTime` parameter attribute" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Hydrator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create and populate objects with type casting, mapping and dependencies resolving support.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "hydrator" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/hydrator/issues?state=open", + "source": "https://github.com/yiisoft/hydrator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-17T16:10:24+00:00" + }, + { + "name": "yiisoft/hydrator-validator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/hydrator-validator.git", + "reference": "5f7acfebce127755af7df3cbc126dd502a1c4140" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/hydrator-validator/zipball/5f7acfebce127755af7df3cbc126dd502a1c4140", + "reference": "5f7acfebce127755af7df3cbc126dd502a1c4140", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/validator": "^1.0|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.11", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Hydrator\\Validator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validating hydrator with raw data validation support", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "input", + "validation" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/hydrator-validator/issues?state=open", + "source": "https://github.com/yiisoft/hydrator-validator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-08-06T12:18:25+00:00" + }, + { + "name": "yiisoft/i18n", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/i18n.git", + "reference": "c05e9e031fb36fc193152e18fa791bbf6d0582b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/i18n/zipball/c05e9e031fb36fc193152e18fa791bbf6d0582b8", + "reference": "c05e9e031fb36fc193152e18fa791bbf6d0582b8", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.17.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\I18n\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Internationalization Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "i18n", + "locale" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/i18n/issues?state=open", + "source": "https://github.com/yiisoft/i18n", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-06-10T14:18:35+00:00" + }, + { + "name": "yiisoft/injector", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/injector.git", + "reference": "0dc0127a7542341bdaabda7b85204e992938b83e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/injector/zipball/0dc0127a7542341bdaabda7b85204e992938b83e", + "reference": "0dc0127a7542341bdaabda7b85204e992938b83e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpbench/phpbench": "^1.1", + "phpunit/phpunit": "^9.5", + "psr/container": "^1.0|^2.0", + "rector/rector": "^0.18.12", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.7", + "yiisoft/test-support": "^1.2" + }, + "suggest": { + "psr/container": "For automatic resolving of dependencies" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Injector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-11 compatible injector. Executes a callable and makes an instances by injecting dependencies from a given DI container.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "PSR-11", + "dependency injection", + "di", + "injector", + "reflection" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/injector/issues?state=open", + "source": "https://github.com/yiisoft/injector", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-20T09:39:03+00:00" + }, + { + "name": "yiisoft/input-http", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/input-http.git", + "reference": "877fea3374033f5a6af4207036eb7733a635b5b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/input-http/zipball/877fea3374033f5a6af4207036eb7733a635b5b7", + "reference": "877fea3374033f5a6af4207036eb7733a635b5b7", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/arrays": "^3.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/hydrator-validator": "^2.0", + "yiisoft/middleware-dispatcher": "^5.1", + "yiisoft/request-provider": "^1.0", + "yiisoft/validator": "^1.1|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params-web": "params-web.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Input\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Maps data from PSR-7 HTTP request to PHP DTO representing user input.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "dto", + "input", + "mapper", + "mapping", + "psr-7", + "request", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/input-http/issues?state=open", + "source": "https://github.com/yiisoft/input-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-08-06T12:42:23+00:00" + }, + { + "name": "yiisoft/json", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/json.git", + "reference": "51b483aef1cd5d06ea02db3c40707bb6b41ed088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/json/zipball/51b483aef1cd5d06ea02db3c40707bb6b41ed088", + "reference": "51b483aef1cd5d06ea02db3c40707bb6b41ed088", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "infection/infection": "^0.16.3", + "phan/phan": "^3.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Json\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "json", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "json" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/json/issues?state=open", + "source": "https://github.com/yiisoft/json", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2020-08-26T12:21:14+00:00" + }, + { + "name": "yiisoft/log", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/log.git", + "reference": "9d549952f5099a3e3081e11cccb3841c77587dac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/log/zipball/9d549952f5099a3e3081e11cccb3841c77587dac", + "reference": "9d549952f5099a3e3081e11cccb3841c77587dac", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^2.0|^3.0", + "yiisoft/var-dumper": "^1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25" + }, + "suggest": { + "yiisoft/log-target-db": "Allows writing log messages to the database", + "yiisoft/log-target-email": "Allows sending log messages by email", + "yiisoft/log-target-file": "Allows writing log messages to the files", + "yiisoft/log-target-syslog": "Allows writing log messages to the Syslog" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "events-console": "events-console.php", + "events-web": "events-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Logging Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "log", + "logger", + "psr-3", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/log/issues?state=open", + "source": "https://github.com/yiisoft/log", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-03T10:13:44+00:00" + }, + { + "name": "yiisoft/log-target-file", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/log-target-file.git", + "reference": "758a792d11f5b6d554450abc828e2db5d7613f22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/log-target-file/zipball/758a792d11f5b6d554450abc828e2db5d7613f22", + "reference": "758a792d11f5b6d554450abc828e2db5d7613f22", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^8.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/log": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.1", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.2", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.0" + }, + "suggest": { + "ext-zlib": "Enabling gzip compression of rotated files." + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Log\\Target\\File\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Logging Library - File Target", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "log", + "logger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/log-target-file/issues", + "source": "https://github.com/yiisoft/log-target-file", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-17T05:52:09+00:00" + }, + { + "name": "yiisoft/middleware-dispatcher", + "version": "5.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/middleware-dispatcher.git", + "reference": "97d290e4ddab59e5a735ebafc69c46b6953022b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/middleware-dispatcher/zipball/97d290e4ddab59e5a735ebafc69c46b6953022b3", + "reference": "97d290e4ddab59e5a735ebafc69c46b6953022b3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/definitions": "^2.0|^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.3", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Middleware\\Dispatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-15 middleware dispatcher", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "dispatcher", + "middleware" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/middleware-dispatcher/issues?state=open", + "source": "https://github.com/yiisoft/middleware-dispatcher", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-09-25T07:01:31+00:00" + }, + { + "name": "yiisoft/network-utilities", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/network-utilities.git", + "reference": "9b51434f17035ce70ba220518a9d52656b6c1cb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/network-utilities/zipball/9b51434f17035ce70ba220518a9d52656b6c1cb4", + "reference": "9b51434f17035ce70ba220518a9d52656b6c1cb4", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\NetworkUtilities\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Network related utilities", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "IP", + "dns", + "mask", + "network" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/network-utilities/issues?state=open", + "source": "https://github.com/yiisoft/network-utilities", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-02T14:07:06+00:00" + }, + { + "name": "yiisoft/profiler", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/profiler.git", + "reference": "9f1bd1649f079ddfd45217f8da50533b12ca78a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/profiler/zipball/9f1bd1649f079ddfd45217f8da50533b12ca78a3", + "reference": "9f1bd1649f079ddfd45217f8da50533b12ca78a3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^2.0|^3.0", + "yiisoft/files": "^2.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.1", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "events-web": "events-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Profiler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Profiler", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "performance", + "profiler" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/profiler/issues?state=open", + "source": "https://github.com/yiisoft/profiler", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-15T09:15:24+00:00" + }, + { + "name": "yiisoft/proxy", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/proxy.git", + "reference": "2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/proxy/zipball/2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6", + "reference": "2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/files": "^1.0.2|^2.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Proxy\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proxy", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "proxy" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/proxy/issues?state=open", + "source": "https://github.com/yiisoft/proxy", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-01-17T13:21:34+00:00" + }, + { + "name": "yiisoft/queue", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/queue.git", + "reference": "9fc8dee90766329e6db2448b28299d7ba259e646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/queue/zipball/9fc8dee90766329e6db2448b28299d7ba259e646", + "reference": "9fc8dee90766329e6db2448b28299d7ba259e646", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "psr/log": "^2.0|^3.0", + "symfony/console": "^5.4|^6.0", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.20", + "yiisoft/test-support": "^3.0", + "yiisoft/yii-debug": "dev-master" + }, + "suggest": { + "ext-pcntl": "Need for process signals" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Queue\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Queue Extension which supported DB, Redis, RabbitMQ, Beanstalk, SQS and Gearman", + "keywords": [ + "async", + "beanstalk", + "db", + "gearman", + "gii", + "queue", + "rabbitmq", + "redis", + "sqs", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/queue/issues?state=open", + "source": "https://github.com/yiisoft/queue", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-15T17:34:15+00:00" + }, + { + "name": "yiisoft/request-body-parser", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/request-body-parser.git", + "reference": "f164340fc1d199105d88bf9e79601458f7de4fe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/request-body-parser/zipball/f164340fc1d199105d88bf9e79601458f7de4fe2", + "reference": "f164340fc1d199105d88bf9e79601458f7de4fe2", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4|^8.0", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2" + }, + "require-dev": { + "nyholm/psr7": "^1.0", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Request\\Body\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Middleware for parsing various data formats", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "body", + "middleware", + "parser", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/request-body-parser/issues?state=open", + "source": "https://github.com/yiisoft/request-body-parser", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-06-03T17:47:14+00:00" + }, + { + "name": "yiisoft/request-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/request-provider.git", + "reference": "667e339f307eaf3d4e4f09f05334e41761d20a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/request-provider/zipball/667e339f307eaf3d4e4f09f05334e41761d20a81", + "reference": "667e339f307eaf3d4e4f09f05334e41761d20a81", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.1", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.20", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\RequestProvider\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 request provider", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "http", + "provider", + "psr", + "request", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/request-provider/issues?state=open", + "source": "https://github.com/yiisoft/request-provider", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-02T15:18:14+00:00" + }, + { + "name": "yiisoft/router", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/router.git", + "reference": "86ee95984109bd96548cad3f93df8ad9ca4de0b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/router/zipball/86ee95984109bd96548cad3f93df8ad9ca4de0b8", + "reference": "86ee95984109bd96548cad3f93df8ad9ca4de0b8", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^5.0", + "yiisoft/router-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^9.5", + "psr/container": "^1.1|^2.0", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.22", + "yiisoft/di": "^1.0", + "yiisoft/dummy-provider": "^1.0.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/hydrator": "Needed to use `RouteArgument` attribute", + "yiisoft/router-fastroute": "Router implementation based on nikic/FastRoute" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Router\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii router", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "middleware", + "router", + "web" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/router/issues?state=open", + "source": "https://github.com/yiisoft/router", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-02-20T11:39:48+00:00" + }, + { + "name": "yiisoft/router-fastroute", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/router-fastroute.git", + "reference": "4f2214eed24e140687e714ccb08a6420da316059" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/router-fastroute/zipball/4f2214eed24e140687e714ccb08a6420da316059", + "reference": "4f2214eed24e140687e714ccb08a6420da316059", + "shasum": "" + }, + "require": { + "nikic/fast-route": "^1.3", + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/simple-cache": "^2.0|^3.0", + "yiisoft/http": "^1.2", + "yiisoft/router": "^2.1|^3.0" + }, + "provide": { + "yiisoft/router-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Router\\FastRoute\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii router FastRoute adapter", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "FastRoute", + "router" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/router-fastroute/issues?state=open", + "source": "https://github.com/yiisoft/router-fastroute", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-19T12:26:45+00:00" + }, + { + "name": "yiisoft/security", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/security.git", + "reference": "f1ad5d279722f162cfb0f720a3723ad762892de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/security/zipball/f1ad5d279722f162cfb0f720a3723ad762892de3", + "reference": "f1ad5d279722f162cfb0f720a3723ad762892de3", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "ext-openssl": "*", + "php": "^7.4|^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.23" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Security\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Security utilities", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "MAC", + "decryption", + "encryption", + "hash", + "password", + "random", + "security", + "signature", + "token masking" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/security/issues?state=open", + "source": "https://github.com/yiisoft/security", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-18T12:20:01+00:00" + }, + { + "name": "yiisoft/session", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/session.git", + "reference": "193c666a8d1fcce5985c48afe9c3df96b6d3b6d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/session/zipball/193c666a8d1fcce5985c48afe9c3df96b6d3b6d1", + "reference": "193c666a8d1fcce5985c48afe9c3df96b6d3b6d1", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/cookies": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.1" + }, + "suggest": { + "ext-session": "Allows using native PHP sessions" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Session\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A session service, PSR-15 session middleware, and a flash message service which helps use one-time messages.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "flash", + "middleware", + "psr-15", + "session" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/session/issues?state=open", + "source": "https://github.com/yiisoft/session", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-05-02T18:50:11+00:00" + }, + { + "name": "yiisoft/strings", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/strings.git", + "reference": "ff519d31e1c2518f42554fb5410e31bbb74b8108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/strings/zipball/ff519d31e1c2518f42554fb5410e31bbb74b8108", + "reference": "ff519d31e1c2518f42554fb5410e31bbb74b8108", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Strings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Strings Helper", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "helper", + "string", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/strings/issues", + "source": "https://github.com/yiisoft/strings", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-22T07:29:39+00:00" + }, + { + "name": "yiisoft/translator", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/translator.git", + "reference": "869a224bf59dda36a8725985f5dd2e31cb357e21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/translator/zipball/869a224bf59dda36a8725985f5dd2e31cb357e21", + "reference": "869a224bf59dda36a8725985f5dd2e31cb357e21", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/i18n": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/di": "^1.2" + }, + "suggest": { + "ext-intl": "Allows using intl message formatter", + "ext-tokenizer": "Allows using message extraction", + "yiisoft/event-dispatcher": "To listen for events about missing categories and messages" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Translator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Message Translator", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "i18n", + "internationalization", + "translation" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/translator/issues?state=open", + "source": "https://github.com/yiisoft/translator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-17T13:16:40+00:00" + }, + { + "name": "yiisoft/translator-message-php", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/translator-message-php.git", + "reference": "67a0c64c132e5098f6824017ca4bccd45cc79030" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/translator-message-php/zipball/67a0c64c132e5098f6824017ca4bccd45cc79030", + "reference": "67a0c64c132e5098f6824017ca4bccd45cc79030", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/translator": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.4", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Translator\\Message\\Php\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Translator PHP Message Storage", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "formatting", + "i18n", + "internationalization", + "message storage" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/translator-message-php/issues?state=open", + "source": "https://github.com/yiisoft/translator-message-php", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-19T11:29:34+00:00" + }, + { + "name": "yiisoft/user", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/user.git", + "reference": "7bd541166949ac56a722a9555d43dac29976f424" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/user/zipball/7bd541166949ac56a722a9555d43dac29976f424", + "reference": "7bd541166949ac56a722a9555d43dac29976f424", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4|^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/access": "^1.0", + "yiisoft/auth": "^2.0|^3.0", + "yiisoft/cookies": "^1.2", + "yiisoft/http": "^1.2", + "yiisoft/session": "^1.0|^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\User\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Convenient user identity management and access checking", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "user", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/user/issues?state=open", + "source": "https://github.com/yiisoft/user", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-15T10:47:39+00:00" + }, + { + "name": "yiisoft/validator", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/validator.git", + "reference": "9e8ad99e66c750aceda96fd96033ff4b5d4a7e62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/validator/zipball/9e8ad99e66c750aceda96fd96033ff4b5d4a7e62", + "reference": "9e8ad99e66c750aceda96fd96033ff4b5d4a7e62", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0|^2.0", + "yiisoft/arrays": "^2.1|^3.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/network-utilities": "^1.2", + "yiisoft/strings": "^2.1", + "yiisoft/translator": "^2.1|^3.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "phpbench/phpbench": "^1.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.24", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0", + "yiisoft/translator-message-php": "^1.1", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "suggest": { + "ext-fileinfo": "To use image rule", + "ext-intl": "Allows using date rules and IDN validation for emails", + "yiisoft/di": "To create rule handlers via Yii DI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Validator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Validator", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "validation", + "validator" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/validator/issues?state=open", + "source": "https://github.com/yiisoft/validator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-12T12:10:04+00:00" + }, + { + "name": "yiisoft/var-dumper", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/var-dumper.git", + "reference": "c7f6a40d117b905abe26ac093593eaf7c57b9bd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/var-dumper/zipball/c7f6a40d117b905abe26ac093593eaf7c57b9bd5", + "reference": "c7f6a40d117b905abe26ac093593eaf7c57b9bd5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "php": "^8.0", + "yiisoft/arrays": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.3" + }, + "suggest": { + "ext-sockets": "Send dumps to a server through UDP/TCP protocols" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Yiisoft\\VarDumper\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Enhances functionality of var_dump() and var_export(). It is dealing with recursive references, may highlight syntax and export closures.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "helper", + "var-dumper", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/var-dumper/issues", + "source": "https://github.com/yiisoft/var-dumper", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-10-08T11:21:24+00:00" + }, + { + "name": "yiisoft/view", + "version": "10.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/view.git", + "reference": "4416d30e4e286e23887d9f525701f37e3a15f9ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/view/zipball/4416d30e4e286e23887d9f525701f37e3a15f9ca", + "reference": "4416d30e4e286e23887d9f525701f37e3a15f9ca", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0", + "psr/event-dispatcher-implementation": "1.0.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/cache": "^1.0|^2.0|^3.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/html": "^2.5|^3.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "1.0.*", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.20", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^1.4|^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\View\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii View Rendering Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "view", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/view/issues?state=open", + "source": "https://github.com/yiisoft/view", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-06-28T10:02:35+00:00" + }, + { + "name": "yiisoft/yii-console", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-console.git", + "reference": "7942fc70df59965bb1b33ac4671c915a145d2dcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-console/zipball/7942fc70df59965bb1b33ac4671c915a145d2dcf", + "reference": "7942fc70df59965bb1b33ac4671c915a145d2dcf", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher-contracts": "^2.2|^3.0", + "yiisoft/friendly-exception": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "vimeo/psalm": "^4.30|^5.20", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config", + "merge-plan-file": "../tests/environment/.merge-plan.php" + }, + "config-plugin": { + "params-console": "params-console.php", + "di-console": "di-console.php", + "events-console": "events-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Console\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Symfony console wrapper with additional features", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "console", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-console/issues?state=open", + "source": "https://github.com/yiisoft/yii-console", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-02-17T13:10:12+00:00" + }, + { + "name": "yiisoft/yii-cycle", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-cycle.git", + "reference": "071361f0a97ed314add6c2e285953ee02b3973a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-cycle/zipball/071361f0a97ed314add6c2e285953ee02b3973a6", + "reference": "071361f0a97ed314add6c2e285953ee02b3973a6", + "shasum": "" + }, + "require": { + "cycle/annotated": "^3.5", + "cycle/database": "^2.8", + "cycle/migrations": "^3.1.1|^4.0", + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "cycle/schema-migrations-generator": "^2.0", + "cycle/schema-provider": "^1.0", + "cycle/schema-renderer": "^1.2", + "php": "^8.1", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^3.0", + "psr/simple-cache": "^2.0|^3.0", + "spiral/attributes": "^2.7|^3.0", + "spiral/core": "^3.12", + "spiral/tokenizer": "^3.12", + "symfony/console": "^6.4", + "symfony/finder": "^5.4", + "webmozart/glob": "^4.7", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/injector": "^1.1" + }, + "require-dev": { + "cycle/entity-behavior": "^1.0", + "ext-uopz": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.7", + "yiisoft/definitions": "^3.2", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "cycle/entity-behavior": "To use PHP attributes that add behaviors to Cycle ORM entities." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-console": "di-console.php", + "events-console": "events-console.php", + "di-delegates": "di-delegates.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Cycle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Cycle ORM v2 support", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "cycle", + "migrations", + "orm", + "yii" + ], + "support": { + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-cycle/issues?state=open", + "source": "https://github.com/yiisoft/yii-cycle", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-21T08:34:37+00:00" + }, + { + "name": "yiisoft/yii-debug", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug.git", + "reference": "90bb1960841cf3b054433d7c54210fd203d3fe8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug/zipball/90bb1960841cf3b054433d7c54210fd203d3fe8f", + "reference": "90bb1960841cf3b054433d7c54210fd203d3fe8f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "guzzlehttp/psr7": "^2.4", + "jetbrains/phpstorm-attributes": "^1.0", + "php": "^8.1", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.4", + "yiisoft/aliases": "^3.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/json": "^1.0", + "yiisoft/profiler": "^3.0", + "yiisoft/proxy": "^1.0.1", + "yiisoft/strings": "^2.2", + "yiisoft/var-dumper": "^1.7" + }, + "require-dev": { + "ext-curl": "*", + "ext-sockets": "*", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/error-handler": "^3.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-http": "^1.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "bootstrap": "bootstrap.php", + "di": "di.php", + "di-console": "di-console.php", + "di-web": "di-web.php", + "di-providers": "di-providers.php", + "events-web": "events-web.php", + "events-console": "events-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\": "src", + "Yiisoft\\Yii\\Debug\\Tests\\Shared\\": "tests/Shared" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Debug Panel Extension", + "keywords": [ + "debug", + "debugger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-17T07:39:11+00:00" + }, + { + "name": "yiisoft/yii-event", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-event.git", + "reference": "2e02986a09235d20b3c02382f8cc5d7ad2e452fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-event/zipball/2e02986a09235d20b3c02382f8cc5d7ad2e452fb", + "reference": "2e02986a09235d20b3c02382f8cc5d7ad2e452fb", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config", + "merge-plan-file": "../tests/environment/.merge-plan.php" + }, + "config-plugin": { + "params-web": "params-web.php", + "params-console": "params-console.php", + "di": "di.php", + "di-web": "di-web.php", + "di-console": "di-console.php", + "events-web": [], + "events-console": [] + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Event\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Event", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "event", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-event/issues?state=open", + "source": "https://github.com/yiisoft/yii-event", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-11-04T15:57:42+00:00" + }, + { + "name": "yiisoft/yii-http", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-http.git", + "reference": "2555514a091ec9339259f10abc7e8970ef9e5db6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-http/zipball/2555514a091ec9339259f10abc7e8970ef9e5db6", + "reference": "2555514a091ec9339259f10abc7e8970ef9e5db6", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii HTTP Application", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "application", + "http", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-http/issues?state=open", + "source": "https://github.com/yiisoft/yii-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-07T07:54:13+00:00" + }, + { + "name": "yiisoft/yii-middleware", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-middleware.git", + "reference": "b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-middleware/zipball/b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a", + "reference": "b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^3.0", + "yiisoft/aliases": "^3.0", + "yiisoft/cookies": "^1.2", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/network-utilities": "^1.2", + "yiisoft/router": "^3.0", + "yiisoft/session": "^2.0", + "yiisoft/strings": "^2.1", + "yiisoft/validator": "^1.0|^2.0" + }, + "require-dev": { + "ext-uopz": "*", + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "slope-it/clock-mock": "^0.3.6", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/event-dispatcher": "For using events", + "yiisoft/translator": "For updating translator's locale" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Middleware\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Middleware", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "middleware", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-middleware/issues?state=open", + "source": "https://github.com/yiisoft/yii-middleware", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-03T19:34:10+00:00" + }, + { + "name": "yiisoft/yii-runner", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner.git", + "reference": "69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner/zipball/69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896", + "reference": "69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/yii-event": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.20", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/yii-runner-console": "Allows to run console application", + "yiisoft/yii-runner-http": "Allows to run HTTP application", + "yiisoft/yii-runner-roadrunner": "Allows to run HTTP application for RoadRunner" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "runner", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-09T14:10:08+00:00" + }, + { + "name": "yiisoft/yii-runner-console", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner-console.git", + "reference": "e92f4e72778508e7c2918f8fc8c3e75b758eb61a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner-console/zipball/e92f4e72778508e7c2918f8fc8c3e75b758eb61a", + "reference": "e92f4e72778508e7c2918f8fc8c3e75b758eb61a", + "shasum": "" + }, + "require": { + "php": "^8.0", + "symfony/console": "^5.4|^6.0|^7.0", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-runner": "^2.2" + }, + "require-dev": { + "codeception/codeception": "^5.0", + "codeception/module-cli": "^2.0", + "maglnet/composer-require-checker": "^4.2", + "rector/rector": "^1.0.0", + "vimeo/psalm": "^4.30|^5.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\Console\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Console application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "console", + "runner", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner-console/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner-console", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-10T10:06:34+00:00" + }, + { + "name": "yiisoft/yii-runner-http", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner-http.git", + "reference": "798c37abbcceb6b0053744b4bde0c476cd53e15e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner-http/zipball/798c37abbcceb6b0053744b4bde0c476cd53e15e", + "reference": "798c37abbcceb6b0053744b4bde0c476cd53e15e", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0 ", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/error-handler": "^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner": "^2.2" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.2", + "xepozz/internal-mocker": "^1.4", + "yiisoft/middleware-dispatcher": "^5.0", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "HTTP application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "http", + "runner", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner-http/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-10T10:08:37+00:00" + }, + { + "name": "yiisoft/yii-swagger", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-swagger.git", + "reference": "c0fe0483b04719a6724fb13650f679614e1b0cef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-swagger/zipball/c0fe0483b04719a6724fb13650f679614e1b0cef", + "reference": "c0fe0483b04719a6724fb13650f679614e1b0cef", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "swagger-api/swagger-ui": "^4.1|^5.0", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/arrays": "^3.0", + "yiisoft/assets": "^2.0|^3.0|^4.0", + "yiisoft/cache": "^1.0|^2.0|^3.0", + "yiisoft/data-response": "^1.0|^2.0", + "yiisoft/html": "^3.0", + "yiisoft/yii-view-renderer": "^7.1.0", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/csrf": "^2.0", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Swagger\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "OpenAPI Swagger for Yii Framework", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "api", + "swagger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-swagger/issues?state=open", + "source": "https://github.com/yiisoft/yii-swagger", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-04T21:55:48+00:00" + }, + { + "name": "yiisoft/yii-view-renderer", + "version": "7.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-view-renderer.git", + "reference": "cb11468f554d251c2deb87bf228a302c794134a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-view-renderer/zipball/cb11468f554d251c2deb87bf228a302c794134a3", + "reference": "cb11468f554d251c2deb87bf228a302c794134a3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/aliases": "^2.0|^3.0", + "yiisoft/csrf": "^1.2|^2.0", + "yiisoft/data-response": "^1.0|^2.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/html": "^2.5|^3.0", + "yiisoft/strings": "^2.0", + "yiisoft/view": "^10.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^9.5", + "rector/rector": "1.0.*", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php", + "events-web": "events-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\View\\Renderer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 compatible view renderer", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "renderer", + "view", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-view-renderer/issues?state=open", + "source": "https://github.com/yiisoft/yii-view-renderer", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-01T11:56:55+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "4.10.6", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/annotations": "^1.7 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.47.1", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "suggest": { + "doctrine/annotations": "^1.7 || ^2.0" + }, + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.10.6" + }, + "time": "2024-07-26T03:04:43+00:00" + } + ], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "react/promise": "^2", + "vimeo/psalm": "^3.12" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T18:52:26+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-13T18:00:56+00:00" + }, + { + "name": "behat/gherkin", + "version": "v4.9.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "shasum": "" + }, + "require": { + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + }, + "time": "2021-10-12T13:05:09+00:00" + }, + { + "name": "clue/stdio-react", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-stdio.git", + "reference": "dfa6c378aabdff718202d4e2453f752c38ea3399" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-stdio/zipball/dfa6c378aabdff718202d4e2453f752c38ea3399", + "reference": "dfa6c378aabdff718202d4e2453f752c38ea3399", + "shasum": "" + }, + "require": { + "clue/term-react": "^1.0 || ^0.1.1", + "clue/utf8-react": "^1.0 || ^0.1", + "php": ">=5.3", + "react/event-loop": "^1.2", + "react/stream": "^1.2" + }, + "require-dev": { + "clue/arguments": "^2.0", + "clue/commander": "^1.2", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "suggest": { + "ext-mbstring": "Using ext-mbstring should provide slightly better performance for handling I/O" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Stdio\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Async, event-driven console input & output (STDIN, STDOUT) for truly interactive CLI applications, built on top of ReactPHP", + "homepage": "https://github.com/clue/reactphp-stdio", + "keywords": [ + "async", + "autocomplete", + "autocompletion", + "cli", + "history", + "interactive", + "reactphp", + "readline", + "stdin", + "stdio", + "stdout" + ], + "support": { + "issues": "https://github.com/clue/reactphp-stdio/issues", + "source": "https://github.com/clue/reactphp-stdio/tree/v2.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-03-18T15:09:30+00:00" + }, + { + "name": "clue/term-react", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-term.git", + "reference": "00f297dc597eaee2ebf98af8f27cca5d21d60fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-term/zipball/00f297dc597eaee2ebf98af8f27cca5d21d60fa3", + "reference": "00f297dc597eaee2ebf98af8f27cca5d21d60fa3", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Term\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming terminal emulator, built on top of ReactPHP.", + "homepage": "https://github.com/clue/reactphp-term", + "keywords": [ + "C0", + "CSI", + "ansi", + "apc", + "ascii", + "c1", + "control codes", + "dps", + "osc", + "pm", + "reactphp", + "streaming", + "terminal", + "vt100", + "xterm" + ], + "support": { + "issues": "https://github.com/clue/reactphp-term/issues", + "source": "https://github.com/clue/reactphp-term/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2024-01-30T10:22:09+00:00" + }, + { + "name": "clue/utf8-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-utf8.git", + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-utf8/zipball/d5cd04d39cb5457aa5df830b7c4b301d2694217e", + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4 || ^0.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/stream": "^1.0 || ^0.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Utf8\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming UTF-8 parser, built on top of ReactPHP.", + "homepage": "https://github.com/clue/reactphp-utf8", + "keywords": [ + "reactphp", + "streaming", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "issues": "https://github.com/clue/reactphp-utf8/issues", + "source": "https://github.com/clue/reactphp-utf8/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-06T14:52:17+00:00" + }, + { + "name": "codeception/c3", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/c3.git", + "reference": "e23298a1cd5e7745973ea26a53572a3d9b013439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/c3/zipball/e23298a1cd5e7745973ea26a53572a3d9b013439", + "reference": "e23298a1cd5e7745973ea26a53572a3d9b013439", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.5.0" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Codeception\\c3\\Installer" + }, + "autoload": { + "psr-4": { + "Codeception\\c3\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tiger Seo", + "email": "tiger.seo@gmail.com" + }, + { + "name": "Michael Bodnarchuk", + "email": "davert.php@codegyre.com", + "homepage": "http://codegyre.com" + } + ], + "description": "CodeCoverage collector for Codeception", + "homepage": "http://codeception.com/", + "keywords": [ + "code coverage", + "codecoverage" + ], + "support": { + "issues": "https://github.com/Codeception/c3/issues", + "source": "https://github.com/Codeception/c3/tree/2.9.0" + }, + "time": "2023-10-15T17:57:07+00:00" + }, + { + "name": "codeception/codeception", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.6.2", + "codeception/lib-asserts": "^2.0", + "codeception/stub": "^4.1", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/php-code-coverage": "^9.2 || ^10.0 || ^11.0", + "phpunit/php-text-template": "^2.0 || ^3.0 || ^4.0", + "phpunit/php-timer": "^5.0.3 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5.20 || ^10.0 || ^11.0", + "psy/psysh": "^0.11.2 || ^0.12", + "sebastian/comparator": "^4.0.5 || ^5.0 || ^6.0", + "sebastian/diff": "^4.0.3 || ^5.0 || ^6.0", + "symfony/console": ">=4.4.24 <8.0", + "symfony/css-selector": ">=4.4.24 <8.0", + "symfony/event-dispatcher": ">=4.4.24 <8.0", + "symfony/finder": ">=4.4.24 <8.0", + "symfony/var-dumper": ">=4.4.24 <8.0", + "symfony/yaml": ">=4.4.24 <8.0" + }, + "conflict": { + "codeception/lib-innerbrowser": "<3.1.3", + "codeception/module-filesystem": "<3.0", + "codeception/module-phpbrowser": "<2.5" + }, + "replace": { + "codeception/phpunit-wrapper": "*" + }, + "require-dev": { + "codeception/lib-innerbrowser": "*@dev", + "codeception/lib-web": "^1.0", + "codeception/module-asserts": "*@dev", + "codeception/module-cli": "*@dev", + "codeception/module-db": "*@dev", + "codeception/module-filesystem": "*@dev", + "codeception/module-phpbrowser": "*@dev", + "codeception/util-universalframework": "*@dev", + "ext-simplexml": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "symfony/dotenv": ">=4.4.24 <8.0", + "symfony/process": ">=4.4.24 <8.0", + "vlucas/phpdotenv": "^5.1" + }, + "suggest": { + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "ext-simplexml": "For loading params from XML files", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/dotenv": "For loading params from .env files", + "symfony/phpunit-bridge": "For phpunit-bridge support", + "vlucas/phpdotenv": "For loading params from .env files" + }, + "bin": [ + "codecept" + ], + "type": "library", + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + }, + "classmap": [ + "src/PHPUnit/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.ua@gmail.com", + "homepage": "https://codeception.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "https://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/5.1.2" + }, + "funding": [ + { + "url": "https://opencollective.com/codeception", + "type": "open_collective" + } + ], + "time": "2024-03-07T07:19:42+00:00" + }, + { + "name": "codeception/lib-asserts", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-asserts.git", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", + "ext-dom": "*", + "php": "^7.4 | ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Assertion methods used by Codeception core and Asserts module", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + }, + "time": "2023-02-10T18:36:23+00:00" + }, + { + "name": "codeception/lib-innerbrowser", + "version": "3.1.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-innerbrowser.git", + "reference": "10482f7e34c0537bf5b87bc82a3d65a1842a8b4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/10482f7e34c0537bf5b87bc82a3d65a1842a8b4f", + "reference": "10482f7e34c0537bf5b87bc82a3d65a1842a8b4f", + "shasum": "" + }, + "require": { + "codeception/codeception": "^5.0", + "codeception/lib-web": "^1.0.1", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/phpunit": "^9.5", + "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0", + "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0" + }, + "require-dev": { + "codeception/util-universalframework": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "https://codegyre.com" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Parent library for all Codeception framework modules and PhpBrowser", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/3.1.3" + }, + "time": "2022-10-03T15:33:34+00:00" + }, + { + "name": "codeception/lib-web", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-web.git", + "reference": "01ff7f9ed8760ba0b0805a0b3a843b4e74165a60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/01ff7f9ed8760ba0b0805a0b3a843b4e74165a60", + "reference": "01ff7f9ed8760ba0b0805a0b3a843b4e74165a60", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "guzzlehttp/psr7": "^2.0", + "php": "^8.0", + "phpunit/phpunit": "^9.5 | ^10.0 | ^11.0", + "symfony/css-selector": ">=4.4.24 <8.0" + }, + "conflict": { + "codeception/codeception": "<5.0.0-alpha3" + }, + "require-dev": { + "php-webdriver/webdriver": "^1.12" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gintautas Miselis" + } + ], + "description": "Library containing files used by module-webdriver and lib-innerbrowser or module-phpbrowser", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-web/issues", + "source": "https://github.com/Codeception/lib-web/tree/1.0.6" + }, + "time": "2024-02-06T20:50:08+00:00" + }, + { + "name": "codeception/lib-xml", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-xml.git", + "reference": "ba49213e60807e3612513f404a5c93aec63f4c72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-xml/zipball/ba49213e60807e3612513f404a5c93aec63f4c72", + "reference": "ba49213e60807e3612513f404a5c93aec63f4c72", + "shasum": "" + }, + "require": { + "codeception/lib-web": "^1.0.6", + "ext-dom": "*", + "php": "^8.0", + "symfony/css-selector": ">=4.4.24 <8.0" + }, + "conflict": { + "codeception/codeception": "<5.0.0-alpha3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gintautas Miselis" + } + ], + "description": "Files used by module-rest and module-soap", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-xml/issues", + "source": "https://github.com/Codeception/lib-xml/tree/1.0.3" + }, + "time": "2024-02-06T21:00:41+00:00" + }, + { + "name": "codeception/module-asserts", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^2.0", + "php": "^8.0" + }, + "conflict": { + "codeception/codeception": "<5.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", + "keywords": [ + "assertions", + "asserts", + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/3.0.0" + }, + "time": "2022-02-16T19:48:08+00:00" + }, + { + "name": "codeception/module-cli", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-cli.git", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-cli/zipball/a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/module-asserts": "*", + "php": "^7.4 || ^8.0" + }, + "conflict": { + "codeception/codeception": "<4.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + } + ], + "description": "Codeception module for testing basic shell commands and shell output", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/module-cli/issues", + "source": "https://github.com/Codeception/module-cli/tree/2.0.1" + }, + "time": "2023-01-13T18:41:03+00:00" + }, + { + "name": "codeception/module-db", + "version": "3.1.4", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-db.git", + "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-db/zipball/06be16dcf4dda46eaef9454f1361d62bcb971c36", + "reference": "06be16dcf4dda46eaef9454f1361d62bcb971c36", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pdo": "*", + "php": "^8.0" + }, + "conflict": { + "codeception/codeception": "<5.0" + }, + "require-dev": { + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "DB module for Codeception", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "database-testing", + "db-testing" + ], + "support": { + "issues": "https://github.com/Codeception/module-db/issues", + "source": "https://github.com/Codeception/module-db/tree/3.1.4" + }, + "time": "2024-05-16T20:12:18+00:00" + }, + { + "name": "codeception/module-phpbrowser", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-phpbrowser.git", + "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-innerbrowser": "*@dev", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.4", + "php": "^8.0", + "symfony/browser-kit": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "codeception/codeception": "<5.0", + "codeception/lib-innerbrowser": "<3.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.199", + "codeception/module-rest": "^2.0 || *@dev", + "ext-curl": "*" + }, + "suggest": { + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Codeception module for testing web application over HTTP", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "functional-testing", + "http" + ], + "support": { + "issues": "https://github.com/Codeception/module-phpbrowser/issues", + "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.1" + }, + "time": "2023-12-08T19:41:28+00:00" + }, + { + "name": "codeception/module-rest", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-rest.git", + "reference": "086762ee8a1686e954678b015a7dca4b922c6520" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-rest/zipball/086762ee8a1686e954678b015a7dca4b922c6520", + "reference": "086762ee8a1686e954678b015a7dca4b922c6520", + "shasum": "" + }, + "require": { + "codeception/codeception": "^5.0.8", + "codeception/lib-xml": "^1.0", + "ext-dom": "*", + "ext-json": "*", + "justinrainbow/json-schema": "^5.2.9", + "php": "^8.1", + "softcreatr/jsonpath": "^0.8 || ^0.9" + }, + "require-dev": { + "codeception/lib-innerbrowser": "^3.0 | ^4.0", + "codeception/stub": "^4.0", + "codeception/util-universalframework": "^1.0", + "ext-libxml": "*", + "ext-simplexml": "*" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gintautas Miselis" + } + ], + "description": "REST module for Codeception", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "rest" + ], + "support": { + "issues": "https://github.com/Codeception/module-rest/issues", + "source": "https://github.com/Codeception/module-rest/tree/3.4.0" + }, + "time": "2024-07-12T06:28:28+00:00" + }, + { + "name": "codeception/stub", + "version": "4.1.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "shasum": "" + }, + "require": { + "php": "^7.4 | ^8.0", + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11" + }, + "conflict": { + "codeception/codeception": "<5.0.6" + }, + "require-dev": { + "consolidation/robo": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/4.1.3" + }, + "time": "2024-02-02T19:21:00+00:00" + }, + { + "name": "colinodell/json5", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/colinodell/json5.git", + "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinodell/json5/zipball/15b063f8cb5e6deb15f0cd39123264ec0d19c710", + "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.1.3|^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "mikehaertl/php-shellcommand": "^1.2.5", + "phpstan/phpstan": "^1.4", + "scrutinizer/ocular": "^1.6", + "squizlabs/php_codesniffer": "^2.3 || ^3.0", + "symfony/finder": "^4.4|^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0" + }, + "bin": [ + "bin/json5" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/global.php" + ], + "psr-4": { + "ColinODell\\Json5\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Developer" + } + ], + "description": "UTF-8 compatible JSON5 parser for PHP", + "homepage": "https://github.com/colinodell/json5", + "keywords": [ + "JSON5", + "json", + "json5_decode", + "json_decode" + ], + "support": { + "issues": "https://github.com/colinodell/json5/issues", + "source": "https://github.com/colinodell/json5/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + } + ], + "time": "2022-12-27T16:44:40+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-17T14:14:24+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.11.10", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "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.3.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-08-27T18:44:43+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "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.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": "2024-09-19T14:15:21+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "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", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.2", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + }, + "time": "2022-03-02T22:36:06+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "gitonomy/gitlib", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/gitonomy/gitlib.git", + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": "^8.0", + "symfony/polyfill-mbstring": "^1.7", + "symfony/process": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "ext-fileinfo": "*", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.20 || ^9.5.9", + "psr/log": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Gitonomy\\Git\\": "src/Gitonomy/Git/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Julien Didier", + "email": "genzo.wm@gmail.com", + "homepage": "https://github.com/juliendidier" + }, + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info", + "homepage": "https://github.com/lyrixx" + }, + { + "name": "Alexandre Salomé", + "email": "alexandre.salome@gmail.com", + "homepage": "https://github.com/alexandresalome" + } + ], + "description": "Library for accessing git", + "support": { + "issues": "https://github.com/gitonomy/gitlib/issues", + "source": "https://github.com/gitonomy/gitlib/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/gitonomy/gitlib", + "type": "tidelift" + } + ], + "time": "2023-12-20T13:02:08+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "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": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "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.9.2" + }, + "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": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "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.3" + }, + "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": "2024-07-18T10:29:17+00:00" + }, + { + "name": "httpsoft/http-basis", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-basis.git", + "reference": "63c4306c516375e3fa08358a58194e159bfbb984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-basis/zipball/63c4306c516375e3fa08358a58194e159bfbb984", + "reference": "63c4306c516375e3fa08358a58194e159bfbb984", + "shasum": "" + }, + "require": { + "ext-json": "*", + "httpsoft/http-cookie": "^1.1", + "httpsoft/http-emitter": "^1.1", + "httpsoft/http-error-handler": "^1.1", + "httpsoft/http-message": "^1.1", + "httpsoft/http-response": "^1.1", + "httpsoft/http-router": "^1.1", + "httpsoft/http-runner": "^1.1", + "httpsoft/http-server-request": "^1.1", + "php": "^7.4|^8.0", + "psr/container": "^1.0|^2.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": "^1.1|^2.0|^3.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "devanych/di-container": "^2.1", + "devanych/view-renderer": "^1.0", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Basis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Simple and fast HTTP microframework implementing PSR standards", + "homepage": "https://httpsoft.org/", + "keywords": [ + "PSR-11", + "http", + "http-framework", + "microframework", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/basis", + "issues": "https://github.com/httpsoft/http-basis/issues", + "source": "https://github.com/httpsoft/http-basis" + }, + "time": "2023-05-05T22:15:06+00:00" + }, + { + "name": "httpsoft/http-cookie", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-cookie.git", + "reference": "c304b7d9888ed27bf2bcdb95762d87263a457644" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-cookie/zipball/c304b7d9888ed27bf2bcdb95762d87263a457644", + "reference": "c304b7d9888ed27bf2bcdb95762d87263a457644", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.1|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Cookie\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Managing cookies with PSR-7 support", + "homepage": "https://httpsoft.org/", + "keywords": [ + "cookie", + "cookies", + "http", + "http-cookie", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/cookie", + "issues": "https://github.com/httpsoft/http-cookie/issues", + "source": "https://github.com/httpsoft/http-cookie" + }, + "time": "2023-05-05T20:37:18+00:00" + }, + { + "name": "httpsoft/http-emitter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-emitter.git", + "reference": "b09e2834b6d40e022f0c0eb7417f97f496e376b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-emitter/zipball/b09e2834b6d40e022f0c0eb7417f97f496e376b6", + "reference": "b09e2834b6d40e022f0c0eb7417f97f496e376b6", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.1|^2.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Emitter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Emitting of PSR-7 Response implementation", + "homepage": "https://httpsoft.org/", + "keywords": [ + "emitter", + "http", + "http-emitter", + "http-message", + "php", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/emitter", + "issues": "https://github.com/httpsoft/http-emitter/issues", + "source": "https://github.com/httpsoft/http-emitter" + }, + "time": "2023-05-05T20:18:44+00:00" + }, + { + "name": "httpsoft/http-error-handler", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-error-handler.git", + "reference": "f5bfb10cdf6de7420e59d8342ba12f19749e7bc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-error-handler/zipball/f5bfb10cdf6de7420e59d8342ba12f19749e7bc1", + "reference": "f5bfb10cdf6de7420e59d8342ba12f19749e7bc1", + "shasum": "" + }, + "require": { + "httpsoft/http-response": "^1.1", + "php": "^7.4|^8.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-server-request": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\ErrorHandler\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Error handling PSR-7 and PSR-15 components", + "homepage": "https://httpsoft.org/", + "keywords": [ + "error-handler", + "error-middleware", + "http", + "http-error", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/error-handler", + "issues": "https://github.com/httpsoft/http-error-handler/issues", + "source": "https://github.com/httpsoft/http-error-handler" + }, + "time": "2023-05-05T21:14:04+00:00" + }, + { + "name": "httpsoft/http-response", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-response.git", + "reference": "6e9d25a540506ba8a5165817fdd856a856e32c02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-response/zipball/6e9d25a540506ba8a5165817fdd856a856e32c02", + "reference": "6e9d25a540506ba8a5165817fdd856a856e32c02", + "shasum": "" + }, + "require": { + "httpsoft/http-message": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Response\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "PSR-7 Response implementations", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "http-response", + "php", + "psr-7", + "responses" + ], + "support": { + "docs": "https://httpsoft.org/docs/response", + "issues": "https://github.com/httpsoft/http-response/issues", + "source": "https://github.com/httpsoft/http-response" + }, + "time": "2023-05-05T20:55:06+00:00" + }, + { + "name": "httpsoft/http-router", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-router.git", + "reference": "460ee40b15ceb61d86a7c511d321c4580960601e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-router/zipball/460ee40b15ceb61d86a7c511d321c4580960601e", + "reference": "460ee40b15ceb61d86a7c511d321c4580960601e", + "shasum": "" + }, + "require": { + "httpsoft/http-runner": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Simple and fast HTTP request router providing PSR-7 and PSR-15", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-router", + "php", + "psr-15", + "psr-7", + "route", + "router" + ], + "support": { + "docs": "https://httpsoft.org/docs/router", + "issues": "https://github.com/httpsoft/http-router/issues", + "source": "https://github.com/httpsoft/http-router" + }, + "time": "2023-05-05T22:02:47+00:00" + }, + { + "name": "httpsoft/http-runner", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-runner.git", + "reference": "00ddc625dbf8f0acb786e899575537c7e8327847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-runner/zipball/00ddc625dbf8f0acb786e899575537c7e8327847", + "reference": "00ddc625dbf8f0acb786e899575537c7e8327847", + "shasum": "" + }, + "require": { + "httpsoft/http-emitter": "^1.1", + "php": "^7.4|^8.0", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.1|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "devanych/di-container": "^2.1", + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Runner\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Running PSR-7 components and building PSR-15 middleware pipelines", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-middleware", + "middleware-pipeline", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/runner", + "issues": "https://github.com/httpsoft/http-runner/issues", + "source": "https://github.com/httpsoft/http-runner" + }, + "time": "2023-05-05T21:47:55+00:00" + }, + { + "name": "httpsoft/http-server-request", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-server-request.git", + "reference": "3d773c8bcaa1c44793d35842fcd82a9d5fd5f193" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-server-request/zipball/3d773c8bcaa1c44793d35842fcd82a9d5fd5f193", + "reference": "3d773c8bcaa1c44793d35842fcd82a9d5fd5f193", + "shasum": "" + }, + "require": { + "httpsoft/http-message": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\ServerRequest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Infrastructure for creating PSR-7 ServerRequest and UploadedFile", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "http-server-request", + "php", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/server-request", + "issues": "https://github.com/httpsoft/http-server-request/issues", + "source": "https://github.com/httpsoft/http-server-request" + }, + "time": "2023-05-05T19:55:05+00:00" + }, + { + "name": "infection/abstract-testframework-adapter", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/infection/abstract-testframework-adapter.git", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.17", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\AbstractTestFramework\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Abstract Test Framework Adapter for Infection", + "support": { + "issues": "https://github.com/infection/abstract-testframework-adapter/issues", + "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-17T18:49:12+00:00" + }, + { + "name": "infection/extension-installer", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/infection/extension-installer.git", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0" + }, + "require-dev": { + "composer/composer": "^1.9 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.18, <2.19", + "infection/infection": "^0.15.2", + "php-coveralls/php-coveralls": "^2.4", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.10", + "phpstan/phpstan-phpunit": "^0.12.6", + "phpstan/phpstan-strict-rules": "^0.12.2", + "phpstan/phpstan-webmozart-assert": "^0.12.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.8" + }, + "type": "composer-plugin", + "extra": { + "class": "Infection\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Infection\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Infection Extension Installer", + "support": { + "issues": "https://github.com/infection/extension-installer/issues", + "source": "https://github.com/infection/extension-installer/tree/0.1.2" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-10-20T22:08:34+00:00" + }, + { + "name": "infection/include-interceptor", + "version": "0.2.5", + "source": { + "type": "git", + "url": "https://github.com/infection/include-interceptor.git", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", + "shasum": "" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "infection/infection": "^0.15.0", + "phan/phan": "^2.4 || ^3", + "php-coveralls/php-coveralls": "^2.2", + "phpstan/phpstan": "^0.12.8", + "phpunit/phpunit": "^8.5", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\StreamWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", + "support": { + "issues": "https://github.com/infection/include-interceptor/issues", + "source": "https://github.com/infection/include-interceptor/tree/0.2.5" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-09T10:03:57+00:00" + }, + { + "name": "infection/infection", + "version": "0.27.10", + "source": { + "type": "git", + "url": "https://github.com/infection/infection.git", + "reference": "873cd3335774a114bef9ca93388e623bf362d820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/infection/zipball/873cd3335774a114bef9ca93388e623bf362d820", + "reference": "873cd3335774a114bef9ca93388e623bf362d820", + "shasum": "" + }, + "require": { + "colinodell/json5": "^2.2", + "composer-runtime-api": "^2.0", + "composer/xdebug-handler": "^2.0 || ^3.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "fidry/cpu-core-counter": "^0.4.0 || ^0.5.0 || ^1.0", + "infection/abstract-testframework-adapter": "^0.5.0", + "infection/extension-installer": "^0.1.0", + "infection/include-interceptor": "^0.2.5", + "justinrainbow/json-schema": "^5.2.10", + "nikic/php-parser": "^4.15.1", + "ondram/ci-detector": "^4.1.0", + "php": "^8.1", + "sanmai/later": "^0.1.1", + "sanmai/pipeline": "^5.1 || ^6", + "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/safe": "^2.1.2", + "webmozart/assert": "^1.11" + }, + "conflict": { + "antecedent/patchwork": "<2.1.25", + "dg/bypass-finals": "<1.4.1", + "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" + }, + "require-dev": { + "brianium/paratest": "^6.11", + "ext-simplexml": "*", + "fidry/makefile": "^0.2.0", + "helmich/phpunit-json-assert": "^3.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.10.15", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpstan/phpstan-webmozart-assert": "^1.0.2", + "phpunit/phpunit": "^9.6", + "rector/rector": "^0.16.0", + "sidz/phpstan-rules": "^0.4.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/phpstan-safe-rule": "^1.2.0" + }, + "bin": [ + "bin/infection" + ], + "type": "library", + "autoload": { + "psr-4": { + "Infection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com", + "homepage": "https://twitter.com/maks_rafalko" + }, + { + "name": "Oleg Zhulnev", + "homepage": "https://github.com/sidz" + }, + { + "name": "Gert de Pagter", + "homepage": "https://github.com/BackEndTea" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com", + "homepage": "https://twitter.com/tfidry" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com" + }, + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", + "keywords": [ + "coverage", + "mutant", + "mutation framework", + "mutation testing", + "testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/infection/infection/issues", + "source": "https://github.com/infection/infection/tree/0.27.10" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2024-02-20T00:08:52+00:00" + }, + { + "name": "jolicode/jolinotif", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/jolicode/JoliNotif.git", + "reference": "b34dac1826c8d33e9fd5c300546261e94f1ebdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jolicode/JoliNotif/zipball/b34dac1826c8d33e9fd5c300546261e94f1ebdb8", + "reference": "b34dac1826c8d33e9fd5c300546261e94f1ebdb8", + "shasum": "" + }, + "require": { + "jolicode/php-os-helper": "^0.1.0", + "php": ">=8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^3", + "symfony/process": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-ffi": "Needed to send notifications via libnotify on Linux" + }, + "bin": [ + "jolinotif" + ], + "type": "library", + "autoload": { + "psr-4": { + "Joli\\JoliNotif\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loïck Piera", + "email": "pyrech@gmail.com" + } + ], + "description": "Send desktop notifications on Windows, Linux, MacOS.", + "keywords": [ + "MAC", + "growl", + "linux", + "notification", + "windows" + ], + "support": { + "issues": "https://github.com/jolicode/JoliNotif/issues", + "source": "https://github.com/jolicode/JoliNotif/tree/v2.7.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/jolicode/jolinotif", + "type": "tidelift" + } + ], + "time": "2024-06-01T06:05:49+00:00" + }, + { + "name": "jolicode/php-os-helper", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/jolicode/php-os-helper.git", + "reference": "1622ad8bbcab98e62b5c041397e8519f10d90e29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jolicode/php-os-helper/zipball/1622ad8bbcab98e62b5c041397e8519f10d90e29", + "reference": "1622ad8bbcab98e62b5c041397e8519f10d90e29", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/phpunit-bridge": "^6.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "JoliCode\\PhpOsHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loïck Piera", + "email": "pyrech@gmail.com" + } + ], + "description": "Helpers to detect the OS of the machine where PHP is running.", + "keywords": [ + "linux", + "os", + "osx", + "php", + "windows" + ], + "support": { + "issues": "https://github.com/jolicode/php-os-helper/issues", + "source": "https://github.com/jolicode/php-os-helper/tree/v0.1.0" + }, + "time": "2023-12-03T12:46:03+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "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", + "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/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + }, + "time": "2024-07-06T21:00:26+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "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.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "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", + "phpspec/prophecy": "^1.10", + "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.12.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:39:25+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.5.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" + }, + "time": "2024-09-08T10:13:13+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.19.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "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.19.2" + }, + "time": "2024-09-17T19:36:00+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "ondram/ci-detector", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.13.2", + "lmc/coding-standard": "^3.0.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpunit/phpunit": "^9.6.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect continuous integration environment and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "Wercker", + "adapter", + "appveyor", + "aws", + "aws codebuild", + "azure", + "azure devops", + "azure pipelines", + "bamboo", + "bitbucket", + "buddy", + "ci-info", + "codebuild", + "continuous integration", + "continuousphp", + "devops", + "drone", + "github", + "gitlab", + "interface", + "jenkins", + "pipelines", + "sourcehut", + "teamcity", + "travis" + ], + "support": { + "issues": "https://github.com/OndraM/ci-detector/issues", + "source": "https://github.com/OndraM/ci-detector/tree/4.2.0" + }, + "time": "2024-03-12T13:22:30+00:00" + }, + { + "name": "openlss/lib-array2xml", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "LSS": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bryan Tong", + "email": "bryan@nullivex.com", + "homepage": "https://www.nullivex.com" + }, + { + "name": "Tony Butler", + "email": "spudz76@gmail.com", + "homepage": "https://www.nullivex.com" + } + ], + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com", + "keywords": [ + "array", + "array conversion", + "xml", + "xml conversion" + ], + "support": { + "issues": "https://github.com/nullivex/lib-array2xml/issues", + "source": "https://github.com/nullivex/lib-array2xml/tree/master" + }, + "time": "2019-03-29T20:06:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "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.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+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": "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.4.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" + }, + "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": "opensource@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.4.1" + }, + "time": "2024-05-21T05:55:05+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": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.30.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e", + "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.30.1" + }, + "time": "2024-09-07T20:13:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" + }, + "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": "9.2.x-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/9.2.32" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:23:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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": "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/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.21", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-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/9.6.21" + }, + "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-09-19T10:50:18+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + }, + "time": "2024-06-10T01:18:23+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "roave/infection-static-analysis-plugin", + "version": "1.35.0", + "source": { + "type": "git", + "url": "https://github.com/Roave/infection-static-analysis-plugin.git", + "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/3cb32845c5f758913a4b9eafd91ae18eafc26d82", + "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "infection/infection": "0.27.10", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "sanmai/later": "^0.1.4", + "vimeo/psalm": "^4.30.0 || ^5.15" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "phpunit/phpunit": "^10.5.12" + }, + "bin": [ + "bin/roave-infection-static-analysis-plugin" + ], + "type": "library", + "autoload": { + "psr-4": { + "Roave\\InfectionStaticAnalysis\\": "src/Roave/InfectionStaticAnalysis" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Static analysis on top of mutation testing - prevents escaped mutants from being invalid according to static analysis", + "support": { + "issues": "https://github.com/Roave/infection-static-analysis-plugin/issues", + "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.35.0" + }, + "time": "2024-03-10T11:55:48+00:00" + }, + { + "name": "roave/security-advisories", + "version": "dev-latest", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "4b6b927472278272e2411f4341dba95d96c8c7d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4b6b927472278272e2411f4341dba95d96c8c7d7", + "reference": "4b6b927472278272e2411f4341dba95d96c8c7d7", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.3.10", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", + "akaunting/akaunting": "<2.1.13", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amazing/media2click": ">=1,<1.3.3", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<=1.7.2|>=2,<=2.1", + "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", + "area17/twill": "<1.2.5|>=2,<2.5.3", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "auth0/wordpress": "<=4.6", + "automad/automad": "<2.0.0.0-alpha5", + "automattic/jetpack": "<9.8", + "awesome-support/awesome-support": "<=6.0.7", + "aws/aws-sdk-php": "<3.288.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", + "badaso/core": "<2.7", + "bagisto/bagisto": "<2.1", + "barrelstrength/sprout-base-email": "<1.2.7", + "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<5.0.9", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<=3.1.4", + "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", + "bmarshall511/wordpress_zero_spam": "<5.2.13", + "bolt/bolt": "<3.7.2", + "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", + "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", + "brightlocal/phpwhois": "<=4.2.5", + "brotkrueml/codehighlight": "<2.7", + "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", + "brotkrueml/typo3-matomo-integration": "<1.3.2", + "buddypress/buddypress": "<7.2.1", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", + "causal/oidc": "<2.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.15", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<2.7|==2.7", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.4.7", + "codeigniter4/shield": "<1.0.0.0-beta8", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", + "concrete5/concrete5": "<9.3.4", + "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.49|>=5,<5.3.15|>=5.4,<5.4.3", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2|>=5,<=5.2.2", + "croogo/croogo": "<4", + "cuyz/valinor": "<0.12", + "czim/file-handling": "<1.5|>=2,<2.3", + "czproject/git-php": "<4.0.3", + "damienharper/auditor-bundle": "<5.2.6", + "dapphp/securimage": "<3.6.6", + "darylldoyle/safe-svg": "<1.9.10", + "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", + "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "desperado/xml-bundle": "<=0.1.7", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<0.7.2", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2|==11.9999999.9999999.9999999-dev", + "drupal/core-recommended": "==11.9999999.9999999.9999999-dev", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4|==11.9999999.9999999.9999999-dev", + "duncanmcclean/guest-entries": "<3.1.2", + "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", + "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", + "egroupware/egroupware": "<23.1.20240624", + "elefant/cms": "<2.0.7", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", + "encore/laravel-admin": "<=1.8.19", + "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", + "enshrined/svg-sanitize": "<0.15", + "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", + "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=2.1.1", + "fenom/fenom": "<=2.12.1", + "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", + "firebase/php-jwt": "<6", + "fisharebest/webtrees": "<=2.1.18", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", + "fooman/tcpdf": "<6.2.22", + "forkcms/forkcms": "<5.11.1", + "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<=11.5.1", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "friendsofsymfony/oauth2-php": "<1.3", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", + "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<=2.2.0.0-RC3", + "frozennode/administrator": "<=5.0.12", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", + "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3", + "getkirby/kirby": "<=2.5.12", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", + "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", + "google/protobuf": "<3.15", + "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gree/jose": "<2.2.1", + "gregwar/rst": "<1.0.3", + "grumpydictator/firefly-iii": "<6.1.17", + "gugoan/economizzer": "<=0.9.0.0-beta1", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", + "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", + "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", + "ibexa/user": ">=4,<4.4.3", + "icecoder/icecoder": "<=8.1", + "idno/known": "<=1.3.1", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", + "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", + "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "imdbphp/imdbphp": "<=5.1.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "in2code/ipandlanguageredirect": "<5.1.2", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.4.1", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", + "ipl/web": "<0.10.1", + "islandora/islandora": ">=2,<2.4.1", + "ivankristianto/phpwhois": "<=4.3", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", + "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", + "joomla/application": "<1.0.13", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", + "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", + "jsdecena/laracom": "<2.0.9", + "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", + "kevinpapst/kimai2": "<1.16.7", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<=2.20.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", + "krayin/laravel-crm": "<1.2.2", + "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", + "laminas/laminas-http": "<2.14.2", + "laravel/fortify": "<1.11.1", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": ">=5.4,<5.4.22", + "laravel/socialite": ">=1,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=9|==10.1", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", + "league/commonmark": "<0.18.3", + "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "libreform/libreform": ">=2,<=2.0.8", + "librenms/librenms": "<2017.08.18", + "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", + "limesurvey/limesurvey": "<3.27.19", + "livehelperchat/livehelperchat": "<=3.91", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch9|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch7|==2.4.7|>=2.4.7.0-patch1,<2.4.7.0-patch2", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magneto/core": "<1.9.4.4-dev", + "maikuolan/phpmussel": ">=1,<1.6", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<2.26.2", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.4.13|>=5,<5.1.1", + "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mdanter/ecc": "<2", + "mediawiki/core": "<1.36.2", + "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.16", + "mikehaertl/php-shellcommand": "<1.6.1", + "miniorange/miniorange-saml": "<1.4.3", + "mittwald/typo3_forum": "<1.2.1", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<=2.8.3.0-patch", + "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", + "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "nategood/httpful": "<1", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.04", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", + "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", + "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "novaksolutions/infusionsoft-php-sdk": "<1", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", + "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/backend": "<1.1.2", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", + "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "omeka/omeka-s": "<4.0.3", + "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", + "opencart/opencart": ">=0", + "openid/php-openid": "<2.3", + "openmage/magento-lts": "<20.10.1", + "opensolutions/vimbadmin": "<=3.0.15", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", + "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": "<3", + "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", + "paragonie/random_compat": "<2", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", + "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", + "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", + "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", + "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", + "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", + "phpmailer/phpmailer": "<6.5", + "phpmussel/phpmussel": ">=1,<1.6", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", + "phpoffice/phpexcel": "<1.8", + "phpoffice/phpspreadsheet": "<1.29.1|>=2,<2.1.1|>=2.2,<2.2.1", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.5.4", + "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/data-hub": "<1.2.4", + "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<11.2.4", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", + "pressbooks/pressbooks": "<5.18", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", + "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": "<8.1.6", + "prestashop/productcomments": "<5.0.2", + "prestashop/ps_emailsubscription": "<2.6.1", + "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", + "processwire/processwire": "<=3.0.229", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.11.6", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", + "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", + "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", + "rainlab/blog-plugin": "<1.4.1", + "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", + "rhukster/dom-sanitizer": "<1.0.7", + "rmccue/requests": ">=1.6,<1.8", + "robrichards/xmlseclibs": ">=1,<3.0.4", + "roots/soil": "<4.1", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", + "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.17", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopxo/shopxo": "<=6.1", + "showdoc/showdoc": "<2.10.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", + "silverstripe/comments": ">=1.3,<3.1.1", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": "<5.2.16", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "silverstripe/reports": "<5.2.3", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", + "silverstripe/subsites": ">=2,<2.6.1", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", + "silverstripe/userforms": "<3|>=5,<5.4.2", + "silverstripe/versioned-admin": ">=1,<1.11.1", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", + "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spatie/image-optimizer": "<1.7.3", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<24.05.1", + "statamic/cms": "<4.46|>=5.3,<5.6.2", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<=2.1.64", + "studiomitte/friendlycaptcha": "<0.1.4", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "sukohi/surpass": "<1", + "sulu/form-bundle": ">=2,<2.5.3", + "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", + "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", + "swag/paypal": "<5.4.4", + "swiftmailer/swiftmailer": "<6.2.5", + "swiftyedit/swiftyedit": "<1.2", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", + "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0", + "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", + "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", + "symfony/mime": ">=4.3,<4.3.8", + "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", + "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", + "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", + "tecnickcom/tcpdf": "<=6.7.4", + "terminal42/contao-tablelookupwizard": "<3.3.5", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<6.0.8", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7.2", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<9.5.60602", + "truckersmp/phpwhois": "<=4.3.1", + "ttskch/pagination-service-provider": "<1", + "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", + "twig/twig": "<1.44.8|>=2,<2.16.1|>=3,<3.11.1|>=3.12,<3.14", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", + "ua-parser/uap-php": "<3.8", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", + "vanilla/safecurl": "<0.9.2", + "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", + "vova07/yii2-fileapi-widget": "<0.1.9", + "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", + "waldhacker/hcaptcha": "<2.1.2", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<2.6.7", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-feet/coastercms": "==5.5", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", + "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", + "wireui/wireui": "<1.19.3|>=2,<2.1.3", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", + "wpanel/wpanel4-cms": "<=4.3.1", + "wpcloud/wp-stateless": "<3.2", + "wpglobus/wpglobus": "<=1.9.6", + "wwbn/avideo": "<14.3", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<=6.4", + "yidashi/yii2cmf": "<=2", + "yii2mod/yii2-cms": "<1.9.2", + "yiisoft/yii": "<1.1.29", + "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii2-authclient": "<2.2.15", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-elasticsearch": "<2.0.5", + "yiisoft/yii2-gii": "<=2.2.4", + "yiisoft/yii2-jui": "<2.0.4", + "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", + "zencart/zencart": "<=1.5.7.0-beta", + "zendesk/zendesk_api_client_php": "<2.2.11", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": "<2.8.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": "<=3", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", + "zetacomponents/mail": "<1.8.2", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<=6.1.53" + }, + "default-branch": true, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + }, + { + "name": "Ilya Tribusean", + "email": "slash3b@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2024-09-19T17:04:43+00:00" + }, + { + "name": "sanmai/later", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://github.com/sanmai/later.git", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.35.1", + "infection/infection": ">=0.27.6", + "phan/phan": ">=2", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": ">=1.4.5", + "phpunit/phpunit": ">=9.5 <10", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Later\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "Later: deferred wrapper object", + "support": { + "issues": "https://github.com/sanmai/later/issues", + "source": "https://github.com/sanmai/later/tree/0.1.4" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2023-10-24T00:25:28+00:00" + }, + { + "name": "sanmai/pipeline", + "version": "v6.11", + "source": { + "type": "git", + "url": "https://github.com/sanmai/pipeline.git", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.17", + "infection/infection": ">=0.10.5", + "league/pipeline": "^0.3 || ^1.0", + "phan/phan": ">=1.1", + "php-coveralls/php-coveralls": "^2.4.1", + "phpstan/phpstan": ">=0.10", + "phpunit/phpunit": ">=9.4", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v6.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Pipeline\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "General-purpose collections pipeline", + "support": { + "issues": "https://github.com/sanmai/pipeline/issues", + "source": "https://github.com/sanmai/pipeline/tree/v6.11" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2024-06-15T03:11:19+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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 calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-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", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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": "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", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.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": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "softcreatr/jsonpath", + "version": "0.9.1", + "source": { + "type": "git", + "url": "https://github.com/SoftCreatR/JSONPath.git", + "reference": "272173a65fd16b25010dbd54d04dd34c0c5a8500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SoftCreatR/JSONPath/zipball/272173a65fd16b25010dbd54d04dd34c0c5a8500", + "reference": "272173a65fd16b25010dbd54d04dd34c0c5a8500", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "8.1 - 8.4" + }, + "replace": { + "flow/jsonpath": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.58", + "phpunit/phpunit": "10 - 12", + "squizlabs/php_codesniffer": "^3.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "Flow\\JSONPath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stephen Frank", + "email": "stephen@flowsa.com", + "homepage": "https://prismaticbytes.com", + "role": "Developer" + }, + { + "name": "Sascha Greuel", + "email": "hello@1-2.dev", + "homepage": "https://1-2.dev", + "role": "Developer" + } + ], + "description": "JSONPath implementation for parsing, searching and flattening arrays", + "support": { + "email": "hello@1-2.dev", + "forum": "https://github.com/SoftCreatR/JSONPath/discussions", + "issues": "https://github.com/SoftCreatR/JSONPath/issues", + "source": "https://github.com/SoftCreatR/JSONPath" + }, + "funding": [ + { + "url": "https://ecologi.com/softcreatr?r=61212ab3fc69b8eb8a2014f4", + "type": "custom" + }, + { + "url": "https://github.com/softcreatr", + "type": "github" + } + ], + "time": "2024-06-01T09:15:21+00:00" + }, + { + "name": "spatie/phpunit-watcher", + "version": "1.23.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/phpunit-watcher.git", + "reference": "c192fff763810c8378511bcf0069df4b91478866" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/c192fff763810c8378511bcf0069df4b91478866", + "reference": "c192fff763810c8378511bcf0069df4b91478866", + "shasum": "" + }, + "require": { + "clue/stdio-react": "^2.4", + "jolicode/jolinotif": "^2.2", + "php": "^7.2 | ^8.0 | ^8.1", + "symfony/console": "^5 | ^6", + "symfony/finder": "^5.4 | ^6", + "symfony/process": "^5.4 | ^6", + "symfony/yaml": "^5.2 | ^6", + "yosymfony/resource-watcher": "^2.0 | ^3.0" + }, + "conflict": { + "symfony/console": "<5.2", + "yosymfony/resource-watcher": "<2.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.6 | ^9.0" + }, + "bin": [ + "phpunit-watcher" + ], + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\PhpUnitWatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Automatically rerun PHPUnit tests when source code changes", + "homepage": "https://github.com/spatie/phpunit-watcher", + "keywords": [ + "phpunit-watcher", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/phpunit-watcher/issues", + "source": "https://github.com/spatie/phpunit-watcher/tree/1.23.6" + }, + "time": "2022-01-31T11:57:13+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/62ab90b92066ef6cce5e79365625b4b1432464c8", + "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "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": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v6.4.8" + }, + "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-05-31T14:49:08+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.1.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": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9d307ecbcb917001692be333cdc58f474fdb37f0", + "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "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 DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.12" + }, + "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-09-15T06:35:36+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.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": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^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/v7.1.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": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" + }, + "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-09-17T09:16:35+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "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.12" + }, + "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-09-17T12:47:12+00:00" + }, + { + "name": "thecodingmachine/safe", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.2", + "thecodingmachine/phpstan-strict-rules": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "files": [ + "deprecated/apc.php", + "deprecated/array.php", + "deprecated/datetime.php", + "deprecated/libevent.php", + "deprecated/misc.php", + "deprecated/password.php", + "deprecated/mssql.php", + "deprecated/stats.php", + "deprecated/strings.php", + "lib/special_cases.php", + "deprecated/mysqli.php", + "generated/apache.php", + "generated/apcu.php", + "generated/array.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gettext.php", + "generated/gmp.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/mysql.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ], + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "deprecated/Exceptions/", + "generated/Exceptions/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error", + "support": { + "issues": "https://github.com/thecodingmachine/safe/issues", + "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" + }, + "time": "2023-04-05T11:54:14+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.30.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer/package-versions-deprecated": "^1.8.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.13", + "openlss/lib-array2xml": "^1.0", + "php": "^7.1|^8", + "sebastian/diff": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25", + "webmozart/path-util": "^2.3" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0||^6.0", + "ext-curl": "*", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0||dev-master", + "phpspec/prophecy": ">=1.9.0", + "phpstan/phpdoc-parser": "1.2.* || 1.6.4", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.16", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3 || ^5.0 || ^6.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" + ], + "support": { + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.30.0" + }, + "time": "2022-11-06T20:37:08+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" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" + }, + { + "name": "yiisoft/active-record", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/active-record.git", + "reference": "5c4151d74fc8025261b0d3921f649513261a0144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/active-record/zipball/5c4151d74fc8025261b0d3921f649513261a0144", + "reference": "5c4151d74fc8025261b0d3921f649513261a0144", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1", + "yiisoft/db": "dev-master" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/aliases": "^2.0", + "yiisoft/arrays": "^3.1", + "yiisoft/cache": "^3.0", + "yiisoft/db-sqlite": "dev-master", + "yiisoft/di": "^1.0", + "yiisoft/factory": "^1.2", + "yiisoft/json": "^1.0", + "yiisoft/middleware-dispatcher": "^5.2" + }, + "suggest": { + "yiisoft/arrays": "For \\Yiisoft\\Arrays\\ArrayableInterface support", + "yiisoft/db-mssql": "For MSSQL database support", + "yiisoft/db-mysql": "For MySQL database support", + "yiisoft/db-oracle": "For Oracle database support", + "yiisoft/db-pgsql": "For PostgreSQL database support", + "yiisoft/db-sqlite": "For SQLite database support", + "yiisoft/factory": "For factory support", + "yiisoft/middleware-dispatcher": "For middleware support" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\ActiveRecord\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii ActiveRecord Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "Active Record", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/active-record/issues?state=open", + "source": "https://github.com/yiisoft/active-record", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-16T09:27:14+00:00" + }, + { + "name": "yiisoft/db", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/db.git", + "reference": "c765ca43af502dda2ec2aed01f368d0f15e8b290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/db/zipball/c765ca43af502dda2ec2aed01f368d0f15e8b290", + "reference": "c765ca43af502dda2ec2aed01f368d0f15e8b290", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pdo": "*", + "php": "^8.1", + "psr/log": "^2.0|^3.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^10.0", + "rector/rector": "^1.1.1", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/aliases": "^3.0", + "yiisoft/cache-file": "^3.1", + "yiisoft/di": "^1.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/json": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/var-dumper": "^1.5", + "yiisoft/yii-debug": "dev-master" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Db\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Database", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "database", + "dbal", + "query-builder", + "sql", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/db/issues/issues?state=open", + "source": "https://github.com/yiisoft/db", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-16T10:51:44+00:00" + }, + { + "name": "yiisoft/yii-debug-api", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug-api.git", + "reference": "8349f8d6f250e0f17bec8ab187390124e491c8c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug-api/zipball/8349f8d6f250e0f17bec8ab187390124e491c8c0", + "reference": "8349f8d6f250e0f17bec8ab187390124e491c8c0", + "shasum": "" + }, + "require": { + "alexkart/curl-builder": "^1.0", + "gitonomy/gitlib": "^1.3", + "guzzlehttp/guzzle": "^7.5", + "guzzlehttp/psr7": "^2.4", + "httpsoft/http-message": "^1.1", + "php": "^8.1", + "psr/container": "^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/simple-cache": "^2.0|^3.0", + "symfony/process": "^5.4|^6.0", + "yiisoft/aliases": "^3.0", + "yiisoft/config": "^1.1", + "yiisoft/data-response": "^2.0", + "yiisoft/di": "^1.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^5.2", + "yiisoft/router": "^3.0", + "yiisoft/translator": "^3.0", + "yiisoft/var-dumper": "^1.4", + "yiisoft/yii-debug": "dev-master", + "yiisoft/yii-middleware": "^1.0", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "codeception/codeception": "^5.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.6", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/active-record": "dev-master", + "yiisoft/assets": "^4.0", + "yiisoft/csrf": "^2.0", + "yiisoft/db": "1.2 as dev-master", + "yiisoft/db-sqlite": "^1.0", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/test-support": "^3.0", + "yiisoft/yii-cycle": "dev-master", + "yiisoft/yii-view": "^6.0" + }, + "suggest": { + "yiisoft/assets": "Support custom debug panels", + "yiisoft/yii-view": "Support custom debug panels" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "bootstrap-web": "bootstrap-web.php", + "params": "params.php", + "di-web": "di-web.php", + "routes": "routes.php", + "di-providers-web": "di-providers-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\Api\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Debug API", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "api", + "debug", + "yii", + "yii-debug-api", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug-api/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug-api", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-15T14:39:54+00:00" + }, + { + "name": "yiisoft/yii-debug-viewer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug-viewer.git", + "reference": "89f2704b5ae8aa8e188732c3dd4a8947a2cad774" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug-viewer/zipball/89f2704b5ae8aa8e188732c3dd4a8947a2cad774", + "reference": "89f2704b5ae8aa8e188732c3dd4a8947a2cad774", + "shasum": "" + }, + "require": { + "nyholm/psr7": "^1.3", + "php": "^8.0", + "psr/http-message": "^1.1", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/assets": "^4.0", + "yiisoft/data-response": "^2.0", + "yiisoft/http": "^1.1", + "yiisoft/router": "^3.1", + "yiisoft/view": "^10.0", + "yiisoft/yii-view-renderer": "^7.1" + }, + "require-dev": { + "httpsoft/http-message": "^1.0.5", + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "psr/http-factory": "^1.0", + "psr/log": "^2.0|^3.0", + "rector/rector": "^0.15.1", + "roave/infection-static-analysis-plugin": "^1.21", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18", + "yiisoft/aliases": "^3.0", + "yiisoft/config": "^1.0", + "yiisoft/di": "^1.1", + "yiisoft/error-handler": "^3.0", + "yiisoft/factory": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/injector": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-event": "^2.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin-environments": { + "yii-debug-viewer-app": { + "params": [ + "app/params.php" + ], + "di": "app/di.php", + "di-console": "$di", + "di-web": [ + "$di", + "app/web.php" + ], + "events": [], + "events-web": "$events", + "events-console": "$events", + "di-providers": [], + "di-providers-web": "$di-providers", + "di-providers-console": "$di-providers", + "routes": [], + "bootstrap": [], + "bootstrap-web": "$bootstrap", + "bootstrap-console": "$bootstrap" + } + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php", + "routes": "routes.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\Viewer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Debug Viewer", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "debug", + "dev", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug-viewer/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug-viewer", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-06T13:05:25+00:00" + }, + { + "name": "yiisoft/yii-gii", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-gii.git", + "reference": "cf2f56d5d3a0a8fb00636da24ba13df3a1082350" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-gii/zipball/cf2f56d5d3a0a8fb00636da24ba13df3a1082350", + "reference": "cf2f56d5d3a0a8fb00636da24ba13df3a1082350", + "shasum": "" + }, + "require": { + "httpsoft/http-basis": "^1.1", + "php": "^8.1", + "phpspec/php-diff": "^1.1.3", + "psr/http-message": "^1.0|^2.0", + "symfony/console": "^6.0|^7.0", + "yiisoft/active-record": "dev-master", + "yiisoft/aliases": "^3.0", + "yiisoft/arrays": "^2.1|^3.0", + "yiisoft/csrf": "^2.1.1", + "yiisoft/data-response": "^2.0", + "yiisoft/db": "*", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/hydrator": "^1.0", + "yiisoft/injector": "^1.1", + "yiisoft/input-http": "^1.0", + "yiisoft/json": "^1.0", + "yiisoft/router": "^3.0", + "yiisoft/strings": "^2.1", + "yiisoft/validator": "^2.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-middleware": "^1.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^10.2", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.23", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.13", + "yiisoft/cache": "^3.0", + "yiisoft/db-sqlite": "dev-master", + "yiisoft/di": "^1.1", + "yiisoft/dummy-provider": "^1.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/log": "^2.0", + "yiisoft/translator": "^3.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "routes": "routes.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Gii\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Code Generator Extension", + "keywords": [ + "code generator", + "dev", + "gii", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-gii/issues?state=open", + "source": "https://github.com/yiisoft/yii-gii", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-19T05:22:18+00:00" + }, + { + "name": "yiisoft/yii-testing", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-testing.git", + "reference": "d90cce1c6f33990ad2a0f9e7781da88202a57229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-testing/zipball/d90cce1c6f33990ad2a0f9e7781da88202a57229", + "reference": "d90cce1c6f33990ad2a0f9e7781da88202a57229", + "shasum": "" + }, + "require": { + "php": "^8.0", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "psr/http-message": "^1.0|^2.0", + "yiisoft/config": "^1.1", + "yiisoft/di": "^1.1", + "yiisoft/error-handler": "^3.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner": "^2.0", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Testing\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "yii-testing", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "testing", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-testing/issues?state=open", + "source": "https://github.com/yiisoft/yii-testing", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-06-04T07:04:12+00:00" + }, + { + "name": "yosymfony/resource-watcher", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yosymfony/resource-watcher.git", + "reference": "2f197cee0231c06db865d4ad2d8d7cd3faead2f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yosymfony/resource-watcher/zipball/2f197cee0231c06db865d4ad2d8d7cd3faead2f8", + "reference": "2f197cee0231c06db865d4ad2d8d7cd3faead2f8", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "symfony/finder": "^2.7|^3.0|^4.0|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7", + "symfony/filesystem": "^2.7|^3.0|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Yosymfony\\ResourceWatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Puertas", + "email": "vpgugr@gmail.com" + } + ], + "description": "A simple resource watcher using Symfony Finder", + "homepage": "http://yosymfony.com", + "keywords": [ + "finder", + "resources", + "symfony", + "watcher" + ], + "support": { + "issues": "https://github.com/yosymfony/resource-watcher/issues", + "source": "https://github.com/yosymfony/resource-watcher/tree/master" + }, + "time": "2020-06-10T14:58:36+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "cebe/markdown": 20, + "yiisoft/data": 20, + "yiisoft/data-cycle": 20, + "yiisoft/yii-debug": 20, + "yiisoft/queue": 20, + "roave/security-advisories": 20, + "yiisoft/yii-debug-api": 20, + "yiisoft/yii-debug-viewer": 20, + "yiisoft/yii-gii": 20, + "yiisoft/yii-testing": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.3 <8.4", + "ext-intl": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/blog-api/config/.gitignore b/blog-api/config/.gitignore new file mode 100644 index 000000000..8b60a947d --- /dev/null +++ b/blog-api/config/.gitignore @@ -0,0 +1 @@ +.merge-plan.php diff --git a/config/bootstrap.php b/blog-api/config/common/bootstrap.php similarity index 100% rename from config/bootstrap.php rename to blog-api/config/common/bootstrap.php diff --git a/blog-api/config/common/di/cache.php b/blog-api/config/common/di/cache.php new file mode 100644 index 000000000..8ef8b495e --- /dev/null +++ b/blog-api/config/common/di/cache.php @@ -0,0 +1,12 @@ + Cache::class, + CacheInterface::class => FileCache::class, +]; diff --git a/config/common/cycle.php b/blog-api/config/common/di/cycle.php similarity index 100% rename from config/common/cycle.php rename to blog-api/config/common/di/cycle.php diff --git a/blog-api/config/common/di/hydrator.php b/blog-api/config/common/di/hydrator.php new file mode 100644 index 000000000..1561583dc --- /dev/null +++ b/blog-api/config/common/di/hydrator.php @@ -0,0 +1,13 @@ + ContainerAttributeResolverFactory::class, + ObjectFactoryInterface::class => ContainerObjectFactory::class, +]; diff --git a/config/common/logger.php b/blog-api/config/common/di/logger.php similarity index 100% rename from config/common/logger.php rename to blog-api/config/common/di/logger.php diff --git a/config/common/psr17.php b/blog-api/config/common/di/psr17.php similarity index 100% rename from config/common/psr17.php rename to blog-api/config/common/di/psr17.php diff --git a/blog-api/config/common/di/router.php b/blog-api/config/common/di/router.php new file mode 100644 index 000000000..0df551e05 --- /dev/null +++ b/blog-api/config/common/di/router.php @@ -0,0 +1,45 @@ + [ + 'class' => UrlGenerator::class, + 'setEncodeRaw()' => [$params['yiisoft/router-fastroute']['encodeRaw']], + 'setDefaultArgument()' => ['_language', 'en'], + 'reset' => function () { + $this->defaultArguments = ['_language', 'en']; + }, + ], + + RouteCollectionInterface::class => static function (RouteCollectorInterface $collector) use ($config) { + $collector + ->middleware(FormatDataResponse::class) + ->middleware(ExceptionMiddleware::class) + ->middleware(RequestBodyParser::class) + ->addGroup( + Group::create('/{_language}')->routes(...$config->get('app-routes')), + ) + ->addGroup( + Group::create()->routes(...$config->get('routes')), + ); + + return new RouteCollection($collector); + }, +]; diff --git a/config/common/translator.php b/blog-api/config/common/di/translator.php similarity index 100% rename from config/common/translator.php rename to blog-api/config/common/di/translator.php diff --git a/config/common/validator.php b/blog-api/config/common/di/validator.php similarity index 75% rename from config/common/validator.php rename to blog-api/config/common/di/validator.php index a38539e44..a77e34f7a 100644 --- a/config/common/validator.php +++ b/blog-api/config/common/di/validator.php @@ -2,7 +2,7 @@ declare(strict_types=1); -use Yiisoft\Validator\RuleHandlerContainer; +use Yiisoft\Validator\RuleHandlerResolver\RuleHandlerContainer; use Yiisoft\Validator\RuleHandlerResolverInterface; /** @var array $params */ diff --git a/blog-api/config/common/params.php b/blog-api/config/common/params.php new file mode 100644 index 000000000..bb94bb4b0 --- /dev/null +++ b/blog-api/config/common/params.php @@ -0,0 +1,153 @@ + [ + 'locales' => ['en' => 'en-US', 'ru' => 'ru-RU', 'de' => 'de-DE'], + 'ignoredRequests' => [ + '/gii**', + '/debug**', + '/inspect**', + ], + ], + 'supportEmail' => 'support@example.com', + 'middlewares' => [ + ErrorCatcher::class, + Subfolder::class, + Locale::class, + Router::class, + ], + + 'yiisoft/aliases' => [ + 'aliases' => [ + '@root' => dirname(__DIR__, 2), + '@assets' => '@public/assets', + '@assetsUrl' => '@baseUrl/assets', + '@baseUrl' => '', + '@data' => '@root/data', + '@messages' => '@resources/messages', + '@public' => '@root/public', + '@resources' => '@root/resources', + '@runtime' => '@root/runtime', + '@src' => '@root/src', + '@tests' => '@root/tests', + '@views' => '@root/views', + '@vendor' => '@root/vendor', + ], + ], + + 'yiisoft/router-fastroute' => [ + 'enableCache' => false, + ], + + 'yiisoft/translator' => [ + 'locale' => 'en', + 'fallbackLocale' => 'en', + 'defaultCategory' => 'app', + ], + + 'yiisoft/yii-cycle' => [ + // DBAL config + 'dbal' => [ + // SQL query logger. Definition of Psr\Log\LoggerInterface + // For example, \Yiisoft\Yii\Cycle\Logger\StdoutQueryLogger::class + 'query-logger' => null, + // Default database + 'default' => 'default', + 'aliases' => [], + 'databases' => [ + 'default' => ['connection' => 'sqlite'], + ], + 'connections' => [ + 'sqlite' => new SQLiteDriverConfig( + new FileConnectionConfig(dirname(__DIR__, 2) . '/runtime/database.db') + ), + ], + ], + + // Cycle migration config + 'migrations' => [ + 'directory' => '@root/migrations', + 'namespace' => 'App\\Migration', + 'table' => 'migration', + 'safe' => false, + ], + + /** + * SchemaProvider list for {@see \Yiisoft\Yii\Cycle\Schema\Provider\Support\SchemaProviderPipeline} + * Array of classname and {@see SchemaProviderInterface} object. + * You can configure providers if you pass classname as key and parameters as array: + * [ + * SimpleCacheSchemaProvider::class => [ + * 'key' => 'my-custom-cache-key' + * ], + * FromFilesSchemaProvider::class => [ + * 'files' => ['@runtime/cycle-schema.php'] + * ], + * FromConveyorSchemaProvider::class => [ + * 'generators' => [ + * Generator\SyncTables::class, // sync table changes to database + * ] + * ], + * ]. + */ + 'schema-providers' => [ + // Uncomment next line to enable a Schema caching in the common cache + // \Yiisoft\Yii\Cycle\Schema\Provider\SimpleCacheSchemaProvider::class => ['key' => 'cycle-orm-cache-key'], + + // Store generated Schema in the file + PhpFileSchemaProvider::class => [ + 'mode' => PhpFileSchemaProvider::MODE_WRITE_ONLY, + 'file' => '@runtime/schema.php', + ], + + FromConveyorSchemaProvider::class => [ + 'generators' => [ + Cycle\Schema\Generator\SyncTables::class, // sync table changes to database + ], + ], + ], + + /** + * Config for {@see \Yiisoft\Yii\Cycle\Schema\Conveyor\AnnotatedSchemaConveyor} + * Annotated entity directories list. + * {@see \Yiisoft\Aliases\Aliases} are also supported. + */ + 'entity-paths' => [ + '@src', + ], + 'conveyor' => AttributedSchemaConveyor::class, + ], + 'yiisoft/yii-swagger' => [ + 'annotation-paths' => [ + '@src', + ], + ], + + 'yiisoft/queue' => [ + 'handlers' => [ + LoggingAuthorizationHandler::NAME => [LoggingAuthorizationHandler::class, 'handle'], + ], + 'channel-definitions' => [ + LoggingAuthorizationHandler::CHANNEL => SynchronousAdapter::class, + ], + ], + + 'yiisoft/yii-debug-api' => [ + 'allowedIPs' => ['172.0.0.1/10'], + ], +]; diff --git a/blog-api/config/common/routes.php b/blog-api/config/common/routes.php new file mode 100644 index 000000000..2f0809af2 --- /dev/null +++ b/blog-api/config/common/routes.php @@ -0,0 +1,74 @@ +action([InfoController::class, 'index']) + ->name('api/info'), + + Route::get('/blog/') + ->middleware(RequestCatcherMiddleware::class) + ->action([BlogController::class, 'index']) + ->name('blog/index'), + + Route::get('/blog/{id:\d+}') + ->action([BlogController::class, 'view']) + ->name('blog/view'), + + Route::post('/blog/') + ->middleware(Authentication::class) + ->middleware(RequestCatcherMiddleware::class) + ->action([BlogController::class, 'create']) + ->name('blog/create'), + + Route::put('/blog/{id:\d+}') + ->middleware(Authentication::class) + ->middleware(RequestCatcherMiddleware::class) + ->action([BlogController::class, 'update']) + ->name('blog/update'), + + RestGroupFactory::create('/users/', UserController::class) + ->prependMiddleware(Authentication::class), + + Route::post('/auth/') + ->middleware(RequestCatcherMiddleware::class) + ->action([AuthController::class, 'login']) + ->name('auth'), + + Route::post('/logout/') + ->middleware(Authentication::class) + ->middleware(RequestCatcherMiddleware::class) + ->action([AuthController::class, 'logout']) + ->name('logout'), + + // Swagger routes + Group::create('/docs') + ->routes( + Route::get('') + ->middleware(FormatDataResponseAsHtml::class) + ->action(function (SwaggerUi $swaggerUi, UrlGeneratorInterface $urlGenerator) { + return $swaggerUi->withJsonUrl($urlGenerator->getUriPrefix() . '/docs/openapi.json'); + }), + Route::get('/openapi.json') + ->middleware(FormatDataResponseAsJson::class) + ->middleware(CorsAllowAll::class) + ->action([SwaggerJson::class, 'process']), + ), +]; diff --git a/blog-api/config/console/commands.php b/blog-api/config/console/commands.php new file mode 100644 index 000000000..84f641b6e --- /dev/null +++ b/blog-api/config/console/commands.php @@ -0,0 +1,18 @@ + Schema\SchemaCommand::class, + 'cycle/schema/php' => Schema\SchemaPhpCommand::class, + 'cycle/schema/clear' => Schema\SchemaClearCommand::class, + 'cycle/schema/rebuild' => Schema\SchemaRebuildCommand::class, + 'migrate/create' => Migration\CreateCommand::class, + 'migrate/generate' => Migration\GenerateCommand::class, + 'migrate/up' => Migration\UpCommand::class, + 'migrate/down' => Migration\DownCommand::class, + 'migrate/list' => Migration\ListCommand::class, +]; diff --git a/blog-api/config/console/params.php b/blog-api/config/console/params.php new file mode 100644 index 000000000..051a18593 --- /dev/null +++ b/blog-api/config/console/params.php @@ -0,0 +1,9 @@ + [ + 'commands' => require __DIR__ . '/commands.php', + ], +]; diff --git a/config/dev/params.php b/blog-api/config/environments/dev/params.php similarity index 100% rename from config/dev/params.php rename to blog-api/config/environments/dev/params.php diff --git a/blog-api/config/environments/prod/params.php b/blog-api/config/environments/prod/params.php new file mode 100644 index 000000000..3e62e040b --- /dev/null +++ b/blog-api/config/environments/prod/params.php @@ -0,0 +1,9 @@ + [ + 'enabled' => false, + ], +]; diff --git a/blog-api/config/environments/test/params.php b/blog-api/config/environments/test/params.php new file mode 100644 index 000000000..abcc17960 --- /dev/null +++ b/blog-api/config/environments/test/params.php @@ -0,0 +1,21 @@ + [ + 'enabled' => false, + ], + 'yiisoft/yii-cycle' => [ + 'dbal' => [ + 'connections' => [ + 'sqlite' => new SQLiteDriverConfig( + new FileConnectionConfig(dirname(__DIR__, 3) . '/tests/Support/Data/database.db') + ), + ], + ], + ], +]; diff --git a/blog-api/config/web/di/application.php b/blog-api/config/web/di/application.php new file mode 100644 index 000000000..709f69e3b --- /dev/null +++ b/blog-api/config/web/di/application.php @@ -0,0 +1,34 @@ + [ + '__construct()' => [ + 'dispatcher' => DynamicReference::to(static function (Injector $injector) use ($params) { + return $injector->make(MiddlewareDispatcher::class) + ->withMiddlewares($params['middlewares']); + }), + 'fallbackHandler' => Reference::to(NotFoundHandler::class), + ], + ], + \Yiisoft\Yii\Middleware\Locale::class => [ + '__construct()' => [ + 'supportedLocales' => $params['locale']['locales'], + 'ignoredRequestUrlPatterns' => $params['locale']['ignoredRequests'], + ], + ], + \Yiisoft\Yii\Middleware\Subfolder::class => [ + '__construct()' => [ + 'prefix' => !empty(trim($_ENV['BASE_URL'] ?? '', '/')) ? $_ENV['BASE_URL'] : null, + ], + ], +]; diff --git a/blog-api/config/web/di/data-response.php b/blog-api/config/web/di/data-response.php new file mode 100644 index 000000000..336029d79 --- /dev/null +++ b/blog-api/config/web/di/data-response.php @@ -0,0 +1,28 @@ + ApiResponseFormatter::class, + DataResponseFactoryInterface::class => DataResponseFactory::class, + ContentNegotiator::class => [ + '__construct()' => [ + 'contentFormatters' => [ + 'text/html' => new HtmlDataResponseFormatter(), + 'application/xml' => new XmlDataResponseFormatter(), + 'application/json' => new JsonDataResponseFormatter(), + ], + ], + ], +]; diff --git a/blog-api/config/web/di/error-handler.php b/blog-api/config/web/di/error-handler.php new file mode 100644 index 000000000..d97bf3ecf --- /dev/null +++ b/blog-api/config/web/di/error-handler.php @@ -0,0 +1,14 @@ + JsonRenderer::class, +]; diff --git a/blog-api/config/web/di/middleware-dispatcher.php b/blog-api/config/web/di/middleware-dispatcher.php new file mode 100644 index 000000000..d60af7bc3 --- /dev/null +++ b/blog-api/config/web/di/middleware-dispatcher.php @@ -0,0 +1,23 @@ + [ + 'class' => CompositeParametersResolver::class, + '__construct()' => [ + Reference::to(HydratorAttributeParametersResolver::class), + Reference::to(RequestInputParametersResolver::class), + ], + ], +]; diff --git a/blog-api/config/web/di/user.php b/blog-api/config/web/di/user.php new file mode 100644 index 000000000..f41c0ab07 --- /dev/null +++ b/blog-api/config/web/di/user.php @@ -0,0 +1,26 @@ + UserRepository::class, + IdentityWithTokenRepositoryInterface::class => UserRepository::class, + AuthenticationMethodInterface::class => HttpHeader::class, + Authentication::class => [ + 'class' => Authentication::class, + '__construct()' => [ + 'authenticationFailureHandler' => Reference::to(AuthRequestErrorHandler::class), + ], + ], +]; diff --git a/blog-api/config/web/events.php b/blog-api/config/web/events.php new file mode 100644 index 000000000..b62cc3ca5 --- /dev/null +++ b/blog-api/config/web/events.php @@ -0,0 +1,12 @@ + [ + static fn(TranslatorInterface $translator, SetLocaleEvent $event) => $translator->setLocale($event->getLocale()), + ], +]; diff --git a/blog-api/config/web/params.php b/blog-api/config/web/params.php new file mode 100644 index 000000000..2b3b65847 --- /dev/null +++ b/blog-api/config/web/params.php @@ -0,0 +1,11 @@ + [ + 'requestInputParametersResolver' => [ + 'throwInputValidationException' => true, + ], + ], +]; diff --git a/blog-api/configuration.php b/blog-api/configuration.php new file mode 100644 index 000000000..0066a1322 --- /dev/null +++ b/blog-api/configuration.php @@ -0,0 +1,69 @@ + [ + 'params' => [ + 'common/params.php', + ], + 'params-web' => [ + '$params', + 'web/params.php', + ], + 'params-console' => [ + '$params', + 'console/params.php', + ], + 'di' => 'common/di/*.php', + 'di-web' => [ + '$di', + 'web/di/*.php', + ], + 'di-console' => '$di', + 'di-providers' => [], + 'di-providers-web' => [ + '$di-providers', + ], + 'di-providers-console' => [ + '$di-providers', + ], + 'di-delegates' => [], + 'di-delegates-web' => [ + '$di-delegates', + ], + 'di-delegates-console' => [ + '$di-delegates', + ], + 'events' => [], + 'events-web' => [ + '$events', + 'web/events.php', + ], + 'events-console' => '$events', + 'app-routes' => 'common/routes.php', + 'bootstrap' => 'common/bootstrap.php', + 'bootstrap-web' => '$bootstrap', + 'bootstrap-console' => '$bootstrap', + ], + 'config-plugin-environments' => [ + 'dev' => [ + 'params' => [ + 'environments/dev/params.php', + ], + ], + 'prod' => [ + 'params' => [ + 'environments/prod/params.php', + ], + ], + 'test' => [ + 'params' => [ + 'environments/test/params.php', + ], + ], + ], + 'config-plugin-options' => [ + 'source-directory' => 'config', + ], +]; diff --git a/blog-api/data/db/database.db b/blog-api/data/db/database.db new file mode 100644 index 000000000..df1dad291 Binary files /dev/null and b/blog-api/data/db/database.db differ diff --git a/blog-api/data/nginx/default.conf b/blog-api/data/nginx/default.conf new file mode 100644 index 000000000..0ebd9e1bb --- /dev/null +++ b/blog-api/data/nginx/default.conf @@ -0,0 +1,30 @@ +server { + listen 80; + + set $index_file "public/index.php"; + set $root "/app"; + + root $root; + index $index_file; + + error_log /var/log/nginx/error.log; #set + access_log /var/log/nginx/access.log; #set + + location ~* \.(js|css|png|html)$ { + root $root/public; + access_log off; + } + + location ~ [^/]\.php(/|$) { + fastcgi_pass yii-php:9000; + fastcgi_index $root/$index_file; + include fastcgi_params; + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } + + location / { + try_files $uri $uri/ /$index_file?$query_string; + } +} diff --git a/blog-api/docker-compose.yml b/blog-api/docker-compose.yml new file mode 100644 index 000000000..1a424c625 --- /dev/null +++ b/blog-api/docker-compose.yml @@ -0,0 +1,19 @@ +services: + php: + container_name: yii-php + image: yiisoftware/yii-php:8.3-fpm + working_dir: /app + volumes: + - ./:/app + nginx: + image: nginx:alpine + container_name: yii-nginx + ports: + - "8080:80" + - "8081:81" + volumes: + - ./:/app + - ./data/nginx/:/etc/nginx/conf.d/ + depends_on: + - php + restart: always diff --git a/blog-api/docker/dev/nginx/Dockerfile b/blog-api/docker/dev/nginx/Dockerfile new file mode 100644 index 000000000..b98399633 --- /dev/null +++ b/blog-api/docker/dev/nginx/Dockerfile @@ -0,0 +1,9 @@ +FROM nginx:1.21.1-alpine + +RUN apk add --no-cache curl + +WORKDIR /app/public + +COPY docker/dev/nginx/nginx.conf /etc/nginx/conf.d/default.conf +COPY public ./ + diff --git a/blog-api/docker/dev/nginx/nginx.conf b/blog-api/docker/dev/nginx/nginx.conf new file mode 100644 index 000000000..12b6d1b40 --- /dev/null +++ b/blog-api/docker/dev/nginx/nginx.conf @@ -0,0 +1,49 @@ +server { + listen 80 default_server; + server_name default; + client_max_body_size 15m; + root /app/public; + resolver 127.0.0.11 ipv6=off; + server_tokens off; + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location /assets { + root /app/public; + } + + location / { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always; + add_header 'Access-Control-Max-Age' 1728000; + if ($request_method = 'OPTIONS') { + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + try_files $uri /index.php?$args; + } + + location ~ ^/index\.php(/|$) { + set $upstream blog-api-backend:9000; + fastcgi_read_timeout 60; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass $upstream; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SERVER_NAME $server_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/blog-api/docker/dev/php/Dockerfile b/blog-api/docker/dev/php/Dockerfile new file mode 100644 index 000000000..6e867bce3 --- /dev/null +++ b/blog-api/docker/dev/php/Dockerfile @@ -0,0 +1,70 @@ +# the different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +FROM php:8.1-fpm-alpine as stage + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +RUN set -eux \ + && apk add --no-cache \ + acl fcgi file gettext git nano curl \ + && apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS icu-dev libzip-dev zlib-dev \ + \ + && docker-php-ext-configure zip \ + && docker-php-ext-install -j$(nproc) intl zip \ + && docker-php-ext-enable opcache \ + \ + && runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )" \ + && apk add --no-cache --virtual .pgsql-deps \ + $runDeps postgresql-dev so:libpq.so.5 \ + && docker-php-ext-install -j$(nproc) pdo_pgsql + +RUN apk add oniguruma-dev \ + && docker-php-ext-install mbstring \ + \ + && apk add --repository http://dl-3.alpinelinux.org/alpine/edge/community \ + rabbitmq-c-dev \ + && pecl install xdebug-3.1.4 amqp-1.11.0 \ + && docker-php-ext-enable xdebug amqp \ + \ + && apk del .build-deps \ + && pecl clear-cache \ + && rm -rf /tmp/pear \ + && docker-php-source delete \ + && rm -rf /var/cache/apk/* + +RUN ln -s $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini + +WORKDIR /app + +COPY docker/dev/php/conf.d/ $PHP_INI_DIR/conf.d/ +COPY docker/dev/php/php-fpm.d/ /usr/local/etc/php-fpm.d/ + +COPY composer.json composer.lock* ./ + +RUN composer install --no-plugins --no-scripts --prefer-dist \ + && composer clear-cache + +COPY ./ ./ + +RUN composer run-script --no-dev post-install-cmd + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s \ + CMD REQUEST_METHOD=GET SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping cgi-fcgi -bind -connect 127.0.0.1:9000 + +RUN chmod 0555 ./docker/docker-entrypoint.sh +ENTRYPOINT ["docker/docker-entrypoint.sh"] + +CMD ["php-fpm"] diff --git a/blog-api/docker/dev/php/conf.d/php.ini b/blog-api/docker/dev/php/conf.d/php.ini new file mode 100644 index 000000000..c80827193 --- /dev/null +++ b/blog-api/docker/dev/php/conf.d/php.ini @@ -0,0 +1,28 @@ +;apc.enable_cli = 1 +date.timezone = UTC +session.auto_start = Off +short_open_tag = Off +expose_php = Off +upload_max_filesize = 15M +post_max_size = 150M +memory_limit = 256M + +# https://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +max_execution_time = 300 +max_input_time = 300 + +[xdebug] +xdebug.mode = develop,debug +xdebug.client_host = host.docker.internal +;xdebug.discover_client_host=true +xdebug.show_error_trace = 0 +xdebug.start_with_request = trigger +;xdebug.client_host=host-gateway +;xdebug.start_with_request= +xdebug.client_port = 9001 +xdebug.log_level = 10 diff --git a/blog-api/docker/dev/php/php-fpm.d/www.conf b/blog-api/docker/dev/php/php-fpm.d/www.conf new file mode 100644 index 000000000..55df850b8 --- /dev/null +++ b/blog-api/docker/dev/php/php-fpm.d/www.conf @@ -0,0 +1,20 @@ +[global] +daemonize = no +process_control_timeout = 20 +error_log = /proc/self/fd/2 + +[www] +user = www-data +group = www-data +listen = 9000 +listen.mode = 0666 +ping.path = /ping +ping.response = pong +clear_env = off +pm = dynamic +pm.status_path = /status +pm.max_children = 25 +pm.start_servers = 10 +pm.min_spare_servers = 5 +pm.max_spare_servers = 20 +pm.max_requests = 500 diff --git a/blog-api/docker/docker-entrypoint.sh b/blog-api/docker/docker-entrypoint.sh new file mode 100644 index 000000000..fd0a4a126 --- /dev/null +++ b/blog-api/docker/docker-entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +ls -la +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi +set -e + +if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'yii' ]; then + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX runtime public + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX runtime public +fi + +exec "$@" diff --git a/blog-api/docker/prod/nginx/Dockerfile b/blog-api/docker/prod/nginx/Dockerfile new file mode 100644 index 000000000..94cf7d82f --- /dev/null +++ b/blog-api/docker/prod/nginx/Dockerfile @@ -0,0 +1,9 @@ +FROM nginx:1.21.1-alpine + +RUN apk add --no-cache curl + +COPY docker/prod/nginx/nginx.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app/public + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s CMD curl --fail http://127.0.0.1/health || exit 1 diff --git a/blog-api/docker/prod/nginx/nginx.conf b/blog-api/docker/prod/nginx/nginx.conf new file mode 100644 index 000000000..55c61adbb --- /dev/null +++ b/blog-api/docker/prod/nginx/nginx.conf @@ -0,0 +1,48 @@ +server { + listen 80 default_server; + root /app/public; + client_max_body_size 15m; + resolver 127.0.0.11 ipv6=off; + server_tokens off; + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location /assets { + root /app/public; + } + + location / { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always; + add_header 'Access-Control-Max-Age' 1728000; + if ($request_method = 'OPTIONS') { + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + try_files $uri /index.php?$args; + } + + location ~ ^/index\.php(/|$) { + set $upstream blog-api-backend:9000; + fastcgi_read_timeout 60; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass $upstream; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SERVER_NAME $server_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/blog-api/docker/prod/php/Dockerfile b/blog-api/docker/prod/php/Dockerfile new file mode 100644 index 000000000..8c221b3ce --- /dev/null +++ b/blog-api/docker/prod/php/Dockerfile @@ -0,0 +1,72 @@ +# the different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +FROM php:8.1-fpm-alpine as stage + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +RUN set -eux \ + && apk add --no-cache \ + acl fcgi file gettext git nano curl \ + && apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS icu-dev libzip-dev zlib-dev \ + \ + && docker-php-ext-configure zip \ + && docker-php-ext-install -j$(nproc) intl zip \ + && docker-php-ext-enable opcache \ + \ + && runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )" \ + && apk add --no-cache --virtual .pgsql-deps \ + $runDeps postgresql-dev so:libpq.so.5 \ + && docker-php-ext-install -j$(nproc) pdo_pgsql \ + \ + && apk add oniguruma-dev \ + && docker-php-ext-install mbstring \ + \ + && apk add --repository http://dl-3.alpinelinux.org/alpine/edge/community \ + rabbitmq-c-dev \ + && pecl install amqp-1.11.0 \ + && docker-php-ext-enable amqp \ + && apk del .build-deps \ + && pecl clear-cache \ + && rm -rf /tmp/pear \ + && docker-php-source delete \ + && rm -rf /var/cache/apk/* + +RUN ln -s $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini + +WORKDIR /app + +COPY docker/prod/php/conf.d/ $PHP_INI_DIR/conf.d/ +COPY docker/prod/php/php-fpm.d/ /usr/local/etc/php-fpm.d/ + +COPY composer.json composer.lock* ./ + +RUN set -eux \ + && composer install --no-plugins --no-scripts --prefer-dist \ + && composer clear-cache + +COPY ./ ./ + +RUN set -eux \ + && composer dump-autoload --classmap-authoritative \ + && composer run-script --no-dev post-install-cmd + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s \ + CMD REQUEST_METHOD=GET SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping cgi-fcgi -bind -connect 127.0.0.1:9000 + +RUN chmod 0555 ./docker/docker-entrypoint.sh +ENTRYPOINT ["docker/docker-entrypoint.sh"] + +CMD ["php-fpm"] diff --git a/blog-api/docker/prod/php/conf.d/php.ini b/blog-api/docker/prod/php/conf.d/php.ini new file mode 100644 index 000000000..b723da7a0 --- /dev/null +++ b/blog-api/docker/prod/php/conf.d/php.ini @@ -0,0 +1,18 @@ +;apc.enable_cli = 1 +date.timezone = UTC +session.auto_start = Off +short_open_tag = Off +expose_php = Off +upload_max_filesize = 15M +post_max_size = 150M +memory_limit = 512M +display_errors = Off + +# https://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +opcache.validate_timestamps = 0 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +opcache.preload_user = www-data diff --git a/blog-api/docker/prod/php/php-fpm.d/www.conf b/blog-api/docker/prod/php/php-fpm.d/www.conf new file mode 100644 index 000000000..81ab6ab2a --- /dev/null +++ b/blog-api/docker/prod/php/php-fpm.d/www.conf @@ -0,0 +1,21 @@ +[global] +daemonize = no +process_control_timeout = 20 +error_log = /proc/self/fd/2 + +[www] +user = www-data +group = www-data +listen = 9000 +listen.mode = 0666 +clear_env = off +; access.suppress_path[] = /ping +ping.path = /ping +ping.response = pong +pm = dynamic +pm.status_path = /status +pm.max_children = 25 +pm.start_servers = 10 +pm.min_spare_servers = 5 +pm.max_spare_servers = 20 +pm.max_requests = 500 diff --git a/blog-api/infection.json.dist b/blog-api/infection.json.dist new file mode 100644 index 000000000..3776e2235 --- /dev/null +++ b/blog-api/infection.json.dist @@ -0,0 +1,16 @@ +{ + "source": { + "directories": [ + "src" + ] + }, + "logs": { + "text": "php:\/\/stderr", + "stryker": { + "report": "master" + } + }, + "mutators": { + "@default": true + } +} diff --git a/phpunit.xml.dist b/blog-api/phpunit.xml.dist similarity index 100% rename from phpunit.xml.dist rename to blog-api/phpunit.xml.dist diff --git a/blog-api/psalm.xml b/blog-api/psalm.xml new file mode 100644 index 000000000..a3df09486 --- /dev/null +++ b/blog-api/psalm.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/public/.htaccess b/blog-api/public/.htaccess similarity index 100% rename from public/.htaccess rename to blog-api/public/.htaccess diff --git a/public/assets/.gitignore b/blog-api/public/assets/.gitignore similarity index 100% rename from public/assets/.gitignore rename to blog-api/public/assets/.gitignore diff --git a/public/favicon.ico b/blog-api/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to blog-api/public/favicon.ico diff --git a/blog-api/public/index.php b/blog-api/public/index.php new file mode 100644 index 000000000..fd3ded372 --- /dev/null +++ b/blog-api/public/index.php @@ -0,0 +1,50 @@ +withTemporaryErrorHandler( + new ErrorHandler( + new Logger([new FileTarget(dirname(__DIR__) . '/runtime/logs/app.log')]), + new JsonRenderer(), + ) + ); +$runner->run(); diff --git a/public/robots.txt b/blog-api/public/robots.txt similarity index 100% rename from public/robots.txt rename to blog-api/public/robots.txt diff --git a/blog-api/resources/messages/de/app.php b/blog-api/resources/messages/de/app.php new file mode 100644 index 000000000..545f2b601 --- /dev/null +++ b/blog-api/resources/messages/de/app.php @@ -0,0 +1,7 @@ + 'Seite nicht gefunden', +]; diff --git a/config/providers.php b/blog-api/resources/messages/en/app.php similarity index 54% rename from config/providers.php rename to blog-api/resources/messages/en/app.php index 1f6a841dc..1451dd590 100644 --- a/config/providers.php +++ b/blog-api/resources/messages/en/app.php @@ -3,4 +3,5 @@ declare(strict_types=1); return [ + '404.title' => 'Page not found', ]; diff --git a/blog-api/resources/messages/ru/app.php b/blog-api/resources/messages/ru/app.php new file mode 100644 index 000000000..ea39702a9 --- /dev/null +++ b/blog-api/resources/messages/ru/app.php @@ -0,0 +1,7 @@ + 'Страница не найдена', +]; diff --git a/runtime/.gitignore b/blog-api/runtime/.gitignore similarity index 100% rename from runtime/.gitignore rename to blog-api/runtime/.gitignore diff --git a/blog-api/src/Auth/AuthController.php b/blog-api/src/Auth/AuthController.php new file mode 100644 index 000000000..9416937ca --- /dev/null +++ b/blog-api/src/Auth/AuthController.php @@ -0,0 +1,98 @@ +responseFactory->createResponse( + [ + 'token' => $this->userService + ->login( + $request->getLogin(), + $request->getPassword() + ) + ->getToken(), + ] + ); + } + + #[OA\Post( + path: '/logout/', + description: '', + summary: 'Logout', + security: [new OA\SecurityScheme(ref: '#/components/securitySchemes/ApiKey')], + tags: ['auth'], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/Response') + ), + new OA\Response( + response: '400', + description: 'Bad request', + content: new OA\JsonContent(ref: '#/components/schemas/BadResponse') + ), + ] + )] + public function logout(UserRequest $request): ResponseInterface + { + $this->userService->logout($request->getUser()); + + return $this->responseFactory->createResponse(); + } +} diff --git a/blog-api/src/Auth/AuthRequest.php b/blog-api/src/Auth/AuthRequest.php new file mode 100644 index 000000000..d72bdfbb9 --- /dev/null +++ b/blog-api/src/Auth/AuthRequest.php @@ -0,0 +1,49 @@ +login; + } + + public function getPassword(): string + { + return $this->password; + } + + public function getRules(): array + { + return [ + 'login' => [ + new Required(), + ], + 'password' => [ + new Required(), + ], + ]; + } +} diff --git a/blog-api/src/Auth/AuthRequestErrorHandler.php b/blog-api/src/Auth/AuthRequestErrorHandler.php new file mode 100644 index 000000000..3aa2a8033 --- /dev/null +++ b/blog-api/src/Auth/AuthRequestErrorHandler.php @@ -0,0 +1,18 @@ +postRepository = $postRepository; + $this->responseFactory = $responseFactory; + $this->postFormatter = $postFormatter; + $this->postBuilder = $postBuilder; + $this->blogService = $blogService; + } + + #[OA\Get( + path: '/blog/', + description: '', + summary: 'Returns paginated blog posts', + tags: ['blog'], + parameters: [ + new OA\Parameter(ref: '#/components/parameters/PageRequest'), + ], + responses: [ + new OA\Response( + response:'200', + description:'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property( + property: 'data', + properties: [ + new OA\Property(property: 'posts', type: 'array', items: new OA\Items(ref:'#/components/schemas/Post')), + new OA\Property(property: 'paginator', ref: '#/components/schemas/Paginator', type: 'object'), + ], + type: 'object' + ), + ]), + ] + ), + ), + ] + )] + public function index(PaginatorFormatter $paginatorFormatter, #[Query('page')] int $page = 1): Response + { + $paginator = $this->blogService->getPosts($page); + $posts = []; + foreach ($paginator->read() as $post) { + $posts[] = $this->postFormatter->format($post); + } + + return $this->responseFactory->createResponse( + [ + 'paginator' => $paginatorFormatter->format($paginator), + 'posts' => $posts, + ] + ); + } + + #[OA\Get( + path: '/blog/{id}', + description: '', + summary: 'Returns a post with a given ID', + tags: ['blog'], + parameters: [ + new OA\Parameter(parameter: 'id', name: 'id', in: 'path', schema: new OA\Schema(type: 'int', example: '2')), + ], + responses: [ + new OA\Response( + response:'200', + description:'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property( + property: 'data', + properties: [ + new OA\Property(property: 'post', ref: '#/components/schemas/Post', type: 'object'), + ], + type: 'object' + ), + ]), + ] + ), + ), + new OA\Response( + response: '404', + description: 'Not found', + content: new OA\JsonContent(allOf: [ + new OA\Schema(ref: '#/components/schemas/BadResponse'), + new OA\Schema(properties: [ + new OA\Property(property:'error_message', example:'Entity not found'), + new OA\Property(property: 'error_code', example: 404, nullable: true), + ]), + ]) + ), + ] + )] + public function view(#[RouteArgument('id')] int $id): Response + { + return $this->responseFactory->createResponse( + [ + 'post' => $this->postFormatter->format( + $this->blogService->getPost($id) + ), + ] + ); + } + + #[OA\Post( + path: '/blog/', + description: '', + summary: 'Creates a blog post', + security: [new OA\SecurityScheme(ref: '#/components/securitySchemes/ApiKey')], + requestBody: new OA\RequestBody(required: true, content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/EditPostRequest'), + ] + )), + tags: ['blog'], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/Response') + ), + new OA\Response( + response: '400', + description: 'Bad request', + content: new OA\JsonContent(ref: '#/components/schemas/BadResponse') + ), + ] + )] + public function create(EditPostRequest $postRequest, UserRequest $userRequest): Response + { + $post = $this->postBuilder->build(new Post(), $postRequest); + $post->setUser($userRequest->getUser()); + + $this->postRepository->save($post); + + return $this->responseFactory->createResponse(); + } + + #[OA\Put( + path: '/blog/{id}', + description: '', + summary: 'Updates a blog post with a given ID', + security: [new OA\SecurityScheme(ref: '#/components/securitySchemes/ApiKey')], + requestBody: new OA\RequestBody(required: true, content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/EditPostRequest'), + ] + )), + tags: ['blog'], + parameters: [ + new OA\Parameter(parameter: 'id', name: 'id', in: 'path', schema: new OA\Schema(type: 'int', example: '2')), + ], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/Response') + ), + new OA\Response( + response: '400', + description: 'Bad request', + content: new OA\JsonContent(ref: '#/components/schemas/BadResponse') + ), + ] + )] + public function update(EditPostRequest $postRequest, #[RouteArgument('id')] int $id): Response + { + $post = $this->postBuilder->build( + $this->blogService->getPost($id), + $postRequest + ); + + $this->postRepository->save($post); + + return $this->responseFactory->createResponse(); + } +} diff --git a/blog-api/src/Blog/BlogService.php b/blog-api/src/Blog/BlogService.php new file mode 100644 index 000000000..b511dad5c --- /dev/null +++ b/blog-api/src/Blog/BlogService.php @@ -0,0 +1,53 @@ +postRepository = $postRepository; + } + + /** + * @psalm-return PaginatorInterface + */ + public function getPosts(int $page): PaginatorInterface + { + $dataReader = $this->postRepository->findAll(); + + /** @psalm-var PaginatorInterface */ + return (new OffsetPaginator($dataReader)) + ->withPageSize(self::POSTS_PER_PAGE) + ->withCurrentPage($page); + } + + /** + * @param int $id + * + * @throws NotFoundException + * + * @return Post + */ + public function getPost(int $id): Post + { + /** + * @var Post|null $post + */ + $post = $this->postRepository->findOne(['id' => $id]); + if ($post === null) { + throw new NotFoundException(); + } + + return $post; + } +} diff --git a/blog-api/src/Blog/EditPostRequest.php b/blog-api/src/Blog/EditPostRequest.php new file mode 100644 index 000000000..f7f24838a --- /dev/null +++ b/blog-api/src/Blog/EditPostRequest.php @@ -0,0 +1,83 @@ +id; + } + + public function getTitle(): string + { + return $this->title; + } + + public function getText(): string + { + return $this->text; + } + + public function getStatus(): PostStatus + { + return PostStatus::from($this->status); + } + + public function getRules(): array + { + return [ + 'title' => [ + new Length(min: 5, max: 255), + ], + 'text' => [ + new Length(min: 5, max: 1000), + ], + 'status' => [ + static function ($value): Result { + $result = new Result(); + if (!PostStatus::isValid($value)) { + $result->addError('Incorrect status'); + } + + return $result; + }, + ], + ]; + } +} diff --git a/blog-api/src/Blog/Post.php b/blog-api/src/Blog/Post.php new file mode 100644 index 000000000..99c20e2dc --- /dev/null +++ b/blog-api/src/Blog/Post.php @@ -0,0 +1,108 @@ +created_at = new DateTimeImmutable(); + $this->updated_at = new DateTimeImmutable(); + $this->resetSlug(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getSlug(): ?string + { + return $this->slug; + } + + public function resetSlug(): void + { + $this->slug = Random::string(128); + } + + public function getTitle(): string + { + return $this->title; + } + + public function setTitle(string $title): void + { + $this->title = $title; + } + + public function getContent(): string + { + return $this->content; + } + + public function setContent(string $content): void + { + $this->content = $content; + } + + public function setStatus(PostStatus $status): void + { + $this->status = $status->getValue(); + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->created_at; + } + + public function getUpdatedAt(): DateTimeImmutable + { + return $this->updated_at; + } + + public function setUser(User $user): void + { + $this->user = $user; + } + + public function getUser(): ?User + { + return $this->user; + } +} diff --git a/blog-api/src/Blog/PostBuilder.php b/blog-api/src/Blog/PostBuilder.php new file mode 100644 index 000000000..0083f564d --- /dev/null +++ b/blog-api/src/Blog/PostBuilder.php @@ -0,0 +1,17 @@ +setTitle($request->getTitle()); + $post->setContent($request->getText()); + $post->setStatus($request->getStatus()); + + return $post; + } +} diff --git a/blog-api/src/Blog/PostFormatter.php b/blog-api/src/Blog/PostFormatter.php new file mode 100644 index 000000000..db8d1bfec --- /dev/null +++ b/blog-api/src/Blog/PostFormatter.php @@ -0,0 +1,27 @@ + $post->getId(), + 'title' => $post->getTitle(), + 'content' => $post->getContent(), + ]; + } +} diff --git a/blog-api/src/Blog/PostRepository.php b/blog-api/src/Blog/PostRepository.php new file mode 100644 index 000000000..c27838be1 --- /dev/null +++ b/blog-api/src/Blog/PostRepository.php @@ -0,0 +1,42 @@ +orm = $orm; + parent::__construct($select); + } + + /** + * @psalm-return EntityReader + */ + public function findAll(array $scope = [], array $orderBy = []): EntityReader + { + /** @psalm-var EntityReader */ + return new EntityReader( + $this + ->select() + ->where($scope) + ->orderBy($orderBy) + ); + } + + public function save(Post $user): void + { + $transaction = new Transaction($this->orm); + $transaction->persist($user); + $transaction->run(); + } +} diff --git a/blog-api/src/Blog/PostStatus.php b/blog-api/src/Blog/PostStatus.php new file mode 100644 index 000000000..da2e9b033 --- /dev/null +++ b/blog-api/src/Blog/PostStatus.php @@ -0,0 +1,21 @@ +status; + } + + public function setStatus(string $status): self + { + $this->status = $status; + + return $this; + } + + public function getErrorMessage(): string + { + return $this->errorMessage; + } + + public function setErrorMessage(string $errorMessage): self + { + $this->errorMessage = $errorMessage; + + return $this; + } + + public function getErrorCode(): ?int + { + return $this->errorCode; + } + + public function setErrorCode(int $errorCode): self + { + $this->errorCode = $errorCode; + + return $this; + } + + public function getData(): ?array + { + return $this->data; + } + + public function setData(?array $data): self + { + $this->data = $data; + + return $this; + } + + public function toArray(): array + { + return [ + 'status' => $this->getStatus(), + 'error_message' => $this->getErrorMessage(), + 'error_code' => $this->getErrorCode(), + 'data' => $this->getData(), + ]; + } +} diff --git a/blog-api/src/Exception/ApplicationException.php b/blog-api/src/Exception/ApplicationException.php new file mode 100644 index 000000000..8c919156b --- /dev/null +++ b/blog-api/src/Exception/ApplicationException.php @@ -0,0 +1,11 @@ +getStatusCode() !== Status::OK) { + return $this + ->createErrorResponse() + ->setErrorCode($response->getStatusCode()) + ->setErrorMessage($this->getErrorMessage($response)); + } + + return $this + ->createSuccessResponse() + ->setData($response->getData()); + } + + public function createSuccessResponse(): ApiResponseData + { + return $this + ->createResponse() + ->setStatus('success'); + } + + public function createErrorResponse(): ApiResponseData + { + return $this + ->createResponse() + ->setStatus('failed'); + } + + public function createResponse(): ApiResponseData + { + return new ApiResponseData(); + } + + private function getErrorMessage(DataResponse $response): string + { + $data = $response->getData(); + if (is_string($data) && !empty($data)) { + return $data; + } + + return 'Unknown error'; + } +} diff --git a/blog-api/src/Factory/RestGroupFactory.php b/blog-api/src/Factory/RestGroupFactory.php new file mode 100644 index 000000000..f4c74dd7d --- /dev/null +++ b/blog-api/src/Factory/RestGroupFactory.php @@ -0,0 +1,47 @@ + Method::GET, + 'list' => Method::GET, + 'post' => Method::POST, + 'put' => Method::PUT, + 'delete' => Method::DELETE, + 'patch' => Method::PATCH, + 'options' => Method::OPTIONS, + ]; + + public static function create(string $prefix, string $controller): Group + { + return Group::create($prefix)->routes(...self::createDefaultRoutes($controller)); + } + + private static function createDefaultRoutes(string $controller): array + { + $routes = []; + $reflection = new ReflectionClass($controller); + foreach (self::METHODS as $methodName => $httpMethod) { + if ($reflection->hasMethod($methodName)) { + $pattern = ($methodName === 'list' || $methodName === 'post') ? '' : self::ENTITY_PATTERN; + $routes[] = Route::methods([$httpMethod], $pattern)->action([$controller, $methodName]); + } + } + if ($reflection->hasMethod('options')) { + $routes[] = Route::methods([Method::OPTIONS], '')->action([$controller, 'options']); + } + + return $routes; + } +} diff --git a/blog-api/src/Formatter/ApiResponseFormatter.php b/blog-api/src/Formatter/ApiResponseFormatter.php new file mode 100644 index 000000000..1609c1b1d --- /dev/null +++ b/blog-api/src/Formatter/ApiResponseFormatter.php @@ -0,0 +1,36 @@ +apiResponseDataFactory = $apiResponseDataFactory; + $this->jsonDataResponseFormatter = $jsonDataResponseFormatter; + } + + public function format(DataResponse $dataResponse): ResponseInterface + { + $response = $dataResponse->withData( + $this->apiResponseDataFactory + ->createFromResponse($dataResponse) + ->toArray() + ); + + return $this->jsonDataResponseFormatter->format($response); + } +} diff --git a/blog-api/src/Formatter/PaginatorFormatter.php b/blog-api/src/Formatter/PaginatorFormatter.php new file mode 100644 index 000000000..88266c183 --- /dev/null +++ b/blog-api/src/Formatter/PaginatorFormatter.php @@ -0,0 +1,28 @@ + $paginator->getPageSize(), + 'currentPage' => $paginator->getCurrentPage(), + 'totalPages' => $paginator->getTotalPages(), + ]; + } +} diff --git a/blog-api/src/Handler/NotFoundHandler.php b/blog-api/src/Handler/NotFoundHandler.php new file mode 100644 index 000000000..3ab9ddfe3 --- /dev/null +++ b/blog-api/src/Handler/NotFoundHandler.php @@ -0,0 +1,33 @@ +formatter->format( + $this->dataResponseFactory->createResponse( + $this->translator->translate('404.title'), + Status::NOT_FOUND, + ) + ); + } +} diff --git a/blog-api/src/InfoController.php b/blog-api/src/InfoController.php new file mode 100644 index 000000000..5dbe11ff4 --- /dev/null +++ b/blog-api/src/InfoController.php @@ -0,0 +1,44 @@ +createResponse(['version' => $this->versionProvider->version, 'author' => 'yiisoft']); + } +} diff --git a/src/Installer.php b/blog-api/src/Installer.php similarity index 100% rename from src/Installer.php rename to blog-api/src/Installer.php diff --git a/blog-api/src/Middleware/ExceptionMiddleware.php b/blog-api/src/Middleware/ExceptionMiddleware.php new file mode 100644 index 000000000..c64128112 --- /dev/null +++ b/blog-api/src/Middleware/ExceptionMiddleware.php @@ -0,0 +1,35 @@ +dataResponseFactory = $dataResponseFactory; + } + + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + try { + return $handler->handle($request); + } catch (ApplicationException $e) { + return $this->dataResponseFactory->createResponse($e->getMessage(), $e->getCode()); + } catch (InputValidationException $e) { + return $this->dataResponseFactory->createResponse($e->getResult()->getErrorMessages()[0], Status::BAD_REQUEST); + } + } +} diff --git a/blog-api/src/Queue/LoggingAuthorizationHandler.php b/blog-api/src/Queue/LoggingAuthorizationHandler.php new file mode 100644 index 000000000..38ff6707a --- /dev/null +++ b/blog-api/src/Queue/LoggingAuthorizationHandler.php @@ -0,0 +1,24 @@ +logger->info('User is login', [ + 'data' => $message->getData(), + ]); + } +} diff --git a/blog-api/src/Queue/UserLoggedInMessage.php b/blog-api/src/Queue/UserLoggedInMessage.php new file mode 100644 index 000000000..141e7d3b5 --- /dev/null +++ b/blog-api/src/Queue/UserLoggedInMessage.php @@ -0,0 +1,44 @@ +id = $id; + } + + public function getId(): ?string + { + return $this->id; + } + + public function getHandlerName(): string + { + return LoggingAuthorizationHandler::NAME; + } + + public function getData(): array + { + return [ + 'user_id' => $this->userId, + 'time' => $this->time, + ]; + } + + public function getMetadata(): array + { + return []; + } +} diff --git a/blog-api/src/RestControllerTrait.php b/blog-api/src/RestControllerTrait.php new file mode 100644 index 000000000..f7315f853 --- /dev/null +++ b/blog-api/src/RestControllerTrait.php @@ -0,0 +1,51 @@ +login = $login; + $this->created_at = new DateTimeImmutable(); + $this->updated_at = new DateTimeImmutable(); + $this->setPassword($password); + $this->resetToken(); + } + + public function getId(): ?string + { + return $this->id === null ? null : (string) $this->id; + } + + public function getToken(): string + { + return $this->token; + } + + public function resetToken(): void + { + $this->token = Random::string(128); + } + + public function getLogin(): string + { + return $this->login; + } + + public function setLogin(string $login): void + { + $this->login = $login; + } + + public function validatePassword(string $password): bool + { + return (new PasswordHasher())->validate($password, $this->passwordHash); + } + + public function setPassword(string $password): void + { + $this->passwordHash = (new PasswordHasher())->hash($password); + } + + public function getCreatedAt(): DateTimeImmutable + { + return $this->created_at; + } + + public function getUpdatedAt(): DateTimeImmutable + { + return $this->updated_at; + } +} diff --git a/blog-api/src/User/UserController.php b/blog-api/src/User/UserController.php new file mode 100644 index 000000000..cbb63502c --- /dev/null +++ b/blog-api/src/User/UserController.php @@ -0,0 +1,125 @@ +responseFactory = $responseFactory; + $this->userRepository = $userRepository; + $this->userFormatter = $userFormatter; + } + + #[OA\Get( + path: '/users/', + description: '', + summary: 'Returns paginated users', + security: [new OA\SecurityScheme(ref: '#/components/securitySchemes/ApiKey')], + tags: ['user'], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property( + property: 'data', + properties: [ + new OA\Property( + property: 'user', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/User') + ), + ], + type: 'object' + ), + ]), + ] + ) + ), + ] + )] + public function list(): ResponseInterface + { + $dataReader = $this->userRepository->findAllOrderByLogin(); + $result = []; + foreach ($dataReader->read() as $user) { + $result[] = $this->userFormatter->format($user); + } + + return $this->responseFactory->createResponse( + [ + 'users' => $result, + ] + ); + } + + #[OA\Get( + path: '/users/{id}', + description: '', + summary: 'Returns a user with a given ID', + security: [new OA\SecurityScheme(ref: '#/components/securitySchemes/ApiKey')], + tags: ['user'], + parameters: [ + new OA\Parameter(parameter: 'id', name: 'id', in: 'path', example: 2), + ], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property( + property: 'data', + properties: [ + new OA\Property(property: 'user', ref: '#/components/schemas/User', type: 'object'), + ], + type: 'object' + ), + ]), + ] + ) + ), + ] + )] + public function get(#[RouteArgument('id')] int $id): ResponseInterface + { + /** + * @var User $user + */ + $user = $this->userRepository->findByPK($id); + if ($user === null) { + throw new NotFoundException(); + } + + return $this->responseFactory->createResponse( + [ + 'user' => $this->userFormatter->format($user), + ] + ); + } +} diff --git a/blog-api/src/User/UserFormatter.php b/blog-api/src/User/UserFormatter.php new file mode 100644 index 000000000..8a04fe594 --- /dev/null +++ b/blog-api/src/User/UserFormatter.php @@ -0,0 +1,27 @@ + $user->getLogin(), + 'created_at' => $user + ->getCreatedAt() + ->format('d.m.Y H:i:s'), + ]; + } +} diff --git a/blog-api/src/User/UserRepository.php b/blog-api/src/User/UserRepository.php new file mode 100644 index 000000000..08c8446ee --- /dev/null +++ b/blog-api/src/User/UserRepository.php @@ -0,0 +1,65 @@ + + */ + public function findAllOrderByLogin(): EntityReader + { + /** @psalm-var EntityReader */ + return (new EntityReader($this->select())) + ->withSort( + Sort::only(['login'])->withOrderString('login') + ); + } + + public function findIdentity(string $id): ?IdentityInterface + { + return $this->findIdentityBy('id', $id); + } + + public function findIdentityByToken(string $token, string $type = null): ?IdentityInterface + { + return $this->findIdentityBy('token', $token); + } + + public function findByLogin(string $login): ?IdentityInterface + { + return $this->findIdentityBy('login', $login); + } + + public function save(IdentityInterface $user): void + { + $this->entityWriter->write([$user]); + } + + private function findIdentityBy(string $field, string $value): ?IdentityInterface + { + /** + * @var $identity IdentityInterface|null + */ + return $this->findOne([$field => $value]); + } +} diff --git a/blog-api/src/User/UserRequest.php b/blog-api/src/User/UserRequest.php new file mode 100644 index 000000000..3f3825461 --- /dev/null +++ b/blog-api/src/User/UserRequest.php @@ -0,0 +1,20 @@ +user; + } +} diff --git a/blog-api/src/User/UserService.php b/blog-api/src/User/UserService.php new file mode 100644 index 000000000..b125d9e3f --- /dev/null +++ b/blog-api/src/User/UserService.php @@ -0,0 +1,65 @@ +identityRepository; + $identity = $identityRepository->findByLogin($login); + if ($identity === null) { + throw new BadRequestException('No such user.'); + } + + if (!$identity->validatePassword($password)) { + throw new BadRequestException('Invalid password.'); + } + + if (!$this->currentUser->login($identity)) { + throw new BadRequestException(); + } + + $identity->resetToken(); + $this->identityRepository->save($identity); + + $queueMessage = new UserLoggedInMessage($identity->getId(), time()); + $this->queueFactory->get(LoggingAuthorizationHandler::CHANNEL)->push($queueMessage); + + return $identity; + } + + public function logout(User $user): void + { + $user->resetToken(); + $this->identityRepository->save($user); + } +} diff --git a/blog-api/src/VersionProvider.php b/blog-api/src/VersionProvider.php new file mode 100644 index 000000000..9b9bcd666 --- /dev/null +++ b/blog-api/src/VersionProvider.php @@ -0,0 +1,12 @@ +sendPOST( + '/auth/', + [ + 'login' => 'Opal1144', + 'password' => 'Opal1144', + ] + ); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + ] + ); + + $response = Json::decode($I->grabResponse()); + $I->seeInDatabase( + 'user', + [ + 'id' => 1, + 'token' => $response['data']['token'], + ] + ); + } + + public function logout(AcceptanceTester $I): void + { + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + + $I->sendPOST( + '/logout/' + ); + + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + ] + ); + + $I->dontSeeInDatabase( + 'user', + [ + 'id' => 1, + 'token' => 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv', + ] + ); + } + + public function logoutWithBadToken(AcceptanceTester $I): void + { + $I->haveHttpHeader( + 'X-Api-Key', + 'bad-token' + ); + + $I->haveHttpHeader( + 'Accept', + 'application/json' + ); + + $I->sendPOST( + '/logout/' + ); + + $I->seeResponseCodeIs(HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Unauthorised request', + 'error_code' => HttpCode::UNAUTHORIZED, + 'data' => null, + ] + ); + } +} diff --git a/blog-api/tests/Acceptance/BlogCest.php b/blog-api/tests/Acceptance/BlogCest.php new file mode 100644 index 000000000..044974db0 --- /dev/null +++ b/blog-api/tests/Acceptance/BlogCest.php @@ -0,0 +1,219 @@ +haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + + $I->sendPOST( + '/blog/', + [ + 'title' => 'test title', + 'text' => 'test text', + 'status' => 0, + ] + ); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => null, + ] + ); + + $I->seeInDatabase( + 'post', + [ + 'title' => 'test title', + 'content' => 'test text', + 'status' => 0, + ] + ); + } + + public function createBadParams(AcceptanceTester $I): void + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + + $I->sendPOST( + '/blog/', + [ + 'title' => 'test title', + 'status' => 0, + ] + ); + $I->seeResponseCodeIs(HttpCode::BAD_REQUEST); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Text not passed.', + 'error_code' => 400, + 'data' => null, + ] + ); + + $I->dontSeeInDatabase( + 'post', + [ + 'title' => 'test title', + 'status' => 0, + ] + ); + } + + public function createBadAuth(AcceptanceTester $I): void + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendPOST( + '/blog/', + [ + 'title' => 'test title', + 'text' => 'test text', + 'status' => 0, + ] + ); + $I->seeResponseCodeIs(HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Unauthorised request', + 'error_code' => HttpCode::UNAUTHORIZED, + 'data' => null, + ] + ); + } + + public function update(AcceptanceTester $I): void + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + + $I->sendPUT( + '/blog/1', + [ + 'title' => 'test title', + 'text' => 'test text', + 'status' => 0, + ] + ); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => null, + ] + ); + + $I->seeInDatabase( + 'post', + [ + 'id' => 1, + 'title' => 'test title', + 'content' => 'test text', + 'status' => 0, + ] + ); + } + + public function updateBadAuth(AcceptanceTester $I): void + { + $I->haveHttpHeader('Content-Type', 'application/json'); + $I->sendPUT( + '/blog/1', + [ + 'title' => 'test title', + 'text' => 'test text', + 'status' => 0, + ] + ); + $I->seeResponseCodeIs(HttpCode::UNAUTHORIZED); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Unauthorised request', + 'error_code' => HttpCode::UNAUTHORIZED, + 'data' => null, + ] + ); + } + + public function index(AcceptanceTester $I): void + { + $I->sendGET( + '/blog/', + [ + 'page' => 2, + ] + ); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => [ + 'paginator' => [ + 'pageSize' => 10, + 'currentPage' => 2, + 'totalPages' => 2, + ], + 'posts' => [ + [ + 'id' => 11, + 'title' => 'Eveniet est nam sapiente odit architecto et.', + ], + ], + ], + ] + ); + } + + public function view(AcceptanceTester $I): void + { + $I->sendGET('/blog/11'); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => [ + 'post' => [ + 'id' => 11, + 'title' => 'Eveniet est nam sapiente odit architecto et.', + ], + ], + ] + ); + } +} diff --git a/blog-api/tests/Acceptance/SiteCest.php b/blog-api/tests/Acceptance/SiteCest.php new file mode 100644 index 000000000..0c704116d --- /dev/null +++ b/blog-api/tests/Acceptance/SiteCest.php @@ -0,0 +1,59 @@ +sendGET('/'); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => [ + 'version' => '3.0', + 'author' => 'yiisoft', + ], + ] + ); + } + + public function testNotFoundPage(AcceptanceTester $I): void + { + $I->sendGET('/not_found_page'); + $I->seeResponseCodeIs(HttpCode::NOT_FOUND); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Page not found', + 'error_code' => 404, + 'data' => null, + ] + ); + } + + public function testNotFoundPageRu(AcceptanceTester $I): void + { + $I->sendGET('/ru/not_found_page'); + $I->seeResponseCodeIs(HttpCode::NOT_FOUND); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Страница не найдена', + 'error_code' => 404, + 'data' => null, + ] + ); + } +} diff --git a/blog-api/tests/Acceptance/UserCest.php b/blog-api/tests/Acceptance/UserCest.php new file mode 100644 index 000000000..182731d2e --- /dev/null +++ b/blog-api/tests/Acceptance/UserCest.php @@ -0,0 +1,99 @@ +haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + $I->sendGET('/users/'); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => [ + 'users' => [ + [ + 'login' => 'Athena7928', + 'created_at' => '26.07.2020 20:18:11', + ], + ], + ], + ] + ); + } + + public function view(AcceptanceTester $I): void + { + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + $I->sendGET('/users/1'); + $I->seeResponseCodeIs(HttpCode::OK); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => [ + 'user' => [ + 'login' => 'Opal1144', + 'created_at' => '26.07.2020 20:18:11', + ], + ], + ] + ); + } + + public function viewBadId(AcceptanceTester $I): void + { + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + $I->sendGET('/users/1000'); + $I->seeResponseCodeIs(HttpCode::NOT_FOUND); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Entity not found', + 'error_code' => HttpCode::NOT_FOUND, + 'data' => null, + ] + ); + } + + public function notAllowedMethod(AcceptanceTester $I): void + { + $I->haveHttpHeader( + 'X-Api-Key', + 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv' + ); + $I->sendPut('/users/1'); + $I->seeResponseCodeIs(HttpCode::METHOD_NOT_ALLOWED); + $I->seeResponseIsJson(); + $I->seeResponseContainsJson( + [ + 'status' => 'failed', + 'error_message' => 'Method is not implemented yet', + 'error_code' => HttpCode::METHOD_NOT_ALLOWED, + 'data' => null, + ] + ); + } +} diff --git a/blog-api/tests/Cli.suite.yml b/blog-api/tests/Cli.suite.yml new file mode 100644 index 000000000..999946299 --- /dev/null +++ b/blog-api/tests/Cli.suite.yml @@ -0,0 +1,6 @@ +actor: CliTester +modules: + enabled: + - Cli + - \App\Tests\Support\Helper\Cli + step_decorators: ~ diff --git a/blog-api/tests/Cli/ConsoleCest.php b/blog-api/tests/Cli/ConsoleCest.php new file mode 100644 index 000000000..f6d7a11ec --- /dev/null +++ b/blog-api/tests/Cli/ConsoleCest.php @@ -0,0 +1,17 @@ +runShellCommand($command); + $I->seeInShellOutput('Yii Console'); + } +} diff --git a/tests/Functional.suite.yml b/blog-api/tests/Functional.suite.yml similarity index 65% rename from tests/Functional.suite.yml rename to blog-api/tests/Functional.suite.yml index 7b228bb50..125f6c5bb 100644 --- a/tests/Functional.suite.yml +++ b/blog-api/tests/Functional.suite.yml @@ -2,11 +2,11 @@ actor: FunctionalTester extensions: enabled: - Codeception\Extension\RunProcess: - 0: php -d variables_order=EGPCS -S 127.0.0.1:8080 -t public + 0: php -d variables_order=EGPCS -S 127.0.0.1:8881 -t public sleep: 1 modules: enabled: - PhpBrowser: - url: http://127.0.0.1:8080 + url: http://127.0.0.1:8881%BASE_URL% - \App\Tests\Support\Helper\Functional step_decorators: ~ diff --git a/blog-api/tests/Functional/IndexControllerTest.php b/blog-api/tests/Functional/IndexControllerTest.php new file mode 100644 index 000000000..781f79ecd --- /dev/null +++ b/blog-api/tests/Functional/IndexControllerTest.php @@ -0,0 +1,60 @@ +tester = new FunctionalTester(); + } + + public function testGetIndex(): void + { + $method = 'GET'; + $url = '/'; + + $this->tester->bootstrapApplication(dirname(__DIR__, 2)); + $response = $this->tester->doRequest($method, $url); + + $this->assertEquals( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => ['version' => '3.0', 'author' => 'yiisoft'], + ], + $response->getContentAsJson() + ); + } + + public function testGetIndexMockVersion(): void + { + $method = 'GET'; + $url = '/'; + + $this->tester->bootstrapApplication(dirname(__DIR__, 2)); + + $this->tester->mockService(VersionProvider::class, new VersionProvider('3.0.0')); + + $response = $this->tester->doRequest($method, $url); + + $this->assertEquals( + [ + 'status' => 'success', + 'error_message' => '', + 'error_code' => null, + 'data' => ['version' => '3.0.0', 'author' => 'yiisoft'], + ], + $response->getContentAsJson() + ); + } +} diff --git a/tests/Support/AcceptanceTester.php b/blog-api/tests/Support/AcceptanceTester.php similarity index 90% rename from tests/Support/AcceptanceTester.php rename to blog-api/tests/Support/AcceptanceTester.php index 012aa7e87..664821bd1 100644 --- a/tests/Support/AcceptanceTester.php +++ b/blog-api/tests/Support/AcceptanceTester.php @@ -7,7 +7,7 @@ use Codeception\Actor; /** - * Inherited Methods + * Inherited Methods. * * @method void wantToTest($text) * @method void wantTo($text) @@ -21,12 +21,12 @@ * @method void pause() * * @SuppressWarnings(PHPMD) -*/ + */ class AcceptanceTester extends Actor { use _generated\AcceptanceTesterActions; /** - * Define custom actions here + * Define custom actions here. */ } diff --git a/tests/Support/CliTester.php b/blog-api/tests/Support/CliTester.php similarity index 90% rename from tests/Support/CliTester.php rename to blog-api/tests/Support/CliTester.php index ad635d690..4b08ad4fd 100644 --- a/tests/Support/CliTester.php +++ b/blog-api/tests/Support/CliTester.php @@ -7,7 +7,7 @@ use Codeception\Actor; /** - * Inherited Methods + * Inherited Methods. * * @method void wantToTest($text) * @method void wantTo($text) @@ -21,12 +21,12 @@ * @method void pause() * * @SuppressWarnings(PHPMD) -*/ + */ class CliTester extends Actor { use _generated\CliTesterActions; /** - * Define custom actions here + * Define custom actions here. */ } diff --git a/blog-api/tests/Support/Data/database.db b/blog-api/tests/Support/Data/database.db new file mode 100644 index 000000000..6b81fc201 Binary files /dev/null and b/blog-api/tests/Support/Data/database.db differ diff --git a/blog-api/tests/Support/Data/dump.sql b/blog-api/tests/Support/Data/dump.sql new file mode 100644 index 000000000..275aa60b1 --- /dev/null +++ b/blog-api/tests/Support/Data/dump.sql @@ -0,0 +1,58 @@ +create table user +( + id integer not null + primary key, + token text(128) not null, + login text(48) not null, + password_hash text(255) not null, + created_at datetime not null, + updated_at datetime not null +); + +create unique index user_index_login_5f1de4d7ae5e4 + on user (login); + +create unique index user_index_token_5f1de4d7ae5f9 + on user (token); + +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (1, 'lev1ZsWCzqrMlXRI2sT8h4ApYpSgBMl1xf6D4bCRtiKtDqw6JN36yLznargilQ_rEJz9zTfcUxm53PLODCToF9gGin38Rd4NkhQPOVeH5VvZvBaQlUg64E6icNCubiAv', 'Opal1144', '$2y$13$IkvO58xZv3lJkGUpwTGPg.6NQj1mrSMOUIi3G4sBX6AoShRXTISES', '2020-07-26 20:18:11', '2020-08-03 19:10:48'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (2, 'yU0asLbo5th60rRL4L0EGVRl0FSPHL7gCIZUs1IQi5YfdOwwbsuz1ZIA0cK2au22Gkk--XpSCsLxqE2JD_E-VxMzyuaW8pLBSxjyP0bmboWyuyNuUj1kGyGqM0v0C0fE', 'Haven7127', '$2y$13$/aVlgRSYPWUjHOlSs1PSuOkmOVB7HdQLc6UmqJLvSMbNUSy36zwqi', '2020-07-26 20:18:16', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (3, 'AzGRKjE4OvZhNUYxpnGqUnqxBejXn87MsPw2RInEGkMXSM4px_-pfCSntPQpCQSxAREh-uJcHYovMGsqP0kjM6aTeQHzEABxc_FOVt50kClftikYretlhJ0uOJBrQghS', 'Athena7928', '$2y$13$kXheeNXBm5fj2I/0hNrv2euOkSkPhXZeQwna7/eTLnktdUonPwtKK', '2020-07-26 20:18:11', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (4, 'P0ZcZ117Jh2W0xaAeq1YMoR5itemK04vZWTsqliKDbxIm-Hxtptt_cvwng5Oiy8oeMvRwB7eUSIszMTfcU6UtOZZ7WcuEqICpKdaXiY3uEOUibLO48oLZ5XXV9HREQxE', 'Shayne6889', '$2y$13$ri9geQr79ytcRcZ9jO7F6OSN.1MeNJb6hfsM2Iysoltjluds5YmMW', '2020-07-26 20:18:14', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (5, 'gUEH-ztBM4-0boeX10NS_QHsQWHP4O1_Qr7CeoUU78gadFpYE8GqhudgaUklmihARs46GnYPKCWAPqgEqdXjUx9TVcwP0J0KiQEFC2oJrtsGRLziPSZg3HryA2eC1MRi', 'Wilburn1086', '$2y$13$NcMhRseiDyDMm3yhF8/45OkavtVxtIix8tMJzYI5xHx3dYjRvzS3S', '2020-07-26 20:18:13', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (6, '9OA09AZt8sYA7Ehi_ttnLbLwsMGLPghtQu260JrRwrBJaMTabuBQdIEHbJNW0BcAHF2yDm5QoEQEY5MCVudkre4yDWB6EddYSei9mqn_3uwQbfhY2jz1S0cENapTLIrF', 'Rossie5155', '$2y$13$9oWNAP9IXBIW3KY9M.KxyecgFMEdot/k8jGNdIkptR9Bf0Oo42oxG', '2020-07-26 20:18:12', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (7, '5SQSC0l70-3eerJKNlNOz7BTAl3PuylMy5KldV2jRR4Cq2dmT5dM33tyyb5u2IwW_GKVWL9dL5eXgGk9U14KH9lxQSz8_wwStwoTz7KrDeOj3Oae-k87Nakj5QhSuAEU', 'Niko6385', '$2y$13$bnDvR9OiqmAulLYBYNMjuO4IUOl1TwqfQy1jnMwN1ESB8J.i/Si.S', '2020-07-26 20:18:15', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (8, 'FMJIgz8TvmroJ28uAat0jyeiYADlWfpNpoR9kRBFGmVsUHAw_u1kJ0-O8EHB5UfJaqLNhrskCAf26kZCXuB747DaPpBDHRd5mLZ5b7Tq5TxaK659Glfu-gZzC0Pw_u2d', 'Cordie5190', '$2y$13$ah.45kfteHCwwLQZAd9AWeuu5pOvhfJFU8x8TKA7rq/Y.ty8cEAlO', '2020-07-26 20:18:13', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (9, '_PGRAIc8eKL2IQhmsMImrh49w43Y2byQsj0nUHul3Q4HFectkmd8nhh4ORTcvvYxNfx0Vbx4jtG6-Oph8lxRnw0f7K-qOTqgLMRdv5TqlVyZO74dNz4NynTd9pYTiQDi', 'Leola1793', '$2y$13$fatVjj.ySzcur1F6Ks2/vOlGsQYh8dkIg6gQS8WjkBGRHwgZg69ra', '2020-07-26 20:18:14', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (10, 'm6hicvzj0r5vXmpGo5Ck97-Os38g16Qi8JQDBjJTbEehrcioZOQf9GL7410CvMy1mEhIbOMFlzdWERxpJ-XMvTXB9oF3fPrjA3UB7v5aNfgP9sGeWizfb05uaA8eaeQm', 'Rachael2982', '$2y$13$zgnmnzkFT7xkgYQj4JZiFerX6NyNMlwbBLWKnbxV/bXatO5yx7XM.', '2020-07-26 20:18:12', '2020-07-26 20:18:17'); +INSERT INTO user (id, token, login, password_hash, created_at, updated_at) VALUES (11, 'ooTRTrvO925xdpKBR8adhysr-KSKRsZK4JG_hLfghxXKQ2z5TLdmjJK8rc8Qn4Iayotg6GJF1BoA0AHeL9YuTl-qnlkmlC6F3NEgomipGQYw7odI-D9p_VAFSj1j2dIS', 'Lizzie7529', '$2y$13$tzg5/FlklhOk.e9opCisfe5aOuKREVtnyy.6IeUL.hva1CjAsl3NW', '2020-07-26 20:18:15', '2020-07-26 20:18:17'); + +create table post +( + id integer not null + primary key, + slug text(128) not null, + title text(255) default '' not null, + status integer default 0 not null, + content text not null, + created_at datetime not null, + updated_at datetime not null, + user_id integer not null + references user + on update cascade on delete cascade +); + +create index post_index_user_id_5f1de4d7a5678 + on post (user_id); + +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (1, 'xkHilRENIavP1Ht6WS7UHKGBv__NDYlrmpvx0GieP91AnQnnRMUKK9OG8so0x38mColZj64UBF6UFrMTvYCgWUIQx0I74Vgcoy63PNCqwVz5hYYi0DYqn3xAuXIKgnbT', 'Quia non natus aut qui saepe ut non.', 0, 'Mock Turtle in the distance, screaming with passion. She had quite forgotten the little door: but, alas! either the locks were too large, or the key was too small, but at any rate, the Dormouse into the air off all its feet at once, while all the rats and--oh dear!'' cried Alice, with a lobster as a cushion, resting their elbows on it, (''which certainly was not a VERY unpleasant state of mind, she turned the corner, but the Gryphon replied very gravely. ''What else have you executed.'' The miserable Hatter dropped his teacup instead of onions.'' Seven flung down his brush, and had to fall a long sleep you''ve had!'' ''Oh, I''ve had such a thing before, and he went on to himself as he spoke. ''A cat may look at it!'' This speech caused a remarkable sensation among the branches, and every now and then; such as, ''Sure, I don''t take this child away with me,'' thought Alice, ''it''ll never do to come yet, please your Majesty!'' the soldiers had to stoop to save her neck from being broken. She hastily put down yet, before the trial''s over!'' thought Alice. ''I''m glad they''ve begun asking riddles.--I believe I can say.'' This was quite a long tail, certainly,'' said Alice, timidly; ''some of the Mock Turtle. ''Certainly not!'' said Alice to herself, ''after such a nice soft thing to get in?'' ''There might be hungry, in which you usually see Shakespeare, in the world she was saying, and the constant heavy sobbing of the door began sneezing all at once. ''Give your evidence,'' the King in a piteous tone. And the moral of that is--"Be what you mean,'' said Alice. ''Anything you like,'' said the Hatter: ''as the things between whiles.'' ''Then you should say what you had been jumping about like that!'' But she waited patiently. ''Once,'' said the Cat. ''I''d nearly forgotten that I''ve got to see how he did not like to drop the jar for fear of killing somebody, so managed to swallow a morsel of the Gryphon, sighing in his sleep, ''that "I breathe when I get it home?'' when it had gone. ''Well! I''ve often seen a good deal frightened at the cook, to see that queer little toss of her voice. Nobody moved. ''Who cares for fish, Game, or any other dish? Who would not join the dance? Will you, won''t you join the dance? Will you, won''t you join the dance?"'' ''Thank you, sir, for your walk!" "Coming in a few yards off. The Cat only grinned a little snappishly. ''You''re enough to try the experiment?'' ''HE might bite,'' Alice cautiously replied: ''but I haven''t been invited yet.'' ''You''ll see me there,'' said the Gryphon. ''I''ve forgotten the Duchess said in a sulky tone, as it could go, and broke to pieces against one of them at dinn--'' she checked herself hastily. ''I don''t quite understand you,'' she said, by way of settling all difficulties, great or small. ''Off with her head!'' the Queen till she had put on one knee as he wore his crown.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 2); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (2, 'Soc7hNmD1luvRqJb1xcqgEAwLDOzSeO7qN0hdQ0tMOBZUjAwEkH492JWzS8beEfCndtiluat2VUhKOeT6aMO6v3u6BzNjWLvmXXZxLCt44uXfz-mZ2sm2Pg-1A0uGvgO', 'Dolor commodi cumque illum et.', 1, 'I''m a hatter.'' Here the Queen in front of them, with her arms round it as you go on? It''s by far the most interesting, and perhaps as this before, never! And I declare it''s too bad, that it is!'' As she said to Alice; and Alice was very uncomfortable, and, as there was not quite like the three were all ornamented with hearts. Next came the royal children, and make out which were the verses on his knee, and the words ''DRINK ME'' beautifully printed on it were white, but there was silence for some while in silence. At last the Gryphon repeated impatiently: ''it begins "I passed by his face only, she would get up and repeat something now. Tell her to begin.'' For, you see, because some of them attempted to explain the paper. ''If there''s no use denying it. I suppose Dinah''ll be sending me on messages next!'' And she began shrinking directly. As soon as she could, ''If you can''t take LESS,'' said the Mouse. ''--I proceed. "Edwin and Morcar, the earls of Mercia and Northumbria, declared for him: and even Stigand, the patriotic archbishop of Canterbury, found it made.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 3); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (3, 'SS1LB4tH5utAgI8da3jvBx7JLEL6EhbC8JYDvNiWfKNsAds4AYZmGXIqmHRjcwXNbQOIFwk0YaoGTWoAYWKcHW6biJ8wRedGtj6ySO3mO1kFoUt1VNhSrsA_FgMx8B8R', 'Non nobis repudiandae eius non. Est veniam rerum officiis.', 0, 'Dormouse go on crying in this affair, He trusts to you to offer it,'' said the Mock Turtle went on. ''We had the best cat in the night? Let me see: four times seven is--oh dear! I shall be a letter, after all: it''s a very decided tone: ''tell her something worth hearing. For some minutes the whole party look so grave and anxious.) Alice could bear: she got to go among mad people,'' Alice remarked. ''Oh, you can''t think! And oh, my poor hands, how is it twelve? I--'' ''Oh, don''t bother ME,'' said Alice aloud, addressing nobody in particular. ''She''d soon fetch it back!'' ''And who are THESE?'' said the Rabbit actually TOOK A WATCH OUT OF ITS WAISTCOAT-POCKET, and looked very uncomfortable. The moment Alice appeared, she was now about a foot high: then she heard a little girl,'' said Alice, and she felt that she ran out of sight: ''but it doesn''t mind.'' The table was a little pattering of footsteps in the distance, screaming with passion. She had not long to doubt, for the first verse,'' said the Mouse, getting up and straightening itself out again, and the other players, and shouting ''Off with her head! Off--'' ''Nonsense!'' said Alice, as she was not a mile high,'' said Alice. ''Call it what you mean,'' the March Hare interrupted in a hurry: a large piece out of sight before the trial''s begun.'' ''They''re putting down their names,'' the Gryphon hastily. ''Go on with the bread-and-butter getting so used to it!'' pleaded poor Alice. ''But you''re so easily offended!'' ''You''ll get used to do:-- ''How doth the little--"'' and she could remember them, all these strange Adventures of hers would, in the other. ''I beg pardon, your Majesty,'' the Hatter began, in a whisper.) ''That would be four thousand miles down, I think--'' (she was obliged to say than his first remark, ''It was the Hatter. ''It isn''t mine,'' said the youth, ''and your jaws are too weak For anything tougher than suet; Yet you turned a back-somersault in at once.'' However, she got back to finish his story. CHAPTER IV. The Rabbit Sends in a tone of great surprise. ''Of course you know what they''re about!'' ''Read them,'' said the Hatter. ''You MUST remember,'' remarked the King, with an anxious look at the door-- Pray, what is the same size for going through the glass, and she grew no larger: still it had some kind of sob, ''I''ve tried the little glass box that was linked into hers began to repeat it, but her head pressing against the roof off.'' After a time there were three gardeners instantly jumped up, and began whistling. ''Oh, there''s no use in crying like that!'' But she went on. ''Or would you like the Mock Turtle. ''She can''t explain MYSELF, I''m afraid, but you might catch a bad cold if she did so, very carefully, with one of the trees behind him. ''--or next day, maybe,'' the Footman continued in the sea. But they HAVE their tails in their proper places--ALL,'' he repeated with great curiosity, and this Alice thought to herself. (Alice had been to the executioner: ''fetch her here.'' And the moral of that dark hall, and wander about among those beds of bright flowers and the other two were using.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 5); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (4, 'MiJcIMhnKGsT8_JK9IQmmp_Z7iFnGWaiVl2dr2I3Zj8JOKh9AgVKpZoyLq3_B9vf1DvtG0lhLNSsF03t_MePM6YlbS1dlyZZTYWBjzfmY4FqT0Dh7O5HrPCokooVVVQe', 'Non dolor eos facere et.', 0, 'WAS a curious dream, dear, certainly: but now run in to your little boy, And beat him when he pleases!'' CHORUS. ''Wow! wow! wow!'' ''Here! you may stand down,'' continued the Gryphon. ''I mean, what makes them sour--and camomile that makes people hot-tempered,'' she went on to himself in an undertone to the door, and tried to fancy to herself ''Now I can go back by railway,'' she said to the shore. CHAPTER III. A Caucus-Race and a large mustard-mine near here. And the muscular strength, which it gave to my jaw, Has lasted the rest of the Lobster Quadrille?'' the Gryphon in an offended tone. And she began fancying the sort of lullaby to it as you liked.'' ''Is that all?'' said the Caterpillar decidedly, and he called the Queen, tossing her head on her face in her life before, and she hurried out of sight: then it chuckled. ''What fun!'' said the Gryphon. ''Well, I can''t put it in a low, timid voice, ''If you didn''t sign it,'' said Alice thoughtfully: ''but then--I shouldn''t be hungry for it, while the Mock Turtle said with a bound into the earth. At last the Mouse, who was reading the list of singers. ''You may not have lived much under the circumstances. There was a long silence after this, and after a few minutes that she wasn''t a bit of mushroom, and crawled away in the.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 6); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (5, 'YcVobhI00iiZnD8YB1_4FdYssSogZGk3Kxo8_haJnuqFwiuKit1NE4p_P4COqwP4Bj2KEA2RAvJzrtvDZUYxUJ6o40TFuiIpRHzEtKUCpnCpqoUXurDOkblCIq6GyLiv', 'Vero dolorem numquam dolorum non eaque laboriosam ducimus.', 0, 'Duchess, the Duchess! Oh! won''t she be savage if I''ve been changed for any of them. However, on the hearth and grinning from ear to ear. ''Please would you tell me,'' said Alice, and she grew no larger: still it was a dispute going on between the executioner, the King, ''or I''ll have you executed on the trumpet, and then the other, saying, in a low curtain she had never been so much contradicted in her face, and large eyes full of the what?'' said the Hatter, ''you wouldn''t talk about trouble!'' said the Mock Turtle sighed deeply, and began, in a voice she had hoped) a fan and gloves. ''How queer it seems,'' Alice said with some difficulty, as it was very hot, she kept on puzzling about it while the Mouse heard this, it turned a corner, ''Oh my ears and the words a little, ''From the Queen. ''Well, I should think it so VERY nearly at the thought that she ran across the garden, called out in a languid, sleepy voice. ''Who are YOU?'' Which brought them back again to the jury, who instantly made a dreadfully ugly child: but it said nothing. ''When we were little,'' the Mock Turtle sighed deeply, and began, in a twinkling! Half-past one, time for dinner!'' (''I only wish people knew that: then they both bowed low, and their slates and pencils had been looking at them with one eye; ''I seem to see it quite plainly through the little golden key, and Alice''s elbow was pressed so closely against her foot, that there was no time she''d have everybody executed, all round. (It was this last remark, ''it''s a vegetable. It doesn''t look like it?'' he said, turning to Alice, very much what would happen next. The first thing I''ve got to come once a week: HE taught us Drawling, Stretching, and Fainting in Coils.'' ''What was THAT like?'' said Alice. ''Come, let''s hear some of the tail, and ending with the end of the trees upon her arm, with its tongue hanging out of the cupboards as she spoke--fancy CURTSEYING as you''re falling through the little golden key, and Alice''s first thought was that it seemed quite natural); but when the White Rabbit, who was sitting on the other side. The further off from England the nearer is to France-- Then turn not pale, beloved snail, but come and join the dance?"'' ''Thank you, sir, for your walk!" "Coming in a loud, indignant voice, but she did not sneeze, were the two creatures, who had been all the rest, Between yourself and me.'' ''That''s the reason is--'' here the conversation a little. ''''Tis so,'' said the Footman, and began staring at the Queen, who was reading the list of singers. ''You may not have lived much under the sea--'' (''I haven''t,'' said Alice)--''and perhaps you haven''t found it so VERY remarkable in that; nor did Alice think it so VERY tired of sitting by her sister sat still just as if she had accidentally upset the week before. ''Oh, I know!'' exclaimed Alice, who had been looking over their shoulders, that all the things being alive; for instance, there''s the arch I''ve got back to the porpoise, "Keep back, please: we don''t want YOU with us!"'' ''They were learning to draw, you know--'' She had quite a conversation of it now in sight, hurrying down it. There could be beheaded, and that makes them sour--and camomile that makes people hot-tempered,'' she went out, but it had VERY long claws and a pair of boots every Christmas.'' And she squeezed.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 8); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (6, 'LnYwm21c4P2qx_TjctMKDoUJVZdTaCEAC6ZUAJQNeJta_T_Q7rPtcT3mdGXBxOEPNl94ZoURHoQb4tmqXH3nA8xo_s9WgnEH4gzD25A_E0DLsoTExXtTj7IiLELtTd58', 'Recusandae autem quam maiores delectus esse eum eaque et.', 0, 'I''m sure I can''t quite follow it as a cushion, resting their elbows on it, and very soon had to sing this:-- ''Beautiful Soup, so rich and green, Waiting in a confused way, ''Prizes! Prizes!'' Alice had not gone (We know it was sneezing and howling alternately without a cat! It''s the most curious thing I ask! It''s always six o''clock now.'' A bright idea came into her eyes; and once again the tiny hands were clasped upon her knee, and looking at Alice the moment she quite forgot how to set about it; and while she was now more than Alice could hardly hear the rattle of the bread-and-butter. Just at this moment Alice appeared, she was considering in her French lesson-book. The Mouse only growled in reply. ''That''s right!'' shouted the Queen. ''You make me smaller, I suppose.'' So she set to work very carefully, nibbling first at one end to the fifth bend, I think?'' he said to Alice, and sighing. ''It IS a Caucus-race?'' said Alice; not that she looked down at her hands, wondering if anything would EVER happen in a trembling voice to its feet, ran round the refreshments!'' But there seemed to quiver all over with William the Conqueror.'' (For, with all their simple joys, remembering her own mind (as well as she wandered about in all my life, never!'' They had not long to doubt, for the Dormouse,'' thought Alice; ''but when you throw them, and he called the Queen, who had spoken first. ''That''s none of YOUR adventures.'' ''I could tell you my adventures--beginning from this side of WHAT?'' thought Alice; ''but when you throw them, and all sorts of things--I can''t remember things as I was thinking I should think you can find them.'' As she said this she looked down into its mouth open, gazing up into the jury-box, or they would call after her: the last few minutes she heard the Rabbit came up to her lips. ''I know what to uglify is, you know. Come on!'' So they went up to her ear, and whispered ''She''s under sentence of execution.'' ''What for?'' said Alice. ''Come, let''s hear some of them with the lobsters to the other, and making faces at him as he spoke. ''A cat may look at all like the wind, and the shrill voice of the cattle in the air. Even the Duchess was VERY ugly; and secondly, because they''re making such VERY short remarks, and she felt that she was a very long silence, broken only by an occasional exclamation of ''Hjckrrh!'' from the sky! Ugh, Serpent!'' ''But I''m NOT a serpent!'' said Alice very meekly: ''I''m growing.'' ''You''ve no right to grow up again! Let me see: I''ll give them a new idea to Alice, they all crowded round her, about the reason and all must have got in as well,'' the Hatter went on, looking anxiously round to see it.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 4); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (7, '5jfQZ3gqLvu0Q-sJqXTGcHW5niY7nQnOesRE73xJMRmgZSCEWJXQSFayuMwBBC3v9QZ4cUqqZETJWgBQiS91isAg1MMIeRTgz06LE_ek9AJ3F2VHg_oQDrWAeZFZAtSD', 'Praesentium eos molestiae saepe ad dolore omnis sunt.', 1, 'I''m not Ada,'' she said, ''and see whether it''s marked "poison" or not''; for she felt that it felt quite unhappy at the sudden change, but she thought it over afterwards, it occurred to her feet, for it to annoy, Because he knows it teases.'' CHORUS. (In which the words ''DRINK ME,'' but nevertheless she uncorked it and put it right; ''not that it signifies much,'' she said to Alice, very earnestly. ''I''ve had nothing yet,'' Alice replied in a sulky tone; ''Seven jogged my elbow.'' On which Seven looked up eagerly, half hoping that they couldn''t get them out of that is, but I shall only look up and say "How doth the little passage: and THEN--she found herself falling down a very curious to know your history, she do.'' ''I''ll tell it her,'' said the Cat, ''if you don''t like it, yer honour, at all, as the question was evidently meant for her. ''Yes!'' shouted Alice. ''Come on, then!'' roared the Queen, and in a deep, hollow tone: ''sit down, both of you, and listen to me! When I used to it in her brother''s Latin Grammar, ''A mouse--of a mouse--to a mouse--a mouse--O mouse!'') The Mouse only shook its head impatiently, and said, very gravely, ''I think.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 1); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (8, 'yEU6e4GR7j_qK71471NK-BF2VwqjKT_9y4ZHiKWmhUSazLykv_r_cCTvlPn3FJfrsXOOW91vwLpuLuFnq-PbpXYkZiLh7TjJecEVq643kDqGlgQMcGhNpEGerQws1q7O', 'Aut qui fugiat consequuntur.', 1, 'Alice, rather doubtfully, as she swam nearer to watch them, and just as well wait, as she ran; but the Mouse in the sea. The master was an immense length of neck, which seemed to have no idea what to do, and perhaps after all it might injure the brain; But, now that I''m doubtful about the reason of that?'' ''In my youth,'' said his father, ''I took to the Mock Turtle, ''Drive on, old fellow! Don''t be all day to day.'' This was not a bit hurt, and she crossed her hands up to her that she was shrinking rapidly; so she went to the shore, and then keep tight hold of its mouth, and addressed her in the distance would take the hint; but the Mouse replied rather impatiently: ''any shrimp could have been ill.'' ''So they were,'' said the King replied. Here the other ladder?--Why, I hadn''t drunk quite so much!'' Alas! it was impossible to say to itself, ''Oh dear! Oh dear! I wish you could manage it?) ''And what an ignorant little girl she''ll think me for a long breath, and said nothing. ''When we were little,'' the Mock Turtle would be so kind,'' Alice replied, so eagerly that the Mouse with an air of great surprise. ''Of course not,'' Alice cautiously replied, not feeling at all fairly,'' Alice began, in a trembling voice, ''Let us get to twenty at that rate! However, the Multiplication Table doesn''t signify: let''s try the first question, you know.'' He was looking.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 3); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (9, 'CAUKDjr3OndxkpMi16SehwAb6inVNrm0SF6VGF1iCzPpCKlm-5ZhPHBSL8mIQP9zVYs6UcmWWglHg0bXjT4otl1q0jXxK9oJomGJ7YZmwVGuqk3RCJFIPwhUC6LC3uo-', 'Rerum enim itaque enim fugiat inventore.', 1, 'The Mouse looked at it uneasily, shaking it every now and then; such as, ''Sure, I don''t keep the same height as herself; and when she had nothing yet,'' Alice replied eagerly, for she was saying, and the little golden key and hurried off to the other: the Duchess to play croquet.'' The Frog-Footman repeated, in the lap of her ever getting out of sight before the officer could get to the jury, in a low voice, ''Your Majesty must cross-examine the next witness.'' And he added looking angrily at the Queen, turning purple. ''I won''t!'' said Alice. ''Come on, then,'' said Alice, feeling very glad to do that,'' said Alice. ''I''ve read that in some alarm. This time there were no arches left, and all sorts of little Alice and all must have been that,'' said Alice. ''Well, then,'' the Gryphon replied very solemnly. Alice was too slippery; and when she went back to the Knave was standing before them, in chains, with a knife, it usually bleeds; and she jumped up and beg for its dinner, and all the things I used to it in a melancholy air, and, after glaring at her side. She was moving them about as she added, to herself, as usual. ''Come, there''s no use going back to finish his story. CHAPTER IV. The Rabbit Sends in a hurry. ''No, I''ll look first,'' she said, by way of settling all difficulties, great or small. ''Off with their heads!'' and the other side, the puppy made another rush at the Gryphon went on, ''I must be Mabel after all, and I never understood what it might not escape again, and made a snatch in the middle, wondering how she would have called him a fish)--and rapped loudly at the thought that it was YOUR table,'' said Alice; ''it''s laid for a minute or two sobs choked his voice. ''Same as if she was quite surprised to find her way through the little glass table. ''Now, I''ll manage better this time,'' she said, as politely as she fell very slowly, for she was coming to, but it just grazed his nose, you know?'' ''It''s the thing yourself, some winter day, I will prosecute YOU.--Come, I''ll take no denial; We must have been ill.'' ''So they were,'' said the March Hare went on. Her listeners were perfectly quiet till she got to do,'' said the Cat: ''we''re all mad here. I''m mad. You''re mad.'' ''How do you want to stay in here any longer!'' She waited for some minutes. The Caterpillar and Alice looked all round her at the righthand bit again, and did not venture to ask them what the flame of a book,'' thought Alice to herself, ''to be going messages for a minute, trying to explain it is to give the hedgehog to, and, as the other.'' As soon as there seemed to be sure! However, everything is to-day! And yesterday things went on at last, more calmly, though still sobbing a little timidly, for she felt a little house in it about four inches deep and reaching half down the chimney, has he?'' said Alice to herself. (Alice had been to her, ''if we had the dish as its share of the earth. Let me see: four times five is twelve, and four times six is.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 7); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (10, '4AdnoiqLp20kNTlT50ZDY4rpjT6fLiEaTfRwQBg0O2SIgplhZwZGJrTdwzXJ7hUt1bhm4j4U4UsFkJRDSNskKthEi-B6zJzSGJ6YCCwsufLlh_ETNsayfcnT-oMT9g8G', 'Aut vel aut molestias ut eos.', 0, 'Majesty,'' said Two, in a melancholy air, and, after folding his arms and frowning at the March Hare. ''Exactly so,'' said Alice. ''I''m glad I''ve seen that done,'' thought Alice. ''I''ve tried every way, and then quietly marched off after the others. ''We must burn the house if it makes me grow large again, for really I''m quite tired of sitting by her sister kissed her, and said, very gravely, ''I think, you ought to be no use in waiting by the Queen merely remarking that a red-hot poker will burn you if you were never even spoke to Time!'' ''Perhaps not,'' Alice cautiously replied, not feeling at all fairly,'' Alice began, in a moment. ''Let''s go on in the sky. Twinkle, twinkle--"'' Here the Queen said severely ''Who is it twelve? I--'' ''Oh, don''t talk about trouble!'' said the Mouse. ''Of course,'' the Gryphon went on. Her listeners were perfectly quiet till she shook the house, and wondering whether she could not think of anything to put it in a long, low hall, which was immediately suppressed by the end of the jurors had a consultation about this, and Alice joined the procession, wondering very much to-night, I should say "With what porpoise?"'' ''Don''t you mean that you couldn''t cut off a little timidly: ''but it''s no use in waiting by the end of the Lobster Quadrille, that she was shrinking rapidly; so she went on again: ''Twenty-four hours, I THINK; or is it I can''t see you?'' She was close behind us, and he''s treading on my tail. See how eagerly the lobsters and the sound of a tree. ''Did you say it.'' ''That''s nothing to what I eat" is the same year for such a nice soft thing to nurse--and she''s such a rule at processions; ''and besides, what would happen next. ''It''s--it''s a very good height indeed!'' said the King: ''however, it may kiss my hand if it had fallen into it: there was nothing so VERY wide, but she was shrinking rapidly; so she turned to the part about her pet: ''Dinah''s our cat. And she''s such a hurry to get in at all?'' said the Queen, but she remembered having seen such a dear quiet thing,'' Alice went on, spreading out the verses the White Rabbit put on his spectacles. ''Where shall I begin, please your Majesty,'' said Two, in a frightened tone. ''The Queen of Hearts, he stole those tarts, And took them quite away!'' ''Consider your verdict,'' the King said, turning to the jury, of course--"I GAVE HER ONE, THEY GAVE HIM TWO--" why, that must be a walrus or hippopotamus, but then she had this fit) An obstacle that came between Him, and ourselves, and it. Don''t let me hear the words:-- ''I speak severely to my jaw, Has lasted the rest were quite silent, and looked anxiously at the March Hare meekly replied. ''Yes, but I can''t put it in time,'' said the Mock Turtle went on. ''Or would you like the Queen?'' said the Caterpillar sternly. ''Explain yourself!'' ''I can''t explain MYSELF, I''m afraid, sir'' said Alice, ''how am I to do such a tiny golden key, and unlocking the door between us. For instance, suppose it were white, but.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 7); +INSERT INTO post (id, slug, title, status, content, created_at, updated_at, user_id) VALUES (11, 'LIkxj50Kp4PE4vlRW2RyayTKGTmJNsFdckr9TYeVDBAMjTSSXiqITlQudv7Eozhy9vUBzwgU2FuXSdCv_bagBOoGlu_Xa3myOIFn7tmbs2HRzKNl4Nv5T2vuIFjjTH9-', 'Eveniet est nam sapiente odit architecto et.', 1, 'Alice replied thoughtfully. ''They have their tails in their paws. ''And how do you know the song, perhaps?'' ''I''ve heard something like this:-- ''Fury said to Alice. ''Nothing,'' said Alice. ''I''ve so often read in the distance. ''Come on!'' cried the Gryphon, and the second verse of the shelves as she went nearer to make it stop. ''Well, I''d hardly finished the guinea-pigs!'' thought Alice. ''I wonder what you''re at!" You know the meaning of half an hour or so, and giving it a violent shake at the window, and some of them even when they passed too close, and waving their forepaws to mark the time, while the rest of the court. (As that is rather a handsome pig, I think.'' And she squeezed herself up on tiptoe, and peeped over the fire, and at once to eat some of the fact. ''I keep them to sell,'' the Hatter began, in a very truthful child; ''but little girls in my kitchen AT ALL. Soup does very well without--Maybe it''s always pepper that had a bone in his sleep, ''that "I breathe when I get SOMEWHERE,'' Alice added as an explanation; ''I''ve none of YOUR business, Two!'' said Seven. ''Yes, it IS his business!'' said Five, ''and I''ll tell him--it was for bringing the cook was leaning over the wig, (look at the Queen, the royal children; there were any tears. No, there were TWO little shrieks, and more faintly came, carried on the top of her going, though she felt a violent blow underneath her chin: it had a little snappishly. ''You''re enough to drive one crazy!'' The Footman seemed to have no answers.'' ''If you didn''t like cats.'' ''Not like cats!'' cried the Mouse, who was a large canvas bag, which tied up at the bottom of a tree a few minutes it puffed away without being seen, when she got to see a little glass table. ''Now, I''ll manage better this time,'' she said to herself; ''I should like to be no chance of getting her hands on her lap as if nothing had happened. ''How am I to get out of sight, he said in a court of justice before, but she thought it must be on the twelfth?'' Alice went on, looking anxiously about her. ''Oh, do let me hear the words:-- ''I speak severely to my right size to do it?'' ''In my youth,'' said the Hatter added as an explanation. ''Oh, you''re sure to do anything but sit with its wings. ''Serpent!'' screamed the Gryphon. ''Then, you know,'' said the Pigeon; ''but I must be collected at once and put back into the garden door. Poor Alice! It was so full of tears, but said nothing. ''This here young lady,'' said the Cat. ''I said pig,'' replied Alice; ''and I wish I could not be denied, so she began nursing her child again, singing a sort of people live about here?'' ''In THAT direction,'' the Cat said, waving its tail when it''s pleased. Now I growl when I''m pleased, and wag my tail when I''m pleased, and wag my tail when it''s angry, and wags its tail about in all their simple joys, remembering her own mind (as well as she went on, looking anxiously about her. ''Oh, do let me hear the rattle of the shepherd boy--and the sneeze of the ground, Alice soon began talking again. ''Dinah''ll miss me very much what would happen next. First, she tried to curtsey as she could not even get her head impatiently; and, turning to Alice, and looking anxiously round to see if there are, nobody attends to them--and you''ve no idea what Latitude or Longitude I''ve got to?'' (Alice had no reason to be Number One,'' said Alice. ''Why?'' ''IT DOES THE BOOTS AND SHOES.'' the Gryphon went on again:-- ''You may go,'' said the Hatter: ''but you could only hear whispers now and then, if I chose,'' the Duchess by this time, and was going off into a sort of a well?'' ''Take some more of the table, but there was a very small cake, on which the cook was busily stirring the soup, and seemed to Alice severely. ''What are they made of?'' Alice asked in a great thistle, to keep herself from being run over; and the March Hare will be much the same thing as "I get what I like"!'' ''You might.', '2020-07-26 20:18:16', '2020-07-26 20:18:17', 4); \ No newline at end of file diff --git a/tests/Support/FunctionalTester.php b/blog-api/tests/Support/FunctionalTester.php similarity index 90% rename from tests/Support/FunctionalTester.php rename to blog-api/tests/Support/FunctionalTester.php index 49434042a..d494710d2 100644 --- a/tests/Support/FunctionalTester.php +++ b/blog-api/tests/Support/FunctionalTester.php @@ -7,7 +7,7 @@ use Codeception\Actor; /** - * Inherited Methods + * Inherited Methods. * * @method void wantToTest($text) * @method void wantTo($text) @@ -21,12 +21,12 @@ * @method void pause() * * @SuppressWarnings(PHPMD) -*/ + */ class FunctionalTester extends Actor { use _generated\FunctionalTesterActions; /** - * Define custom actions here + * Define custom actions here. */ } diff --git a/tests/Support/Helper/Acceptance.php b/blog-api/tests/Support/Helper/Acceptance.php similarity index 100% rename from tests/Support/Helper/Acceptance.php rename to blog-api/tests/Support/Helper/Acceptance.php diff --git a/blog-api/tests/Support/Helper/Cli.php b/blog-api/tests/Support/Helper/Cli.php new file mode 100644 index 000000000..d459f5cc5 --- /dev/null +++ b/blog-api/tests/Support/Helper/Cli.php @@ -0,0 +1,14 @@ +run(); diff --git a/yii.bat b/blog-api/yii.bat similarity index 100% rename from yii.bat rename to blog-api/yii.bat diff --git a/blog/.dockerignore b/blog/.dockerignore new file mode 100644 index 000000000..24e04c973 --- /dev/null +++ b/blog/.dockerignore @@ -0,0 +1,3 @@ +runtime/ +!runtime/.gitignore +vendor/ diff --git a/blog/.editorconfig b/blog/.editorconfig new file mode 100644 index 000000000..8802775ba --- /dev/null +++ b/blog/.editorconfig @@ -0,0 +1,21 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.php] +ij_php_space_before_short_closure_left_parenthesis = false +ij_php_space_after_type_cast = true + +[*.md] +trim_trailing_whitespace = false + +[*.yml] +indent_size = 2 diff --git a/.env.example b/blog/.env.example similarity index 70% rename from .env.example rename to blog/.env.example index 190a319f9..1c0ba5ff0 100644 --- a/.env.example +++ b/blog/.env.example @@ -1,3 +1,4 @@ YII_ENV= YII_DEBUG=true SENTRY_DSN= +BASE_URL=/blog diff --git a/blog/.env.test b/blog/.env.test new file mode 100644 index 000000000..76b1f81af --- /dev/null +++ b/blog/.env.test @@ -0,0 +1,4 @@ +YII_ENV=test +YII_DEBUG=true +SENTRY_DSN= +BASE_URL=/ diff --git a/blog/.gitattributes b/blog/.gitattributes new file mode 100644 index 000000000..475badfc4 --- /dev/null +++ b/blog/.gitattributes @@ -0,0 +1,27 @@ +# Autodetect text files +* text=auto eol=lf + +# ...Unless the name matches the following overriding patterns + +# Definitively text files +*.php text +*.css text +*.js text +*.txt text +*.md text +*.xml text +*.json text +*.bat text +*.sql text +*.yml text + +# Ensure those won't be messed up with +*.png binary +*.jpg binary +*.gif binary +*.ttf binary + +# Avoid merge conflicts in CHANGELOG +# https://about.gitlab.com/2015/02/10/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders/ +/CHANGELOG.md merge=union + diff --git a/blog/.gitignore b/blog/.gitignore new file mode 100644 index 000000000..6c3b40aad --- /dev/null +++ b/blog/.gitignore @@ -0,0 +1,29 @@ +# IDE & OS files +.*.swp +.DS_Store +.buildpath +.idea +.project +.settings +Thumbs.db +nbproject + +# Binaries +chkipper.phar +composer.phar +ocular.phar +php-cs-fixer.phar +phpstan.phar +phpunit-skelgen.phar +phpunit.phar + +# local config +/.env +/docker-compose.override.yml + +# evolving files +/vendor +/node_modules + +# Codeception +c3.php diff --git a/blog/.phpunit-watcher.yml b/blog/.phpunit-watcher.yml new file mode 100644 index 000000000..0e4d76634 --- /dev/null +++ b/blog/.phpunit-watcher.yml @@ -0,0 +1,11 @@ +watch: + directories: + - src + - tests + fileMask: '*.php' +notifications: + passingTests: false + failingTests: false +phpunit: + binaryPath: vendor/bin/phpunit + timeout: 180 diff --git a/blog/LICENSE.md b/blog/LICENSE.md new file mode 100644 index 000000000..bc5674fe4 --- /dev/null +++ b/blog/LICENSE.md @@ -0,0 +1,29 @@ +Copyright © 2008 by Yii Software (https://www.yiiframework.com/) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of Yii Software nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/blog/Makefile b/blog/Makefile new file mode 100644 index 000000000..148afab89 --- /dev/null +++ b/blog/Makefile @@ -0,0 +1,24 @@ +init: composer-update npm-update up + +up: + docker-compose up -d +down: + docker-compose down + +composer: + docker-compose run php composer $(filter-out $@, $(MAKECMDGOALS)) +composer-update: + docker-compose run php composer update + +npm: + docker-compose run php npm $(filter-out $@, $(MAKECMDGOALS)) +npm-update: + docker-compose run php npm update + +yii3: + docker-compose run php ./yii $(filter-out $@, $(MAKECMDGOALS)) + +test: + docker-compose run php ./vendor/bin/codecept run +psalm: + docker-compose run php ./vendor/bin/psalm diff --git a/blog/README.md b/blog/README.md new file mode 100644 index 000000000..126a39c39 --- /dev/null +++ b/blog/README.md @@ -0,0 +1,98 @@ +

+ + Yii Framework + +

Yii Framework Demo Project

+
+

+ +[Yii Framework](https://www.yiiframework.com/) is a modern framework designed to be a solid foundation for your PHP application. + +It's intended to show and test all Yii features. + +[![Latest Stable Version](https://poser.pugx.org/yiisoft/demo/v/stable.png)](https://packagist.org/packages/yiisoft/demo) +[![Total Downloads](https://poser.pugx.org/yiisoft/demo/downloads.png)](https://packagist.org/packages/yiisoft/demo) +[![build](https://github.com/yiisoft/demo/workflows/build/badge.svg)](https://github.com/yiisoft/demo/actions) +[![Code Coverage](https://codecov.io/gh/yiisoft/demo/branch/master/graph/badge.svg?token=dWuz2uAVU2)](https://codecov.io/gh/yiisoft/demo) +[![static analysis](https://github.com/yiisoft/demo/workflows/static%20analysis/badge.svg)](https://github.com/yiisoft/demo/actions?query=workflow%3A%22static+analysis%22) +[![type-coverage](https://shepherd.dev/github/yiisoft/demo/coverage.svg)](https://shepherd.dev/github/yiisoft/demo) + +## Installation + +You'll need at least PHP 8.1. + +1. Clone this repository. +2. Run command in your project root directory. +```bash +composer install +``` +3. Run `./yii serve` (on Windows `yii serve`). The application will be started on http://localhost:8080/. +```bash +./yii serve +``` +4. Go to the index page. Cycle ORM will create tables, indexes and relations automatically in the configured DB for you. + If you want to disable this behavior then comment out the line with the `Generator\SyncTables::class` in the `config/packges/yiisoft/yii-cycle/params.php`. + In this case you should create migrations to sync changes that you have made to entities with the DB. +5. Run command to create some random data. +```bash +./yii fixture/add 20 +``` +## Console + +Console works out of the box and could be executed with `./yii`. + +Some commands: + +```bash +./yii user/create login password +./yii fixture/add 10 +``` + +In order to register your own commands, add them to `console/params.php`, `console` → `commands` section. + +## Web application + +In order to run the web application, you can either use the built-in web server by running +```bash +./yii serve +``` + or you could use a real web server by pointing it to `/public/index.php`. + +More routes could be added by editing `src/Factory/AppRouterFactory`. + +## Testing + +The template comes with a ready to use [Codeception](https://codeception.com/) configuration. +In order to execute tests run the following command: + +```bash +composer run serve 127.0.0.1:8080 > ./runtime/yii.log 2>&1 & +vendor/bin/codecept run +``` + +### Static analysis + +The code is statically analyzed with [Psalm](https://psalm.dev/). To run static analysis: + +```shell +./vendor/bin/psalm +``` + +### Support the project + +[![Open Collective](https://img.shields.io/badge/Open%20Collective-sponsor-7eadf1?logo=open%20collective&logoColor=7eadf1&labelColor=555555)](https://opencollective.com/yiisoft) + +### Follow updates + +[![Official website](https://img.shields.io/badge/Powered_by-Yii_Framework-green.svg?style=flat)](https://www.yiiframework.com/) +[![Twitter](https://img.shields.io/badge/twitter-follow-1DA1F2?logo=twitter&logoColor=1DA1F2&labelColor=555555?style=flat)](https://twitter.com/yiiframework) +[![Telegram](https://img.shields.io/badge/telegram-join-1DA1F2?style=flat&logo=telegram)](https://t.me/yii3en) +[![Facebook](https://img.shields.io/badge/facebook-join-1DA1F2?style=flat&logo=facebook&logoColor=ffffff)](https://www.facebook.com/groups/yiitalk) +[![Slack](https://img.shields.io/badge/slack-join-1DA1F2?style=flat&logo=slack)](https://yiiframework.com/go/slack) + +## License + +The Yii Framework Demo Project is free software. It is released under the terms of the BSD License. +Please see [`LICENSE`](./LICENSE.md) for more information. + +Maintained by [Yii Software](https://www.yiiframework.com/). diff --git a/blog/autoload.php b/blog/autoload.php new file mode 100644 index 000000000..ccfe29cdb --- /dev/null +++ b/blog/autoload.php @@ -0,0 +1,20 @@ +load(); + +$_ENV['YII_ENV'] = empty($_ENV['YII_ENV']) ? null : (string) $_ENV['YII_ENV']; +$_SERVER['YII_ENV'] = $_ENV['YII_ENV']; + +$_ENV['YII_DEBUG'] = filter_var( + !empty($_ENV['YII_DEBUG']) ? $_ENV['YII_DEBUG'] : true, + FILTER_VALIDATE_BOOLEAN, + FILTER_NULL_ON_FAILURE +) ?? true; +$_SERVER['YII_DEBUG'] = $_ENV['YII_DEBUG']; diff --git a/codeception.yml b/blog/codeception.yml similarity index 100% rename from codeception.yml rename to blog/codeception.yml diff --git a/blog/composer.json b/blog/composer.json new file mode 100644 index 000000000..6070af108 --- /dev/null +++ b/blog/composer.json @@ -0,0 +1,171 @@ +{ + "name": "yiisoft/demo", + "type": "project", + "description": "Yii Framework Project Demo", + "keywords": [ + "yii", + "app" + ], + "homepage": "https://github.com/yiisoft/demo", + "license": "BSD-3-Clause", + "support": { + "source": "https://github.com/yiisoft/demo", + "issues": "https://github.com/yiisoft/demo/issues", + "forum": "https://www.yiiframework.com/forum/" + }, + "minimum-stability": "dev", + "prefer-stable": true, + "require": { + "php": "8.3.*", + "ext-mbstring": "*", + "ext-pdo_sqlite": "*", + "cebe/markdown": "^1.2@dev", + "cycle/annotated": "^3.5", + "cycle/database": "^2.0", + "cycle/entity-behavior": "^1.0", + "cycle/orm": "^2.0", + "doctrine/collections": "^1.6", + "fakerphp/faker": "^1.14", + "httpsoft/http-message": "^1.1", + "php-http/guzzle7-adapter": "^1.0", + "psr/container": "^2.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": "^3.0", + "symfony/console": "^6.0", + "vlucas/phpdotenv": "^5.3", + "yiisoft/access": "^1.0", + "yiisoft/aliases": "^3.0", + "yiisoft/assets": "^4.0", + "yiisoft/auth": "^3.0", + "yiisoft/cache": "^3.0", + "yiisoft/cache-file": "^3.0", + "yiisoft/config": "^1.3.1", + "yiisoft/cookies": "^1.2", + "yiisoft/csrf": "^2.0", + "yiisoft/data": "dev-master", + "yiisoft/data-cycle": "dev-master", + "yiisoft/data-response": "^2.0", + "yiisoft/definitions": "^3.0", + "yiisoft/di": "^1.2", + "yiisoft/error-handler": "^3.0", + "yiisoft/factory": "^1.0", + "yiisoft/form": "^1.0", + "yiisoft/form-model": "^1.0", + "yiisoft/html": "^3.0", + "yiisoft/http": "^1.2", + "yiisoft/injector": "^1.0", + "yiisoft/input-http": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/mailer": "^5.0", + "yiisoft/mailer-symfony": "^3.0", + "yiisoft/middleware-dispatcher": "^5.2", + "yiisoft/rate-limiter": "dev-master", + "yiisoft/request-provider": "^1.0", + "yiisoft/rbac": "^1.0", + "yiisoft/rbac-php": "^1.0", + "yiisoft/rbac-rules-container": "^2.0", + "yiisoft/router": "^3.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/security": "^1.0", + "yiisoft/session": "^2.0", + "yiisoft/translator": "^3.0", + "yiisoft/translator-message-php": "^1.1.1", + "yiisoft/user": "^2.0", + "yiisoft/validator": "^2.0", + "yiisoft/var-dumper": "^1.0", + "yiisoft/view": "^10.0", + "yiisoft/widget": "^2.1", + "yiisoft/yii-bootstrap5": "^3.0@dev", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-cycle": "^1.0", + "yiisoft/yii-dataview": "^3.0@dev", + "yiisoft/yii-debug": "dev-master", + "yiisoft/yii-debug-api": "^3.0@dev", + "yiisoft/yii-event": "^2.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-middleware": "^1.0.4", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0", + "yiisoft/yii-sentry": "^2.0.1", + "yiisoft/yii-swagger": "^2.1.1", + "yiisoft/yii-view-renderer": "^7.1", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "codeception/c3": "^2.6", + "codeception/codeception": "^5.0", + "codeception/module-asserts": "^3.0", + "codeception/module-cli": "^2.0", + "codeception/module-phpbrowser": "^3.0", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "roave/security-advisories": "dev-latest", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18", + "yiisoft/translator-extractor": "^2.0", + "yiisoft/yii-debug-viewer": "dev-master", + "yiisoft/yii-gii": "dev-master", + "yiisoft/yii-testing": "dev-master" + }, + "autoload": { + "psr-4": { + "App\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "App\\Tests\\": "tests" + } + }, + "scripts": { + "serve": [ + "Composer\\Config::disableProcessTimeout", + "./yii serve" + ], + "post-update-cmd": [ + "App\\Installer::postUpdate", + "App\\Installer::copyEnvFile" + ], + "post-create-project-cmd": [ + "App\\Installer::copyEnvFile" + ], + "test": "codecept run", + "test-watch": "phpunit-watcher watch" + }, + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-file": "configuration.php", + "installer-types": [ + "npm-asset" + ], + "installer-paths": { + "./node_modules/{$name}": [ + "type:npm-asset" + ] + } + }, + "config": { + "sort-packages": true, + "allow-plugins": { + "codeception/c3": true, + "oomphinc/composer-installers-extender": true, + "composer/installers": true, + "composer/package-versions-deprecated": true, + "infection/extension-installer": true, + "yiisoft/config": true, + "php-http/discovery": false + } + }, + "repositories": [ + { + "type": "composer", + "url": "https://asset-packagist.org" + } + ] +} diff --git a/blog/composer.lock b/blog/composer.lock new file mode 100644 index 000000000..0098933d5 --- /dev/null +++ b/blog/composer.lock @@ -0,0 +1,18768 @@ +{ + "_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": "628abcc3114cb9c57125ac8e1459634b", + "packages": [ + { + "name": "alexkart/curl-builder", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/alexkart/curl-builder.git", + "reference": "626cf95a84a37b6e1643675f7fc4acfc2f90dbfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alexkart/curl-builder/zipball/626cf95a84a37b6e1643675f7fc4acfc2f90dbfb", + "reference": "626cf95a84a37b6e1643675f7fc4acfc2f90dbfb", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/http-message": "^1.0" + }, + "require-dev": { + "nyholm/psr7": "^1.3", + "phan/phan": "^5.4", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Alexkart\\CurlBuilder\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Kartavenko", + "email": "askemailbox@gmail.com" + } + ], + "description": "PSR-7 compatible curl builder.", + "support": { + "issues": "https://github.com/alexkart/curl-builder/issues", + "source": "https://github.com/alexkart/curl-builder/tree/1.0.8" + }, + "time": "2023-05-29T13:44:51+00:00" + }, + { + "name": "cebe/markdown", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/cebe/markdown.git", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86", + "shasum": "" + }, + "require": { + "lib-pcre": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "cebe/indent": "*", + "facebook/xhprof": "*@dev", + "phpunit/phpunit": "4.1.*" + }, + "bin": [ + "bin/markdown" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "cebe\\markdown\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Carsten Brandt", + "email": "mail@cebe.cc", + "homepage": "http://cebe.cc/", + "role": "Creator" + } + ], + "description": "A super fast, highly extensible markdown parser for PHP", + "homepage": "https://github.com/cebe/markdown#readme", + "keywords": [ + "extensible", + "fast", + "gfm", + "markdown", + "markdown-extra" + ], + "support": { + "issues": "https://github.com/cebe/markdown/issues", + "source": "https://github.com/cebe/markdown" + }, + "time": "2018-03-26T11:24:36+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "cycle/annotated", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/annotated.git", + "reference": "4024d2ea9b5656cdd0bf4e79acc485dc063b8273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/annotated/zipball/4024d2ea9b5656cdd0bf4e79acc485dc063b8273", + "reference": "4024d2ea9b5656cdd0bf4e79acc485dc063b8273", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "doctrine/annotations": "^1.14.3 || ^2.0.1", + "doctrine/inflector": "^2.0", + "php": ">=8.0", + "spiral/attributes": "^2.8|^3.0", + "spiral/tokenizer": "^2.8|^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Annotated\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Annotated Entities generator", + "support": { + "issues": "https://github.com/cycle/annotated/issues", + "source": "https://github.com/cycle/annotated/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://github.com/cycle", + "type": "github" + } + ], + "time": "2024-02-08T21:32:45+00:00" + }, + { + "name": "cycle/database", + "version": "2.11.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/database.git", + "reference": "5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/database/zipball/5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7", + "reference": "5f3fe4fc198d607fc40110e2fdb36b3c1c4e10f7", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "php": ">=8.0", + "psr/log": "1 - 3", + "spiral/core": "^2.8 || ^3.0", + "spiral/pagination": "^2.8 || ^3.0", + "symfony/polyfill-php83": "^1.28" + }, + "conflict": { + "spiral/database": "*" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.42", + "infection/infection": "^0.26.10", + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5", + "spiral/tokenizer": "^2.14 || ^3.0", + "vimeo/psalm": "^5.18" + }, + "type": "library", + "autoload": { + "files": [ + "src/polyfill.php", + "src/functions_polyfill.php" + ], + "psr-4": { + "Cycle\\Database\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + } + ], + "description": "DBAL, schema introspection, migration and pagination", + "homepage": "https://cycle-orm.dev", + "keywords": [ + "database", + "dbal", + "mssql", + "mysql", + "orm", + "postgresql", + "query-builder", + "sql", + "sqlite" + ], + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/database/issues", + "source": "https://github.com/cycle/database" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-06-11T11:30:02+00:00" + }, + { + "name": "cycle/entity-behavior", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/cycle/entity-behavior.git", + "reference": "9b7ad13a68a0ea0dca0399b7f44f20b691a18120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/entity-behavior/zipball/9b7ad13a68a0ea0dca0399b7f44f20b691a18120", + "reference": "9b7ad13a68a0ea0dca0399b7f44f20b691a18120", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "php": ">=8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "cycle/annotated": "^3.0", + "phpunit/phpunit": "^9.5", + "ramsey/uuid": "^4.5", + "spiral/tokenizer": "^2.8 || ^3.0", + "vimeo/psalm": "^5.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\ORM\\Entity\\Behavior\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Provides a collection of attributes that add behaviors to Cycle ORM entities", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/entity-behavior/issues", + "source": "https://github.com/cycle/entity-behavior" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-08-09T11:47:14+00:00" + }, + { + "name": "cycle/migrations", + "version": "v4.2.3", + "source": { + "type": "git", + "url": "https://github.com/cycle/migrations.git", + "reference": "434b08be175bf87f920651b9f6d91fc1cb7ed3ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/migrations/zipball/434b08be175bf87f920651b9f6d91fc1cb7ed3ba", + "reference": "434b08be175bf87f920651b9f6d91fc1cb7ed3ba", + "shasum": "" + }, + "require": { + "cycle/database": "^2.7.0", + "php": ">=8.1", + "spiral/core": "^3.0", + "spiral/files": "^3.0", + "spiral/reactor": "^3.0", + "spiral/tokenizer": "^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Migrations\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Database migrations, migration scaffolding", + "support": { + "issues": "https://github.com/cycle/migrations/issues", + "source": "https://github.com/cycle/migrations/tree/v4.2.3" + }, + "time": "2024-01-25T10:49:43+00:00" + }, + { + "name": "cycle/orm", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/orm.git", + "reference": "23023be5e8452c1e5b05417f9c4539db71d60927" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/orm/zipball/23023be5e8452c1e5b05417f9c4539db71d60927", + "reference": "23023be5e8452c1e5b05417f9c4539db71d60927", + "shasum": "" + }, + "require": { + "cycle/database": "^2.8.1", + "doctrine/instantiator": "^1.3.1 || ^2.0", + "ext-pdo": "*", + "php": ">=8.0", + "spiral/core": "^2.8 || ^3.0" + }, + "require-dev": { + "doctrine/collections": "^1.6 || ^2.0", + "illuminate/collections": "^8.0", + "loophp/collection": "^6.0 || ^7.0", + "mockery/mockery": "^1.1", + "phpunit/phpunit": "^9.5", + "ramsey/uuid": "^4.0", + "spiral/tokenizer": "^2.8 || ^3.0", + "symfony/var-dumper": "^5.2 || ^6.0 || ^7.0", + "vimeo/psalm": "5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\ORM\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "PHP DataMapper ORM and Data Modelling Engine", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/orm/issues", + "source": "https://github.com/cycle/orm" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-06-05T13:14:36+00:00" + }, + { + "name": "cycle/schema-builder", + "version": "v2.9.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-builder.git", + "reference": "413af8fc8f93c6e48cebc76ab6c37c65fe2cab63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-builder/zipball/413af8fc8f93c6e48cebc76ab6c37c65fe2cab63", + "reference": "413af8fc8f93c6e48cebc76ab6c37c65fe2cab63", + "shasum": "" + }, + "require": { + "cycle/database": "^2.7.1", + "cycle/orm": "^2.7", + "php": ">=8.0", + "yiisoft/friendly-exception": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "spiral/tokenizer": "^2.8", + "symfony/console": "^6.0 || ^7.0", + "vimeo/psalm": "^5.12" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cycle\\Schema\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Schema Builder", + "support": { + "issues": "https://github.com/cycle/schema-builder/issues", + "source": "https://github.com/cycle/schema-builder/tree/v2.9.0" + }, + "time": "2024-07-10T16:20:17+00:00" + }, + { + "name": "cycle/schema-migrations-generator", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-migrations-generator.git", + "reference": "94cb613ec77376cf880c9488daa3668b1f856e80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-migrations-generator/zipball/94cb613ec77376cf880c9488daa3668b1f856e80", + "reference": "94cb613ec77376cf880c9488daa3668b1f856e80", + "shasum": "" + }, + "require": { + "cycle/database": "^2.4.1", + "cycle/migrations": "^4.2", + "cycle/schema-builder": "^2.0", + "php": ">=8.1" + }, + "require-dev": { + "cycle/annotated": "^3.0", + "cycle/orm": "^2.0", + "phpunit/phpunit": "^9.5", + "spiral/debug": "^3.0", + "spiral/framework": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Generator\\Migrations\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Cycle ORM Migration generation", + "support": { + "issues": "https://github.com/cycle/schema-migrations-generator/issues", + "source": "https://github.com/cycle/schema-migrations-generator/tree/2.2.0" + }, + "time": "2023-11-02T09:24:12+00:00" + }, + { + "name": "cycle/schema-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-provider.git", + "reference": "d6e800d6cd498cf1053522b6c2348f6eea587aae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-provider/zipball/d6e800d6cd498cf1053522b6c2348f6eea587aae", + "reference": "d6e800d6cd498cf1053522b6c2348f6eea587aae", + "shasum": "" + }, + "require": { + "cycle/orm": "^2.0", + "cycle/schema-renderer": "^1.2", + "php": ">=8.0", + "psr/container": "^1.0 || ^2.0", + "psr/simple-cache": "^2.0 || ^3.0", + "spiral/files": "^2.14 || ^3.11", + "webmozart/glob": "^4.6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.48", + "phpunit/phpunit": "^9.6", + "roave/security-advisories": "dev-latest", + "vimeo/psalm": "^4.30.0 || ^5.21", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Provider\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Buchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Cycle ORM Schema providers", + "homepage": "https://cycle-orm.dev", + "support": { + "chat": "https://discord.gg/spiralphp", + "docs": "https://cycle-orm.dev/docs", + "issues": "https://github.com/cycle/schema-provider/issues", + "source": "https://github.com/cycle/schema-provider" + }, + "funding": [ + { + "url": "https://github.com/sponsors/cycle", + "type": "github" + } + ], + "time": "2024-02-05T13:58:34+00:00" + }, + { + "name": "cycle/schema-renderer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/cycle/schema-renderer.git", + "reference": "5c2b7977c2803c6c9bacc56064abda5ea2b273a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cycle/schema-renderer/zipball/5c2b7977c2803c6c9bacc56064abda5ea2b273a3", + "reference": "5c2b7977c2803c6c9bacc56064abda5ea2b273a3", + "shasum": "" + }, + "require": { + "cycle/orm": "1.2 - 2", + "php": ">=7.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "spiral/code-style": "^1.0", + "vimeo/psalm": "^4.10|^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cycle\\Schema\\Renderer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Utils for Cycle ORM Schema rendering", + "support": { + "issues": "https://github.com/cycle/schema-renderer/issues", + "source": "https://github.com/cycle/schema-renderer/tree/1.2.0" + }, + "time": "2022-12-15T16:14:14+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", + "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.10.28", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" + }, + "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.2" + }, + "time": "2024-09-05T10:17:24+00:00" + }, + { + "name": "doctrine/collections", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "reference": "2b44dd4cbca8b5744327de78bafef5945c7e7b5e", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^0.5.3 || ^1", + "php": "^7.1.3 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9.0 || ^10.0", + "phpstan/phpstan": "^1.4.8", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.1.5", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Collections\\": "lib/Doctrine/Common/Collections" + } + }, + "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 Collections library that adds additional functionality on top of PHP arrays.", + "homepage": "https://www.doctrine-project.org/projects/collections.html", + "keywords": [ + "array", + "collections", + "iterators", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/collections/issues", + "source": "https://github.com/doctrine/collections/tree/1.8.0" + }, + "time": "2022-09-01T20:12:10+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/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "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 Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "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%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+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": "fakerphp/faker", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + }, + "time": "2024-01-02T13:46:09+00:00" + }, + { + "name": "gitonomy/gitlib", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/gitonomy/gitlib.git", + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "reference": "2c7fbbd9814178474d0bb1b6292701cb4ab508f9", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": "^8.0", + "symfony/polyfill-mbstring": "^1.7", + "symfony/process": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "ext-fileinfo": "*", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.20 || ^9.5.9", + "psr/log": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Gitonomy\\Git\\": "src/Gitonomy/Git/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Julien Didier", + "email": "genzo.wm@gmail.com", + "homepage": "https://github.com/juliendidier" + }, + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info", + "homepage": "https://github.com/lyrixx" + }, + { + "name": "Alexandre Salomé", + "email": "alexandre.salome@gmail.com", + "homepage": "https://github.com/alexandresalome" + } + ], + "description": "Library for accessing git", + "support": { + "issues": "https://github.com/gitonomy/gitlib/issues", + "source": "https://github.com/gitonomy/gitlib/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/gitonomy/gitlib", + "type": "tidelift" + } + ], + "time": "2023-12-20T13:02:08+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:45:45+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.9.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "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": "*", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", + "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.9.2" + }, + "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": "2024-07-24T11:22:20+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "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.3" + }, + "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": "2024-07-18T10:29:17+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "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.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" + }, + "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.7.0" + }, + "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": "2024-07-18T11:15:46+00:00" + }, + { + "name": "http-interop/http-factory-guzzle", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-factory-guzzle.git", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", + "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7||^2.0", + "php": ">=7.3", + "psr/http-factory": "^1.0" + }, + "provide": { + "psr/http-factory-implementation": "^1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Factory\\Guzzle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "An HTTP Factory using Guzzle PSR7", + "keywords": [ + "factory", + "http", + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/http-interop/http-factory-guzzle/issues", + "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + }, + "time": "2021-07-21T13:50:14+00:00" + }, + { + "name": "httpsoft/http-message", + "version": "1.1.6", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-message.git", + "reference": "f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-message/zipball/f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19", + "reference": "f6c88e2189b9f75f10dfaeb0a85c56ea04a53c19", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1|^2.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "php-http/psr7-integration-tests": "^1.3", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Strict and fast implementation of PSR-7 and PSR-17", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "php", + "psr-17", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/message", + "issues": "https://github.com/httpsoft/http-message/issues", + "source": "https://github.com/httpsoft/http-message" + }, + "time": "2024-08-09T07:13:21+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + }, + "time": "2024-03-08T09:58:59+00:00" + }, + { + "name": "jetbrains/phpstorm-attributes", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/JetBrains/phpstorm-attributes.git", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JetBrains/phpstorm-attributes/zipball/22fb28d679deceedba8366dbae65cc8ebfc17e26", + "reference": "22fb28d679deceedba8366dbae65cc8ebfc17e26", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "JetBrains\\PhpStorm\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "JetBrains", + "homepage": "https://www.jetbrains.com" + } + ], + "description": "PhpStorm specific attributes", + "keywords": [ + "attributes", + "jetbrains", + "phpstorm" + ], + "support": { + "issues": "https://youtrack.jetbrains.com/newIssue?project=WI", + "source": "https://github.com/JetBrains/phpstorm-attributes/tree/1.1" + }, + "time": "2023-09-01T08:50:25+00:00" + }, + { + "name": "nette/php-generator", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "c90961e782ae86e517fe5ed732eb2b512945565b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/c90961e782ae86e517fe5ed732eb2b512945565b", + "reference": "c90961e782ae86e517fe5ed732eb2b512945565b", + "shasum": "" + }, + "require": { + "nette/utils": "^3.2.9 || ^4.0", + "php": "8.0 - 8.4" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "nikic/php-parser": "^4.18 || ^5.0", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.8" + }, + "suggest": { + "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-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 PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "support": { + "issues": "https://github.com/nette/php-generator/issues", + "source": "https://github.com/nette/php-generator/tree/v4.1.6" + }, + "time": "2024-09-10T09:31:55+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "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.5" + }, + "time": "2024-08-07T15:39:19+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "FastRoute\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.7.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612", + "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "phpspec/prophecy": "^1.10.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.7.1" + }, + "time": "2023-11-30T10:31:25+00:00" + }, + { + "name": "php-http/discovery", + "version": "1.19.4", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "0700efda8d7526335132360167315fdab3aeb599" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599", + "reference": "0700efda8d7526335132360167315fdab3aeb599", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.19.4" + }, + "time": "2024-03-29T13:00:05+00:00" + }, + { + "name": "php-http/guzzle7-adapter", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/guzzle7-adapter.git", + "reference": "fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/guzzle7-adapter/zipball/fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01", + "reference": "fb075a71dbfa4847cf0c2938c4e5a9c478ef8b01", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^7.0", + "php": "^7.2 | ^8.0", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Adapter\\Guzzle7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + } + ], + "description": "Guzzle 7 HTTP Adapter", + "homepage": "http://httplug.io", + "keywords": [ + "Guzzle", + "http" + ], + "support": { + "issues": "https://github.com/php-http/guzzle7-adapter/issues", + "source": "https://github.com/php-http/guzzle7-adapter/tree/1.0.0" + }, + "time": "2021-03-09T07:35:15+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", + "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.0" + }, + "time": "2023-04-14T15:10:03+00:00" + }, + { + "name": "php-http/message", + "version": "1.16.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "5997f3289332c699fa2545c427826272498a2088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/5997f3289332c699fa2545c427826272498a2088", + "reference": "5997f3289332c699fa2545c427826272498a2088", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.16.1" + }, + "time": "2024-03-07T13:22:09+00:00" + }, + { + "name": "php-http/message-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/message-factory.git", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Factory interfaces for PSR-7 HTTP Message", + "homepage": "http://php-http.org", + "keywords": [ + "factory", + "http", + "message", + "stream", + "uri" + ], + "support": { + "issues": "https://github.com/php-http/message-factory/issues", + "source": "https://github.com/php-http/message-factory/tree/1.1.0" + }, + "abandoned": "psr/http-factory", + "time": "2023-04-14T14:16:17+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.3", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:41:07+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/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.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "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": "PSR-17: 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" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/1.1" + }, + "time": "2023-04-04T09:50:52+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.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "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.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sentry/sdk", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php-sdk.git", + "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a", + "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a", + "shasum": "" + }, + "require": { + "http-interop/http-factory-guzzle": "^1.0", + "sentry/sentry": "^3.22", + "symfony/http-client": "^4.3|^5.0|^6.0|^7.0" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php-sdk/issues", + "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2023-12-04T10:49:33+00:00" + }, + { + "name": "sentry/sentry", + "version": "3.22.1", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", + "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/promises": "^1.5.3|^2.0", + "jean85/pretty-package-versions": "^1.5|^2.0.4", + "php": "^7.2|^8.0", + "php-http/async-client-implementation": "^1.0", + "php-http/client-common": "^1.5|^2.0", + "php-http/discovery": "^1.15", + "php-http/httplug": "^1.1|^2.0", + "php-http/message": "^1.5", + "php-http/message-factory": "^1.1", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0", + "symfony/polyfill-php80": "^1.17" + }, + "conflict": { + "php-http/client-common": "1.8.0", + "raven/raven": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", + "http-interop/http-factory-guzzle": "^1.0", + "monolog/monolog": "^1.6|^2.0|^3.0", + "nikic/php-parser": "^4.10.3", + "php-http/mock-client": "^1.3", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5.14|^9.4", + "symfony/phpunit-bridge": "^5.2|^6.0", + "vimeo/psalm": "^4.17" + }, + "suggest": { + "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Sentry\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sentry", + "email": "accounts@sentry.io" + } + ], + "description": "A PHP SDK for Sentry (http://sentry.io)", + "homepage": "http://sentry.io", + "keywords": [ + "crash-reporting", + "crash-reports", + "error-handler", + "error-monitoring", + "log", + "logging", + "sentry" + ], + "support": { + "issues": "https://github.com/getsentry/sentry-php/issues", + "source": "https://github.com/getsentry/sentry-php/tree/3.22.1" + }, + "funding": [ + { + "url": "https://sentry.io/", + "type": "custom" + }, + { + "url": "https://sentry.io/pricing/", + "type": "custom" + } + ], + "time": "2023-11-13T11:47:28+00:00" + }, + { + "name": "spiral/attributes", + "version": "v3.1.7", + "source": { + "type": "git", + "url": "https://github.com/spiral/attributes.git", + "reference": "fc6657de4ed83913c7f02241e5fe4e8e799af8fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/attributes/zipball/fc6657de4ed83913c7f02241e5fe4e8e799af8fa", + "reference": "fc6657de4ed83913c7f02241e5fe4e8e799af8fa", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/cache": "1 - 3", + "psr/simple-cache": "1 - 3" + }, + "require-dev": { + "doctrine/annotations": "^1.14 || ^2.0", + "jetbrains/phpstorm-attributes": "^1.0", + "phpunit/phpunit": "^9.5.20", + "vimeo/psalm": "^5.17" + }, + "type": "library", + "autoload": { + "files": [ + "src/polyfill.php" + ], + "psr-4": { + "Spiral\\Attributes\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + }, + { + "name": "Kirill Nesmeyanov (SerafimArts)", + "email": "kirill.nesmeyanov@spiralscout.com" + } + ], + "description": "PHP attributes reader", + "homepage": "https://spiral.dev", + "keywords": [ + "annotations", + "attributes", + "metadata" + ], + "support": { + "chat": "https://discord.gg/V6EK4he", + "docs": "https://spiral.dev/docs", + "forum": "https://forum.spiral.dev", + "issues": "https://github.com/spiral/attributes/issues", + "source": "https://github.com/spiral/attributes" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-08-22T10:18:52+00:00" + }, + { + "name": "spiral/core", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/spiral/core.git", + "reference": "53bec6e433d709f59ef6c0ce966f4a640c4d1bad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/core/zipball/53bec6e433d709f59ef6c0ce966f4a640c4d1bad", + "reference": "53bec6e433d709f59ef6c0ce966f4a640c4d1bad", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0" + }, + "provide": { + "psr/container-implementation": "^1.1|^2.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Core\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "IoC container, IoC scopes, factory, memory, configuration interfaces", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/core" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-10T16:54:43+00:00" + }, + { + "name": "spiral/files", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/files.git", + "reference": "0c394e058ee994b6d18a229dcbe310e4de3a2b7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/files/zipball/0c394e058ee994b6d18a229dcbe310e4de3a2b7a", + "reference": "0c394e058ee994b6d18a229dcbe310e4de3a2b7a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Files\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "File Toolkit: atomic file manager", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/files" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-03T16:58:09+00:00" + }, + { + "name": "spiral/logger", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/logger.git", + "reference": "146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/logger/zipball/146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e", + "reference": "146fbf7fb320ea4708f5158e21f8fd4d48aa5b0e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "1 - 3", + "spiral/core": "^3.14.3" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Logger\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "LogFactory and global log listeners", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/logger" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:26+00:00" + }, + { + "name": "spiral/pagination", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/pagination.git", + "reference": "93c9d93c811b4ec6037491e516c3e194fdc94848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/pagination/zipball/93c9d93c811b4ec6037491e516c3e194fdc94848", + "reference": "93c9d93c811b4ec6037491e516c3e194fdc94848", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Pagination\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Common pagination interfaces", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/pagination" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-03T16:59:10+00:00" + }, + { + "name": "spiral/reactor", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/reactor.git", + "reference": "74639a44ced7eb289820fdcca96ff9322f79f882" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/reactor/zipball/74639a44ced7eb289820fdcca96ff9322f79f882", + "reference": "74639a44ced7eb289820fdcca96ff9322f79f882", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^1.4|^2.0", + "nette/php-generator": "^4.1.2", + "php": ">=8.1", + "spiral/files": "^3.14.3" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "phpunit/phpunit": "^10.1", + "psr/container": "^1.1|^2.0", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Reactor\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Reactor: Code Scaffolding", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/reactor" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:25+00:00" + }, + { + "name": "spiral/tokenizer", + "version": "3.14.3", + "source": { + "type": "git", + "url": "https://github.com/spiral/tokenizer.git", + "reference": "b5bf2ed89880d91c228bf1e3ebfda2b508c008ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spiral/tokenizer/zipball/b5bf2ed89880d91c228bf1e3ebfda2b508c008ff", + "reference": "b5bf2ed89880d91c228bf1e3ebfda2b508c008ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=8.1", + "spiral/core": "^3.14.3", + "spiral/logger": "^3.14.3", + "symfony/finder": "^5.3.7 || ^6.0 || ^7.0" + }, + "require-dev": { + "mockery/mockery": "^1.6", + "phpunit/phpunit": "^10.1", + "spiral/attributes": "^2.8|^3.0", + "spiral/boot": "^3.14.3", + "spiral/files": "^3.14.3", + "vimeo/psalm": "^5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.15.x-dev" + } + }, + "autoload": { + "psr-4": { + "Spiral\\Tokenizer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Titov (wolfy-j)", + "email": "wolfy-j@spiralscout.com" + }, + { + "name": "Pavel Butchnev (butschster)", + "email": "pavel.buchnev@spiralscout.com" + }, + { + "name": "Aleksei Gagarin (roxblnfk)", + "email": "alexey.gagarin@spiralscout.com" + }, + { + "name": "Maksim Smakouz (msmakouz)", + "email": "maksim.smakouz@spiralscout.com" + } + ], + "description": "Static Analysis: Class and Invocation locators", + "homepage": "https://spiral.dev", + "support": { + "issues": "https://github.com/spiral/framework/issues", + "source": "https://github.com/spiral/tokenizer" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spiral", + "type": "github" + } + ], + "time": "2024-09-11T17:40:38+00:00" + }, + { + "name": "swagger-api/swagger-ui", + "version": "v5.17.14", + "source": { + "type": "git", + "url": "https://github.com/swagger-api/swagger-ui.git", + "reference": "74ed0adebfc9c8dd0de2bf8e81495b022a66c083" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/74ed0adebfc9c8dd0de2bf8e81495b022a66c083", + "reference": "74ed0adebfc9c8dd0de2bf8e81495b022a66c083", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Anna Bodnia", + "email": "anna.bodnia@gmail.com" + }, + { + "name": "Buu Nguyen", + "email": "buunguyen@gmail.com" + }, + { + "name": "Josh Ponelat", + "email": "jponelat@gmail.com" + }, + { + "name": "Kyle Shockey", + "email": "kyleshockey1@gmail.com" + }, + { + "name": "Robert Barnwell", + "email": "robert@robertismy.name" + }, + { + "name": "Sahar Jafari", + "email": "shr.jafari@gmail.com" + } + ], + "description": " Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.", + "homepage": "http://swagger.io", + "keywords": [ + "api", + "documentation", + "openapi", + "specification", + "swagger", + "ui" + ], + "support": { + "issues": "https://github.com/swagger-api/swagger-ui/issues", + "source": "https://github.com/swagger-api/swagger-ui/tree/v5.17.14" + }, + "time": "2024-05-28T05:24:40+00:00" + }, + { + "name": "symfony/console", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", + "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.12" + }, + "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-09-20T08:15:52+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.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": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^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/v7.1.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": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", + "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-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.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.4.43", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ae25a9145a900764158d439653d5630191155ca0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ae25a9145a900764158d439653d5630191155ca0", + "reference": "ae25a9145a900764158d439653d5630191155ca0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.43" + }, + "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-08-13T14:03:51+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "abca35865118edf35a23f2f24978a1784c831cb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/abca35865118edf35a23f2f24978a1784c831cb4", + "reference": "abca35865118edf35a23f2f24978a1784c831cb4", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "^3.4.1", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/amp": "^2.5", + "amphp/http-client": "^4.2.1", + "amphp/http-tunnel": "^1.0", + "amphp/socket": "^1.1", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.1.5" + }, + "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-09-20T13:35:23+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "20414d96f391677bf80078aa55baece78b82647d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", + "reference": "20414d96f391677bf80078aa55baece78b82647d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", + "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^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/v7.1.5" + }, + "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-09-08T12:32:26+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", + "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "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": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" + }, + "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/v7.1.5" + }, + "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-09-20T08:28:38+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "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/v7.1.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": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", + "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "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.31.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-09-09T11:45:10+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3", + "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.12" + }, + "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-09-17T12:47:12+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-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.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/string", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", + "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.1.5" + }, + "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-09-20T08:28:38+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.4.11", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ee14c8254a480913268b1e3b1cba8045ed122694", + "reference": "ee14c8254a480913268b1e3b1cba8045ed122694", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "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 mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.4.11" + }, + "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-08-30T16:03:21+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "762ee56b2649659380e0ef4d592d807bc17b7971" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/762ee56b2649659380e0ef4d592d807bc17b7971", + "reference": "762ee56b2649659380e0ef4d592d807bc17b7971", + "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.12" + }, + "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-09-17T12:47:12+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.1", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.1.3", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.3", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2024-07-20T21:52:34+00:00" + }, + { + "name": "webmozart/glob", + "version": "4.7.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/glob.git", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17", + "reference": "8a2842112d6916e61e0e15e316465b611f3abc17", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "symfony/filesystem": "^5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Glob\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A PHP implementation of Ant's glob.", + "support": { + "issues": "https://github.com/webmozarts/glob/issues", + "source": "https://github.com/webmozarts/glob/tree/4.7.0" + }, + "time": "2024-03-07T20:33:40+00:00" + }, + { + "name": "yiisoft/access", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/access.git", + "reference": "7a8ac9c4802d31cf47789c742575232c7fb1ae8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/access/zipball/7a8ac9c4802d31cf47789c742575232c7fb1ae8b", + "reference": "7a8ac9c4802d31cf47789c742575232c7fb1ae8b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Access\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "An interface for checking access", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "access", + "interface", + "rbac", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/access/issues?state=open", + "source": "https://github.com/yiisoft/access", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2022-04-05T17:21:55+00:00" + }, + { + "name": "yiisoft/aliases", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/aliases.git", + "reference": "2ed5e38d6ac503ec4c1af39115361097b6449135" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/aliases/zipball/2ed5e38d6ac503ec4c1af39115361097b6449135", + "reference": "2ed5e38d6ac503ec4c1af39115361097b6449135", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Aliases\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Named paths and URLs storage", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "alias" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/aliases/issues?state=open", + "source": "https://github.com/yiisoft/aliases", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-13T10:14:03+00:00" + }, + { + "name": "yiisoft/arrays", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/arrays.git", + "reference": "e07c7268bd53903108ed556df93ef75b4bac6760" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/arrays/zipball/e07c7268bd53903108ed556df93ef75b4bac6760", + "reference": "e07c7268bd53903108ed556df93ef75b4bac6760", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/strings": "^2.1" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.20" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Arrays\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Array Helper", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "array", + "helper", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/arrays/issues", + "source": "https://github.com/yiisoft/arrays", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-04-04T11:07:18+00:00" + }, + { + "name": "yiisoft/assets", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/assets.git", + "reference": "14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/assets/zipball/14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc", + "reference": "14984b2c8a87236da8c8ef5a4f1273d4ff8a36bc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/files": "^2.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Assets\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Asset bundles and asset manager", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "assets", + "library", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/assets/issues?state=open", + "source": "https://github.com/yiisoft/assets", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-13T11:15:18+00:00" + }, + { + "name": "yiisoft/auth", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/auth.git", + "reference": "497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/auth/zipball/497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee", + "reference": "497197fc2bbc2c4b2b8b35b177e0f4476fbe17ee", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.8", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii auth", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "auth", + "middleware" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/auth/issues?state=open", + "source": "https://github.com/yiisoft/auth", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-05-06T12:26:49+00:00" + }, + { + "name": "yiisoft/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cache.git", + "reference": "67ae4b40d3aefd193dfd9a3f458f3e145adb0d84" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cache/zipball/67ae4b40d3aefd193dfd9a3f458f3e145adb0d84", + "reference": "67ae4b40d3aefd193dfd9a3f458f3e145adb0d84", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "provide": { + "psr/simple-cache-implementation": "2.0|3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.2" + }, + "suggest": { + "yiisoft/cache-apcu": "Allows to store cache using APCu PECL extension", + "yiisoft/cache-db": "Allows storing cache to the database", + "yiisoft/cache-file": "Allows storing cache to the files", + "yiisoft/cache-memcached": "Allows to store cache using Memcached PECL extension", + "yiisoft/cache-redis": "Allows storing cache to the Redis", + "yiisoft/cache-wincache": "Allows to store cache using WinCache PECL extension" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Cache\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Caching Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cache", + "psr-16", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cache/issues?state=open", + "source": "https://github.com/yiisoft/cache", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-15T14:30:56+00:00" + }, + { + "name": "yiisoft/cache-file", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cache-file.git", + "reference": "226ff0731adabc884c149f711190a7ac8b14800d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cache-file/zipball/226ff0731adabc884c149f711190a7ac8b14800d", + "reference": "226ff0731adabc884c149f711190a7ac8b14800d", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "provide": { + "psr/simple-cache-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "php-mock/php-mock-phpunit": "^2.6", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Cache\\File\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Caching Library - File Handler", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cache", + "file", + "framework", + "psr-16", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cache-file/issues?state=open", + "source": "https://github.com/yiisoft/cache-file", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-10-09T14:49:20+00:00" + }, + { + "name": "yiisoft/config", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/config.git", + "reference": "8cd32f003af59303f3ba8dd520eb85f830689575" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/config/zipball/8cd32f003af59303f3ba8dd520eb85f830689575", + "reference": "8cd32f003af59303f3ba8dd520eb85f830689575", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^8.0", + "yiisoft/arrays": "^3.0", + "yiisoft/strings": "^2.0", + "yiisoft/var-dumper": "^1.1" + }, + "require-dev": { + "composer/composer": "^2.0", + "ext-json": "*", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6" + }, + "suggest": { + "symfony/console": "To use composer commands `yii-config-copy` and `yii-config-rebuild`." + }, + "type": "composer-plugin", + "extra": { + "class": "Yiisoft\\Config\\Composer\\EventHandler" + }, + "autoload": { + "psr-4": { + "Yiisoft\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Composer plugin and a library for config assembling", + "homepage": "https://github.com/yiisoft/config", + "keywords": [ + "composer", + "config", + "plugin" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/config/issues?state=open", + "source": "https://github.com/yiisoft/config", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-12-25T17:12:50+00:00" + }, + { + "name": "yiisoft/cookies", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/cookies.git", + "reference": "ceba1d0647f1210331d90372ca83a8ecc952ebef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/cookies/zipball/ceba1d0647f1210331d90372ca83a8ecc952ebef", + "reference": "ceba1d0647f1210331d90372ca83a8ecc952ebef", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/http": "^1.2", + "yiisoft/security": "^1.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Cookies\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Convenient way to use cookies with PSR-7", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cookie", + "cookies", + "psr-7" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/cookies/issues?state=open", + "source": "https://github.com/yiisoft/cookies", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-04-05T07:20:16+00:00" + }, + { + "name": "yiisoft/csrf", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/csrf.git", + "reference": "2168b5f83ec9ce65e9d0ca08fa88613e6778d377" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/csrf/zipball/2168b5f83ec9ce65e9d0ca08fa88613e6778d377", + "reference": "2168b5f83ec9ce65e9d0ca08fa88613e6778d377", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "php": "^7.4|^8.0", + "psr/http-factory": "^1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/security": "^1.0", + "yiisoft/session": "^1.0|^2.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.24", + "yiisoft/di": "^1.1" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Csrf\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii CSRF Protection Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "breach", + "csrf", + "hmac", + "middleware", + "psr-15", + "stateless", + "synchronizer" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/csrf/issues?state=open", + "source": "https://github.com/yiisoft/csrf", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-05-08T09:48:50+00:00" + }, + { + "name": "yiisoft/data", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data.git", + "reference": "714ca834858bea280ce8781fc5915fa8775f780b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data/zipball/714ca834858bea280ce8781fc5915fa8775f780b", + "reference": "714ca834858bea280ce8781fc5915fa8775f780b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "yiisoft/arrays": "^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.20" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Data\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Data providers, pagination and related abstractions", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "data processor", + "data provider", + "data reader", + "data writer", + "filter", + "pagination" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data/issues?state=open", + "source": "https://github.com/yiisoft/data", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-10T17:50:47+00:00" + }, + { + "name": "yiisoft/data-cycle", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data-cycle.git", + "reference": "708074a77942ab1d7f424bc21a6912b7d62641da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data-cycle/zipball/708074a77942ab1d7f424bc21a6912b7d62641da", + "reference": "708074a77942ab1d7f424bc21a6912b7d62641da", + "shasum": "" + }, + "require": { + "cycle/database": "^2.10", + "cycle/orm": "^2.7.1", + "php": "^8.1", + "yiisoft/data": "dev-master" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.21", + "vlucas/phpdotenv": "^5.6" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Data\\Cycle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Cycle ORM query adapter for yiisoft/data", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "cycle", + "data provider", + "database", + "db", + "orm" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data-cycle/issues?state=open", + "source": "https://github.com/yiisoft/data-cycle", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-11T18:58:59+00:00" + }, + { + "name": "yiisoft/data-response", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/data-response.git", + "reference": "7de8c880d0d6629867a51c5c2529c984e50dfbc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/data-response/zipball/7de8c880d0d6629867a51c5c2529c984e50dfbc3", + "reference": "7de8c880d0d6629867a51c5c2529c984e50dfbc3", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": "^8.1", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/json": "^1.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/di": "^1.1" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\DataResponse\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Allows responding with data that is automatically converted into PSR-7 response", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "data", + "psr-7", + "response" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/data-response/issues?state=open", + "source": "https://github.com/yiisoft/data-response", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-03T06:01:50+00:00" + }, + { + "name": "yiisoft/definitions", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/definitions.git", + "reference": "5cb53d07afab3336705a52ddc90c37237cc4b316" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/definitions/zipball/5cb53d07afab3336705a52ddc90c37237cc4b316", + "reference": "5cb53d07afab3336705a52ddc90c37237cc4b316", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^1.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Definitions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "The package provides definition syntax", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "definitions" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/definitions/issues?state=open", + "source": "https://github.com/yiisoft/definitions", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-16T13:31:21+00:00" + }, + { + "name": "yiisoft/di", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/di.git", + "reference": "a6d889f74030a381dad337f1bd1ea9de7341bc9b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/di/zipball/a6d889f74030a381dad337f1bd1ea9de7341bc9b", + "reference": "a6d889f74030a381dad337f1bd1ea9de7341bc9b", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "psr/container": "^1.1|^2.0", + "yiisoft/definitions": "^3.0" + }, + "provide": { + "psr/container-implementation": "1.0.0" + }, + "require-dev": { + "league/container": "^4.2", + "maglnet/composer-require-checker": "^4.2", + "phpbench/phpbench": "^1.2.0", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.3", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.29", + "yiisoft/injector": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "phpbench/phpbench": "To run benchmarks.", + "yiisoft/injector": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Di\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii DI container", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "Autowiring", + "PSR-11", + "container", + "dependency", + "di", + "injection", + "injector" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/di/issues?state=open", + "source": "https://github.com/yiisoft/di", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-12-23T16:12:56+00:00" + }, + { + "name": "yiisoft/error-handler", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/error-handler.git", + "reference": "a263c9dea48d5a42022dd7df76706cff39e3e960" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/error-handler/zipball/a263c9dea48d5a42022dd7df76706cff39e3e960", + "reference": "a263c9dea48d5a42022dd7df76706cff39e3e960", + "shasum": "" + }, + "require": { + "alexkart/curl-builder": "^1.0", + "cebe/markdown": "^1.2", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0.9", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/di": "^1.1", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\ErrorHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Error Handling Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "PSR-11", + "error-handler", + "psr-15", + "psr-3", + "psr-7", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/error-handler/issues?state=open", + "source": "https://github.com/yiisoft/error-handler", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-11T12:16:20+00:00" + }, + { + "name": "yiisoft/event-dispatcher", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/event-dispatcher.git", + "reference": "2b1262a56260030aaac386bf8ef75ec072abc7e3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/event-dispatcher/zipball/2b1262a56260030aaac386bf8ef75ec072abc7e3", + "reference": "2b1262a56260030aaac386bf8ef75ec072abc7e3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\EventDispatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Event Dispatcher", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "event", + "event dispatcher", + "psr-14" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/event-dispatcher/issues?state=open", + "source": "https://github.com/yiisoft/event-dispatcher", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-10-27T12:02:21+00:00" + }, + { + "name": "yiisoft/factory", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/factory.git", + "reference": "4537a78ae1a3b49bd86e83d09f0772034e45f193" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/factory/zipball/4537a78ae1a3b49bd86e83d09f0772034e45f193", + "reference": "4537a78ae1a3b49bd86e83d09f0772034e45f193", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/definitions": "^1.0|^2.0|^3.0.1" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Factory\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Factory", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "factory" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/factory/issues", + "source": "https://github.com/yiisoft/factory", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-03T05:59:14+00:00" + }, + { + "name": "yiisoft/files", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/files.git", + "reference": "129a8f8220e1cd2530f424951b8c24f426bd219c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/files/zipball/129a8f8220e1cd2530f424951b8c24f426bd219c", + "reference": "129a8f8220e1cd2530f424951b8c24f426bd219c", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.22" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Files\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Helper to manage files and directories", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "files" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/files/issues?state=open", + "source": "https://github.com/yiisoft/files", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2022-07-05T06:43:38+00:00" + }, + { + "name": "yiisoft/form", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/form.git", + "reference": "9679b95b239598d2391de291ab2ce14b5e074271" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/form/zipball/9679b95b239598d2391de291ab2ce14b5e074271", + "reference": "9679b95b239598d2391de291ab2ce14b5e074271", + "shasum": "" + }, + "require": { + "php": "^8.1", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/html": "^3.6", + "yiisoft/widget": "^2.2" + }, + "require-dev": { + "infection/infection": "^0.26.19", + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.2", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "bootstrap": "bootstrap.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Form\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "The package helps with implementing data entry forms.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "form", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/form/issues?state=open", + "source": "https://github.com/yiisoft/form", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-08-26T18:54:52+00:00" + }, + { + "name": "yiisoft/form-model", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/form-model.git", + "reference": "f0b6eb17d1a9d04fefbab4013b5177207ed0574a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/form-model/zipball/f0b6eb17d1a9d04fefbab4013b5177207ed0574a", + "reference": "f0b6eb17d1a9d04fefbab4013b5177207ed0574a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "psr/http-message": "^1.0|^2.0", + "yiisoft/form": "^1.0", + "yiisoft/html": "^3.3", + "yiisoft/hydrator": "^1.3", + "yiisoft/strings": "^2.3", + "yiisoft/validator": "^2.1" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\FormModel\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides a base for form models and helps to fill, validate and display them.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "form", + "model" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/form-model/issues?state=open", + "source": "https://github.com/yiisoft/form-model", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-13T07:16:51+00:00" + }, + { + "name": "yiisoft/friendly-exception", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/friendly-exception.git", + "reference": "4b4a19edff251791e3c92d4d83435d2716351ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/friendly-exception/zipball/4b4a19edff251791e3c92d4d83435d2716351ff4", + "reference": "4b4a19edff251791e3c92d4d83435d2716351ff4", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.4", + "roave/infection-static-analysis-plugin": "^1.5", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\FriendlyException\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "An interface for friendlier exception", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "error handling", + "exception", + "exceptions", + "friendly" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/friendly-exception/issues?state=open", + "source": "https://github.com/yiisoft/friendly-exception", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2021-10-26T21:43:25+00:00" + }, + { + "name": "yiisoft/html", + "version": "3.7.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/html.git", + "reference": "968aa8b336135242bdaef9646fa3d53c3c0731f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/html/zipball/968aa8b336135242bdaef9646fa3d53c3c0731f7", + "reference": "968aa8b336135242bdaef9646fa3d53c3c0731f7", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "infection/infection": "^0.26.19", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Html\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Handy library to generate HTML", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "html" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://forum.yiiframework.com/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/html/issues?state=open", + "source": "https://github.com/yiisoft/html", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-18T11:48:50+00:00" + }, + { + "name": "yiisoft/http", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/http.git", + "reference": "7967b2c45dbf6af785dea4ea481af23da6d49c5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/http/zipball/7967b2c45dbf6af785dea4ea481af23da6d49c5d", + "reference": "7967b2c45dbf6af785dea4ea481af23da6d49c5d", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.10", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Constants and PSR-7 PhpStorm meta for HTTP protocol headers, methods and statuses", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "header", + "http", + "method", + "psr-17", + "psr-7", + "status" + ], + "support": { + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/http/issues?state=open", + "source": "https://github.com/yiisoft/http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2021-11-09T09:42:11+00:00" + }, + { + "name": "yiisoft/hydrator", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/hydrator.git", + "reference": "9bfde0c99fc35b182d1b74433e9316c9b67c5fc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/hydrator/zipball/9bfde0c99fc35b182d1b74433e9316c9b67c5fc1", + "reference": "9bfde0c99fc35b182d1b74433e9316c9b67c5fc1", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^2.0", + "yiisoft/injector": "^1.1", + "yiisoft/strings": "^2.3" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.23", + "yiisoft/di": "^1.2", + "yiisoft/dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "ext-intl": "Allows using `ToDateTime` parameter attribute" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Hydrator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create and populate objects with type casting, mapping and dependencies resolving support.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "hydrator" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/hydrator/issues?state=open", + "source": "https://github.com/yiisoft/hydrator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-17T16:10:24+00:00" + }, + { + "name": "yiisoft/hydrator-validator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/hydrator-validator.git", + "reference": "5f7acfebce127755af7df3cbc126dd502a1c4140" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/hydrator-validator/zipball/5f7acfebce127755af7df3cbc126dd502a1c4140", + "reference": "5f7acfebce127755af7df3cbc126dd502a1c4140", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/validator": "^1.0|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.11", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Hydrator\\Validator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validating hydrator with raw data validation support", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "input", + "validation" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/hydrator-validator/issues?state=open", + "source": "https://github.com/yiisoft/hydrator-validator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-08-06T12:18:25+00:00" + }, + { + "name": "yiisoft/i18n", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/i18n.git", + "reference": "c05e9e031fb36fc193152e18fa791bbf6d0582b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/i18n/zipball/c05e9e031fb36fc193152e18fa791bbf6d0582b8", + "reference": "c05e9e031fb36fc193152e18fa791bbf6d0582b8", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.17.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\I18n\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Internationalization Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "i18n", + "locale" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/i18n/issues?state=open", + "source": "https://github.com/yiisoft/i18n", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-06-10T14:18:35+00:00" + }, + { + "name": "yiisoft/injector", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/injector.git", + "reference": "0dc0127a7542341bdaabda7b85204e992938b83e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/injector/zipball/0dc0127a7542341bdaabda7b85204e992938b83e", + "reference": "0dc0127a7542341bdaabda7b85204e992938b83e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpbench/phpbench": "^1.1", + "phpunit/phpunit": "^9.5", + "psr/container": "^1.0|^2.0", + "rector/rector": "^0.18.12", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.7", + "yiisoft/test-support": "^1.2" + }, + "suggest": { + "psr/container": "For automatic resolving of dependencies" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Injector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-11 compatible injector. Executes a callable and makes an instances by injecting dependencies from a given DI container.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "PSR-11", + "dependency injection", + "di", + "injector", + "reflection" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/injector/issues?state=open", + "source": "https://github.com/yiisoft/injector", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-20T09:39:03+00:00" + }, + { + "name": "yiisoft/input-http", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/input-http.git", + "reference": "877fea3374033f5a6af4207036eb7733a635b5b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/input-http/zipball/877fea3374033f5a6af4207036eb7733a635b5b7", + "reference": "877fea3374033f5a6af4207036eb7733a635b5b7", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/arrays": "^3.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/hydrator-validator": "^2.0", + "yiisoft/middleware-dispatcher": "^5.1", + "yiisoft/request-provider": "^1.0", + "yiisoft/validator": "^1.1|^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params-web": "params-web.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Input\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Maps data from PSR-7 HTTP request to PHP DTO representing user input.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "dto", + "input", + "mapper", + "mapping", + "psr-7", + "request", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/input-http/issues?state=open", + "source": "https://github.com/yiisoft/input-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-08-06T12:42:23+00:00" + }, + { + "name": "yiisoft/json", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/json.git", + "reference": "51b483aef1cd5d06ea02db3c40707bb6b41ed088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/json/zipball/51b483aef1cd5d06ea02db3c40707bb6b41ed088", + "reference": "51b483aef1cd5d06ea02db3c40707bb6b41ed088", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "infection/infection": "^0.16.3", + "phan/phan": "^3.0", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Json\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "json", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "json" + ], + "support": { + "forum": "http://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/json/issues?state=open", + "source": "https://github.com/yiisoft/json", + "wiki": "http://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2020-08-26T12:21:14+00:00" + }, + { + "name": "yiisoft/log", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/log.git", + "reference": "9d549952f5099a3e3081e11cccb3841c77587dac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/log/zipball/9d549952f5099a3e3081e11cccb3841c77587dac", + "reference": "9d549952f5099a3e3081e11cccb3841c77587dac", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^2.0|^3.0", + "yiisoft/var-dumper": "^1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25" + }, + "suggest": { + "yiisoft/log-target-db": "Allows writing log messages to the database", + "yiisoft/log-target-email": "Allows sending log messages by email", + "yiisoft/log-target-file": "Allows writing log messages to the files", + "yiisoft/log-target-syslog": "Allows writing log messages to the Syslog" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "events-console": "events-console.php", + "events-web": "events-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Logging Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "log", + "logger", + "psr-3", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/log/issues?state=open", + "source": "https://github.com/yiisoft/log", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-03T10:13:44+00:00" + }, + { + "name": "yiisoft/log-target-file", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/log-target-file.git", + "reference": "758a792d11f5b6d554450abc828e2db5d7613f22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/log-target-file/zipball/758a792d11f5b6d554450abc828e2db5d7613f22", + "reference": "758a792d11f5b6d554450abc828e2db5d7613f22", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^8.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/log": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.1", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.2", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.0" + }, + "suggest": { + "ext-zlib": "Enabling gzip compression of rotated files." + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Log\\Target\\File\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Logging Library - File Target", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "log", + "logger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/log-target-file/issues", + "source": "https://github.com/yiisoft/log-target-file", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-17T05:52:09+00:00" + }, + { + "name": "yiisoft/mailer", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/mailer.git", + "reference": "dcb71779d946c75c9163a28d0a2c3c6f9d7f319a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/mailer/zipball/dcb71779d946c75c9163a28d0a2c3c6f9d7f319a", + "reference": "dcb71779d946c75c9163a28d0a2c3c6f9d7f319a", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/event-dispatcher": "^1.0", + "yiisoft/view": "^10.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^10", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.24", + "yiisoft/files": "^2.0", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/event-dispatcher": "Yii Event Dispatcher", + "yiisoft/mailer-swiftmailer": "Yii Mailer Library - Swift Mailer Extension", + "yiisoft/mailer-symfony": "Yii Mailer Library - Symfony Mailer Extension" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Mailer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Mailer Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "mailer", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/mailer/issues?state=open", + "source": "https://github.com/yiisoft/mailer", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-02T14:35:38+00:00" + }, + { + "name": "yiisoft/mailer-symfony", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/mailer-symfony.git", + "reference": "6dba87a57e2b08cf56afd260cebb33b4ee607eb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/mailer-symfony/zipball/6dba87a57e2b08cf56afd260cebb33b4ee607eb7", + "reference": "6dba87a57e2b08cf56afd260cebb33b4ee607eb7", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/mailer": "^5.3|^6.0|^7.0", + "symfony/mime": "^5.4|^6.2|^7.0", + "yiisoft/mailer": "^5.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2", + "yiisoft/files": "^2.0", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0", + "yiisoft/view": "^8.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Mailer\\Symfony\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Mailer Library - Symfony Mailer Extension", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "email", + "mail", + "mailer", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/mailer-symfony/issues?state=open", + "source": "https://github.com/yiisoft/mailer-symfony", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-05-24T11:18:35+00:00" + }, + { + "name": "yiisoft/middleware-dispatcher", + "version": "5.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/middleware-dispatcher.git", + "reference": "97d290e4ddab59e5a735ebafc69c46b6953022b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/middleware-dispatcher/zipball/97d290e4ddab59e5a735ebafc69c46b6953022b3", + "reference": "97d290e4ddab59e5a735ebafc69c46b6953022b3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/definitions": "^2.0|^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.3", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Middleware\\Dispatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-15 middleware dispatcher", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "dispatcher", + "middleware" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/middleware-dispatcher/issues?state=open", + "source": "https://github.com/yiisoft/middleware-dispatcher", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-09-25T07:01:31+00:00" + }, + { + "name": "yiisoft/network-utilities", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/network-utilities.git", + "reference": "9b51434f17035ce70ba220518a9d52656b6c1cb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/network-utilities/zipball/9b51434f17035ce70ba220518a9d52656b6c1cb4", + "reference": "9b51434f17035ce70ba220518a9d52656b6c1cb4", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\NetworkUtilities\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Network related utilities", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "IP", + "dns", + "mask", + "network" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/network-utilities/issues?state=open", + "source": "https://github.com/yiisoft/network-utilities", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-02T14:07:06+00:00" + }, + { + "name": "yiisoft/profiler", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/profiler.git", + "reference": "9f1bd1649f079ddfd45217f8da50533b12ca78a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/profiler/zipball/9f1bd1649f079ddfd45217f8da50533b12ca78a3", + "reference": "9f1bd1649f079ddfd45217f8da50533b12ca78a3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/log": "^2.0|^3.0", + "yiisoft/files": "^2.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.1", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "events-web": "events-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Profiler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Profiler", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "performance", + "profiler" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/profiler/issues?state=open", + "source": "https://github.com/yiisoft/profiler", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-15T09:15:24+00:00" + }, + { + "name": "yiisoft/proxy", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/proxy.git", + "reference": "2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/proxy/zipball/2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6", + "reference": "2820941a7ea0f66bab32d50a78c9f8b4b3fb22f6", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/files": "^1.0.2|^2.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Proxy\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "proxy", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "proxy" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/proxy/issues?state=open", + "source": "https://github.com/yiisoft/proxy", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-01-17T13:21:34+00:00" + }, + { + "name": "yiisoft/rate-limiter", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/rate-limiter.git", + "reference": "8cbd10ba7e5d5e5edb5be5e52e6b42e1cc841942" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/rate-limiter/zipball/8cbd10ba7e5d5e5edb5be5e52e6b42e1cc841942", + "reference": "8cbd10ba7e5d5e5edb5be5e52e6b42e1cc841942", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/simple-cache": "^2.0|^3.0", + "yiisoft/http": "^1.2" + }, + "require-dev": { + "ext-apcu": "*", + "maglnet/composer-require-checker": "^4.4", + "nyholm/psr7": "^1.0", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.13", + "yiisoft/cache": "^3.0" + }, + "suggest": { + "ext-apcu": "To use APCu storage" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\RateLimiter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Rate Limiter Middleware", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "GCRA", + "framework", + "middleware", + "psr-15", + "rate limiter", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/rate-limiter/issues?state=open", + "source": "https://github.com/yiisoft/rate-limiter", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-05-25T06:55:30+00:00" + }, + { + "name": "yiisoft/rbac", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/rbac.git", + "reference": "1744ddebd141f3fb1aaa3441ef7c4f2a36ca1cf3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/rbac/zipball/1744ddebd141f3fb1aaa3441ef7c4f2a36ca1cf3", + "reference": "1744ddebd141f3fb1aaa3441ef7c4f2a36ca1cf3", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "yiisoft/access": "^1.0", + "yiisoft/friendly-exception": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.3" + }, + "suggest": { + "yiisoft/rbac-cycle-db": "For using Cycle as a storage", + "yiisoft/rbac-db": "For using Yii Database as a storage", + "yiisoft/rbac-php": "For using PHP files as a storage", + "yiisoft/rbac-rules-container": "To create rules via Yii Factory" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Rbac\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Role-Based Access Control", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "rbac", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/rbac/issues", + "source": "https://github.com/yiisoft/rbac", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-04-20T09:08:24+00:00" + }, + { + "name": "yiisoft/rbac-php", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/rbac-php.git", + "reference": "de60e218822ff75b1ac319862e7459351d57cc75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/rbac-php/zipball/de60e218822ff75b1ac319862e7459351d57cc75", + "reference": "de60e218822ff75b1ac319862e7459351d57cc75", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "yiisoft/rbac": "^1.0", + "yiisoft/var-dumper": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "psr/log": "^1.1.3", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.22", + "yiisoft/files": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Rbac\\Php\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii RBAC PHP File Storage", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "rbac", + "storage", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/rbac/issues", + "source": "https://github.com/yiisoft/rbac", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2022-04-08T11:33:34+00:00" + }, + { + "name": "yiisoft/rbac-rules-container", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/rbac-rules-container.git", + "reference": "19c42b56751596ce139386d97f5164b77f655565" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/rbac-rules-container/zipball/19c42b56751596ce139386d97f5164b77f655565", + "reference": "19c42b56751596ce139386d97f5164b77f655565", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/factory": "^1.0", + "yiisoft/rbac": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Rbac\\Rules\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "RBAC rules container based on \"yiisoft/factory\"", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "container", + "factory", + "rbac", + "rules", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/rbac-rules-container/issues?state=open", + "source": "https://github.com/yiisoft/rbac-rules-container", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-16T10:44:01+00:00" + }, + { + "name": "yiisoft/request-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/request-provider.git", + "reference": "667e339f307eaf3d4e4f09f05334e41761d20a81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/request-provider/zipball/667e339f307eaf3d4e4f09f05334e41761d20a81", + "reference": "667e339f307eaf3d4e4f09f05334e41761d20a81", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.1", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.20", + "yiisoft/di": "^1.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\RequestProvider\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 request provider", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "http", + "provider", + "psr", + "request", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/request-provider/issues?state=open", + "source": "https://github.com/yiisoft/request-provider", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-02T15:18:14+00:00" + }, + { + "name": "yiisoft/router", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/router.git", + "reference": "86ee95984109bd96548cad3f93df8ad9ca4de0b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/router/zipball/86ee95984109bd96548cad3f93df8ad9ca4de0b8", + "reference": "86ee95984109bd96548cad3f93df8ad9ca4de0b8", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^5.0", + "yiisoft/router-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^9.5", + "psr/container": "^1.1|^2.0", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.18", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.22", + "yiisoft/di": "^1.0", + "yiisoft/dummy-provider": "^1.0.0", + "yiisoft/hydrator": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/hydrator": "Needed to use `RouteArgument` attribute", + "yiisoft/router-fastroute": "Router implementation based on nikic/FastRoute" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Router\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii router", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "middleware", + "router", + "web" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/router/issues?state=open", + "source": "https://github.com/yiisoft/router", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-02-20T11:39:48+00:00" + }, + { + "name": "yiisoft/router-fastroute", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/router-fastroute.git", + "reference": "4f2214eed24e140687e714ccb08a6420da316059" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/router-fastroute/zipball/4f2214eed24e140687e714ccb08a6420da316059", + "reference": "4f2214eed24e140687e714ccb08a6420da316059", + "shasum": "" + }, + "require": { + "nikic/fast-route": "^1.3", + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/simple-cache": "^2.0|^3.0", + "yiisoft/http": "^1.2", + "yiisoft/router": "^2.1|^3.0" + }, + "provide": { + "yiisoft/router-implementation": "1.0.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Router\\FastRoute\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii router FastRoute adapter", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "FastRoute", + "router" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/router-fastroute/issues?state=open", + "source": "https://github.com/yiisoft/router-fastroute", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-19T12:26:45+00:00" + }, + { + "name": "yiisoft/security", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/security.git", + "reference": "f1ad5d279722f162cfb0f720a3723ad762892de3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/security/zipball/f1ad5d279722f162cfb0f720a3723ad762892de3", + "reference": "f1ad5d279722f162cfb0f720a3723ad762892de3", + "shasum": "" + }, + "require": { + "ext-hash": "*", + "ext-openssl": "*", + "php": "^7.4|^8.0", + "yiisoft/strings": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.23" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Security\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Security utilities", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "MAC", + "decryption", + "encryption", + "hash", + "password", + "random", + "security", + "signature", + "token masking" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/security/issues?state=open", + "source": "https://github.com/yiisoft/security", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-18T12:20:01+00:00" + }, + { + "name": "yiisoft/session", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/session.git", + "reference": "193c666a8d1fcce5985c48afe9c3df96b6d3b6d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/session/zipball/193c666a8d1fcce5985c48afe9c3df96b6d3b6d1", + "reference": "193c666a8d1fcce5985c48afe9c3df96b6d3b6d1", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-message-implementation": "1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/cookies": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.1" + }, + "suggest": { + "ext-session": "Allows using native PHP sessions" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Session\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A session service, PSR-15 session middleware, and a flash message service which helps use one-time messages.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "flash", + "middleware", + "psr-15", + "session" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/session/issues?state=open", + "source": "https://github.com/yiisoft/session", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-05-02T18:50:11+00:00" + }, + { + "name": "yiisoft/strings", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/strings.git", + "reference": "ff519d31e1c2518f42554fb5410e31bbb74b8108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/strings/zipball/ff519d31e1c2518f42554fb5410e31bbb74b8108", + "reference": "ff519d31e1c2518f42554fb5410e31bbb74b8108", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Strings\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Strings Helper", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "helper", + "string", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/strings/issues", + "source": "https://github.com/yiisoft/strings", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-12-22T07:29:39+00:00" + }, + { + "name": "yiisoft/translator", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/translator.git", + "reference": "869a224bf59dda36a8725985f5dd2e31cb357e21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/translator/zipball/869a224bf59dda36a8725985f5dd2e31cb357e21", + "reference": "869a224bf59dda36a8725985f5dd2e31cb357e21", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/i18n": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/di": "^1.2" + }, + "suggest": { + "ext-intl": "Allows using intl message formatter", + "ext-tokenizer": "Allows using message extraction", + "yiisoft/event-dispatcher": "To listen for events about missing categories and messages" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Translator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Message Translator", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "i18n", + "internationalization", + "translation" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/translator/issues?state=open", + "source": "https://github.com/yiisoft/translator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-17T13:16:40+00:00" + }, + { + "name": "yiisoft/translator-message-php", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/translator-message-php.git", + "reference": "67a0c64c132e5098f6824017ca4bccd45cc79030" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/translator-message-php/zipball/67a0c64c132e5098f6824017ca4bccd45cc79030", + "reference": "67a0c64c132e5098f6824017ca4bccd45cc79030", + "shasum": "" + }, + "require": { + "php": "^8.0", + "yiisoft/translator": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.15.4", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Translator\\Message\\Php\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Translator PHP Message Storage", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "formatting", + "i18n", + "internationalization", + "message storage" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/translator-message-php/issues?state=open", + "source": "https://github.com/yiisoft/translator-message-php", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-02-19T11:29:34+00:00" + }, + { + "name": "yiisoft/user", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/user.git", + "reference": "7bd541166949ac56a722a9555d43dac29976f424" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/user/zipball/7bd541166949ac56a722a9555d43dac29976f424", + "reference": "7bd541166949ac56a722a9555d43dac29976f424", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.4|^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^1.1|^2.0|^3.0", + "yiisoft/access": "^1.0", + "yiisoft/auth": "^2.0|^3.0", + "yiisoft/cookies": "^1.2", + "yiisoft/http": "^1.2", + "yiisoft/session": "^1.0|^2.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "phpunit/phpunit": "^9.5", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\User\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Convenient user identity management and access checking", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "user", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/user/issues?state=open", + "source": "https://github.com/yiisoft/user", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-02-15T10:47:39+00:00" + }, + { + "name": "yiisoft/validator", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/validator.git", + "reference": "9e8ad99e66c750aceda96fd96033ff4b5d4a7e62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/validator/zipball/9e8ad99e66c750aceda96fd96033ff4b5d4a7e62", + "reference": "9e8ad99e66c750aceda96fd96033ff4b5d4a7e62", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.0|^2.0", + "yiisoft/arrays": "^2.1|^3.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/network-utilities": "^1.2", + "yiisoft/strings": "^2.1", + "yiisoft/translator": "^2.1|^3.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "phpbench/phpbench": "^1.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.24", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0", + "yiisoft/translator-message-php": "^1.1", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "suggest": { + "ext-fileinfo": "To use image rule", + "ext-intl": "Allows using date rules and IDN validation for emails", + "yiisoft/di": "To create rule handlers via Yii DI" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di": "di.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Validator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Validator", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "validation", + "validator" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/validator/issues?state=open", + "source": "https://github.com/yiisoft/validator", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-12T12:10:04+00:00" + }, + { + "name": "yiisoft/var-dumper", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/var-dumper.git", + "reference": "c7f6a40d117b905abe26ac093593eaf7c57b9bd5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/var-dumper/zipball/c7f6a40d117b905abe26ac093593eaf7c57b9bd5", + "reference": "c7f6a40d117b905abe26ac093593eaf7c57b9bd5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "php": "^8.0", + "yiisoft/arrays": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.3" + }, + "suggest": { + "ext-sockets": "Send dumps to a server through UDP/TCP protocols" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Yiisoft\\VarDumper\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Enhances functionality of var_dump() and var_export(). It is dealing with recursive references, may highlight syntax and export closures.", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "helper", + "var-dumper", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/var-dumper/issues", + "source": "https://github.com/yiisoft/var-dumper", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-10-08T11:21:24+00:00" + }, + { + "name": "yiisoft/view", + "version": "10.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/view.git", + "reference": "4416d30e4e286e23887d9f525701f37e3a15f9ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/view/zipball/4416d30e4e286e23887d9f525701f37e3a15f9ca", + "reference": "4416d30e4e286e23887d9f525701f37e3a15f9ca", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "1.0.0", + "psr/event-dispatcher-implementation": "1.0.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/cache": "^1.0|^2.0|^3.0", + "yiisoft/files": "^1.0|^2.0", + "yiisoft/html": "^2.5|^3.0", + "yiisoft/json": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "1.0.*", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.20", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^1.4|^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-web": "di-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\View\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii View Rendering Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "view", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/view/issues?state=open", + "source": "https://github.com/yiisoft/view", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-06-28T10:02:35+00:00" + }, + { + "name": "yiisoft/widget", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/widget.git", + "reference": "d469c67698b4ee8bc4824c2adb0adbef645c1cff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/widget/zipball/d469c67698b4ee8bc4824c2adb0adbef645c1cff", + "reference": "d469c67698b4ee8bc4824c2adb0adbef645c1cff", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/definitions": "^3.1", + "yiisoft/factory": "^1.2", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/html": "^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "bootstrap": "bootstrap.php", + "widgets": [], + "widgets-themes": [] + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Widget\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Widget", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "widgets", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/widget/issues?state=open", + "source": "https://github.com/yiisoft/widget", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2023-12-25T18:47:09+00:00" + }, + { + "name": "yiisoft/yii-bootstrap5", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-bootstrap5.git", + "reference": "76d3a7a8f9c8bada906929c517c01c1bd4678ed6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-bootstrap5/zipball/76d3a7a8f9c8bada906929c517c01c1bd4678ed6", + "reference": "76d3a7a8f9c8bada906929c517c01c1bd4678ed6", + "shasum": "" + }, + "require": { + "php": "^8.1", + "yiisoft/arrays": "^1.0|^2.0|^3.0", + "yiisoft/assets": "^4.0", + "yiisoft/files": "^2.0", + "yiisoft/html": "^3.0", + "yiisoft/json": "^1.0", + "yiisoft/widget": "^2.0" + }, + "provide": { + "yiisoft/yii-bootstrap": "1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.3", + "phpunit/phpunit": "^9.6", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/aliases": "^3.0", + "yiisoft/di": "^1.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Bootstrap5\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Twitter Bootstrap 5 Extension", + "keywords": [ + "bootstrap5", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-bootstrap5/issues?state=open", + "source": "https://github.com/yiisoft/yii-bootstrap5", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-07-12T17:56:26+00:00" + }, + { + "name": "yiisoft/yii-console", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-console.git", + "reference": "7942fc70df59965bb1b33ac4671c915a145d2dcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-console/zipball/7942fc70df59965bb1b33ac4671c915a145d2dcf", + "reference": "7942fc70df59965bb1b33ac4671c915a145d2dcf", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher-contracts": "^2.2|^3.0", + "yiisoft/friendly-exception": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^3.8|^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "vimeo/psalm": "^4.30|^5.20", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config", + "merge-plan-file": "../tests/environment/.merge-plan.php" + }, + "config-plugin": { + "params-console": "params-console.php", + "di-console": "di-console.php", + "events-console": "events-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Console\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Symfony console wrapper with additional features", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "console", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-console/issues?state=open", + "source": "https://github.com/yiisoft/yii-console", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-02-17T13:10:12+00:00" + }, + { + "name": "yiisoft/yii-cycle", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-cycle.git", + "reference": "071361f0a97ed314add6c2e285953ee02b3973a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-cycle/zipball/071361f0a97ed314add6c2e285953ee02b3973a6", + "reference": "071361f0a97ed314add6c2e285953ee02b3973a6", + "shasum": "" + }, + "require": { + "cycle/annotated": "^3.5", + "cycle/database": "^2.8", + "cycle/migrations": "^3.1.1|^4.0", + "cycle/orm": "^2.7", + "cycle/schema-builder": "^2.8", + "cycle/schema-migrations-generator": "^2.0", + "cycle/schema-provider": "^1.0", + "cycle/schema-renderer": "^1.2", + "php": "^8.1", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", + "psr/log": "^3.0", + "psr/simple-cache": "^2.0|^3.0", + "spiral/attributes": "^2.7|^3.0", + "spiral/core": "^3.12", + "spiral/tokenizer": "^3.12", + "symfony/console": "^6.4", + "symfony/finder": "^5.4", + "webmozart/glob": "^4.7", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/injector": "^1.1" + }, + "require-dev": { + "cycle/entity-behavior": "^1.0", + "ext-uopz": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.7", + "yiisoft/definitions": "^3.2", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "cycle/entity-behavior": "To use PHP attributes that add behaviors to Cycle ORM entities." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "di-console": "di-console.php", + "events-console": "events-console.php", + "di-delegates": "di-delegates.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Cycle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Cycle ORM v2 support", + "homepage": "http://www.yiiframework.com/", + "keywords": [ + "cycle", + "migrations", + "orm", + "yii" + ], + "support": { + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-cycle/issues?state=open", + "source": "https://github.com/yiisoft/yii-cycle", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-03-21T08:34:37+00:00" + }, + { + "name": "yiisoft/yii-dataview", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-dataview.git", + "reference": "c26babddba3a6b12cb679d92e13fe324eda9142a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-dataview/zipball/c26babddba3a6b12cb679d92e13fe324eda9142a", + "reference": "c26babddba3a6b12cb679d92e13fe324eda9142a", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.1", + "psr/container": "^1.0|^2.0", + "yiisoft/arrays": "^3.1", + "yiisoft/data": "dev-master", + "yiisoft/factory": "^1.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/html": "^3.0", + "yiisoft/injector": "^1.2", + "yiisoft/json": "^1.0", + "yiisoft/router": "^3.0", + "yiisoft/strings": "^2.0", + "yiisoft/translator": "^3.0", + "yiisoft/validator": "^2.0", + "yiisoft/view": "^10.0", + "yiisoft/widget": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.7", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.1.1", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/di": "^1.2", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/router-fastroute": "^3.0.1", + "yiisoft/test-support": "^3.0", + "yiisoft/translator-message-php": "^1.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "widgets-themes": "widgets-themes.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\DataView\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Data Widgets Package", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "data", + "grid", + "list", + "view", + "widget", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-dataview/issues?state=open", + "source": "https://github.com/yiisoft/yii-dataview", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-11T07:56:12+00:00" + }, + { + "name": "yiisoft/yii-debug", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug.git", + "reference": "90bb1960841cf3b054433d7c54210fd203d3fe8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug/zipball/90bb1960841cf3b054433d7c54210fd203d3fe8f", + "reference": "90bb1960841cf3b054433d7c54210fd203d3fe8f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "guzzlehttp/psr7": "^2.4", + "jetbrains/phpstorm-attributes": "^1.0", + "php": "^8.1", + "psr/container": "^2.0", + "psr/event-dispatcher": "^1.0", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/console": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.4", + "yiisoft/aliases": "^3.0", + "yiisoft/arrays": "^2.0|^3.0", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/json": "^1.0", + "yiisoft/profiler": "^3.0", + "yiisoft/proxy": "^1.0.1", + "yiisoft/strings": "^2.2", + "yiisoft/var-dumper": "^1.7" + }, + "require-dev": { + "ext-curl": "*", + "ext-sockets": "*", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.3", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/error-handler": "^3.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-http": "^1.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "bootstrap": "bootstrap.php", + "di": "di.php", + "di-console": "di-console.php", + "di-web": "di-web.php", + "di-providers": "di-providers.php", + "events-web": "events-web.php", + "events-console": "events-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\": "src", + "Yiisoft\\Yii\\Debug\\Tests\\Shared\\": "tests/Shared" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Debug Panel Extension", + "keywords": [ + "debug", + "debugger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-17T07:39:11+00:00" + }, + { + "name": "yiisoft/yii-debug-api", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug-api.git", + "reference": "8349f8d6f250e0f17bec8ab187390124e491c8c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug-api/zipball/8349f8d6f250e0f17bec8ab187390124e491c8c0", + "reference": "8349f8d6f250e0f17bec8ab187390124e491c8c0", + "shasum": "" + }, + "require": { + "alexkart/curl-builder": "^1.0", + "gitonomy/gitlib": "^1.3", + "guzzlehttp/guzzle": "^7.5", + "guzzlehttp/psr7": "^2.4", + "httpsoft/http-message": "^1.1", + "php": "^8.1", + "psr/container": "^2.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/simple-cache": "^2.0|^3.0", + "symfony/process": "^5.4|^6.0", + "yiisoft/aliases": "^3.0", + "yiisoft/config": "^1.1", + "yiisoft/data-response": "^2.0", + "yiisoft/di": "^1.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^5.2", + "yiisoft/router": "^3.0", + "yiisoft/translator": "^3.0", + "yiisoft/var-dumper": "^1.4", + "yiisoft/yii-debug": "dev-master", + "yiisoft/yii-middleware": "^1.0", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "codeception/codeception": "^5.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.6", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.22", + "yiisoft/active-record": "dev-master", + "yiisoft/assets": "^4.0", + "yiisoft/csrf": "^2.0", + "yiisoft/db": "1.2 as dev-master", + "yiisoft/db-sqlite": "^1.0", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/test-support": "^3.0", + "yiisoft/yii-cycle": "dev-master", + "yiisoft/yii-view": "^6.0" + }, + "suggest": { + "yiisoft/assets": "Support custom debug panels", + "yiisoft/yii-view": "Support custom debug panels" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "bootstrap-web": "bootstrap-web.php", + "params": "params.php", + "di-web": "di-web.php", + "routes": "routes.php", + "di-providers-web": "di-providers-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\Api\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Debug API", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "api", + "debug", + "yii", + "yii-debug-api", + "yiisoft" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug-api/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug-api", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-15T14:39:54+00:00" + }, + { + "name": "yiisoft/yii-event", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-event.git", + "reference": "2e02986a09235d20b3c02382f8cc5d7ad2e452fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-event/zipball/2e02986a09235d20b3c02382f8cc5d7ad2e452fb", + "reference": "2e02986a09235d20b3c02382f8cc5d7ad2e452fb", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/injector": "^1.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.18.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/config": "^1.3", + "yiisoft/di": "^1.2", + "yiisoft/test-support": "^1.3" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config", + "merge-plan-file": "../tests/environment/.merge-plan.php" + }, + "config-plugin": { + "params-web": "params-web.php", + "params-console": "params-console.php", + "di": "di.php", + "di-web": "di-web.php", + "di-console": "di-console.php", + "events-web": [], + "events-console": [] + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Event\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Event", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "event", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-event/issues?state=open", + "source": "https://github.com/yiisoft/yii-event", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2023-11-04T15:57:42+00:00" + }, + { + "name": "yiisoft/yii-http", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-http.git", + "reference": "2555514a091ec9339259f10abc7e8970ef9e5db6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-http/zipball/2555514a091ec9339259f10abc7e8970ef9e5db6", + "reference": "2555514a091ec9339259f10abc7e8970ef9e5db6", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/middleware-dispatcher": "^3.0|^4.0|^5.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.4", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii HTTP Application", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "application", + "http", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-http/issues?state=open", + "source": "https://github.com/yiisoft/yii-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-07T07:54:13+00:00" + }, + { + "name": "yiisoft/yii-middleware", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-middleware.git", + "reference": "b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-middleware/zipball/b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a", + "reference": "b2a8157ae2c94847a2b2f2e3b63dc23366b5e42a", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/event-dispatcher": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "psr/log": "^3.0", + "yiisoft/aliases": "^3.0", + "yiisoft/cookies": "^1.2", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/http": "^1.2", + "yiisoft/network-utilities": "^1.2", + "yiisoft/router": "^3.0", + "yiisoft/session": "^2.0", + "yiisoft/strings": "^2.1", + "yiisoft/validator": "^1.0|^2.0" + }, + "require-dev": { + "ext-uopz": "*", + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.16", + "slope-it/clock-mock": "^0.3.6", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/event-dispatcher": "For using events", + "yiisoft/translator": "For updating translator's locale" + }, + "type": "library", + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Middleware\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Middleware", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "framework", + "middleware", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-middleware/issues?state=open", + "source": "https://github.com/yiisoft/yii-middleware", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-03T19:34:10+00:00" + }, + { + "name": "yiisoft/yii-runner", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner.git", + "reference": "69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner/zipball/69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896", + "reference": "69d8392ecc0c9e47ac7d5a56c1a8596d5c1ac896", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/yii-event": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.20", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.21", + "yiisoft/test-support": "^3.0" + }, + "suggest": { + "yiisoft/yii-runner-console": "Allows to run console application", + "yiisoft/yii-runner-http": "Allows to run HTTP application", + "yiisoft/yii-runner-roadrunner": "Allows to run HTTP application for RoadRunner" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "runner", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-09T14:10:08+00:00" + }, + { + "name": "yiisoft/yii-runner-console", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner-console.git", + "reference": "e92f4e72778508e7c2918f8fc8c3e75b758eb61a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner-console/zipball/e92f4e72778508e7c2918f8fc8c3e75b758eb61a", + "reference": "e92f4e72778508e7c2918f8fc8c3e75b758eb61a", + "shasum": "" + }, + "require": { + "php": "^8.0", + "symfony/console": "^5.4|^6.0|^7.0", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-runner": "^2.2" + }, + "require-dev": { + "codeception/codeception": "^5.0", + "codeception/module-cli": "^2.0", + "maglnet/composer-require-checker": "^4.2", + "rector/rector": "^1.0.0", + "vimeo/psalm": "^4.30|^5.2" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\Console\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Console application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "console", + "runner", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner-console/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner-console", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-10T10:06:34+00:00" + }, + { + "name": "yiisoft/yii-runner-http", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-runner-http.git", + "reference": "798c37abbcceb6b0053744b4bde0c476cd53e15e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-runner-http/zipball/798c37abbcceb6b0053744b4bde0c476cd53e15e", + "reference": "798c37abbcceb6b0053744b4bde0c476cd53e15e", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0|^2.0 ", + "yiisoft/config": "^1.1", + "yiisoft/definitions": "^1.0|^2.0|^3.0", + "yiisoft/di": "^1.0", + "yiisoft/error-handler": "^3.0", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner": "^2.2" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0.0", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.2", + "xepozz/internal-mocker": "^1.4", + "yiisoft/middleware-dispatcher": "^5.0", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Runner\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "HTTP application runner", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "http", + "runner", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/yii-runner-http/issues?state=open", + "source": "https://github.com/yiisoft/yii-runner-http", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-03-10T10:08:37+00:00" + }, + { + "name": "yiisoft/yii-sentry", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-sentry.git", + "reference": "d030e6c3017fe9b73b0f07b0429d4ac8b114b070" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-sentry/zipball/d030e6c3017fe9b73b0f07b0429d4ac8b114b070", + "reference": "d030e6c3017fe9b73b0f07b0429d4ac8b114b070", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "sentry/sdk": "^3.2", + "sentry/sentry": "^3.11", + "symfony/console": "^5.4|^6.0", + "yiisoft/di": "^1.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.3", + "httpsoft/http-message": "^1.0.9", + "maglnet/composer-require-checker": "^4.2", + "php-http/guzzle7-adapter": "^1.0", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.14.3", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/error-handler": "^2.1", + "yiisoft/yii-console": "^1.0", + "yiisoft/yii-event": "^1.0" + }, + "suggest": { + "yiisoft/yii-console": "Add error catching to console application", + "yiisoft/yii-event": "Add error catching to console application" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "bootstrap": "bootstrap.php", + "di": "di.php", + "events-console": "events-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Sentry\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A Sentry integration for Yii Framework", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "sentry", + "sentry-sdk", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-sentry/issues?state=open", + "source": "https://github.com/yiisoft/yii-sentry", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-15T17:44:28+00:00" + }, + { + "name": "yiisoft/yii-swagger", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-swagger.git", + "reference": "c0fe0483b04719a6724fb13650f679614e1b0cef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-swagger/zipball/c0fe0483b04719a6724fb13650f679614e1b0cef", + "reference": "c0fe0483b04719a6724fb13650f679614e1b0cef", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/http-message": "^1.0|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "swagger-api/swagger-ui": "^4.1|^5.0", + "yiisoft/aliases": "^1.1|^2.0|^3.0", + "yiisoft/arrays": "^3.0", + "yiisoft/assets": "^2.0|^3.0|^4.0", + "yiisoft/cache": "^1.0|^2.0|^3.0", + "yiisoft/data-response": "^1.0|^2.0", + "yiisoft/html": "^3.0", + "yiisoft/yii-view-renderer": "^7.1.0", + "zircote/swagger-php": "^4.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.4", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/csrf": "^2.0", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Swagger\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "OpenAPI Swagger for Yii Framework", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "api", + "swagger", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-swagger/issues?state=open", + "source": "https://github.com/yiisoft/yii-swagger", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-04T21:55:48+00:00" + }, + { + "name": "yiisoft/yii-view-renderer", + "version": "7.1.0", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-view-renderer.git", + "reference": "cb11468f554d251c2deb87bf228a302c794134a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-view-renderer/zipball/cb11468f554d251c2deb87bf228a302c794134a3", + "reference": "cb11468f554d251c2deb87bf228a302c794134a3", + "shasum": "" + }, + "require": { + "php": "^8.0", + "psr/container": "^1.0|^2.0", + "yiisoft/aliases": "^2.0|^3.0", + "yiisoft/csrf": "^1.2|^2.0", + "yiisoft/data-response": "^1.0|^2.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/html": "^2.5|^3.0", + "yiisoft/strings": "^2.0", + "yiisoft/view": "^10.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.0", + "maglnet/composer-require-checker": "^4.3", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^9.5", + "rector/rector": "1.0.*", + "roave/infection-static-analysis-plugin": "^1.25", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.25", + "yiisoft/di": "^1.2", + "yiisoft/psr-dummy-provider": "^1.0", + "yiisoft/test-support": "^3.0", + "yiisoft/yii-debug": "dev-master|dev-php80" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-web": "di-web.php", + "events-web": "events-web.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\View\\Renderer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "PSR-7 compatible view renderer", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "renderer", + "view", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-view-renderer/issues?state=open", + "source": "https://github.com/yiisoft/yii-view-renderer", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-07-01T11:56:55+00:00" + }, + { + "name": "zircote/swagger-php", + "version": "4.10.6", + "source": { + "type": "git", + "url": "https://github.com/zircote/swagger-php.git", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.2", + "psr/log": "^1.1 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^2 || ^3", + "symfony/finder": ">=2.2", + "symfony/yaml": ">=3.3" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11", + "doctrine/annotations": "^1.7 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.17 || ^3.47.1", + "phpstan/phpstan": "^1.6", + "phpunit/phpunit": ">=8", + "vimeo/psalm": "^4.23" + }, + "suggest": { + "doctrine/annotations": "^1.7 || ^2.0" + }, + "bin": [ + "bin/openapi" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "OpenApi\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Robert Allen", + "email": "zircote@gmail.com" + }, + { + "name": "Bob Fanger", + "email": "bfanger@gmail.com", + "homepage": "https://bfanger.nl" + }, + { + "name": "Martin Rademacher", + "email": "mano@radebatz.net", + "homepage": "https://radebatz.net" + } + ], + "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", + "homepage": "https://github.com/zircote/swagger-php/", + "keywords": [ + "api", + "json", + "rest", + "service discovery" + ], + "support": { + "issues": "https://github.com/zircote/swagger-php/issues", + "source": "https://github.com/zircote/swagger-php/tree/4.10.6" + }, + "time": "2024-07-26T03:04:43+00:00" + } + ], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^7 | ^8 | ^9", + "react/promise": "^2", + "vimeo/psalm": "^3.12" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ], + "psr-4": { + "Amp\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A non-blocking concurrency framework for PHP applications.", + "homepage": "https://amphp.org/amp", + "keywords": [ + "async", + "asynchronous", + "awaitable", + "concurrency", + "event", + "event-loop", + "future", + "non-blocking", + "promise" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-03-21T18:52:26+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.2", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", + "shasum": "" + }, + "require": { + "amphp/amp": "^2", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", + "friendsofphp/php-cs-fixer": "^2.3", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" + }, + "type": "library", + "autoload": { + "files": [ + "lib/functions.php" + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "homepage": "https://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2024-04-13T18:00:56+00:00" + }, + { + "name": "behat/gherkin", + "version": "v4.9.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "shasum": "" + }, + "require": { + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + }, + "time": "2021-10-12T13:05:09+00:00" + }, + { + "name": "clue/stdio-react", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-stdio.git", + "reference": "dfa6c378aabdff718202d4e2453f752c38ea3399" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-stdio/zipball/dfa6c378aabdff718202d4e2453f752c38ea3399", + "reference": "dfa6c378aabdff718202d4e2453f752c38ea3399", + "shasum": "" + }, + "require": { + "clue/term-react": "^1.0 || ^0.1.1", + "clue/utf8-react": "^1.0 || ^0.1", + "php": ">=5.3", + "react/event-loop": "^1.2", + "react/stream": "^1.2" + }, + "require-dev": { + "clue/arguments": "^2.0", + "clue/commander": "^1.2", + "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" + }, + "suggest": { + "ext-mbstring": "Using ext-mbstring should provide slightly better performance for handling I/O" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Stdio\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Async, event-driven console input & output (STDIN, STDOUT) for truly interactive CLI applications, built on top of ReactPHP", + "homepage": "https://github.com/clue/reactphp-stdio", + "keywords": [ + "async", + "autocomplete", + "autocompletion", + "cli", + "history", + "interactive", + "reactphp", + "readline", + "stdin", + "stdio", + "stdout" + ], + "support": { + "issues": "https://github.com/clue/reactphp-stdio/issues", + "source": "https://github.com/clue/reactphp-stdio/tree/v2.6.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-03-18T15:09:30+00:00" + }, + { + "name": "clue/term-react", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-term.git", + "reference": "00f297dc597eaee2ebf98af8f27cca5d21d60fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-term/zipball/00f297dc597eaee2ebf98af8f27cca5d21d60fa3", + "reference": "00f297dc597eaee2ebf98af8f27cca5d21d60fa3", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Term\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming terminal emulator, built on top of ReactPHP.", + "homepage": "https://github.com/clue/reactphp-term", + "keywords": [ + "C0", + "CSI", + "ansi", + "apc", + "ascii", + "c1", + "control codes", + "dps", + "osc", + "pm", + "reactphp", + "streaming", + "terminal", + "vt100", + "xterm" + ], + "support": { + "issues": "https://github.com/clue/reactphp-term/issues", + "source": "https://github.com/clue/reactphp-term/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2024-01-30T10:22:09+00:00" + }, + { + "name": "clue/utf8-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-utf8.git", + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-utf8/zipball/d5cd04d39cb5457aa5df830b7c4b301d2694217e", + "reference": "d5cd04d39cb5457aa5df830b7c4b301d2694217e", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4 || ^0.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/stream": "^1.0 || ^0.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\Utf8\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming UTF-8 parser, built on top of ReactPHP.", + "homepage": "https://github.com/clue/reactphp-utf8", + "keywords": [ + "reactphp", + "streaming", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "issues": "https://github.com/clue/reactphp-utf8/issues", + "source": "https://github.com/clue/reactphp-utf8/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-06T14:52:17+00:00" + }, + { + "name": "codeception/c3", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/c3.git", + "reference": "e23298a1cd5e7745973ea26a53572a3d9b013439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/c3/zipball/e23298a1cd5e7745973ea26a53572a3d9b013439", + "reference": "e23298a1cd5e7745973ea26a53572a3d9b013439", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.5.0" + }, + "require-dev": { + "composer/composer": "^1.0 || ^2.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Codeception\\c3\\Installer" + }, + "autoload": { + "psr-4": { + "Codeception\\c3\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tiger Seo", + "email": "tiger.seo@gmail.com" + }, + { + "name": "Michael Bodnarchuk", + "email": "davert.php@codegyre.com", + "homepage": "http://codegyre.com" + } + ], + "description": "CodeCoverage collector for Codeception", + "homepage": "http://codeception.com/", + "keywords": [ + "code coverage", + "codecoverage" + ], + "support": { + "issues": "https://github.com/Codeception/c3/issues", + "source": "https://github.com/Codeception/c3/tree/2.9.0" + }, + "time": "2023-10-15T17:57:07+00:00" + }, + { + "name": "codeception/codeception", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "reference": "3b2d7d1a88e7e1d9dc0acb6d3c8f0acda0a37374", + "shasum": "" + }, + "require": { + "behat/gherkin": "^4.6.2", + "codeception/lib-asserts": "^2.0", + "codeception/stub": "^4.1", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/php-code-coverage": "^9.2 || ^10.0 || ^11.0", + "phpunit/php-text-template": "^2.0 || ^3.0 || ^4.0", + "phpunit/php-timer": "^5.0.3 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5.20 || ^10.0 || ^11.0", + "psy/psysh": "^0.11.2 || ^0.12", + "sebastian/comparator": "^4.0.5 || ^5.0 || ^6.0", + "sebastian/diff": "^4.0.3 || ^5.0 || ^6.0", + "symfony/console": ">=4.4.24 <8.0", + "symfony/css-selector": ">=4.4.24 <8.0", + "symfony/event-dispatcher": ">=4.4.24 <8.0", + "symfony/finder": ">=4.4.24 <8.0", + "symfony/var-dumper": ">=4.4.24 <8.0", + "symfony/yaml": ">=4.4.24 <8.0" + }, + "conflict": { + "codeception/lib-innerbrowser": "<3.1.3", + "codeception/module-filesystem": "<3.0", + "codeception/module-phpbrowser": "<2.5" + }, + "replace": { + "codeception/phpunit-wrapper": "*" + }, + "require-dev": { + "codeception/lib-innerbrowser": "*@dev", + "codeception/lib-web": "^1.0", + "codeception/module-asserts": "*@dev", + "codeception/module-cli": "*@dev", + "codeception/module-db": "*@dev", + "codeception/module-filesystem": "*@dev", + "codeception/module-phpbrowser": "*@dev", + "codeception/util-universalframework": "*@dev", + "ext-simplexml": "*", + "jetbrains/phpstorm-attributes": "^1.0", + "symfony/dotenv": ">=4.4.24 <8.0", + "symfony/process": ">=4.4.24 <8.0", + "vlucas/phpdotenv": "^5.1" + }, + "suggest": { + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "ext-simplexml": "For loading params from XML files", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/dotenv": "For loading params from .env files", + "symfony/phpunit-bridge": "For phpunit-bridge support", + "vlucas/phpdotenv": "For loading params from .env files" + }, + "bin": [ + "codecept" + ], + "type": "library", + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + }, + "classmap": [ + "src/PHPUnit/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.ua@gmail.com", + "homepage": "https://codeception.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "https://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/5.1.2" + }, + "funding": [ + { + "url": "https://opencollective.com/codeception", + "type": "open_collective" + } + ], + "time": "2024-03-07T07:19:42+00:00" + }, + { + "name": "codeception/lib-asserts", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-asserts.git", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", + "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": "^7.7.1 | ^8.0.3 | ^9.0", + "ext-dom": "*", + "php": "^7.4 | ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Assertion methods used by Codeception core and Asserts module", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + }, + "time": "2023-02-10T18:36:23+00:00" + }, + { + "name": "codeception/lib-innerbrowser", + "version": "3.1.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-innerbrowser.git", + "reference": "10482f7e34c0537bf5b87bc82a3d65a1842a8b4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/10482f7e34c0537bf5b87bc82a3d65a1842a8b4f", + "reference": "10482f7e34c0537bf5b87bc82a3d65a1842a8b4f", + "shasum": "" + }, + "require": { + "codeception/codeception": "^5.0", + "codeception/lib-web": "^1.0.1", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^8.0", + "phpunit/phpunit": "^9.5", + "symfony/browser-kit": "^4.4.24 || ^5.4 || ^6.0", + "symfony/dom-crawler": "^4.4.30 || ^5.4 || ^6.0" + }, + "require-dev": { + "codeception/util-universalframework": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "https://codegyre.com" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Parent library for all Codeception framework modules and PhpBrowser", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/3.1.3" + }, + "time": "2022-10-03T15:33:34+00:00" + }, + { + "name": "codeception/lib-web", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-web.git", + "reference": "01ff7f9ed8760ba0b0805a0b3a843b4e74165a60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/01ff7f9ed8760ba0b0805a0b3a843b4e74165a60", + "reference": "01ff7f9ed8760ba0b0805a0b3a843b4e74165a60", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "guzzlehttp/psr7": "^2.0", + "php": "^8.0", + "phpunit/phpunit": "^9.5 | ^10.0 | ^11.0", + "symfony/css-selector": ">=4.4.24 <8.0" + }, + "conflict": { + "codeception/codeception": "<5.0.0-alpha3" + }, + "require-dev": { + "php-webdriver/webdriver": "^1.12" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gintautas Miselis" + } + ], + "description": "Library containing files used by module-webdriver and lib-innerbrowser or module-phpbrowser", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-web/issues", + "source": "https://github.com/Codeception/lib-web/tree/1.0.6" + }, + "time": "2024-02-06T20:50:08+00:00" + }, + { + "name": "codeception/module-asserts", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", + "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^2.0", + "php": "^8.0" + }, + "conflict": { + "codeception/codeception": "<5.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", + "keywords": [ + "assertions", + "asserts", + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/3.0.0" + }, + "time": "2022-02-16T19:48:08+00:00" + }, + { + "name": "codeception/module-cli", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-cli.git", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-cli/zipball/a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "reference": "a3a101fae4049fa2f810107f7bd5db3b3266ce63", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/module-asserts": "*", + "php": "^7.4 || ^8.0" + }, + "conflict": { + "codeception/codeception": "<4.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + } + ], + "description": "Codeception module for testing basic shell commands and shell output", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/module-cli/issues", + "source": "https://github.com/Codeception/module-cli/tree/2.0.1" + }, + "time": "2023-01-13T18:41:03+00:00" + }, + { + "name": "codeception/module-phpbrowser", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-phpbrowser.git", + "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "reference": "a972411f60cd00d00d5e5e3b35496ba4a23bcffc", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-innerbrowser": "*@dev", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.4", + "php": "^8.0", + "symfony/browser-kit": "^5.4 || ^6.0 || ^7.0" + }, + "conflict": { + "codeception/codeception": "<5.0", + "codeception/lib-innerbrowser": "<3.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.199", + "codeception/module-rest": "^2.0 || *@dev", + "ext-curl": "*" + }, + "suggest": { + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Codeception module for testing web application over HTTP", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "functional-testing", + "http" + ], + "support": { + "issues": "https://github.com/Codeception/module-phpbrowser/issues", + "source": "https://github.com/Codeception/module-phpbrowser/tree/3.0.1" + }, + "time": "2023-12-08T19:41:28+00:00" + }, + { + "name": "codeception/stub", + "version": "4.1.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "reference": "4fcad2c165f365377486dc3fd8703b07f1f2fcae", + "shasum": "" + }, + "require": { + "php": "^7.4 | ^8.0", + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11" + }, + "conflict": { + "codeception/codeception": "<5.0.6" + }, + "require-dev": { + "consolidation/robo": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/4.1.3" + }, + "time": "2024-02-02T19:21:00+00:00" + }, + { + "name": "colinodell/json5", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/colinodell/json5.git", + "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/colinodell/json5/zipball/15b063f8cb5e6deb15f0cd39123264ec0d19c710", + "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.1.3|^8.0" + }, + "conflict": { + "scrutinizer/ocular": "1.7.*" + }, + "require-dev": { + "mikehaertl/php-shellcommand": "^1.2.5", + "phpstan/phpstan": "^1.4", + "scrutinizer/ocular": "^1.6", + "squizlabs/php_codesniffer": "^2.3 || ^3.0", + "symfony/finder": "^4.4|^5.4|^6.0", + "symfony/phpunit-bridge": "^5.4|^6.0" + }, + "bin": [ + "bin/json5" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "files": [ + "src/global.php" + ], + "psr-4": { + "ColinODell\\Json5\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Developer" + } + ], + "description": "UTF-8 compatible JSON5 parser for PHP", + "homepage": "https://github.com/colinodell/json5", + "keywords": [ + "JSON5", + "json", + "json5_decode", + "json_decode" + ], + "support": { + "issues": "https://github.com/colinodell/json5/issues", + "source": "https://github.com/colinodell/json5/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + } + ], + "time": "2022-12-27T16:44:40+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.5", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", + "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0", + "php": "^7 || ^8" + }, + "replace": { + "ocramius/package-versions": "1.11.99" + }, + "require-dev": { + "composer/composer": "^1.9.3 || ^2.0@dev", + "ext-zip": "^1.13", + "phpunit/phpunit": "^6.5 || ^7" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "support": { + "issues": "https://github.com/composer/package-versions-deprecated/issues", + "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-01-17T14:14:24+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.11.10", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "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.3.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-08-27T18:44:43+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "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.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": "2024-09-19T14:15:21+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "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", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "dnoegel/php-xdg-base-dir", + "version": "v0.1.1", + "source": { + "type": "git", + "url": "https://github.com/dnoegel/php-xdg-base-dir.git", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "XdgBaseDir\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, + "time": "2019-12-04T15:06:13+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, + { + "name": "felixfbecker/advanced-json-rpc", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", + "shasum": "" + }, + "require": { + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "php": "^7.1 || ^8.0", + "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "AdvancedJsonRpc\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "A more advanced JSONRPC implementation", + "support": { + "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", + "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" + }, + "time": "2021-06-11T22:34:44+00:00" + }, + { + "name": "felixfbecker/language-server-protocol", + "version": "v1.5.2", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpstan/phpstan": "*", + "squizlabs/php_codesniffer": "^3.1", + "vimeo/psalm": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "LanguageServerProtocol\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Felix Becker", + "email": "felix.b@outlook.com" + } + ], + "description": "PHP classes for the Language Server Protocol", + "keywords": [ + "language", + "microsoft", + "php", + "server" + ], + "support": { + "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + }, + "time": "2022-03-02T22:36:06+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "httpsoft/http-basis", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-basis.git", + "reference": "63c4306c516375e3fa08358a58194e159bfbb984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-basis/zipball/63c4306c516375e3fa08358a58194e159bfbb984", + "reference": "63c4306c516375e3fa08358a58194e159bfbb984", + "shasum": "" + }, + "require": { + "ext-json": "*", + "httpsoft/http-cookie": "^1.1", + "httpsoft/http-emitter": "^1.1", + "httpsoft/http-error-handler": "^1.1", + "httpsoft/http-message": "^1.1", + "httpsoft/http-response": "^1.1", + "httpsoft/http-router": "^1.1", + "httpsoft/http-runner": "^1.1", + "httpsoft/http-server-request": "^1.1", + "php": "^7.4|^8.0", + "psr/container": "^1.0|^2.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": "^1.1|^2.0|^3.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "devanych/di-container": "^2.1", + "devanych/view-renderer": "^1.0", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Basis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Simple and fast HTTP microframework implementing PSR standards", + "homepage": "https://httpsoft.org/", + "keywords": [ + "PSR-11", + "http", + "http-framework", + "microframework", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/basis", + "issues": "https://github.com/httpsoft/http-basis/issues", + "source": "https://github.com/httpsoft/http-basis" + }, + "time": "2023-05-05T22:15:06+00:00" + }, + { + "name": "httpsoft/http-cookie", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-cookie.git", + "reference": "c304b7d9888ed27bf2bcdb95762d87263a457644" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-cookie/zipball/c304b7d9888ed27bf2bcdb95762d87263a457644", + "reference": "c304b7d9888ed27bf2bcdb95762d87263a457644", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.1|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Cookie\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Managing cookies with PSR-7 support", + "homepage": "https://httpsoft.org/", + "keywords": [ + "cookie", + "cookies", + "http", + "http-cookie", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/cookie", + "issues": "https://github.com/httpsoft/http-cookie/issues", + "source": "https://github.com/httpsoft/http-cookie" + }, + "time": "2023-05-05T20:37:18+00:00" + }, + { + "name": "httpsoft/http-emitter", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-emitter.git", + "reference": "b09e2834b6d40e022f0c0eb7417f97f496e376b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-emitter/zipball/b09e2834b6d40e022f0c0eb7417f97f496e376b6", + "reference": "b09e2834b6d40e022f0c0eb7417f97f496e376b6", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "psr/http-message": "^1.1|^2.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Emitter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Emitting of PSR-7 Response implementation", + "homepage": "https://httpsoft.org/", + "keywords": [ + "emitter", + "http", + "http-emitter", + "http-message", + "php", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/emitter", + "issues": "https://github.com/httpsoft/http-emitter/issues", + "source": "https://github.com/httpsoft/http-emitter" + }, + "time": "2023-05-05T20:18:44+00:00" + }, + { + "name": "httpsoft/http-error-handler", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-error-handler.git", + "reference": "f5bfb10cdf6de7420e59d8342ba12f19749e7bc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-error-handler/zipball/f5bfb10cdf6de7420e59d8342ba12f19749e7bc1", + "reference": "f5bfb10cdf6de7420e59d8342ba12f19749e7bc1", + "shasum": "" + }, + "require": { + "httpsoft/http-response": "^1.1", + "php": "^7.4|^8.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-server-request": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\ErrorHandler\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Error handling PSR-7 and PSR-15 components", + "homepage": "https://httpsoft.org/", + "keywords": [ + "error-handler", + "error-middleware", + "http", + "http-error", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/error-handler", + "issues": "https://github.com/httpsoft/http-error-handler/issues", + "source": "https://github.com/httpsoft/http-error-handler" + }, + "time": "2023-05-05T21:14:04+00:00" + }, + { + "name": "httpsoft/http-response", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-response.git", + "reference": "6e9d25a540506ba8a5165817fdd856a856e32c02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-response/zipball/6e9d25a540506ba8a5165817fdd856a856e32c02", + "reference": "6e9d25a540506ba8a5165817fdd856a856e32c02", + "shasum": "" + }, + "require": { + "httpsoft/http-message": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Response\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "PSR-7 Response implementations", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "http-response", + "php", + "psr-7", + "responses" + ], + "support": { + "docs": "https://httpsoft.org/docs/response", + "issues": "https://github.com/httpsoft/http-response/issues", + "source": "https://github.com/httpsoft/http-response" + }, + "time": "2023-05-05T20:55:06+00:00" + }, + { + "name": "httpsoft/http-router", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-router.git", + "reference": "460ee40b15ceb61d86a7c511d321c4580960601e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-router/zipball/460ee40b15ceb61d86a7c511d321c4580960601e", + "reference": "460ee40b15ceb61d86a7c511d321c4580960601e", + "shasum": "" + }, + "require": { + "httpsoft/http-runner": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Simple and fast HTTP request router providing PSR-7 and PSR-15", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-router", + "php", + "psr-15", + "psr-7", + "route", + "router" + ], + "support": { + "docs": "https://httpsoft.org/docs/router", + "issues": "https://github.com/httpsoft/http-router/issues", + "source": "https://github.com/httpsoft/http-router" + }, + "time": "2023-05-05T22:02:47+00:00" + }, + { + "name": "httpsoft/http-runner", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-runner.git", + "reference": "00ddc625dbf8f0acb786e899575537c7e8327847" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-runner/zipball/00ddc625dbf8f0acb786e899575537c7e8327847", + "reference": "00ddc625dbf8f0acb786e899575537c7e8327847", + "shasum": "" + }, + "require": { + "httpsoft/http-emitter": "^1.1", + "php": "^7.4|^8.0", + "psr/container": "^1.0|^2.0", + "psr/http-message": "^1.1|^2.0", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0", + "psr/http-server-handler-implementation": "1.0", + "psr/http-server-middleware-implementation": "1.0" + }, + "require-dev": { + "devanych/di-container": "^2.1", + "httpsoft/http-message": "^1.1", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\Runner\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Running PSR-7 components and building PSR-15 middleware pipelines", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-middleware", + "middleware-pipeline", + "php", + "psr-15", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/runner", + "issues": "https://github.com/httpsoft/http-runner/issues", + "source": "https://github.com/httpsoft/http-runner" + }, + "time": "2023-05-05T21:47:55+00:00" + }, + { + "name": "httpsoft/http-server-request", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/httpsoft/http-server-request.git", + "reference": "3d773c8bcaa1c44793d35842fcd82a9d5fd5f193" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/httpsoft/http-server-request/zipball/3d773c8bcaa1c44793d35842fcd82a9d5fd5f193", + "reference": "3d773c8bcaa1c44793d35842fcd82a9d5fd5f193", + "shasum": "" + }, + "require": { + "httpsoft/http-message": "^1.1", + "php": "^7.4|^8.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^4.9|^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "HttpSoft\\ServerRequest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Evgeniy Zyubin", + "email": "mail@devanych.ru", + "homepage": "https://devanych.ru/", + "role": "Founder and lead developer" + } + ], + "description": "Infrastructure for creating PSR-7 ServerRequest and UploadedFile", + "homepage": "https://httpsoft.org/", + "keywords": [ + "http", + "http-message", + "http-server-request", + "php", + "psr-7" + ], + "support": { + "docs": "https://httpsoft.org/docs/server-request", + "issues": "https://github.com/httpsoft/http-server-request/issues", + "source": "https://github.com/httpsoft/http-server-request" + }, + "time": "2023-05-05T19:55:05+00:00" + }, + { + "name": "infection/abstract-testframework-adapter", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/infection/abstract-testframework-adapter.git", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^2.17", + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\AbstractTestFramework\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Abstract Test Framework Adapter for Infection", + "support": { + "issues": "https://github.com/infection/abstract-testframework-adapter/issues", + "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-17T18:49:12+00:00" + }, + { + "name": "infection/extension-installer", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/infection/extension-installer.git", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1 || ^2.0" + }, + "require-dev": { + "composer/composer": "^1.9 || ^2.0", + "friendsofphp/php-cs-fixer": "^2.18, <2.19", + "infection/infection": "^0.15.2", + "php-coveralls/php-coveralls": "^2.4", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.10", + "phpstan/phpstan-phpunit": "^0.12.6", + "phpstan/phpstan-strict-rules": "^0.12.2", + "phpstan/phpstan-webmozart-assert": "^0.12.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.8" + }, + "type": "composer-plugin", + "extra": { + "class": "Infection\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "Infection\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Infection Extension Installer", + "support": { + "issues": "https://github.com/infection/extension-installer/issues", + "source": "https://github.com/infection/extension-installer/tree/0.1.2" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-10-20T22:08:34+00:00" + }, + { + "name": "infection/include-interceptor", + "version": "0.2.5", + "source": { + "type": "git", + "url": "https://github.com/infection/include-interceptor.git", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", + "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", + "shasum": "" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "infection/infection": "^0.15.0", + "phan/phan": "^2.4 || ^3", + "php-coveralls/php-coveralls": "^2.2", + "phpstan/phpstan": "^0.12.8", + "phpunit/phpunit": "^8.5", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Infection\\StreamWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com" + } + ], + "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", + "support": { + "issues": "https://github.com/infection/include-interceptor/issues", + "source": "https://github.com/infection/include-interceptor/tree/0.2.5" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2021-08-09T10:03:57+00:00" + }, + { + "name": "infection/infection", + "version": "0.27.10", + "source": { + "type": "git", + "url": "https://github.com/infection/infection.git", + "reference": "873cd3335774a114bef9ca93388e623bf362d820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/infection/infection/zipball/873cd3335774a114bef9ca93388e623bf362d820", + "reference": "873cd3335774a114bef9ca93388e623bf362d820", + "shasum": "" + }, + "require": { + "colinodell/json5": "^2.2", + "composer-runtime-api": "^2.0", + "composer/xdebug-handler": "^2.0 || ^3.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "fidry/cpu-core-counter": "^0.4.0 || ^0.5.0 || ^1.0", + "infection/abstract-testframework-adapter": "^0.5.0", + "infection/extension-installer": "^0.1.0", + "infection/include-interceptor": "^0.2.5", + "justinrainbow/json-schema": "^5.2.10", + "nikic/php-parser": "^4.15.1", + "ondram/ci-detector": "^4.1.0", + "php": "^8.1", + "sanmai/later": "^0.1.1", + "sanmai/pipeline": "^5.1 || ^6", + "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", + "symfony/console": "^5.4 || ^6.0 || ^7.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/safe": "^2.1.2", + "webmozart/assert": "^1.11" + }, + "conflict": { + "antecedent/patchwork": "<2.1.25", + "dg/bypass-finals": "<1.4.1", + "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" + }, + "require-dev": { + "brianium/paratest": "^6.11", + "ext-simplexml": "*", + "fidry/makefile": "^0.2.0", + "helmich/phpunit-json-assert": "^3.0", + "phpspec/prophecy": "^1.15", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.10.15", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpstan/phpstan-webmozart-assert": "^1.0.2", + "phpunit/phpunit": "^9.6", + "rector/rector": "^0.16.0", + "sidz/phpstan-rules": "^0.4.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "thecodingmachine/phpstan-safe-rule": "^1.2.0" + }, + "bin": [ + "bin/infection" + ], + "type": "library", + "autoload": { + "psr-4": { + "Infection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Maks Rafalko", + "email": "maks.rafalko@gmail.com", + "homepage": "https://twitter.com/maks_rafalko" + }, + { + "name": "Oleg Zhulnev", + "homepage": "https://github.com/sidz" + }, + { + "name": "Gert de Pagter", + "homepage": "https://github.com/BackEndTea" + }, + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com", + "homepage": "https://twitter.com/tfidry" + }, + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com", + "homepage": "https://www.alexeykopytko.com" + }, + { + "name": "Andreas Möller", + "email": "am@localheinz.com", + "homepage": "https://localheinz.com" + } + ], + "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", + "keywords": [ + "coverage", + "mutant", + "mutation framework", + "mutation testing", + "testing", + "unit testing" + ], + "support": { + "issues": "https://github.com/infection/infection/issues", + "source": "https://github.com/infection/infection/tree/0.27.10" + }, + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2024-02-20T00:08:52+00:00" + }, + { + "name": "jolicode/jolinotif", + "version": "v2.7.2", + "source": { + "type": "git", + "url": "https://github.com/jolicode/JoliNotif.git", + "reference": "b34dac1826c8d33e9fd5c300546261e94f1ebdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jolicode/JoliNotif/zipball/b34dac1826c8d33e9fd5c300546261e94f1ebdb8", + "reference": "b34dac1826c8d33e9fd5c300546261e94f1ebdb8", + "shasum": "" + }, + "require": { + "jolicode/php-os-helper": "^0.1.0", + "php": ">=8.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/deprecation-contracts": "^3", + "symfony/process": "^5.4 || ^6.0 || ^7.0" + }, + "require-dev": { + "symfony/finder": "^5.4 || ^6.0 || ^7.0", + "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-ffi": "Needed to send notifications via libnotify on Linux" + }, + "bin": [ + "jolinotif" + ], + "type": "library", + "autoload": { + "psr-4": { + "Joli\\JoliNotif\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loïck Piera", + "email": "pyrech@gmail.com" + } + ], + "description": "Send desktop notifications on Windows, Linux, MacOS.", + "keywords": [ + "MAC", + "growl", + "linux", + "notification", + "windows" + ], + "support": { + "issues": "https://github.com/jolicode/JoliNotif/issues", + "source": "https://github.com/jolicode/JoliNotif/tree/v2.7.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/jolicode/jolinotif", + "type": "tidelift" + } + ], + "time": "2024-06-01T06:05:49+00:00" + }, + { + "name": "jolicode/php-os-helper", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/jolicode/php-os-helper.git", + "reference": "1622ad8bbcab98e62b5c041397e8519f10d90e29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jolicode/php-os-helper/zipball/1622ad8bbcab98e62b5c041397e8519f10d90e29", + "reference": "1622ad8bbcab98e62b5c041397e8519f10d90e29", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/phpunit-bridge": "^6.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "JoliCode\\PhpOsHelper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loïck Piera", + "email": "pyrech@gmail.com" + } + ], + "description": "Helpers to detect the OS of the machine where PHP is running.", + "keywords": [ + "linux", + "os", + "osx", + "php", + "windows" + ], + "support": { + "issues": "https://github.com/jolicode/php-os-helper/issues", + "source": "https://github.com/jolicode/php-os-helper/tree/v0.1.0" + }, + "time": "2023-12-03T12:46:03+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.3.0", + "source": { + "type": "git", + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "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", + "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/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" + }, + "time": "2024-07-06T21:00:26+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "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.9.0" + }, + "time": "2024-03-31T07:05:07+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "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", + "phpspec/prophecy": "^1.10", + "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.12.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2024-06-12T14:39:25+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.5.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", + "squizlabs/php_codesniffer": "~3.5" + }, + "type": "library", + "autoload": { + "psr-0": { + "JsonMapper": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "OSL-3.0" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@cweiske.de", + "homepage": "http://github.com/cweiske/jsonmapper/", + "role": "Developer" + } + ], + "description": "Map nested JSON structures onto PHP classes", + "support": { + "email": "cweiske@cweiske.de", + "issues": "https://github.com/cweiske/jsonmapper/issues", + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" + }, + "time": "2024-09-08T10:13:13+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.19.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45", + "reference": "0ed4c8949a32986043e977dbe14776c14d644c45", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.1" + }, + "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.19.2" + }, + "time": "2024-09-17T19:36:00+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "ondram/ci-detector", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/OndraM/ci-detector.git", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.13.2", + "lmc/coding-standard": "^3.0.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.1.0", + "phpstan/phpstan": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.0.0", + "phpunit/phpunit": "^9.6.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "OndraM\\CiDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ondřej Machulda", + "email": "ondrej.machulda@gmail.com" + } + ], + "description": "Detect continuous integration environment and provide unified access to properties of current build", + "keywords": [ + "CircleCI", + "Codeship", + "Wercker", + "adapter", + "appveyor", + "aws", + "aws codebuild", + "azure", + "azure devops", + "azure pipelines", + "bamboo", + "bitbucket", + "buddy", + "ci-info", + "codebuild", + "continuous integration", + "continuousphp", + "devops", + "drone", + "github", + "gitlab", + "interface", + "jenkins", + "pipelines", + "sourcehut", + "teamcity", + "travis" + ], + "support": { + "issues": "https://github.com/OndraM/ci-detector/issues", + "source": "https://github.com/OndraM/ci-detector/tree/4.2.0" + }, + "time": "2024-03-12T13:22:30+00:00" + }, + { + "name": "openlss/lib-array2xml", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/nullivex/lib-array2xml.git", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "LSS": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Bryan Tong", + "email": "bryan@nullivex.com", + "homepage": "https://www.nullivex.com" + }, + { + "name": "Tony Butler", + "email": "spudz76@gmail.com", + "homepage": "https://www.nullivex.com" + } + ], + "description": "Array2XML conversion library credit to lalit.org", + "homepage": "https://www.nullivex.com", + "keywords": [ + "array", + "array conversion", + "xml", + "xml conversion" + ], + "support": { + "issues": "https://github.com/nullivex/lib-array2xml/issues", + "source": "https://github.com/nullivex/lib-array2xml/tree/master" + }, + "time": "2019-03-29T20:06:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "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.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+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": "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.4.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^5.13" + }, + "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": "opensource@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.4.1" + }, + "time": "2024-05-21T05:55:05+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": "phpspec/php-diff", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/php-diff.git", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/php-diff/zipball/fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "reference": "fc1156187f9f6c8395886fe85ed88a0a245d72e9", + "shasum": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Diff": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Chris Boulton", + "homepage": "http://github.com/chrisboulton" + } + ], + "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).", + "support": { + "source": "https://github.com/phpspec/php-diff/tree/v1.1.3" + }, + "time": "2020-09-18T13:47:07+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "1.30.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", + "reference": "51b95ec8670af41009e2b2b56873bad96682413e", + "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.30.1" + }, + "time": "2024-09-07T20:13:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.32", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" + }, + "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": "9.2.x-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/9.2.32" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:23:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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": "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/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.6.21", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.5.0 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.6-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/9.6.21" + }, + "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-09-19T10:50:18+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.4", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", + "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2" + }, + "suggest": { + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-pdo-sqlite": "The doc command requires SQLite to work.", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.12.x-dev" + }, + "bamarni-bin": { + "bin-links": false, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info", + "homepage": "http://justinhileman.com" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "http://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + }, + "time": "2024-06-10T01:18:23+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-11-13T13:48:05+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "roave/infection-static-analysis-plugin", + "version": "1.35.0", + "source": { + "type": "git", + "url": "https://github.com/Roave/infection-static-analysis-plugin.git", + "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/3cb32845c5f758913a4b9eafd91ae18eafc26d82", + "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "infection/infection": "0.27.10", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "sanmai/later": "^0.1.4", + "vimeo/psalm": "^4.30.0 || ^5.15" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "phpunit/phpunit": "^10.5.12" + }, + "bin": [ + "bin/roave-infection-static-analysis-plugin" + ], + "type": "library", + "autoload": { + "psr-4": { + "Roave\\InfectionStaticAnalysis\\": "src/Roave/InfectionStaticAnalysis" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Static analysis on top of mutation testing - prevents escaped mutants from being invalid according to static analysis", + "support": { + "issues": "https://github.com/Roave/infection-static-analysis-plugin/issues", + "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.35.0" + }, + "time": "2024-03-10T11:55:48+00:00" + }, + { + "name": "roave/security-advisories", + "version": "dev-latest", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "4b6b927472278272e2411f4341dba95d96c8c7d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4b6b927472278272e2411f4341dba95d96c8c7d7", + "reference": "4b6b927472278272e2411f4341dba95d96c8c7d7", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.3.10", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.04.6", + "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", + "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9", + "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "airesvsg/acf-to-rest-api": "<=3.1", + "akaunting/akaunting": "<2.1.13", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amazing/media2click": ">=1,<1.3.3", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<=1.7.2|>=2,<=2.1", + "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "apache-solr-for-typo3/solr": "<2.8.3", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", + "area17/twill": "<1.2.5|>=2,<2.5.3", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "auth0/wordpress": "<=4.6", + "automad/automad": "<2.0.0.0-alpha5", + "automattic/jetpack": "<9.8", + "awesome-support/awesome-support": "<=6.0.7", + "aws/aws-sdk-php": "<3.288.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "backpack/crud": "<3.4.9", + "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", + "badaso/core": "<2.7", + "bagisto/bagisto": "<2.1", + "barrelstrength/sprout-base-email": "<1.2.7", + "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<5.0.9", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bbpress/bbpress": "<2.6.5", + "bcosca/fatfree": "<3.7.2", + "bedita/bedita": "<4", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<=3.1.4", + "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "blueimp/jquery-file-upload": "==6.4.4", + "bmarshall511/wordpress_zero_spam": "<5.2.13", + "bolt/bolt": "<3.7.2", + "bolt/core": "<=4.2", + "born05/craft-twofactorauthentication": "<3.3.4", + "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.17", + "brightlocal/phpwhois": "<=4.2.5", + "brotkrueml/codehighlight": "<2.7", + "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", + "brotkrueml/typo3-matomo-integration": "<1.3.2", + "buddypress/buddypress": "<7.2.1", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", + "causal/oidc": "<2.1", + "cecil/cecil": "<7.47.1", + "centreon/centreon": "<22.10.15", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", + "ckeditor/ckeditor": "<4.24", + "cockpit-hq/cockpit": "<2.7|==2.7", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.4.7", + "codeigniter4/shield": "<1.0.0.0-beta8", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", + "concrete5/concrete5": "<9.3.4", + "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": "<3.5.39", + "contao/core-bundle": "<4.13.49|>=5,<5.3.15|>=5.4,<5.4.3", + "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "corveda/phpsandbox": "<1.3.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<4.6.2|>=5,<=5.2.2", + "croogo/croogo": "<4", + "cuyz/valinor": "<0.12", + "czim/file-handling": "<1.5|>=2,<2.3", + "czproject/git-php": "<4.0.3", + "damienharper/auditor-bundle": "<5.2.6", + "dapphp/securimage": "<3.6.6", + "darylldoyle/safe-svg": "<1.9.10", + "datadog/dd-trace": ">=0.30,<0.30.2", + "datatables/datatables": "<1.10.10", + "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "dcat/laravel-admin": "<=2.1.3", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", + "desperado/xml-bundle": "<=0.1.7", + "devgroup/dotplant": "<2020.09.14-dev", + "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "doctrine/annotations": "<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": "<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<0.7.2", + "doctrine/mongodb-odm": "<1.0.2", + "doctrine/mongodb-odm-bundle": "<3.0.1", + "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<19.0.2", + "dompdf/dompdf": "<2.0.4", + "doublethreedigital/guest-entries": "<3.1.2", + "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.1.8|>=10.2,<10.2.2|==11.9999999.9999999.9999999-dev", + "drupal/core-recommended": "==11.9999999.9999999.9999999-dev", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4|==11.9999999.9999999.9999999-dev", + "duncanmcclean/guest-entries": "<3.1.2", + "dweeves/magmi": "<=0.7.24", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", + "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", + "egroupware/egroupware": "<23.1.20240624", + "elefant/cms": "<2.0.7", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "elijaa/phpmemcacheadmin": "<=1.3", + "encore/laravel-admin": "<=1.8.19", + "endroid/qr-code-bundle": "<3.4.2", + "enhavo/enhavo-app": "<=0.13.1", + "enshrined/svg-sanitize": "<0.15", + "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", + "evolutioncms/evolution": "<=3.2.3", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", + "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.08", + "fastly/magento2": "<1.2.26", + "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=2.1.1", + "fenom/fenom": "<=2.12.1", + "filegator/filegator": "<7.8", + "filp/whoops": "<2.1.13", + "fineuploader/php-traditional-server": "<=1.2.2", + "firebase/php-jwt": "<6", + "fisharebest/webtrees": "<=2.1.18", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.5", + "flarum/flarum": "<0.1.0.0-beta8", + "flarum/framework": "<1.8.5", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "floriangaerber/magnesium": "<0.3.1", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/upload": "<1.2.3", + "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", + "fooman/tcpdf": "<6.2.22", + "forkcms/forkcms": "<5.11.1", + "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<=11.5.1", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "friendsofsymfony/oauth2-php": "<1.3", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1,<1.3.5", + "friendsofsymfony1/swiftmailer": ">=4,<5.4.13|>=6,<6.2.5", + "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", + "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", + "froxlor/froxlor": "<=2.2.0.0-RC3", + "frozennode/administrator": "<=5.0.12", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", + "getgrav/grav": "<1.7.46", + "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3", + "getkirby/kirby": "<=2.5.12", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.15.4", + "gleez/cms": "<=1.3|==2", + "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", + "google/protobuf": "<3.15", + "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gree/jose": "<2.2.1", + "gregwar/rst": "<1.0.3", + "grumpydictator/firefly-iii": "<6.1.17", + "gugoan/economizzer": "<=0.9.0.0-beta1", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", + "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", + "ibexa/post-install": "<=1.0.4", + "ibexa/solr": ">=4.5,<4.5.4", + "ibexa/user": ">=4,<4.4.3", + "icecoder/icecoder": "<=8.1", + "idno/known": "<=1.3.1", + "ilicmiljan/secure-props": ">=1.2,<1.2.2", + "illuminate/auth": "<5.5.10", + "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", + "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", + "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "imdbphp/imdbphp": "<=5.1.1", + "impresscms/impresscms": "<=1.4.5", + "impresspages/impresspages": "<=1.0.12", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "in2code/ipandlanguageredirect": "<5.1.2", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.4.1", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<4.2.2", + "inter-mediator/inter-mediator": "==5.5", + "ipl/web": "<0.10.1", + "islandora/islandora": ">=2,<2.4.1", + "ivankristianto/phpwhois": "<=4.3", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", + "james-heinrich/phpthumb": "<1.7.12", + "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.3.3", + "johnbillion/wp-crontrol": "<1.16.2", + "joomla/application": "<1.0.13", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", + "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", + "jsdecena/laracom": "<2.0.9", + "jsmitty12/phpwhois": "<5.1", + "juzaweb/cms": "<=3.4", + "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", + "kevinpapst/kimai2": "<1.16.7", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<=2.20.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<=1.4.2", + "kohana/core": "<3.3.3", + "krayin/laravel-crm": "<1.2.2", + "kreait/firebase-php": ">=3.2,<3.8.1", + "kumbiaphp/kumbiapp": "<=1.1.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", + "laminas/laminas-http": "<2.14.2", + "laravel/fortify": "<1.11.1", + "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/laravel": ">=5.4,<5.4.22", + "laravel/socialite": ">=1,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=9|==10.1", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", + "league/commonmark": "<0.18.3", + "league/flysystem": "<1.1.4|>=2,<2.1.1", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "libreform/libreform": ">=2,<=2.0.8", + "librenms/librenms": "<2017.08.18", + "liftkit/database": "<2.13.2", + "lightsaml/lightsaml": "<1.3.5", + "limesurvey/limesurvey": "<3.27.19", + "livehelperchat/livehelperchat": "<=3.91", + "livewire/livewire": ">2.2.4,<2.2.6|>=3.3.5,<3.4.9", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", + "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch9|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch7|==2.4.7|>=2.4.7.0-patch1,<2.4.7.0-patch2", + "magento/core": "<=1.9.4.5", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magneto/core": "<1.9.4.4-dev", + "maikuolan/phpmussel": ">=1,<1.6", + "mainwp/mainwp": "<=4.4.3.3", + "mantisbt/mantisbt": "<2.26.2", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.4.13|>=5,<5.1.1", + "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mdanter/ecc": "<2", + "mediawiki/core": "<1.36.2", + "mediawiki/matomo": "<2.4.3", + "mediawiki/semantic-media-wiki": "<4.0.2", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", + "microsoft/microsoft-graph-beta": "<2.0.1", + "microsoft/microsoft-graph-core": "<2.0.2", + "microweber/microweber": "<=2.0.16", + "mikehaertl/php-shellcommand": "<1.6.1", + "miniorange/miniorange-saml": "<1.4.3", + "mittwald/typo3_forum": "<1.2.1", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<=2.8.3.0-patch", + "mojo42/jirafeau": "<4.4", + "mongodb/mongodb": ">=1,<1.9.2", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.3.5|>=4.4.0.0-beta,<4.4.1", + "mos/cimage": "<0.7.19", + "movim/moxl": ">=0.8,<=0.10", + "movingbytes/social-network": "<=1.2.1", + "mpdf/mpdf": "<=7.1.7", + "munkireport/comment": "<4.1", + "munkireport/managedinstalls": "<2.6", + "munkireport/munki_facts": "<1.5", + "munkireport/munkireport": ">=2.5.3,<5.6.3", + "munkireport/reportdata": "<3.5", + "munkireport/softwareupdate": "<1.6", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "nategood/httpful": "<1", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.04", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": "<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", + "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", + "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<3.0.10", + "nonfiction/nterchange": "<4.1.1", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "novaksolutions/infusionsoft-php-sdk": "<1", + "nukeviet/nukeviet": "<4.5.02", + "nyholm/psr7": "<1.6.1", + "nystudio107/craft-seomatic": "<3.4.12", + "nzedb/nzedb": "<0.8", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/backend": "<1.1.2", + "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", + "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "omeka/omeka-s": "<4.0.3", + "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", + "opencart/opencart": ">=0", + "openid/php-openid": "<2.3", + "openmage/magento-lts": "<20.10.1", + "opensolutions/vimbadmin": "<=3.0.15", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", + "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/crm-call-bundle": ">=4.2,<=4.2.5|>=5,<5.0.4|>=5.1,<5.1.1", + "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", + "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", + "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": "<3", + "pagekit/pagekit": "<=1.0.18", + "paragonie/ecc": "<2.0.1", + "paragonie/random_compat": "<2", + "passbolt/passbolt_api": "<4.6.2", + "paypal/adaptivepayments-sdk-php": "<=3.9.2", + "paypal/invoice-sdk-php": "<=3.9", + "paypal/merchant-sdk-php": "<3.12", + "paypal/permissions-sdk-php": "<=3.9.1", + "pear/archive_tar": "<1.4.14", + "pear/auth": "<1.2.4", + "pear/crypt_gpg": "<1.6.7", + "pear/pear": "<=1.10.1", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", + "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", + "phenx/php-svg-lib": "<0.5.2", + "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": "<3.2.10|>=3.3,<3.3.1", + "phpems/phpems": ">=6,<=6.1.3", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", + "phpmailer/phpmailer": "<6.5", + "phpmussel/phpmussel": ">=1,<1.6", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpoffice/common": "<0.2.9", + "phpoffice/phpexcel": "<1.8", + "phpoffice/phpspreadsheet": "<1.29.1|>=2,<2.1.1|>=2.2,<2.2.1", + "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpservermon/phpservermon": "<3.6", + "phpsysinfo/phpsysinfo": "<3.4.3", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.5.4", + "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/data-hub": "<1.2.4", + "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", + "pimcore/demo": "<10.3", + "pimcore/ecommerce-framework-bundle": "<1.0.10", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<11.2.4", + "pixelfed/pixelfed": "<0.11.11", + "plotly/plotly.js": "<2.25.2", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", + "pressbooks/pressbooks": "<5.18", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockreassurance": "<=5.1.3", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", + "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": "<8.1.6", + "prestashop/productcomments": "<5.0.2", + "prestashop/ps_emailsubscription": "<2.6.1", + "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", + "processwire/processwire": "<=3.0.229", + "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.11.6", + "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", + "ptrofimov/beanstalk_console": "<1.7.14", + "pubnub/pubnub": "<6.1", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", + "pyrocms/pyrocms": "<=3.9.1", + "qcubed/qcubed": "<=3.1.1", + "quickapps/cms": "<=2.0.0.0-beta2", + "rainlab/blog-plugin": "<1.4.1", + "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", + "redaxo/source": "<=5.15.1", + "remdex/livehelperchat": "<4.29", + "reportico-web/reportico": "<=8.1", + "rhukster/dom-sanitizer": "<1.0.7", + "rmccue/requests": ">=1.6,<1.8", + "robrichards/xmlseclibs": ">=1,<3.0.4", + "roots/soil": "<4.1", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", + "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", + "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.17", + "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", + "shopxo/shopxo": "<=6.1", + "showdoc/showdoc": "<2.10.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", + "silverstripe/comments": ">=1.3,<3.1.1", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": "<5.2.16", + "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "silverstripe/reports": "<5.2.3", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4|>=2.1,<2.1.2", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", + "silverstripe/subsites": ">=2,<2.6.1", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", + "silverstripe/userforms": "<3|>=5,<5.4.2", + "silverstripe/versioned-admin": ">=1,<1.11.1", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-security": "==1.6.11", + "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<4.5.3|>=5,<5.1.1", + "snipe/snipe-it": "<6.4.2", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spatie/image-optimizer": "<1.7.3", + "spipu/html2pdf": "<5.2.8", + "spoon/library": "<1.4.1", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<24.05.1", + "statamic/cms": "<4.46|>=5.3,<5.6.2", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<=2.1.64", + "studiomitte/friendlycaptcha": "<0.1.4", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "sukohi/surpass": "<1", + "sulu/form-bundle": ">=2,<2.5.3", + "sulu/sulu": "<1.6.44|>=2,<2.4.17|>=2.5,<2.5.13", + "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", + "swag/paypal": "<5.4.4", + "swiftmailer/swiftmailer": "<6.2.5", + "swiftyedit/swiftyedit": "<1.2", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "symbiote/silverstripe-multivaluefield": ">=3,<3.1", + "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0", + "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", + "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", + "symfony/mime": ">=4.3,<4.3.8", + "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/translation": ">=2,<2.0.17", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", + "symfony/ux-autocomplete": "<2.11.2", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/webhook": ">=6.3,<6.3.8", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symphonycms/symphony-2": "<2.6.4", + "t3/dce": "<0.11.5|>=2.2,<2.6.2", + "t3g/svg-sanitizer": "<1.0.3", + "t3s/content-consent": "<1.0.3|>=2,<2.0.2", + "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", + "tecnickcom/tcpdf": "<=6.7.4", + "terminal42/contao-tablelookupwizard": "<3.3.5", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<6.0.8", + "thorsten/phpmyfaq": "<3.2.2", + "tikiwiki/tiki-manager": "<=17.1", + "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", + "tinymce/tinymce": "<7.2", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "torrentpier/torrentpier": "<=2.4.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tribalsystems/zenario": "<9.5.60602", + "truckersmp/phpwhois": "<=4.3.1", + "ttskch/pagination-service-provider": "<1", + "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", + "twig/twig": "<1.44.8|>=2,<2.16.1|>=3,<3.11.1|>=3.12,<3.14", + "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", + "ua-parser/uap-php": "<3.8", + "uasoft-indonesia/badaso": "<=2.9.7", + "unisharp/laravel-filemanager": "<2.6.4", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", + "uvdesk/core-framework": "<=1.1.1", + "vanilla/safecurl": "<0.9.2", + "verbb/comments": "<1.5.5", + "verbb/formie": "<2.1.6", + "verbb/image-resizer": "<2.0.9", + "verbb/knock-knock": "<1.2.8", + "verot/class.upload.php": "<=2.1.6", + "villagedefrance/opencart-overclocked": "<=1.11.1", + "vova07/yii2-fileapi-widget": "<0.1.9", + "vrana/adminer": "<4.8.1", + "vufind/vufind": ">=2,<9.1.1", + "waldhacker/hcaptcha": "<2.1.2", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<2.6.7", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", + "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-feet/coastercms": "==5.5", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", + "webcoast/deferred-image-processing": "<1.0.2", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "winter/wn-backend-module": "<1.2.4", + "winter/wn-dusk-plugin": "<2.1", + "winter/wn-system-module": "<1.2.4", + "wintercms/winter": "<=1.2.3", + "wireui/wireui": "<1.19.3|>=2,<2.1.3", + "woocommerce/woocommerce": "<6.6|>=8.8,<8.8.5|>=8.9,<8.9.3", + "wp-cli/wp-cli": ">=0.12,<2.5", + "wp-graphql/wp-graphql": "<=1.14.5", + "wp-premium/gravityforms": "<2.4.21", + "wpanel/wpanel4-cms": "<=4.3.1", + "wpcloud/wp-stateless": "<3.2", + "wpglobus/wpglobus": "<=1.9.6", + "wwbn/avideo": "<14.3", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", + "yab/quarx": "<2.4.5", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<=6.4", + "yidashi/yii2cmf": "<=2", + "yii2mod/yii2-cms": "<1.9.2", + "yiisoft/yii": "<1.1.29", + "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii2-authclient": "<2.2.15", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-elasticsearch": "<2.0.5", + "yiisoft/yii2-gii": "<=2.2.4", + "yiisoft/yii2-jui": "<2.0.4", + "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", + "yuan1994/tpadmin": "<=1.3.12", + "zencart/zencart": "<=1.5.7.0-beta", + "zendesk/zendesk_api_client_php": "<2.2.11", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-db": "<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": "<2.8.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": "<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": "<=3", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": "<2.0.2", + "zendframework/zendrest": "<2.0.2", + "zendframework/zendservice-amazon": "<2.0.3", + "zendframework/zendservice-api": "<1", + "zendframework/zendservice-audioscrobbler": "<2.0.2", + "zendframework/zendservice-nirvanix": "<2.0.2", + "zendframework/zendservice-slideshare": "<2.0.2", + "zendframework/zendservice-technorati": "<2.0.2", + "zendframework/zendservice-windowsazure": "<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zenstruck/collection": "<0.2.1", + "zetacomponents/mail": "<1.8.2", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<=6.1.53" + }, + "default-branch": true, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + }, + { + "name": "Ilya Tribusean", + "email": "slash3b@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2024-09-19T17:04:43+00:00" + }, + { + "name": "sanmai/later", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://github.com/sanmai/later.git", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", + "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", + "shasum": "" + }, + "require": { + "php": ">=7.4" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.35.1", + "infection/infection": ">=0.27.6", + "phan/phan": ">=2", + "php-coveralls/php-coveralls": "^2.0", + "phpstan/phpstan": ">=1.4.5", + "phpunit/phpunit": ">=9.5 <10", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Later\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "Later: deferred wrapper object", + "support": { + "issues": "https://github.com/sanmai/later/issues", + "source": "https://github.com/sanmai/later/tree/0.1.4" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2023-10-24T00:25:28+00:00" + }, + { + "name": "sanmai/pipeline", + "version": "v6.11", + "source": { + "type": "git", + "url": "https://github.com/sanmai/pipeline.git", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.8", + "friendsofphp/php-cs-fixer": "^3.17", + "infection/infection": ">=0.10.5", + "league/pipeline": "^0.3 || ^1.0", + "phan/phan": ">=1.1", + "php-coveralls/php-coveralls": "^2.4.1", + "phpstan/phpstan": ">=0.10", + "phpunit/phpunit": ">=9.4", + "vimeo/psalm": ">=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v6.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Pipeline\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Alexey Kopytko", + "email": "alexey@kopytko.com" + } + ], + "description": "General-purpose collections pipeline", + "support": { + "issues": "https://github.com/sanmai/pipeline/issues", + "source": "https://github.com/sanmai/pipeline/tree/v6.11" + }, + "funding": [ + { + "url": "https://github.com/sanmai", + "type": "github" + } + ], + "time": "2024-06-15T03:11:19+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:27:43+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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 calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:19:30+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-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", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:30:58+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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": "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", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:33:00+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T06:35:11+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.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", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T06:20:34+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.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": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-14T16:00:52+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "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": "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/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/phpunit-watcher", + "version": "1.23.6", + "source": { + "type": "git", + "url": "https://github.com/spatie/phpunit-watcher.git", + "reference": "c192fff763810c8378511bcf0069df4b91478866" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/phpunit-watcher/zipball/c192fff763810c8378511bcf0069df4b91478866", + "reference": "c192fff763810c8378511bcf0069df4b91478866", + "shasum": "" + }, + "require": { + "clue/stdio-react": "^2.4", + "jolicode/jolinotif": "^2.2", + "php": "^7.2 | ^8.0 | ^8.1", + "symfony/console": "^5 | ^6", + "symfony/finder": "^5.4 | ^6", + "symfony/process": "^5.4 | ^6", + "symfony/yaml": "^5.2 | ^6", + "yosymfony/resource-watcher": "^2.0 | ^3.0" + }, + "conflict": { + "symfony/console": "<5.2", + "yosymfony/resource-watcher": "<2.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.6 | ^9.0" + }, + "bin": [ + "phpunit-watcher" + ], + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\PhpUnitWatcher\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Automatically rerun PHPUnit tests when source code changes", + "homepage": "https://github.com/spatie/phpunit-watcher", + "keywords": [ + "phpunit-watcher", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/phpunit-watcher/issues", + "source": "https://github.com/spatie/phpunit-watcher/tree/1.23.6" + }, + "time": "2022-01-31T11:57:13+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v6.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/62ab90b92066ef6cce5e79365625b4b1432464c8", + "reference": "62ab90b92066ef6cce5e79365625b4b1432464c8", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/dom-crawler": "^5.4|^6.0|^7.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "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": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v6.4.8" + }, + "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-05-31T14:49:08+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.1.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.1.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": "2024-05-31T14:57:53+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v6.4.12", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9d307ecbcb917001692be333cdc58f474fdb37f0", + "reference": "9d307ecbcb917001692be333cdc58f474fdb37f0", + "shasum": "" + }, + "require": { + "masterminds/html5": "^2.6", + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "^5.4|^6.0|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "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 DOM navigation for HTML and XML documents", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.12" + }, + "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-09-15T06:35:36+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", + "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.1.5" + }, + "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-09-17T09:16:35+00:00" + }, + { + "name": "thecodingmachine/safe", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/thecodingmachine/safe.git", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^3.2", + "thecodingmachine/phpstan-strict-rules": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "files": [ + "deprecated/apc.php", + "deprecated/array.php", + "deprecated/datetime.php", + "deprecated/libevent.php", + "deprecated/misc.php", + "deprecated/password.php", + "deprecated/mssql.php", + "deprecated/stats.php", + "deprecated/strings.php", + "lib/special_cases.php", + "deprecated/mysqli.php", + "generated/apache.php", + "generated/apcu.php", + "generated/array.php", + "generated/bzip2.php", + "generated/calendar.php", + "generated/classobj.php", + "generated/com.php", + "generated/cubrid.php", + "generated/curl.php", + "generated/datetime.php", + "generated/dir.php", + "generated/eio.php", + "generated/errorfunc.php", + "generated/exec.php", + "generated/fileinfo.php", + "generated/filesystem.php", + "generated/filter.php", + "generated/fpm.php", + "generated/ftp.php", + "generated/funchand.php", + "generated/gettext.php", + "generated/gmp.php", + "generated/gnupg.php", + "generated/hash.php", + "generated/ibase.php", + "generated/ibmDb2.php", + "generated/iconv.php", + "generated/image.php", + "generated/imap.php", + "generated/info.php", + "generated/inotify.php", + "generated/json.php", + "generated/ldap.php", + "generated/libxml.php", + "generated/lzf.php", + "generated/mailparse.php", + "generated/mbstring.php", + "generated/misc.php", + "generated/mysql.php", + "generated/network.php", + "generated/oci8.php", + "generated/opcache.php", + "generated/openssl.php", + "generated/outcontrol.php", + "generated/pcntl.php", + "generated/pcre.php", + "generated/pgsql.php", + "generated/posix.php", + "generated/ps.php", + "generated/pspell.php", + "generated/readline.php", + "generated/rpminfo.php", + "generated/rrd.php", + "generated/sem.php", + "generated/session.php", + "generated/shmop.php", + "generated/sockets.php", + "generated/sodium.php", + "generated/solr.php", + "generated/spl.php", + "generated/sqlsrv.php", + "generated/ssdeep.php", + "generated/ssh2.php", + "generated/stream.php", + "generated/strings.php", + "generated/swoole.php", + "generated/uodbc.php", + "generated/uopz.php", + "generated/url.php", + "generated/var.php", + "generated/xdiff.php", + "generated/xml.php", + "generated/xmlrpc.php", + "generated/yaml.php", + "generated/yaz.php", + "generated/zip.php", + "generated/zlib.php" + ], + "classmap": [ + "lib/DateTime.php", + "lib/DateTimeImmutable.php", + "lib/Exceptions/", + "deprecated/Exceptions/", + "generated/Exceptions/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHP core functions that throw exceptions instead of returning FALSE on error", + "support": { + "issues": "https://github.com/thecodingmachine/safe/issues", + "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" + }, + "time": "2023-04-05T11:54:14+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:36:25+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.30.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "reference": "d0bc6e25d89f649e4f36a534f330f8bb4643dd69", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4.2", + "amphp/byte-stream": "^1.5", + "composer/package-versions-deprecated": "^1.8.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0", + "dnoegel/php-xdg-base-dir": "^0.1.1", + "ext-ctype": "*", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "felixfbecker/advanced-json-rpc": "^3.0.3", + "felixfbecker/language-server-protocol": "^1.5", + "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", + "nikic/php-parser": "^4.13", + "openlss/lib-array2xml": "^1.0", + "php": "^7.1|^8", + "sebastian/diff": "^3.0 || ^4.0", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0", + "symfony/polyfill-php80": "^1.25", + "webmozart/path-util": "^2.3" + }, + "provide": { + "psalm/psalm": "self.version" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "brianium/paratest": "^4.0||^6.0", + "ext-curl": "*", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpdocumentor/reflection-docblock": "^5", + "phpmyadmin/sql-parser": "5.1.0||dev-master", + "phpspec/prophecy": ">=1.9.0", + "phpstan/phpdoc-parser": "1.2.* || 1.6.4", + "phpunit/phpunit": "^9.0", + "psalm/plugin-phpunit": "^0.16", + "slevomat/coding-standard": "^7.0", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.3 || ^5.0 || ^6.0", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-curl": "In order to send data to shepherd", + "ext-igbinary": "^2.0.5 is required, used to serialize caching data" + }, + "bin": [ + "psalm", + "psalm-language-server", + "psalm-plugin", + "psalm-refactor", + "psalter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev", + "dev-3.x": "3.x-dev", + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Brown" + } + ], + "description": "A static analysis tool for finding errors in PHP applications", + "keywords": [ + "code", + "inspection", + "php" + ], + "support": { + "issues": "https://github.com/vimeo/psalm/issues", + "source": "https://github.com/vimeo/psalm/tree/4.30.0" + }, + "time": "2022-11-06T20:37:08+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" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "support": { + "issues": "https://github.com/webmozart/path-util/issues", + "source": "https://github.com/webmozart/path-util/tree/2.3.0" + }, + "abandoned": "symfony/filesystem", + "time": "2015-12-17T08:42:14+00:00" + }, + { + "name": "yiisoft/active-record", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/active-record.git", + "reference": "5c4151d74fc8025261b0d3921f649513261a0144" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/active-record/zipball/5c4151d74fc8025261b0d3921f649513261a0144", + "reference": "5c4151d74fc8025261b0d3921f649513261a0144", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.1", + "yiisoft/db": "dev-master" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^10.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.34", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/aliases": "^2.0", + "yiisoft/arrays": "^3.1", + "yiisoft/cache": "^3.0", + "yiisoft/db-sqlite": "dev-master", + "yiisoft/di": "^1.0", + "yiisoft/factory": "^1.2", + "yiisoft/json": "^1.0", + "yiisoft/middleware-dispatcher": "^5.2" + }, + "suggest": { + "yiisoft/arrays": "For \\Yiisoft\\Arrays\\ArrayableInterface support", + "yiisoft/db-mssql": "For MSSQL database support", + "yiisoft/db-mysql": "For MySQL database support", + "yiisoft/db-oracle": "For Oracle database support", + "yiisoft/db-pgsql": "For PostgreSQL database support", + "yiisoft/db-sqlite": "For SQLite database support", + "yiisoft/factory": "For factory support", + "yiisoft/middleware-dispatcher": "For middleware support" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\ActiveRecord\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii ActiveRecord Library", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "Active Record", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/active-record/issues?state=open", + "source": "https://github.com/yiisoft/active-record", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-16T09:27:14+00:00" + }, + { + "name": "yiisoft/db", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/db.git", + "reference": "c765ca43af502dda2ec2aed01f368d0f15e8b290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/db/zipball/c765ca43af502dda2ec2aed01f368d0f15e8b290", + "reference": "c765ca43af502dda2ec2aed01f368d0f15e8b290", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-pdo": "*", + "php": "^8.1", + "psr/log": "^2.0|^3.0", + "psr/simple-cache": "^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^10.0", + "rector/rector": "^1.1.1", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.25", + "yiisoft/aliases": "^3.0", + "yiisoft/cache-file": "^3.1", + "yiisoft/di": "^1.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/json": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/var-dumper": "^1.5", + "yiisoft/yii-debug": "dev-master" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Db\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Database", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "database", + "dbal", + "query-builder", + "sql", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/db/issues/issues?state=open", + "source": "https://github.com/yiisoft/db", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-16T10:51:44+00:00" + }, + { + "name": "yiisoft/translator-extractor", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/translator-extractor.git", + "reference": "673bb3d79dc866f3d85d97cc49e1a9a24b2bc727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/translator-extractor/zipball/673bb3d79dc866f3d85d97cc49e1a9a24b2bc727", + "reference": "673bb3d79dc866f3d85d97cc49e1a9a24b2bc727", + "shasum": "" + }, + "require": { + "php": "^8.0", + "symfony/console": "^5.4|^6.0|^7.0", + "yiisoft/friendly-exception": "^1.0", + "yiisoft/translator": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "rector/rector": "^1.0", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6", + "yiisoft/di": "^1.0", + "yiisoft/yii-console": "^2.0" + }, + "type": "library", + "extra": { + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di-console": "di-console.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\TranslatorExtractor\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii message extractor", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "dev", + "extractor", + "i18n", + "internationalization" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "irc://irc.freenode.net/yii", + "issues": "https://github.com/yiisoft/translator-extractor/issues?state=open", + "source": "https://github.com/yiisoft/translator-extractor", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "open_collective" + } + ], + "time": "2024-02-13T13:39:33+00:00" + }, + { + "name": "yiisoft/yii-debug-viewer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-debug-viewer.git", + "reference": "89f2704b5ae8aa8e188732c3dd4a8947a2cad774" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-debug-viewer/zipball/89f2704b5ae8aa8e188732c3dd4a8947a2cad774", + "reference": "89f2704b5ae8aa8e188732c3dd4a8947a2cad774", + "shasum": "" + }, + "require": { + "nyholm/psr7": "^1.3", + "php": "^8.0", + "psr/http-message": "^1.1", + "psr/http-server-handler": "^1.0", + "psr/http-server-middleware": "^1.0", + "yiisoft/assets": "^4.0", + "yiisoft/data-response": "^2.0", + "yiisoft/http": "^1.1", + "yiisoft/router": "^3.1", + "yiisoft/view": "^10.0", + "yiisoft/yii-view-renderer": "^7.1" + }, + "require-dev": { + "httpsoft/http-message": "^1.0.5", + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "psr/http-factory": "^1.0", + "psr/log": "^2.0|^3.0", + "rector/rector": "^0.15.1", + "roave/infection-static-analysis-plugin": "^1.21", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.18", + "yiisoft/aliases": "^3.0", + "yiisoft/config": "^1.0", + "yiisoft/di": "^1.1", + "yiisoft/error-handler": "^3.0", + "yiisoft/factory": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/injector": "^1.0", + "yiisoft/log": "^2.0", + "yiisoft/log-target-file": "^3.0", + "yiisoft/router-fastroute": "^3.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-event": "^2.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin-environments": { + "yii-debug-viewer-app": { + "params": [ + "app/params.php" + ], + "di": "app/di.php", + "di-console": "$di", + "di-web": [ + "$di", + "app/web.php" + ], + "events": [], + "events-web": "$events", + "events-console": "$events", + "di-providers": [], + "di-providers-web": "$di-providers", + "di-providers-console": "$di-providers", + "routes": [], + "bootstrap": [], + "bootstrap-web": "$bootstrap", + "bootstrap-console": "$bootstrap" + } + }, + "config-plugin": { + "di-web": "di-web.php", + "params": "params.php", + "routes": "routes.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Debug\\Viewer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Debug Viewer", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "debug", + "dev", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-debug-viewer/issues?state=open", + "source": "https://github.com/yiisoft/yii-debug-viewer", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-06T13:05:25+00:00" + }, + { + "name": "yiisoft/yii-gii", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-gii.git", + "reference": "cf2f56d5d3a0a8fb00636da24ba13df3a1082350" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-gii/zipball/cf2f56d5d3a0a8fb00636da24ba13df3a1082350", + "reference": "cf2f56d5d3a0a8fb00636da24ba13df3a1082350", + "shasum": "" + }, + "require": { + "httpsoft/http-basis": "^1.1", + "php": "^8.1", + "phpspec/php-diff": "^1.1.3", + "psr/http-message": "^1.0|^2.0", + "symfony/console": "^6.0|^7.0", + "yiisoft/active-record": "dev-master", + "yiisoft/aliases": "^3.0", + "yiisoft/arrays": "^2.1|^3.0", + "yiisoft/csrf": "^2.1.1", + "yiisoft/data-response": "^2.0", + "yiisoft/db": "*", + "yiisoft/friendly-exception": "^1.1", + "yiisoft/http": "^1.2", + "yiisoft/hydrator": "^1.0", + "yiisoft/injector": "^1.1", + "yiisoft/input-http": "^1.0", + "yiisoft/json": "^1.0", + "yiisoft/router": "^3.0", + "yiisoft/strings": "^2.1", + "yiisoft/validator": "^2.0", + "yiisoft/yii-console": "^2.0", + "yiisoft/yii-middleware": "^1.0" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.0", + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.5", + "phpunit/phpunit": "^10.2", + "rector/rector": "^1.2", + "roave/infection-static-analysis-plugin": "^1.23", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^5.13", + "yiisoft/cache": "^3.0", + "yiisoft/db-sqlite": "dev-master", + "yiisoft/di": "^1.1", + "yiisoft/dummy-provider": "^1.0", + "yiisoft/event-dispatcher": "^1.0", + "yiisoft/files": "^2.0", + "yiisoft/log": "^2.0", + "yiisoft/translator": "^3.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + }, + "config-plugin-options": { + "source-directory": "config" + }, + "config-plugin": { + "params": "params.php", + "di": "di.php", + "routes": "routes.php" + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Gii\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Yii Framework Code Generator Extension", + "keywords": [ + "code generator", + "dev", + "gii", + "yii" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-gii/issues?state=open", + "source": "https://github.com/yiisoft/yii-gii", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-09-19T05:22:18+00:00" + }, + { + "name": "yiisoft/yii-testing", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/yiisoft/yii-testing.git", + "reference": "d90cce1c6f33990ad2a0f9e7781da88202a57229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yiisoft/yii-testing/zipball/d90cce1c6f33990ad2a0f9e7781da88202a57229", + "reference": "d90cce1c6f33990ad2a0f9e7781da88202a57229", + "shasum": "" + }, + "require": { + "php": "^8.0", + "phpunit/phpunit": "^9.5", + "psr/container": "^2.0", + "psr/http-message": "^1.0|^2.0", + "yiisoft/config": "^1.1", + "yiisoft/di": "^1.1", + "yiisoft/error-handler": "^3.0", + "yiisoft/yii-http": "^1.0", + "yiisoft/yii-runner": "^2.0", + "yiisoft/yii-runner-console": "^2.0", + "yiisoft/yii-runner-http": "^2.0" + }, + "require-dev": { + "maglnet/composer-require-checker": "^4.2", + "nyholm/psr7": "^1.5", + "rector/rector": "^0.15.2", + "roave/infection-static-analysis-plugin": "^1.16", + "spatie/phpunit-watcher": "^1.23", + "vimeo/psalm": "^4.30|^5.6" + }, + "default-branch": true, + "type": "library", + "extra": { + "config-plugin-options": { + "build-merge-plan": false + } + }, + "autoload": { + "psr-4": { + "Yiisoft\\Yii\\Testing\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "yii-testing", + "homepage": "https://www.yiiframework.com/", + "keywords": [ + "testing", + "yii3" + ], + "support": { + "chat": "https://t.me/yii3en", + "forum": "https://www.yiiframework.com/forum/", + "irc": "ircs://irc.libera.chat:6697/yii", + "issues": "https://github.com/yiisoft/yii-testing/issues?state=open", + "source": "https://github.com/yiisoft/yii-testing", + "wiki": "https://www.yiiframework.com/wiki/" + }, + "funding": [ + { + "url": "https://github.com/sponsors/yiisoft", + "type": "github" + }, + { + "url": "https://opencollective.com/yiisoft", + "type": "opencollective" + } + ], + "time": "2024-06-04T07:04:12+00:00" + }, + { + "name": "yosymfony/resource-watcher", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/yosymfony/resource-watcher.git", + "reference": "2f197cee0231c06db865d4ad2d8d7cd3faead2f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yosymfony/resource-watcher/zipball/2f197cee0231c06db865d4ad2d8d7cd3faead2f8", + "reference": "2f197cee0231c06db865d4ad2d8d7cd3faead2f8", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "symfony/finder": "^2.7|^3.0|^4.0|^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7", + "symfony/filesystem": "^2.7|^3.0|^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Yosymfony\\ResourceWatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Puertas", + "email": "vpgugr@gmail.com" + } + ], + "description": "A simple resource watcher using Symfony Finder", + "homepage": "http://yosymfony.com", + "keywords": [ + "finder", + "resources", + "symfony", + "watcher" + ], + "support": { + "issues": "https://github.com/yosymfony/resource-watcher/issues", + "source": "https://github.com/yosymfony/resource-watcher/tree/master" + }, + "time": "2020-06-10T14:58:36+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "cebe/markdown": 20, + "yiisoft/data": 20, + "yiisoft/data-cycle": 20, + "yiisoft/rate-limiter": 20, + "yiisoft/yii-bootstrap5": 20, + "yiisoft/yii-dataview": 20, + "yiisoft/yii-debug": 20, + "yiisoft/yii-debug-api": 20, + "roave/security-advisories": 20, + "yiisoft/yii-debug-viewer": 20, + "yiisoft/yii-gii": 20, + "yiisoft/yii-testing": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.3 <8.4", + "ext-mbstring": "*", + "ext-pdo_sqlite": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/config/.gitignore b/blog/config/.gitignore similarity index 100% rename from config/.gitignore rename to blog/config/.gitignore diff --git a/config/bootstrap-console.php b/blog/config/common/bootstrap.php similarity index 100% rename from config/bootstrap-console.php rename to blog/config/common/bootstrap.php diff --git a/config/common/cache.php b/blog/config/common/di/cache.php similarity index 100% rename from config/common/cache.php rename to blog/config/common/di/cache.php diff --git a/blog/config/common/di/cycle.php b/blog/config/common/di/cycle.php new file mode 100644 index 000000000..e6722e43e --- /dev/null +++ b/blog/config/common/di/cycle.php @@ -0,0 +1,23 @@ + static function (DatabaseManager $dbManager, Spiral\Core\FactoryInterface $factory) { + return new Factory( + $dbManager, + null, + $factory, + new DoctrineCollectionFactory() + ); + }, +]; diff --git a/blog/config/common/di/hydrator.php b/blog/config/common/di/hydrator.php new file mode 100644 index 000000000..1561583dc --- /dev/null +++ b/blog/config/common/di/hydrator.php @@ -0,0 +1,13 @@ + ContainerAttributeResolverFactory::class, + ObjectFactoryInterface::class => ContainerObjectFactory::class, +]; diff --git a/blog/config/common/di/logger.php b/blog/config/common/di/logger.php new file mode 100644 index 000000000..b49b94ba0 --- /dev/null +++ b/blog/config/common/di/logger.php @@ -0,0 +1,21 @@ + [ + 'class' => Logger::class, + '__construct()' => [ + 'targets' => ReferencesArray::from([ + FileTarget::class, + ]), + ], + ], +]; diff --git a/blog/config/common/di/psr17.php b/blog/config/common/di/psr17.php new file mode 100644 index 000000000..9787bb293 --- /dev/null +++ b/blog/config/common/di/psr17.php @@ -0,0 +1,25 @@ + RequestFactory::class, + ServerRequestFactoryInterface::class => ServerRequestFactory::class, + ResponseFactoryInterface::class => ResponseFactory::class, + StreamFactoryInterface::class => StreamFactory::class, + UriFactoryInterface::class => UriFactory::class, + UploadedFileFactoryInterface::class => UploadedFileFactory::class, +]; diff --git a/config/common/rbac.php b/blog/config/common/di/rbac.php similarity index 100% rename from config/common/rbac.php rename to blog/config/common/di/rbac.php index f5a3dafb0..9d663e583 100644 --- a/config/common/rbac.php +++ b/blog/config/common/di/rbac.php @@ -3,11 +3,11 @@ declare(strict_types=1); use Yiisoft\Access\AccessCheckerInterface; +use Yiisoft\Rbac\AssignmentsStorageInterface; +use Yiisoft\Rbac\ItemsStorageInterface; use Yiisoft\Rbac\Manager; use Yiisoft\Rbac\Php\AssignmentsStorage; use Yiisoft\Rbac\Php\ItemsStorage; -use Yiisoft\Rbac\AssignmentsStorageInterface; -use Yiisoft\Rbac\ItemsStorageInterface; /** @var array $params */ diff --git a/blog/config/common/di/router.php b/blog/config/common/di/router.php new file mode 100644 index 000000000..fcab40c46 --- /dev/null +++ b/blog/config/common/di/router.php @@ -0,0 +1,43 @@ + [ + 'class' => UrlGenerator::class, + 'setEncodeRaw()' => [$params['yiisoft/router-fastroute']['encodeRaw']], + 'setDefaultArgument()' => ['_language', 'en'], + 'reset' => function () { + $this->defaultArguments = ['_language', 'en']; + }, + ], + + RouteCollectionInterface::class => static function (RouteCollectorInterface $collector) use ($config) { + $collector + ->middleware(CsrfMiddleware::class) + ->middleware(FormatDataResponse::class) + ->addGroup( + Group::create('/{_language}')->routes(...$config->get('app-routes')), + ) + ->addGroup( + Group::create()->routes(...$config->get('routes')), + ); + + return new RouteCollection($collector); + }, +]; diff --git a/config/common/sentry.php b/blog/config/common/di/sentry.php similarity index 100% rename from config/common/sentry.php rename to blog/config/common/di/sentry.php diff --git a/blog/config/common/di/translator.php b/blog/config/common/di/translator.php new file mode 100644 index 000000000..0d140e94b --- /dev/null +++ b/blog/config/common/di/translator.php @@ -0,0 +1,24 @@ + [ + 'definition' => static function (Aliases $aliases) use ($params) { + return new CategorySource( + $params['yiisoft/translator']['defaultCategory'], + new MessageSource($aliases->get('@messages')), + new IntlMessageFormatter(), + ); + }, + 'tags' => ['translation.categorySource'], + ], +]; diff --git a/blog/config/common/di/validator.php b/blog/config/common/di/validator.php new file mode 100644 index 000000000..a77e34f7a --- /dev/null +++ b/blog/config/common/di/validator.php @@ -0,0 +1,12 @@ + RuleHandlerContainer::class, +]; diff --git a/config/params.php b/blog/config/common/params.php similarity index 80% rename from config/params.php rename to blog/config/common/params.php index eaf719b3e..bc5fa805f 100644 --- a/config/params.php +++ b/blog/config/common/params.php @@ -8,53 +8,29 @@ use App\ViewInjection\MetaTagsViewInjection; use Cycle\Database\Config\SQLite\FileConnectionConfig; use Cycle\Database\Config\SQLiteDriverConfig; +use Cycle\Schema\Provider\PhpFileSchemaProvider; use Yiisoft\Assets\AssetManager; -use Yiisoft\Cookies\CookieMiddleware; use Yiisoft\Definitions\Reference; -use Yiisoft\ErrorHandler\Middleware\ErrorCatcher; use Yiisoft\Form\Field\SubmitButton; use Yiisoft\Router\CurrentRoute; -use Yiisoft\Router\Middleware\Router; use Yiisoft\Router\UrlGeneratorInterface; -use Yiisoft\Session\SessionMiddleware; use Yiisoft\Translator\TranslatorInterface; -use Yiisoft\User\Login\Cookie\CookieLoginMiddleware; -use Yiisoft\Yii\Console\Application; -use Yiisoft\Yii\Console\Command\Serve; use Yiisoft\Yii\Cycle\Schema\Conveyor\AttributedSchemaConveyor; use Yiisoft\Yii\Cycle\Schema\Provider\FromConveyorSchemaProvider; -use Yiisoft\Yii\Cycle\Schema\Provider\PhpFileSchemaProvider; -use Yiisoft\Yii\Middleware\Locale; -use Yiisoft\Yii\Sentry\SentryMiddleware; -use Yiisoft\Yii\View\CsrfViewInjection; +use Yiisoft\Yii\View\Renderer\CsrfViewInjection; return [ - 'locale' => [ - 'locales' => ['en' => 'en-US', 'ru' => 'ru-RU', 'id' => 'id-ID', 'sk' => 'sk-SK'], - 'ignoredRequests' => [ - '/debug**', - ], - ], 'mailer' => [ 'adminEmail' => 'admin@example.com', 'senderEmail' => 'sender@example.com', ], - 'middlewares' => [ - ErrorCatcher::class, - SentryMiddleware::class, - SessionMiddleware::class, - CookieMiddleware::class, - CookieLoginMiddleware::class, - Locale::class, - Router::class, - ], 'yiisoft/aliases' => [ 'aliases' => [ - '@root' => dirname(__DIR__), + '@root' => dirname(__DIR__, 2), '@assets' => '@root/public/assets', '@assetsUrl' => '@baseUrl/assets', - '@baseUrl' => '/', + '@baseUrl' => '', '@messages' => '@resources/messages', '@npm' => '@root/node_modules', '@public' => '@root/public', @@ -68,7 +44,7 @@ ], 'yiisoft/form' => [ - 'configs' => [ + 'themes' => [ 'default' => [ 'containerClass' => 'form-floating mb-3', 'inputClass' => 'form-control', @@ -116,7 +92,7 @@ 'secretKey' => '53136271c432a1af377c3806c3112ddf', ], - 'yiisoft/yii-view' => [ + 'yiisoft/yii-view-renderer' => [ 'viewPath' => '@views', 'layout' => '@views/layout/main', 'injections' => [ @@ -128,21 +104,6 @@ ], ], - 'yiisoft/yii-console' => [ - 'name' => Application::NAME, - 'version' => Application::VERSION, - 'autoExit' => false, - 'commands' => [ - 'serve' => Serve::class, - 'user/create' => App\User\Console\CreateCommand::class, - 'user/assignRole' => App\User\Console\AssignRoleCommand::class, - 'fixture/add' => App\Command\Fixture\AddCommand::class, - 'fixture/schema/clear' => App\Command\Fixture\SchemaClearCommand::class, - 'router/list' => App\Command\Router\ListCommand::class, - 'translator/translate' => App\Command\Translation\TranslateCommand::class, - ], - ], - 'yiisoft/yii-cycle' => [ // DBAL config 'dbal' => [ @@ -188,7 +149,7 @@ * Generator\SyncTables::class, // sync table changes to database * ] * ], - * ] + * ]. */ 'schema-providers' => [ // Uncomment next line to enable a Schema caching in the common cache @@ -220,6 +181,7 @@ 'yiisoft/yii-swagger' => [ 'annotation-paths' => [ '@src/Controller', + '@src/Middleware', '@src/User/Controller', ], ], @@ -233,4 +195,8 @@ 'environment' => $_ENV['YII_ENV'] ?? null, // Add to separate "production" / "staging" environment errors. ], ], + + 'yiisoft/yii-debug-api' => [ + 'allowedIPs' => ['172.0.0.1/10'], + ], ]; diff --git a/config/rbac-rules.php b/blog/config/common/rbac-rules.php similarity index 100% rename from config/rbac-rules.php rename to blog/config/common/rbac-rules.php diff --git a/config/routes-backend.php b/blog/config/common/routes/routes-backend.php similarity index 58% rename from config/routes-backend.php rename to blog/config/common/routes/routes-backend.php index a1fa970c0..3de570cad 100644 --- a/config/routes-backend.php +++ b/blog/config/common/routes/routes-backend.php @@ -2,19 +2,21 @@ declare(strict_types=1); +use App\Backend\Controller\SiteController; +use Yiisoft\Router\Group; use Yiisoft\Router\Route; return [ - \Yiisoft\Router\Group::create('') + Group::create('') ->routes( Route::get('/') - ->action([\App\Backend\Controller\SiteController::class, 'index']) + ->action([SiteController::class, 'index']) ->name('index'), ) ->host('backend.{_host}') ->namePrefix('backend/'), Route::get('/backend') - ->action([\App\Backend\Controller\SiteController::class, 'index']) + ->action([SiteController::class, 'index']) ->name('index'), ]; diff --git a/config/routes.php b/blog/config/common/routes/routes.php similarity index 88% rename from config/routes.php rename to blog/config/common/routes/routes.php index c892ba3ed..a2a7cb58c 100644 --- a/config/routes.php +++ b/blog/config/common/routes/routes.php @@ -2,6 +2,8 @@ declare(strict_types=1); +use App\Auth\Controller\AuthController; +use App\Auth\Controller\SignupController; use App\Blog\Archive\ArchiveController; use App\Blog\BlogController; use App\Blog\CommentController; @@ -10,8 +12,6 @@ use App\Blog\Tag\TagController; use App\Contact\ContactController; use App\Controller\Actions\ApiInfo; -use App\Auth\Controller\AuthController; -use App\Auth\Controller\SignupController; use App\Controller\SiteController; use App\Middleware\AccessChecker; use App\Middleware\ApiDataWrapper; @@ -28,8 +28,10 @@ use Yiisoft\Router\CurrentRoute; use Yiisoft\Router\Group; use Yiisoft\Router\Route; +use Yiisoft\Router\UrlGeneratorInterface; use Yiisoft\Swagger\Middleware\SwaggerJson; use Yiisoft\Swagger\Middleware\SwaggerUi; +use Yiisoft\Yii\Middleware\CorsAllowAll; use Yiisoft\Yii\Middleware\HttpCache; use Yiisoft\Yii\RateLimiter\Counter; use Yiisoft\Yii\RateLimiter\LimitRequestsMiddleware; @@ -56,7 +58,7 @@ ->middleware(fn ( ResponseFactoryInterface $responseFactory, StorageInterface $storage - ) => new LimitRequestsMiddleware(new Counter($storage, 5, 5), $responseFactory)) + ) => new LimitRequestsMiddleware(new Counter($storage, 10, 10), $responseFactory)) ->action([SignupController::class, 'signup']) ->name('auth/signup'), @@ -100,11 +102,10 @@ // Blog routes Group::create('/blog') ->routes( - // Index + // Index Route::get('[/page{page:\d+}]') ->middleware( - fn (HttpCache $httpCache, PostRepository $postRepository) => - $httpCache->withLastModified(function (ServerRequestInterface $request, $params) use ($postRepository) { + fn (HttpCache $httpCache, PostRepository $postRepository) => $httpCache->withLastModified(function (ServerRequestInterface $request, $params) use ($postRepository) { return $postRepository ->getMaxUpdatedAt() ->getTimestamp(); @@ -127,9 +128,9 @@ // Post page Route::get('/page/{slug}') ->middleware( - fn (HttpCache $httpCache, PostRepository $postRepository, CurrentRoute $currentRoute) => - $httpCache->withEtagSeed(function (ServerRequestInterface $request, $params) use ($postRepository, $currentRoute) { + fn (HttpCache $httpCache, PostRepository $postRepository, CurrentRoute $currentRoute) => $httpCache->withEtagSeed(function (ServerRequestInterface $request, $params) use ($postRepository, $currentRoute) { $post = $postRepository->findBySlug($currentRoute->getArgument('slug')); + return $post->getSlug() . '-' . $post ->getUpdatedAt() ->getTimestamp(); @@ -144,7 +145,7 @@ // Archive Group::create('/archive') ->routes( - // Index page + // Index page Route::get('') ->action([ArchiveController::class, 'index']) ->name('blog/archive/index'), @@ -164,14 +165,17 @@ ), // Swagger routes - Group::create('/swagger') + Group::create('/docs') ->routes( Route::get('') ->middleware(FormatDataResponseAsHtml::class) - ->action(fn (SwaggerUi $swaggerUi) => $swaggerUi->withJsonUrl('/swagger/json-url')) + ->action(function (SwaggerUi $swaggerUi, UrlGeneratorInterface $urlGenerator) { + return $swaggerUi->withJsonUrl($urlGenerator->getUriPrefix() . '/docs/openapi.json'); + }) ->name('swagger/index'), - Route::get('/json-url') + Route::get('/openapi.json') ->middleware(FormatDataResponseAsJson::class) - ->action(SwaggerJson::class), + ->middleware(CorsAllowAll::class) + ->action([SwaggerJson::class, 'process']), ), ]; diff --git a/blog/config/console/commands.php b/blog/config/console/commands.php new file mode 100644 index 000000000..61f564648 --- /dev/null +++ b/blog/config/console/commands.php @@ -0,0 +1,15 @@ + Serve::class, + 'user/create' => App\User\Console\CreateCommand::class, + 'user/assignRole' => App\User\Console\AssignRoleCommand::class, + 'fixture/add' => App\Command\Fixture\AddCommand::class, + 'fixture/schema/clear' => App\Command\Fixture\SchemaClearCommand::class, + 'router/list' => App\Command\Router\ListCommand::class, + 'translator/translate' => App\Command\Translation\TranslateCommand::class, +]; diff --git a/config/console/translator-extractor.php b/blog/config/console/di/translator-extractor.php similarity index 100% rename from config/console/translator-extractor.php rename to blog/config/console/di/translator-extractor.php index c4685bbcc..39d9b7181 100644 --- a/config/console/translator-extractor.php +++ b/blog/config/console/di/translator-extractor.php @@ -5,8 +5,8 @@ use Yiisoft\Aliases\Aliases; use Yiisoft\Definitions\DynamicReference; use Yiisoft\Translator\Message\Php\MessageSource; -use Yiisoft\TranslatorExtractor\Extractor; use Yiisoft\TranslatorExtractor\CategorySource as ExtractorCategorySource; +use Yiisoft\TranslatorExtractor\Extractor; /** @var array $params */ diff --git a/config/events-console.php b/blog/config/console/events.php similarity index 100% rename from config/events-console.php rename to blog/config/console/events.php diff --git a/blog/config/console/params.php b/blog/config/console/params.php new file mode 100644 index 000000000..e21790626 --- /dev/null +++ b/blog/config/console/params.php @@ -0,0 +1,14 @@ + [ + 'name' => Application::NAME, + 'version' => Application::VERSION, + 'autoExit' => false, + 'commands' => require __DIR__ . '/commands.php', + ], +]; diff --git a/config/prod/params.php b/blog/config/environments/dev/params.php similarity index 100% rename from config/prod/params.php rename to blog/config/environments/dev/params.php diff --git a/blog/config/environments/prod/params.php b/blog/config/environments/prod/params.php new file mode 100644 index 000000000..3e62e040b --- /dev/null +++ b/blog/config/environments/prod/params.php @@ -0,0 +1,9 @@ + [ + 'enabled' => false, + ], +]; diff --git a/blog/config/environments/test/params.php b/blog/config/environments/test/params.php new file mode 100644 index 000000000..3e62e040b --- /dev/null +++ b/blog/config/environments/test/params.php @@ -0,0 +1,9 @@ + [ + 'enabled' => false, + ], +]; diff --git a/config/web/application.php b/blog/config/web/di/application.php similarity index 66% rename from config/web/application.php rename to blog/config/web/di/application.php index d273ce84e..76fc28aec 100644 --- a/config/web/application.php +++ b/blog/config/web/di/application.php @@ -7,6 +7,7 @@ use Yiisoft\Definitions\Reference; use Yiisoft\Middleware\Dispatcher\MiddlewareDispatcher; use Yiisoft\Yii\Middleware\Locale; +use Yiisoft\Yii\Middleware\Subfolder; /** @var array $params */ @@ -22,8 +23,13 @@ ], Locale::class => [ '__construct()' => [ - 'locales' => $params['locale']['locales'], - 'ignoredRequests' => $params['locale']['ignoredRequests'], + 'supportedLocales' => $params['locale']['locales'], + 'ignoredRequestUrlPatterns' => $params['locale']['ignoredRequests'], + ], + ], + Subfolder::class => [ + '__construct()' => [ + 'prefix' => !empty(trim($_ENV['BASE_URL'] ?? '', '/')) ? $_ENV['BASE_URL'] : null, ], ], ]; diff --git a/config/web/auth.php b/blog/config/web/di/auth.php similarity index 100% rename from config/web/auth.php rename to blog/config/web/di/auth.php index 635d3b145..558c92b71 100644 --- a/config/web/auth.php +++ b/blog/config/web/di/auth.php @@ -9,10 +9,10 @@ use Psr\Log\LoggerInterface; use Yiisoft\Access\AccessCheckerInterface; use Yiisoft\Auth\IdentityRepositoryInterface; -use Yiisoft\Definitions\Reference; use Yiisoft\Cookies\CookieEncryptor; use Yiisoft\Cookies\CookieMiddleware; use Yiisoft\Cookies\CookieSigner; +use Yiisoft\Definitions\Reference; use Yiisoft\Session\SessionInterface; use Yiisoft\User\CurrentUser; use Yiisoft\User\Login\Cookie\CookieLogin; diff --git a/config/web/comment-service.php b/blog/config/web/di/comment-service.php similarity index 100% rename from config/web/comment-service.php rename to blog/config/web/di/comment-service.php diff --git a/config/web/contact-mailer.php b/blog/config/web/di/contact-mailer.php similarity index 100% rename from config/web/contact-mailer.php rename to blog/config/web/di/contact-mailer.php diff --git a/blog/config/web/di/middleware-dispatcher.php b/blog/config/web/di/middleware-dispatcher.php new file mode 100644 index 000000000..65962fbe0 --- /dev/null +++ b/blog/config/web/di/middleware-dispatcher.php @@ -0,0 +1,23 @@ + [ + 'class' => CompositeParametersResolver::class, + '__construct()' => [ + Reference::to(HydratorAttributeParametersResolver::class), + Reference::to(RequestInputParametersResolver::class), + ], + ], +]; diff --git a/config/web/rate-limit.php b/blog/config/web/di/rate-limit.php similarity index 99% rename from config/web/rate-limit.php rename to blog/config/web/di/rate-limit.php index d8477946d..37712632b 100644 --- a/config/web/rate-limit.php +++ b/blog/config/web/di/rate-limit.php @@ -2,18 +2,19 @@ declare(strict_types=1); -use Yiisoft\Yii\RateLimiter\CounterInterface; -use Yiisoft\Yii\RateLimiter\Storage\StorageInterface; -use Yiisoft\Yii\RateLimiter\Counter; -use Yiisoft\Cache\File\FileCache; use Yiisoft\Aliases\Aliases; +use Yiisoft\Cache\File\FileCache; +use Yiisoft\Yii\RateLimiter\Counter; +use Yiisoft\Yii\RateLimiter\CounterInterface; use Yiisoft\Yii\RateLimiter\Storage\SimpleCacheStorage; +use Yiisoft\Yii\RateLimiter\Storage\StorageInterface; /** @var array $params */ return [ StorageInterface::class => function (Aliases $aliases) { $cache = new FileCache($aliases->get('@runtime/rate-limiter')); + return new SimpleCacheStorage($cache); }, CounterInterface::class => [ diff --git a/blog/config/web/events.php b/blog/config/web/events.php new file mode 100644 index 000000000..c8373efd0 --- /dev/null +++ b/blog/config/web/events.php @@ -0,0 +1,17 @@ + [ + static fn(Timer $timer) => $timer->start('overall'), + ], + SetLocaleEvent::class => [ + static fn(TranslatorInterface $translator, SetLocaleEvent $event) => $translator->setLocale($event->getLocale()), + ], +]; diff --git a/blog/config/web/params.php b/blog/config/web/params.php new file mode 100644 index 000000000..a2e8992cb --- /dev/null +++ b/blog/config/web/params.php @@ -0,0 +1,36 @@ + [ + RequestCatcherMiddleware::class, + ErrorCatcher::class, + SentryMiddleware::class, + SessionMiddleware::class, + CookieMiddleware::class, + CookieLoginMiddleware::class, + Subfolder::class, + Locale::class, + Router::class, + ], + + 'locale' => [ + 'locales' => ['en' => 'en-US', 'ru' => 'ru-RU', 'id' => 'id-ID', 'sk' => 'sk-SK', 'de' => 'de-DE'], + 'ignoredRequests' => [ + '/gii**', + '/debug**', + '/inspect**', + ], + ], +]; diff --git a/blog/configuration.php b/blog/configuration.php new file mode 100644 index 000000000..918ce8a47 --- /dev/null +++ b/blog/configuration.php @@ -0,0 +1,80 @@ + [ + 'params' => [ + 'common/params.php', + ], + 'params-web' => [ + '$params', + 'web/params.php', + ], + 'params-console' => [ + '$params', + 'console/params.php', + ], + 'di' => 'common/di/*.php', + 'di-web' => [ + '$di', + 'web/di/*.php', + ], + 'di-console' => '$di', + 'di-providers' => [], + 'di-providers-web' => [ + '$di-providers', + ], + 'di-providers-console' => [ + '$di-providers', + ], + 'di-delegates' => [], + 'di-delegates-web' => [ + '$di-delegates', + ], + 'di-delegates-console' => [ + '$di-delegates', + ], + 'events' => [], + 'events-web' => [ + '$events', + 'web/events.php', + ], + 'events-console' => [ + '$events', + 'console/events.php', + ], + 'app-routes' => [ + 'common/routes/*.php', + ], + 'bootstrap' => [ + 'common/bootstrap.php', + ], + 'bootstrap-web' => [ + '$bootstrap', + ], + 'bootstrap-console' => [ + '$bootstrap', + ], + ], + 'config-plugin-environments' => [ + 'dev' => [ + 'params' => [ + 'environments/dev/params.php', + ], + ], + 'prod' => [ + 'params' => [ + 'environments/prod/params.php', + ], + ], + 'test' => [ + 'params' => [ + 'environments/test/params.php', + ], + ], + ], + 'config-plugin-options' => [ + 'source-directory' => 'config', + ], +]; diff --git a/dependency-checker.json b/blog/dependency-checker.json similarity index 100% rename from dependency-checker.json rename to blog/dependency-checker.json diff --git a/blog/docker-compose.yml b/blog/docker-compose.yml new file mode 100644 index 000000000..bdbd304ac --- /dev/null +++ b/blog/docker-compose.yml @@ -0,0 +1,10 @@ +services: + php: + image: yiisoftware/yii-php:8.3-apache + working_dir: /app + volumes: + - ./:/app + # host-volume for composer cache + - ~/.composer-docker/cache:/root/.composer/cache:delegated + ports: + - "30080:80" diff --git a/blog/docker/dev/nginx/Dockerfile b/blog/docker/dev/nginx/Dockerfile new file mode 100644 index 000000000..b98399633 --- /dev/null +++ b/blog/docker/dev/nginx/Dockerfile @@ -0,0 +1,9 @@ +FROM nginx:1.21.1-alpine + +RUN apk add --no-cache curl + +WORKDIR /app/public + +COPY docker/dev/nginx/nginx.conf /etc/nginx/conf.d/default.conf +COPY public ./ + diff --git a/blog/docker/dev/nginx/nginx.conf b/blog/docker/dev/nginx/nginx.conf new file mode 100644 index 000000000..08a529efd --- /dev/null +++ b/blog/docker/dev/nginx/nginx.conf @@ -0,0 +1,49 @@ +server { + listen 80 default_server; + server_name default; + client_max_body_size 15m; + root /app/public; + resolver 127.0.0.11 ipv6=off; + server_tokens off; + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location /assets { + root /app/public; + } + + location / { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always; + add_header 'Access-Control-Max-Age' 1728000; + if ($request_method = 'OPTIONS') { + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + try_files $uri /index.php?$args; + } + + location ~ ^/index\.php(/|$) { + set $upstream blog-backend:9000; + fastcgi_read_timeout 60; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass $upstream; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SERVER_NAME $server_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/blog/docker/dev/php/Dockerfile b/blog/docker/dev/php/Dockerfile new file mode 100644 index 000000000..a179d8c36 --- /dev/null +++ b/blog/docker/dev/php/Dockerfile @@ -0,0 +1,70 @@ +# the different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +FROM php:8.1-fpm-alpine as stage + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +RUN set -eux \ + && apk add --no-cache \ + acl fcgi file gettext git nano curl \ + && apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS icu-dev libzip-dev zlib-dev \ + \ + && docker-php-ext-configure zip \ + && docker-php-ext-install -j$(nproc) intl zip \ + && docker-php-ext-enable opcache \ + \ + && runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )" \ + && apk add --no-cache --virtual .pgsql-deps \ + $runDeps postgresql-dev so:libpq.so.5 \ + && docker-php-ext-install -j$(nproc) pdo_pgsql + +RUN apk add oniguruma-dev \ + && docker-php-ext-install mbstring \ + \ + && apk add --repository http://dl-3.alpinelinux.org/alpine/edge/community \ + rabbitmq-c-dev \ + && pecl install xdebug-3.1.4 amqp-1.11.0 \ + && docker-php-ext-enable xdebug amqp \ + \ + && apk del .build-deps \ + && pecl clear-cache \ + && rm -rf /tmp/pear \ + && docker-php-source delete \ + && rm -rf /var/cache/apk/* + +RUN ln -s $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini + +WORKDIR /app + +COPY docker/dev/php/conf.d/ $PHP_INI_DIR/conf.d/ +COPY docker/dev/php/php-fpm.d/ /usr/local/etc/php-fpm.d/ + +COPY composer.json composer.lock* ./ + +RUN composer install --no-plugins --no-scripts --prefer-dist \ + && composer clear-cache + +COPY ./ ./ + +RUN composer run-script post-install-cmd + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s \ + CMD REQUEST_METHOD=GET SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping cgi-fcgi -bind -connect 127.0.0.1:9000 + +RUN chmod 0555 ./docker/docker-entrypoint.sh +ENTRYPOINT ["docker/docker-entrypoint.sh"] + +CMD ["php-fpm"] diff --git a/blog/docker/dev/php/conf.d/php.ini b/blog/docker/dev/php/conf.d/php.ini new file mode 100644 index 000000000..c80827193 --- /dev/null +++ b/blog/docker/dev/php/conf.d/php.ini @@ -0,0 +1,28 @@ +;apc.enable_cli = 1 +date.timezone = UTC +session.auto_start = Off +short_open_tag = Off +expose_php = Off +upload_max_filesize = 15M +post_max_size = 150M +memory_limit = 256M + +# https://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +max_execution_time = 300 +max_input_time = 300 + +[xdebug] +xdebug.mode = develop,debug +xdebug.client_host = host.docker.internal +;xdebug.discover_client_host=true +xdebug.show_error_trace = 0 +xdebug.start_with_request = trigger +;xdebug.client_host=host-gateway +;xdebug.start_with_request= +xdebug.client_port = 9001 +xdebug.log_level = 10 diff --git a/blog/docker/dev/php/php-fpm.d/www.conf b/blog/docker/dev/php/php-fpm.d/www.conf new file mode 100644 index 000000000..55df850b8 --- /dev/null +++ b/blog/docker/dev/php/php-fpm.d/www.conf @@ -0,0 +1,20 @@ +[global] +daemonize = no +process_control_timeout = 20 +error_log = /proc/self/fd/2 + +[www] +user = www-data +group = www-data +listen = 9000 +listen.mode = 0666 +ping.path = /ping +ping.response = pong +clear_env = off +pm = dynamic +pm.status_path = /status +pm.max_children = 25 +pm.start_servers = 10 +pm.min_spare_servers = 5 +pm.max_spare_servers = 20 +pm.max_requests = 500 diff --git a/blog/docker/docker-entrypoint.sh b/blog/docker/docker-entrypoint.sh new file mode 100644 index 000000000..fd0a4a126 --- /dev/null +++ b/blog/docker/docker-entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -e + +ls -la +# first arg is `-f` or `--some-option` +if [ "${1#-}" != "$1" ]; then + set -- php-fpm "$@" +fi +set -e + +if [ "$1" = 'php-fpm' ] || [ "$1" = 'php' ] || [ "$1" = 'yii' ]; then + setfacl -R -m u:www-data:rwX -m u:"$(whoami)":rwX runtime public + setfacl -dR -m u:www-data:rwX -m u:"$(whoami)":rwX runtime public +fi + +exec "$@" diff --git a/blog/docker/prod/nginx/Dockerfile b/blog/docker/prod/nginx/Dockerfile new file mode 100644 index 000000000..94cf7d82f --- /dev/null +++ b/blog/docker/prod/nginx/Dockerfile @@ -0,0 +1,9 @@ +FROM nginx:1.21.1-alpine + +RUN apk add --no-cache curl + +COPY docker/prod/nginx/nginx.conf /etc/nginx/conf.d/default.conf + +WORKDIR /app/public + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s CMD curl --fail http://127.0.0.1/health || exit 1 diff --git a/blog/docker/prod/nginx/nginx.conf b/blog/docker/prod/nginx/nginx.conf new file mode 100644 index 000000000..b61f22f0c --- /dev/null +++ b/blog/docker/prod/nginx/nginx.conf @@ -0,0 +1,48 @@ +server { + listen 80 default_server; + root /app/public; + client_max_body_size 15m; + resolver 127.0.0.11 ipv6=off; + server_tokens off; + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location /assets { + root /app/public; + } + + location / { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + add_header 'Access-Control-Allow-Methods' 'GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,Accept,Authorization' always; + add_header 'Access-Control-Max-Age' 1728000; + if ($request_method = 'OPTIONS') { + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; + } + try_files $uri /index.php?$args; + } + + location ~ ^/index\.php(/|$) { + set $upstream blog-backend:9000; + fastcgi_read_timeout 60; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass $upstream; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SERVER_NAME $server_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/blog/docker/prod/php/Dockerfile b/blog/docker/prod/php/Dockerfile new file mode 100644 index 000000000..8c221b3ce --- /dev/null +++ b/blog/docker/prod/php/Dockerfile @@ -0,0 +1,72 @@ +# the different stages of this Dockerfile are meant to be built into separate images +# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage +# https://docs.docker.com/compose/compose-file/#target + + +# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +FROM php:8.1-fpm-alpine as stage + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +ENV COMPOSER_ALLOW_SUPERUSER=1 +ENV PATH="${PATH}:/root/.composer/vendor/bin" + +RUN set -eux \ + && apk add --no-cache \ + acl fcgi file gettext git nano curl \ + && apk add --no-cache --virtual .build-deps \ + $PHPIZE_DEPS icu-dev libzip-dev zlib-dev \ + \ + && docker-php-ext-configure zip \ + && docker-php-ext-install -j$(nproc) intl zip \ + && docker-php-ext-enable opcache \ + \ + && runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )" \ + && apk add --no-cache --virtual .pgsql-deps \ + $runDeps postgresql-dev so:libpq.so.5 \ + && docker-php-ext-install -j$(nproc) pdo_pgsql \ + \ + && apk add oniguruma-dev \ + && docker-php-ext-install mbstring \ + \ + && apk add --repository http://dl-3.alpinelinux.org/alpine/edge/community \ + rabbitmq-c-dev \ + && pecl install amqp-1.11.0 \ + && docker-php-ext-enable amqp \ + && apk del .build-deps \ + && pecl clear-cache \ + && rm -rf /tmp/pear \ + && docker-php-source delete \ + && rm -rf /var/cache/apk/* + +RUN ln -s $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini + +WORKDIR /app + +COPY docker/prod/php/conf.d/ $PHP_INI_DIR/conf.d/ +COPY docker/prod/php/php-fpm.d/ /usr/local/etc/php-fpm.d/ + +COPY composer.json composer.lock* ./ + +RUN set -eux \ + && composer install --no-plugins --no-scripts --prefer-dist \ + && composer clear-cache + +COPY ./ ./ + +RUN set -eux \ + && composer dump-autoload --classmap-authoritative \ + && composer run-script --no-dev post-install-cmd + +HEALTHCHECK --interval=30s --timeout=5s --start-period=1s \ + CMD REQUEST_METHOD=GET SCRIPT_NAME=/ping SCRIPT_FILENAME=/ping cgi-fcgi -bind -connect 127.0.0.1:9000 + +RUN chmod 0555 ./docker/docker-entrypoint.sh +ENTRYPOINT ["docker/docker-entrypoint.sh"] + +CMD ["php-fpm"] diff --git a/blog/docker/prod/php/conf.d/php.ini b/blog/docker/prod/php/conf.d/php.ini new file mode 100644 index 000000000..b723da7a0 --- /dev/null +++ b/blog/docker/prod/php/conf.d/php.ini @@ -0,0 +1,18 @@ +;apc.enable_cli = 1 +date.timezone = UTC +session.auto_start = Off +short_open_tag = Off +expose_php = Off +upload_max_filesize = 15M +post_max_size = 150M +memory_limit = 512M +display_errors = Off + +# https://symfony.com/doc/current/performance.html +opcache.interned_strings_buffer = 16 +opcache.max_accelerated_files = 20000 +opcache.memory_consumption = 256 +opcache.validate_timestamps = 0 +realpath_cache_size = 4096K +realpath_cache_ttl = 600 +opcache.preload_user = www-data diff --git a/blog/docker/prod/php/php-fpm.d/www.conf b/blog/docker/prod/php/php-fpm.d/www.conf new file mode 100644 index 000000000..81ab6ab2a --- /dev/null +++ b/blog/docker/prod/php/php-fpm.d/www.conf @@ -0,0 +1,21 @@ +[global] +daemonize = no +process_control_timeout = 20 +error_log = /proc/self/fd/2 + +[www] +user = www-data +group = www-data +listen = 9000 +listen.mode = 0666 +clear_env = off +; access.suppress_path[] = /ping +ping.path = /ping +ping.response = pong +pm = dynamic +pm.status_path = /status +pm.max_children = 25 +pm.start_servers = 10 +pm.min_spare_servers = 5 +pm.max_spare_servers = 20 +pm.max_requests = 500 diff --git a/blog/package-lock.json b/blog/package-lock.json new file mode 100644 index 000000000..aaad2a1c1 --- /dev/null +++ b/blog/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "yii3-demo-blog", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "bootstrap": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz", + "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==" + } + } +} diff --git a/blog/package.json b/blog/package.json new file mode 100644 index 000000000..ec1ad179b --- /dev/null +++ b/blog/package.json @@ -0,0 +1,10 @@ +{ + "name": "yii3-demo-blog", + "version": "1.0.0", + "description": "Yii3 Demo Blog", + "dependencies": { + "bootstrap": "^5.3.1" + }, + "devDependencies": {}, + "license": "BSD-3-Clause" +} diff --git a/blog/phpunit.xml.dist b/blog/phpunit.xml.dist new file mode 100644 index 000000000..a795c6293 --- /dev/null +++ b/blog/phpunit.xml.dist @@ -0,0 +1,29 @@ + + + + + + + + + + ./tests + + + + + + ./src + + + diff --git a/psalm.xml b/blog/psalm.xml similarity index 92% rename from psalm.xml rename to blog/psalm.xml index a789ba20d..2a591ffa1 100755 --- a/psalm.xml +++ b/blog/psalm.xml @@ -1,7 +1,6 @@ run(); diff --git a/blog/public/robots.txt b/blog/public/robots.txt new file mode 100644 index 000000000..6f27bb66a --- /dev/null +++ b/blog/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file diff --git a/resources/asset/css/site.css b/blog/resources/asset/css/site.css similarity index 100% rename from resources/asset/css/site.css rename to blog/resources/asset/css/site.css diff --git a/resources/asset/js/app.js b/blog/resources/asset/js/app.js similarity index 100% rename from resources/asset/js/app.js rename to blog/resources/asset/js/app.js diff --git a/resources/backend/views/site/index.php b/blog/resources/backend/views/site/index.php similarity index 100% rename from resources/backend/views/site/index.php rename to blog/resources/backend/views/site/index.php diff --git a/resources/mail/layouts/html.php b/blog/resources/mail/layouts/html.php similarity index 100% rename from resources/mail/layouts/html.php rename to blog/resources/mail/layouts/html.php diff --git a/blog/resources/messages/de/app.php b/blog/resources/messages/de/app.php new file mode 100644 index 000000000..d79a610d0 --- /dev/null +++ b/blog/resources/messages/de/app.php @@ -0,0 +1,55 @@ + 'API', + 'gridview.create.at' => 'Erzeugt am', + 'gridview.login' => 'Anmelden', + 'gridview.profile' => 'Profil', + 'gridview.title' => 'Liste der Benutzer', + 'home.caption.slide1' => '
Hello, everyone!

Ein toller Tag, um Yii 3 auszuprobieren, richtig?

', + 'home.caption.slide2' => '
Der Code wartet!

Schau dir den Projektcode an. Er ist nicht ideal, da es sich auch um eine Entwicklungs-Sandbox handelt, bietet aber einen mittelmäßigen Überblick über die Funktionen von Yii 3.

', + 'home.caption.slide3' => '
Wir brauchen Rückmeldungen!

Bitte gib uns deine Rückmeldungen über die im README genannten Telegram- und Slack-Kanäle.

', + 'layout.add.post' => 'Neuer Beitrag', + 'layout.add.random-content' => 'Füge zufälligen Inhalt ein', + 'layout.add.tag' => 'Neues Stichwort', + 'layout.add' => 'Hinzufügen', + 'layout.archive.for-year' => 'Archiv für {year}', + 'layout.archive' => 'Archiv', + 'layout.blog' => 'Blog', + 'layout.change-language' => 'Kanal Sprache', + 'layout.console' => 'Konsole', + 'layout.content' => 'Inhalt', + 'layout.create.new-user' => 'Erstelle neuen Benutzer', + 'layout.db.schema' => 'DB Schema', + 'layout.go.home' => 'Zurück zur Startseite', + 'layout.login' => 'Anmelden', + 'layout.migrations' => 'Migrationen', + 'layout.no-records' => 'Keine Einträge', + 'layout.not-found' => 'Nicht gefunden', + 'layout.page.not-found' => 'Die Seite {url} konnte nicht gefunden werden.', + 'layout.pagination-summary' => 'Zeige {pageSize} von {total} Beiträgen', + 'layout.password-verify' => 'Wiederhole Passwort', + 'layout.password' => 'Passwort', + 'layout.rbac.assign-role' => 'Rolle zuweisen', + 'layout.remember' => 'Erinnere dich an mich', + 'layout.reset' => 'Zurücksetzen', + 'layout.show-more' => 'Zeige mehr', + 'layout.submit' => 'Absenden', + 'layout.title' => 'Titel', + 'layout.total.posts' => 'Insgesamt {count} Beiträge', + 'menu.blog' => 'Blog', + 'menu.comments-feed' => 'Kommentar-Feed', + 'menu.contact' => 'Kontakt', + 'menu.language' => 'Sprache', + 'menu.login' => 'Anmelden', + 'menu.logout' => 'Abmelden ({login})', + 'menu.signup' => 'Registrieren', + 'menu.swagger' => 'Swagger', + 'menu.users' => 'Benutzer', + 'signup' => 'Registrieren', + 'validator.invalid.login.password' => 'Ungültiger Benutzername oder Passwort', + 'validator.password.not.match' => 'Passwörter stimmen nicht überein', + 'validator.user.exist' => 'Ein Benutzer mit diesem Namen ist bereits vorhanden', +]; diff --git a/resources/messages/en/app.php b/blog/resources/messages/en/app.php similarity index 98% rename from resources/messages/en/app.php rename to blog/resources/messages/en/app.php index 00503b12f..d26e3d3c5 100644 --- a/resources/messages/en/app.php +++ b/blog/resources/messages/en/app.php @@ -1,5 +1,7 @@ 'API', 'gridview.create.at' => 'Create at', diff --git a/resources/messages/id/app.php b/blog/resources/messages/id/app.php similarity index 99% rename from resources/messages/id/app.php rename to blog/resources/messages/id/app.php index 6c9565a6f..2d19202d1 100644 --- a/resources/messages/id/app.php +++ b/blog/resources/messages/id/app.php @@ -1,5 +1,7 @@ 'Lampirkan file', 'email' => 'surel', diff --git a/resources/messages/ru/app.php b/blog/resources/messages/ru/app.php similarity index 99% rename from resources/messages/ru/app.php rename to blog/resources/messages/ru/app.php index c67b7731c..e81ed1584 100644 --- a/resources/messages/ru/app.php +++ b/blog/resources/messages/ru/app.php @@ -1,5 +1,7 @@ 'Авторизоваться', 'gridview.create.at' => 'Дата создания', diff --git a/resources/messages/sk/app.php b/blog/resources/messages/sk/app.php similarity index 99% rename from resources/messages/sk/app.php rename to blog/resources/messages/sk/app.php index a8c3b19a0..6d07f9497 100644 --- a/resources/messages/sk/app.php +++ b/blog/resources/messages/sk/app.php @@ -1,5 +1,7 @@ 'Prihlásiť sa', 'gridview.create.at' => 'Vytvorené', diff --git a/resources/rbac/items.php b/blog/resources/rbac/items.php similarity index 93% rename from resources/rbac/items.php rename to blog/resources/rbac/items.php index 85e03a563..5f887936c 100644 --- a/resources/rbac/items.php +++ b/blog/resources/rbac/items.php @@ -1,5 +1,7 @@ [ 'name' => 'admin', diff --git a/resources/views/auth/login.php b/blog/resources/views/auth/login.php similarity index 90% rename from resources/views/auth/login.php rename to blog/resources/views/auth/login.php index e1abf88fe..a396e5482 100644 --- a/resources/views/auth/login.php +++ b/blog/resources/views/auth/login.php @@ -3,7 +3,7 @@ declare(strict_types=1); use App\Auth\Form\LoginForm; -use Yiisoft\Form\Field; +use Yiisoft\FormModel\Field; use Yiisoft\Html\Html; use Yiisoft\Html\Tag\Form; use Yiisoft\Router\UrlGeneratorInterface; @@ -11,13 +11,12 @@ use Yiisoft\View\WebView; /** - * @var WebView $this - * @var TranslatorInterface $translator + * @var WebView $this + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var string $csrf - * @var LoginForm $formModel + * @var string $csrf + * @var LoginForm $formModel */ - $this->setTitle($translator->translate('layout.login')); $error = $error ?? null; diff --git a/resources/views/blog/_archive.php b/blog/resources/views/blog/_archive.php similarity index 89% rename from resources/views/blog/_archive.php rename to blog/resources/views/blog/_archive.php index 2644fdb25..521dfa129 100644 --- a/resources/views/blog/_archive.php +++ b/blog/resources/views/blog/_archive.php @@ -4,9 +4,9 @@ /** * @var DataReaderInterface|string[][] $archive - * @var TranslatorInterface $translator - * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var TranslatorInterface $translator + * @var UrlGeneratorInterface $urlGenerator + * @var WebView $this */ use Yiisoft\Data\Reader\DataReaderInterface; @@ -42,7 +42,7 @@ echo Html::openTag('div', ['class' => 'd-flex justify-content-between align-items-center']); // Print month name echo Html::a( - Date('F', mktime(0, 0, 0, (int)$month, 1, (int)$year)), + date('F', mktime(0, 0, 0, (int) $month, 1, (int) $year)), $urlGenerator->generate('blog/archive/month', [ 'year' => $year, 'month' => $month, diff --git a/resources/views/blog/_topTags.php b/blog/resources/views/blog/_topTags.php similarity index 82% rename from resources/views/blog/_topTags.php rename to blog/resources/views/blog/_topTags.php index 2b002a0db..f0a3dcc0f 100644 --- a/resources/views/blog/_topTags.php +++ b/blog/resources/views/blog/_topTags.php @@ -4,9 +4,9 @@ /** * @var DataReaderInterface|string[][] $tags - * @var TranslatorInterface $translator - * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var TranslatorInterface $translator + * @var UrlGeneratorInterface $urlGenerator + * @var WebView $this */ use Yiisoft\Data\Reader\DataReaderInterface; @@ -22,9 +22,9 @@
    'list-group-item d-flex flex-column justify-content-between lh-condensed'] - ); + 'li', + ['class' => 'list-group-item d-flex flex-column justify-content-between lh-condensed'] +); $blockEnd = Html::closeTag('li'); echo $blockBegin; if (count($tags)) { diff --git a/resources/views/blog/archive/index.php b/blog/resources/views/blog/archive/index.php similarity index 90% rename from resources/views/blog/archive/index.php rename to blog/resources/views/blog/archive/index.php index d0a17ef26..a57d97528 100644 --- a/resources/views/blog/archive/index.php +++ b/blog/resources/views/blog/archive/index.php @@ -4,9 +4,9 @@ /** * @var DataReaderInterface|string[][] $archive - * @var TranslatorInterface $translator - * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var TranslatorInterface $translator + * @var UrlGeneratorInterface $urlGenerator + * @var WebView $this */ use Yiisoft\Data\Reader\DataReaderInterface; @@ -52,7 +52,7 @@ echo Html::openTag('div', ['class' => 'mx-2 my-1']); // Print month name echo Html::a( - Date('F', mktime(0, 0, 0, (int)$month, 1, (int)$year)), + date('F', mktime(0, 0, 0, (int) $month, 1, (int) $year)), $urlGenerator->generate('blog/archive/month', [ 'year' => $year, 'month' => $month, diff --git a/resources/views/blog/archive/monthly-archive.php b/blog/resources/views/blog/archive/monthly-archive.php similarity index 89% rename from resources/views/blog/archive/monthly-archive.php rename to blog/resources/views/blog/archive/monthly-archive.php index 46ee60f2b..24b867a17 100644 --- a/resources/views/blog/archive/monthly-archive.php +++ b/blog/resources/views/blog/archive/monthly-archive.php @@ -3,12 +3,12 @@ declare(strict_types=1); /** - * @var int $year - * @var int $month - * @var OffsetPaginator $paginator - * @var TranslatorInterface $translator + * @var int $year + * @var int $month + * @var OffsetPaginator $paginator + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var WebView $this */ use App\Blog\Entity\Post; diff --git a/resources/views/blog/archive/yearly-archive.php b/blog/resources/views/blog/archive/yearly-archive.php similarity index 88% rename from resources/views/blog/archive/yearly-archive.php rename to blog/resources/views/blog/archive/yearly-archive.php index dd018af91..d9c195014 100644 --- a/resources/views/blog/archive/yearly-archive.php +++ b/blog/resources/views/blog/archive/yearly-archive.php @@ -3,11 +3,11 @@ declare(strict_types=1); /** - * @var int $year - * @var Post[]|DataReaderInterface $items - * @var TranslatorInterface $translator - * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var int $year + * @var DataReaderInterface|Post[] $items + * @var TranslatorInterface $translator + * @var UrlGeneratorInterface $urlGenerator + * @var WebView $this */ use App\Blog\Entity\Post; @@ -36,7 +36,7 @@ $monthName = ''; /** @var Post $item */ foreach ($items as $item) { - $month = (int)$item + $month = (int) $item ->getPublishedAt() ->format('m'); diff --git a/resources/views/blog/comments/_comments.php b/blog/resources/views/blog/comments/_comments.php similarity index 86% rename from resources/views/blog/comments/_comments.php rename to blog/resources/views/blog/comments/_comments.php index dc8c170ec..336e2e472 100644 --- a/resources/views/blog/comments/_comments.php +++ b/blog/resources/views/blog/comments/_comments.php @@ -9,12 +9,11 @@ use Yiisoft\Translator\TranslatorInterface; /** - * @var KeysetPaginator $data - * @var TranslatorInterface $translator + * @var KeysetPaginator $data + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var AssetManager $assetManager + * @var AssetManager $assetManager */ - ?> read() as $comment) { ?> @@ -34,7 +33,7 @@
    diff --git a/resources/views/blog/comments/index.php b/blog/resources/views/blog/comments/index.php similarity index 78% rename from resources/views/blog/comments/index.php rename to blog/resources/views/blog/comments/index.php index c86b8d5ce..a65eaaf4a 100644 --- a/resources/views/blog/comments/index.php +++ b/blog/resources/views/blog/comments/index.php @@ -10,13 +10,12 @@ use Yiisoft\View\WebView; /** - * @var KeysetPaginator $data - * @var TranslatorInterface $translator + * @var KeysetPaginator $data + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var AssetManager $assetManager - * @var WebView $this + * @var AssetManager $assetManager + * @var WebView $this */ - $this->setTitle($translator->translate('menu.comments-feed')); ?> diff --git a/resources/views/blog/index.php b/blog/resources/views/blog/index.php similarity index 88% rename from resources/views/blog/index.php rename to blog/resources/views/blog/index.php index cade9eedf..02a88a8ab 100644 --- a/resources/views/blog/index.php +++ b/blog/resources/views/blog/index.php @@ -3,13 +3,13 @@ declare(strict_types=1); /** - * @var OffsetPaginator $paginator; + * @var OffsetPaginator $paginator; * @var DataReaderInterface|string[][] $archive * @var DataReaderInterface|string[][] $tags - * @var TranslatorInterface $translator - * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this - * @var bool $isGuest + * @var TranslatorInterface $translator + * @var UrlGeneratorInterface $urlGenerator + * @var WebView $this + * @var bool $isGuest */ use App\Blog\Entity\Post; @@ -43,7 +43,7 @@ } else { echo Html::p( $translator->translate('layout.no-records') - ); + ); } /** @var Post $item */ foreach ($paginator->read() as $item) { diff --git a/resources/views/blog/post/__form.php b/blog/resources/views/blog/post/__form.php similarity index 82% rename from resources/views/blog/post/__form.php rename to blog/resources/views/blog/post/__form.php index 65db9a427..afed55daa 100644 --- a/resources/views/blog/post/__form.php +++ b/blog/resources/views/blog/post/__form.php @@ -3,14 +3,14 @@ declare(strict_types=1); /** - * @var View $this - * @var TranslatorInterface $translator + * @var View $this + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var array $body - * @var string $csrf - * @var string $action - * @var array $tags - * @var string $title + * @var array $body + * @var string $csrf + * @var string $action + * @var array $tags + * @var string $title */ use Yiisoft\Html\Html; @@ -46,16 +46,16 @@ translate('layout.add'), - ['class' => 'btn btn-primary mt-2', 'id' => 'addTagButton'] - ) ?> + $translator->translate('layout.add'), + ['class' => 'btn btn-primary mt-2', 'id' => 'addTagButton'] +) ?>
    - + - +
    diff --git a/resources/views/blog/post/index.php b/blog/resources/views/blog/post/index.php similarity index 88% rename from resources/views/blog/post/index.php rename to blog/resources/views/blog/post/index.php index 965bee6e7..c42cc3df3 100644 --- a/resources/views/blog/post/index.php +++ b/blog/resources/views/blog/post/index.php @@ -3,12 +3,12 @@ declare(strict_types=1); /** - * @var Post $item - * @var TranslatorInterface $translator + * @var Post $item + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this - * @var bool $canEdit - * @var string $slug + * @var WebView $this + * @var bool $canEdit + * @var string $slug */ use App\Blog\Entity\Post; @@ -29,14 +29,14 @@ ->format('H:i:s d.m.Y') ?> by getUser() ->getLogin(), - $urlGenerator->generate('user/profile', ['login' => $item + $urlGenerator->generate('user/profile', ['login' => $item ->getUser() - ->getLogin()]), - ['class' => 'mr-3'] - ); + ->getLogin(), ]), + ['class' => 'mr-3'] + ); if ($canEdit) { echo Html::a( 'Edit', @@ -71,13 +71,13 @@
    getUser() ->getLogin(), - $urlGenerator->generate('user/profile', ['login' => $comment + $urlGenerator->generate('user/profile', ['login' => $comment ->getUser() - ->getLogin()]) - ) ?> + ->getLogin(), ]) + ) ?> created at getCreatedAt() diff --git a/resources/views/blog/tag/index.php b/blog/resources/views/blog/tag/index.php similarity index 89% rename from resources/views/blog/tag/index.php rename to blog/resources/views/blog/tag/index.php index dcb018085..4e6733b4d 100644 --- a/resources/views/blog/tag/index.php +++ b/blog/resources/views/blog/tag/index.php @@ -3,11 +3,11 @@ declare(strict_types=1); /** - * @var OffsetPaginator $paginator; - * @var Tag $item - * @var TranslatorInterface $translator + * @var OffsetPaginator $paginator; + * @var Tag $item + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var WebView $this */ use App\Blog\Entity\Post; diff --git a/resources/views/layout/main.php b/blog/resources/views/layout/main.php similarity index 91% rename from resources/views/layout/main.php rename to blog/resources/views/layout/main.php index 2726ffce4..34634bc28 100644 --- a/resources/views/layout/main.php +++ b/blog/resources/views/layout/main.php @@ -19,18 +19,18 @@ /** * @var UrlGeneratorInterface $urlGenerator - * @var CurrentRoute $currentRoute - * @var WebView $this - * @var AssetManager $assetManager - * @var TranslatorInterface $translator - * @var string $content + * @var CurrentRoute $currentRoute + * @var WebView $this + * @var AssetManager $assetManager + * @var TranslatorInterface $translator + * @var string $content * * @see \App\ApplicationViewInjection + * * @var User|null $user - * @var string $csrf - * @var string $brandLabel + * @var string $csrf + * @var string $brandLabel */ - $assetManager->register(AppAsset::class); $this->addCssFiles($assetManager->getCssFiles()); @@ -74,9 +74,9 @@ 'label' => $translator->translate('menu.blog'), 'url' => $urlGenerator->generate('blog/index'), 'active' => StringHelper::startsWith( - $currentRouteName, - 'blog/' - ) && $currentRouteName !== 'blog/comment/index', + $currentRouteName, + 'blog/' + ) && $currentRouteName !== 'blog/comment/index', ], [ 'label' => $translator->translate('menu.comments-feed'), @@ -125,6 +125,10 @@ 'label' => 'Indonesia', 'url' => $urlGenerator->generateFromCurrent(['_language' => 'id'], fallbackRouteName: 'site/index'), ], + [ + 'label' => 'German', + 'url' => $urlGenerator->generateFromCurrent(['_language' => 'de'], fallbackRouteName: 'site/index'), + ], ], ], [ @@ -147,7 +151,7 @@ ) ->class('btn btn-primary') . '
    ' - . Form::tag()->close() + . Form::tag()->close(), ], ) ?> @@ -193,4 +197,4 @@ endPage(true); +$this->endPage(); diff --git a/resources/views/signup/signup.php b/blog/resources/views/signup/signup.php similarity index 89% rename from resources/views/signup/signup.php rename to blog/resources/views/signup/signup.php index b7be38bd6..833e57edb 100644 --- a/resources/views/signup/signup.php +++ b/blog/resources/views/signup/signup.php @@ -3,7 +3,7 @@ declare(strict_types=1); use App\Auth\Form\SignupForm; -use Yiisoft\Form\Field; +use Yiisoft\FormModel\Field; use Yiisoft\Html\Html; use Yiisoft\Html\Tag\Form; use Yiisoft\Router\UrlGeneratorInterface; @@ -11,13 +11,12 @@ use Yiisoft\View\WebView; /** - * @var WebView $this - * @var TranslatorInterface $translator + * @var WebView $this + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var string $csrf - * @var SignupForm $formModel + * @var string $csrf + * @var SignupForm $formModel */ - $this->setTitle($translator->translate('signup')); ?> diff --git a/resources/views/site/404.php b/blog/resources/views/site/404.php similarity index 88% rename from resources/views/site/404.php rename to blog/resources/views/site/404.php index 5e9e678de..925a7518b 100644 --- a/resources/views/site/404.php +++ b/blog/resources/views/site/404.php @@ -9,12 +9,11 @@ use Yiisoft\View\WebView; /** - * @var TranslatorInterface $translator + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var CurrentRoute $currentRoute - * @var WebView $this + * @var CurrentRoute $currentRoute + * @var WebView $this */ - $this->setTitle($translator->translate('layout.not-found')); ?> @@ -28,7 +27,7 @@ ->getUri() ->getPath()), ['class' => 'text-muted'] - ) + ), ]) ?>

    diff --git a/resources/views/site/index.php b/blog/resources/views/site/index.php similarity index 98% rename from resources/views/site/index.php rename to blog/resources/views/site/index.php index a86090d0a..8e1796bbf 100644 --- a/resources/views/site/index.php +++ b/blog/resources/views/site/index.php @@ -8,9 +8,8 @@ /** * @var TranslatorInterface $translator - * @var WebView $this + * @var WebView $this */ - $this->setTitle('Home'); echo Carousel::widget() diff --git a/resources/views/user/index.php b/blog/resources/views/user/index.php similarity index 59% rename from resources/views/user/index.php rename to blog/resources/views/user/index.php index d5e4cec82..7720e2075 100644 --- a/resources/views/user/index.php +++ b/blog/resources/views/user/index.php @@ -2,6 +2,7 @@ declare(strict_types=1); +use App\User\User; use Yiisoft\Data\Paginator\OffsetPaginator; use Yiisoft\Html\Html; use Yiisoft\Html\Tag\A; @@ -20,14 +21,13 @@ use Yiisoft\Yii\DataView\OffsetPagination; /** - * @var string $csrf - * @var CurrentRoute $currentRoute - * @var OffsetPaginator $paginator - * @var TranslatorInterface $translator + * @var string $csrf + * @var CurrentRoute $currentRoute + * @var OffsetPaginator $paginator + * @var TranslatorInterface $translator * @var UrlGeneratorInterface $urlGenerator - * @var WebView $this + * @var WebView $this */ - $this->setTitle($translator->translate('menu.users')); // Define header gridview @@ -87,53 +87,52 @@ columns( - DataColumn::create() - ->attribute('id') - ->value(static fn (object $data) => $data->getId()), - DataColumn::create() - ->attribute('login') - ->label($translator->translate('gridview.login')) - ->value(static fn (object $data) => $data->getLogin()), - DataColumn::create() - ->attribute('create_at') - ->label($translator->translate('gridview.create.at')) - ->value(static fn (object $data) => $data->getCreatedAt()->format('r')), - DataColumn::create() - ->attribute('api') - ->label($translator->translate('gridview.api')) - ->value( - static function (object $data) use ($urlGenerator): string { - return Html::a( - 'API User Data', - $urlGenerator->generate('api/user/profile', ['login' => $data->getLogin()]), - ['target' => '_blank'], - )->render(); - }, - ), - DataColumn::create() - ->attribute('profile') - ->label($translator->translate('gridview.profile')) - ->value( - static function (object $data) use ($urlGenerator): string { - return Html::a( - Html::tag('i', '', [ - 'class' => 'bi bi-person-fill ms-1', - 'style' => 'font-size: 1.5em;', - ]), - $urlGenerator->generate('user/profile', ['login' => $data->getLogin()]), - ['class' => 'btn btn-link'], - )->render(); - }, - ), + new DataColumn( + 'id', + content: static fn (User $user) => $user->getId(), + ), + new DataColumn( + 'login', + content: static fn (User $user) => $user->getLogin(), + header: $translator->translate('gridview.login'), + ), + new DataColumn( + 'login', + content: static fn (User $user) => $user->getCreatedAt()->format('r'), + header: $translator->translate('gridview.create.at'), + ), + new DataColumn( + 'api', + content: static function (User $user) use ($urlGenerator): string { + return Html::a( + 'API User Data', + $urlGenerator->generate('api/user/profile', ['login' => $user->getLogin()]), + ['target' => '_blank'], + )->render(); + }, + header: $translator->translate('gridview.api'), + ), + new DataColumn( + 'profile', + content: static function (User $user) use ($urlGenerator): string { + return Html::a( + Html::tag('i', '', [ + 'class' => 'bi bi-person-fill ms-1', + 'style' => 'font-size: 1.5em;', + ]), + $urlGenerator->generate('user/profile', ['login' => $user->getLogin()]), + ['class' => 'btn btn-link'], + )->render(); + }, + header: $translator->translate('gridview.profile'), + ), ) ->header($header) ->id('w1-grid') - ->paginator($paginator) + ->dataReader($paginator) ->pagination( OffsetPagination::widget() - ->menuClass('pagination justify-content-center') ->paginator($paginator) - ->urlArguments([]) ->render(), ) ->rowAttributes(['class' => 'align-middle']) diff --git a/resources/views/user/profile.php b/blog/resources/views/user/profile.php similarity index 93% rename from resources/views/user/profile.php rename to blog/resources/views/user/profile.php index 64403daad..78e83360b 100644 --- a/resources/views/user/profile.php +++ b/blog/resources/views/user/profile.php @@ -5,11 +5,13 @@ /** * @var User $item * @var WebView $this + * @var $translator TranslatorInterface */ use App\User\User; use Yiisoft\Html\Html; use Yiisoft\Html\Tag\H2; +use Yiisoft\Translator\TranslatorInterface; use Yiisoft\View\WebView; use Yiisoft\Yii\DataView\DetailView; use Yiisoft\Yii\DataView\Field\DataField; diff --git a/blog/runtime/.gitignore b/blog/runtime/.gitignore new file mode 100755 index 000000000..d6b7ef32c --- /dev/null +++ b/blog/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/src/Asset/AppAsset.php b/blog/src/Asset/AppAsset.php similarity index 100% rename from src/Asset/AppAsset.php rename to blog/src/Asset/AppAsset.php diff --git a/src/Asset/Bootstrap5IconsAsset.php b/blog/src/Asset/Bootstrap5IconsAsset.php similarity index 100% rename from src/Asset/Bootstrap5IconsAsset.php rename to blog/src/Asset/Bootstrap5IconsAsset.php diff --git a/src/Auth/AuthService.php b/blog/src/Auth/AuthService.php similarity index 100% rename from src/Auth/AuthService.php rename to blog/src/Auth/AuthService.php diff --git a/src/Auth/Controller/AuthController.php b/blog/src/Auth/Controller/AuthController.php similarity index 73% rename from src/Auth/Controller/AuthController.php rename to blog/src/Auth/Controller/AuthController.php index da26e7823..036b77f20 100644 --- a/src/Auth/Controller/AuthController.php +++ b/blog/src/Auth/Controller/AuthController.php @@ -9,18 +9,17 @@ use App\Service\WebControllerService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; -use Yiisoft\Http\Method; +use Yiisoft\FormModel\FormHydrator; use Yiisoft\Translator\TranslatorInterface; use Yiisoft\User\Login\Cookie\CookieLogin; use Yiisoft\User\Login\Cookie\CookieLoginIdentityInterface; -use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class AuthController { public function __construct( - private AuthService $authService, - private WebControllerService $webService, + private readonly AuthService $authService, + private readonly WebControllerService $webService, private ViewRenderer $viewRenderer, ) { $this->viewRenderer = $viewRenderer->withControllerName('auth'); @@ -29,26 +28,19 @@ public function __construct( public function login( ServerRequestInterface $request, TranslatorInterface $translator, - ValidatorInterface $validator, + FormHydrator $formHydrator, CookieLogin $cookieLogin ): ResponseInterface { if (!$this->authService->isGuest()) { return $this->redirectToMain(); } - $body = $request->getParsedBody(); $loginForm = new LoginForm($this->authService, $translator); - if ( - $request->getMethod() === Method::POST - && $loginForm->load(is_array($body) ? $body : []) - && $validator - ->validate($loginForm) - ->isValid() - ) { + if ($formHydrator->populateFromPostAndValidate($loginForm, $request)) { $identity = $this->authService->getIdentity(); - if ($identity instanceof CookieLoginIdentityInterface && $loginForm->getAttributeValue('rememberMe')) { + if ($identity instanceof CookieLoginIdentityInterface && $loginForm->getPropertyValue('rememberMe')) { return $cookieLogin->addCookie($identity, $this->redirectToMain()); } diff --git a/src/Auth/Controller/SignupController.php b/blog/src/Auth/Controller/SignupController.php similarity index 81% rename from src/Auth/Controller/SignupController.php rename to blog/src/Auth/Controller/SignupController.php index 97cf232bb..3e15ee77b 100644 --- a/src/Auth/Controller/SignupController.php +++ b/blog/src/Auth/Controller/SignupController.php @@ -9,8 +9,8 @@ use App\Service\WebControllerService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; -use Yiisoft\Http\Method; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\FormModel\FormHydrator; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class SignupController { @@ -22,16 +22,15 @@ public function __construct(private WebControllerService $webService, private Vi public function signup( AuthService $authService, ServerRequestInterface $request, + FormHydrator $formHydrator, SignupForm $signupForm ): ResponseInterface { if (!$authService->isGuest()) { return $this->redirectToMain(); } - if ($request->getMethod() === Method::POST - && $signupForm->load($request->getParsedBody()) - && $signupForm->signup() - ) { + if ($formHydrator->populateFromPostAndValidate($signupForm, $request)) { + $signupForm->signup(); return $this->redirectToMain(); } diff --git a/src/Auth/Form/LoginForm.php b/blog/src/Auth/Form/LoginForm.php similarity index 67% rename from src/Auth/Form/LoginForm.php rename to blog/src/Auth/Form/LoginForm.php index 98e49308d..3a422278e 100644 --- a/src/Auth/Form/LoginForm.php +++ b/blog/src/Auth/Form/LoginForm.php @@ -5,24 +5,29 @@ namespace App\Auth\Form; use App\Auth\AuthService; -use Yiisoft\Form\FormModel; +use Yiisoft\FormModel\FormModel; use Yiisoft\Translator\TranslatorInterface; +use Yiisoft\Validator\PropertyTranslator\ArrayPropertyTranslator; +use Yiisoft\Validator\PropertyTranslatorInterface; +use Yiisoft\Validator\PropertyTranslatorProviderInterface; use Yiisoft\Validator\Result; use Yiisoft\Validator\Rule\Callback; use Yiisoft\Validator\Rule\Required; +use Yiisoft\Validator\RulesProviderInterface; -final class LoginForm extends FormModel +final class LoginForm extends FormModel implements RulesProviderInterface, PropertyTranslatorProviderInterface { private string $login = ''; private string $password = ''; private bool $rememberMe = false; - public function __construct(private AuthService $authService, private TranslatorInterface $translator) - { - parent::__construct(); + public function __construct( + private AuthService $authService, + private TranslatorInterface $translator, + ) { } - public function getAttributeLabels(): array + public function getPropertyLabels(): array { return [ 'login' => $this->translator->translate('layout.login'), @@ -53,9 +58,6 @@ private function passwordRules(): array $result = new Result(); if (!$this->authService->login($this->login, $this->password)) { - $this - ->getFormErrors() - ->addError('login', ''); $result->addError($this->translator->translate('validator.invalid.login.password')); } @@ -65,4 +67,9 @@ private function passwordRules(): array ), ]; } + + public function getPropertyTranslator(): ?PropertyTranslatorInterface + { + return new ArrayPropertyTranslator($this->getPropertyLabels()); + } } diff --git a/src/Auth/Form/SignupForm.php b/blog/src/Auth/Form/SignupForm.php similarity index 64% rename from src/Auth/Form/SignupForm.php rename to blog/src/Auth/Form/SignupForm.php index 2efc852e7..909e5e795 100644 --- a/src/Auth/Form/SignupForm.php +++ b/blog/src/Auth/Form/SignupForm.php @@ -6,29 +6,30 @@ use App\User\User; use App\User\UserRepository; -use Yiisoft\Form\FormModel; +use Yiisoft\FormModel\FormModel; use Yiisoft\Translator\TranslatorInterface; +use Yiisoft\Validator\PropertyTranslator\ArrayPropertyTranslator; +use Yiisoft\Validator\PropertyTranslatorInterface; +use Yiisoft\Validator\PropertyTranslatorProviderInterface; use Yiisoft\Validator\Result; use Yiisoft\Validator\Rule\Equal; -use Yiisoft\Validator\Rule\HasLength; +use Yiisoft\Validator\Rule\Length; use Yiisoft\Validator\Rule\Required; -use Yiisoft\Validator\ValidatorInterface; +use Yiisoft\Validator\RulesProviderInterface; -final class SignupForm extends FormModel +final class SignupForm extends FormModel implements RulesProviderInterface, PropertyTranslatorProviderInterface { private string $login = ''; private string $password = ''; private string $passwordVerify = ''; public function __construct( - private ValidatorInterface $validator, - private TranslatorInterface $translator, - private UserRepository $userRepository, + private readonly TranslatorInterface $translator, + private readonly UserRepository $userRepository, ) { - parent::__construct(); } - public function getAttributeLabels(): array + public function getPropertyLabels(): array { return [ 'login' => $this->translator->translate('layout.login'), @@ -52,14 +53,11 @@ public function getPassword(): string return $this->password; } - public function signup(): false|User + public function signup(): User { - if ($this->validator->validate($this)->isValid()) { - $user = new User($this->getLogin(), $this->getPassword()); - $this->userRepository->save($user); - return $user; - } - return false; + $user = new User($this->getLogin(), $this->getPassword()); + $this->userRepository->save($user); + return $user; } public function getRules(): array @@ -67,18 +65,19 @@ public function getRules(): array return [ 'login' => [ new Required(), - new HasLength(min: 1, max: 48, skipOnError: true), + new Length(min: 1, max: 48, skipOnError: true), function ($value): Result { $result = new Result(); if ($this->userRepository->findByLogin($value) !== null) { $result->addError('User with this login already exists.'); } + return $result; }, ], 'password' => [ new Required(), - new HasLength(min: 8), + new Length(min: 8), ], 'passwordVerify' => [ new Required(), @@ -89,4 +88,9 @@ function ($value): Result { ], ]; } + + public function getPropertyTranslator(): ?PropertyTranslatorInterface + { + return new ArrayPropertyTranslator($this->getPropertyLabels()); + } } diff --git a/src/Auth/Identity.php b/blog/src/Auth/Identity.php similarity index 100% rename from src/Auth/Identity.php rename to blog/src/Auth/Identity.php diff --git a/src/Auth/IdentityRepository.php b/blog/src/Auth/IdentityRepository.php similarity index 93% rename from src/Auth/IdentityRepository.php rename to blog/src/Auth/IdentityRepository.php index 559280c3a..69c9cbcb3 100644 --- a/src/Auth/IdentityRepository.php +++ b/blog/src/Auth/IdentityRepository.php @@ -7,7 +7,7 @@ use Cycle\ORM\Select; use Throwable; use Yiisoft\Auth\IdentityRepositoryInterface; -use Yiisoft\Yii\Cycle\Data\Writer\EntityWriter; +use Yiisoft\Data\Cycle\Writer\EntityWriter; final class IdentityRepository extends Select\Repository implements IdentityRepositoryInterface { diff --git a/src/Backend/Controller/SiteController.php b/blog/src/Backend/Controller/SiteController.php similarity index 91% rename from src/Backend/Controller/SiteController.php rename to blog/src/Backend/Controller/SiteController.php index 7014ef750..cc6045e09 100644 --- a/src/Backend/Controller/SiteController.php +++ b/blog/src/Backend/Controller/SiteController.php @@ -5,7 +5,7 @@ namespace App\Backend\Controller; use Psr\Http\Message\ResponseInterface; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class SiteController { diff --git a/src/Blog/Archive/ArchiveController.php b/blog/src/Blog/Archive/ArchiveController.php similarity index 72% rename from src/Blog/Archive/ArchiveController.php rename to blog/src/Blog/Archive/ArchiveController.php index 17cb1898c..25f0a4d0d 100644 --- a/src/Blog/Archive/ArchiveController.php +++ b/blog/src/Blog/Archive/ArchiveController.php @@ -7,8 +7,8 @@ use App\Blog\Tag\TagRepository; use Psr\Http\Message\ResponseInterface as Response; use Yiisoft\Data\Paginator\OffsetPaginator; -use Yiisoft\Router\CurrentRoute; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Router\HydratorAttribute\RouteArgument; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class ArchiveController { @@ -26,12 +26,13 @@ public function index(ArchiveRepository $archiveRepo): Response return $this->viewRenderer->render('index', ['archive' => $archiveRepo->getFullArchive()]); } - public function monthlyArchive(CurrentRoute $currentRoute, TagRepository $tagRepository, ArchiveRepository $archiveRepo): Response - { - $pageNum = (int)$currentRoute->getArgument('page', '1'); - $year = (int)$currentRoute->getArgument('year', '0'); - $month = (int)$currentRoute->getArgument('month', '0'); - + public function monthlyArchive( + TagRepository $tagRepository, + ArchiveRepository $archiveRepo, + #[RouteArgument('page')] int $pageNum = 1, + #[RouteArgument('year')] int $year = 0, + #[RouteArgument('month')] int $month = 0, + ): Response { $dataReader = $archiveRepo->getMonthlyArchive($year, $month); $paginator = (new OffsetPaginator($dataReader)) ->withPageSize(self::POSTS_PER_PAGE) @@ -46,17 +47,17 @@ public function monthlyArchive(CurrentRoute $currentRoute, TagRepository $tagRep ->withLimit(12), 'tags' => $tagRepository->getTagMentions(self::POPULAR_TAGS_COUNT), ]; + return $this->viewRenderer->render('monthly-archive', $data); } - public function yearlyArchive(CurrentRoute $currentRoute, ArchiveRepository $archiveRepo): Response + public function yearlyArchive(ArchiveRepository $archiveRepo, #[RouteArgument('year')] int $year = 0): Response { - $year = (int)$currentRoute->getArgument('year', '0'); - $data = [ 'year' => $year, 'items' => $archiveRepo->getYearlyArchive($year), ]; + return $this->viewRenderer->render('yearly-archive', $data); } } diff --git a/src/Blog/Archive/ArchiveRepository.php b/blog/src/Blog/Archive/ArchiveRepository.php similarity index 90% rename from src/Blog/Archive/ArchiveRepository.php rename to blog/src/Blog/Archive/ArchiveRepository.php index 5988b83e3..b9ce92bac 100644 --- a/src/Blog/Archive/ArchiveRepository.php +++ b/blog/src/Blog/Archive/ArchiveRepository.php @@ -6,20 +6,21 @@ use App\Blog\Entity\Post; use App\Blog\Post\PostRepository; -use Cycle\ORM\ORMInterface; -use Cycle\ORM\Select; use Cycle\Database\DatabaseInterface; use Cycle\Database\Driver\DriverInterface; use Cycle\Database\Driver\SQLite\SQLiteDriver; use Cycle\Database\Injection\Fragment; use Cycle\Database\Injection\FragmentInterface; use Cycle\Database\Query\SelectQuery; +use Cycle\ORM\ORMInterface; +use Cycle\ORM\Select; +use DateTimeImmutable; +use Yiisoft\Data\Cycle\Reader\EntityReader; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Yii\Cycle\Data\Reader\EntityReader; /** - * This repository is not associated with Post entity + * This repository is not associated with Post entity. */ final class ArchiveRepository { @@ -39,7 +40,7 @@ public function select(): Select public function getMonthlyArchive(int $year, int $month): DataReaderInterface { - $begin = (new \DateTimeImmutable()) + $begin = (new DateTimeImmutable()) ->setDate($year, $month, 1) ->setTime(0, 0, 0); $end = $begin @@ -50,12 +51,13 @@ public function getMonthlyArchive(int $year, int $month): DataReaderInterface ->select() ->andWhere('published_at', 'between', $begin, $end) ->load(['user', 'tags']); + return $this->prepareDataReader($query); } public function getYearlyArchive(int $year): DataReaderInterface { - $begin = (new \DateTimeImmutable()) + $begin = (new DateTimeImmutable()) ->setDate($year, 1, 1) ->setTime(0, 0, 0); $end = $begin @@ -67,6 +69,7 @@ public function getYearlyArchive(int $year): DataReaderInterface ->andWhere('published_at', 'between', $begin, $end) ->load('user', ['method' => Select::SINGLE_QUERY]) ->orderBy(['published_at' => 'asc']); + return $this->prepareDataReader($query); } @@ -103,9 +106,11 @@ private function extractFromDateColumn(string $attr): FragmentInterface ->quoteIdentifier($attr); if ($driver instanceof SQLiteDriver) { $str = ['year' => '%Y', 'month' => '%m', 'day' => '%d'][$attr]; - return new Fragment("strftime('{$str}', post.published_at) {$wrappedField}"); + + return new Fragment("strftime('$str', post.published_at) $wrappedField"); } - return new Fragment("extract({$attr} from post.published_at) {$wrappedField}"); + + return new Fragment("extract($attr from post.published_at) $wrappedField"); } private function getDriver(): DriverInterface diff --git a/src/Blog/BlogController.php b/blog/src/Blog/BlogController.php similarity index 86% rename from src/Blog/BlogController.php rename to blog/src/Blog/BlogController.php index cc045736e..7da0ad6fb 100644 --- a/src/Blog/BlogController.php +++ b/blog/src/Blog/BlogController.php @@ -9,9 +9,9 @@ use App\Blog\Tag\TagRepository; use Psr\Http\Message\ResponseInterface as Response; use Yiisoft\Data\Paginator\OffsetPaginator; -use Yiisoft\Router\CurrentRoute; +use Yiisoft\Router\HydratorAttribute\RouteArgument; use Yiisoft\User\CurrentUser; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class BlogController { @@ -31,13 +31,12 @@ public function index( TagRepository $tagRepository, ArchiveRepository $archiveRepo, CurrentUser $currentUser, - CurrentRoute $currentRoute + #[RouteArgument('page')] $pageNum = 1, ): Response { - $pageNum = (int)$currentRoute->getArgument('page', '1'); $dataReader = $postRepository->findAllPreloaded(); $paginator = (new OffsetPaginator($dataReader)) ->withPageSize(self::POSTS_PER_PAGE) - ->withCurrentPage($pageNum); + ->withCurrentPage((int)$pageNum); $data = [ 'paginator' => $paginator, @@ -47,6 +46,7 @@ public function index( 'tags' => $tagRepository->getTagMentions(self::POPULAR_TAGS_COUNT), 'isGuest' => $currentUser->isGuest(), ]; + return $this->viewRenderer->render('index', $data); } } diff --git a/src/Blog/Comment/CommentRepository.php b/blog/src/Blog/Comment/CommentRepository.php similarity index 59% rename from src/Blog/Comment/CommentRepository.php rename to blog/src/Blog/Comment/CommentRepository.php index 6318fdd2d..0a3ccdeca 100644 --- a/src/Blog/Comment/CommentRepository.php +++ b/blog/src/Blog/Comment/CommentRepository.php @@ -8,10 +8,15 @@ use Cycle\ORM\Select; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Yii\Cycle\Data\Reader\EntityReader; +use Yiisoft\Data\Cycle\Reader\EntityReader; final class CommentRepository extends Select\Repository { + public function __construct(Select $select) + { + parent::__construct($select); + } + /** * @psalm-return DataReaderInterface */ @@ -21,8 +26,16 @@ public function getReader(): DataReaderInterface ->withSort($this->getSort()); } - private function getSort(): Sort + public function getSort(): Sort { return Sort::only(['id', 'public', 'created_at', 'post_id', 'user_id'])->withOrder(['id' => 'asc']); } + + public function findAll(array $scope = [], array $orderBy = []): DataReaderInterface + { + return new EntityReader($this + ->select() + ->where($scope) + ->orderBy($orderBy)); + } } diff --git a/src/Blog/Comment/CommentService.php b/blog/src/Blog/Comment/CommentService.php similarity index 100% rename from src/Blog/Comment/CommentService.php rename to blog/src/Blog/Comment/CommentService.php diff --git a/src/Blog/Comment/Scope/PublicScope.php b/blog/src/Blog/Comment/Scope/PublicScope.php similarity index 98% rename from src/Blog/Comment/Scope/PublicScope.php rename to blog/src/Blog/Comment/Scope/PublicScope.php index 1b3d3d30c..8efb3c58a 100644 --- a/src/Blog/Comment/Scope/PublicScope.php +++ b/blog/src/Blog/Comment/Scope/PublicScope.php @@ -4,13 +4,13 @@ namespace App\Blog\Comment\Scope; -use Cycle\ORM\Select\ScopeInterface as ConstrainInterface; use Cycle\ORM\Select\QueryBuilder; +use Cycle\ORM\Select\ScopeInterface as ConstrainInterface; /** * Not deleted * Public with condition - * Sorted + * Sorted. */ final class PublicScope implements ConstrainInterface { diff --git a/blog/src/Blog/CommentController.php b/blog/src/Blog/CommentController.php new file mode 100644 index 000000000..e0d3fbe55 --- /dev/null +++ b/blog/src/Blog/CommentController.php @@ -0,0 +1,58 @@ +viewRenderer = $viewRenderer->withControllerName('blog/comments'); + } + + public function index( + Request $request, + CommentRepository $repository, + #[Body] ?array $body, + #[Query('sort')] ?string $sortOrder = null, + #[RouteArgument('page')] int $page = 1, + #[RouteArgument('pagesize')] int $pageSize = null, + ): Response { + $dataReader = $repository + ->findAll() + ->withSort($repository->getSort() + ->withOrderString($sortOrder ?? 'id')); + + if ($pageSize === null) { + $pageSize = (int) ($body['pageSize'] ?? self::COMMENTS_FEED_PER_PAGE); + } + $paginator = (new OffsetPaginator($dataReader)); + $paginator = $paginator->withToken(PageToken::next((string) $page))->withPageSize($pageSize); + + + if ($this->isAjaxRequest($request)) { + return $this->viewRenderer->renderPartial('_comments', ['data' => $paginator]); + } + + return $this->viewRenderer->render('index', ['data' => $paginator]); + } + + private function isAjaxRequest(Request $request): bool + { + return $request->getHeaderLine('X-Requested-With') === 'XMLHttpRequest'; + } +} diff --git a/src/Blog/Entity/Comment.php b/blog/src/Blog/Entity/Comment.php similarity index 95% rename from src/Blog/Entity/Comment.php rename to blog/src/Blog/Entity/Comment.php index d49badd97..db9fc2eb9 100644 --- a/src/Blog/Entity/Comment.php +++ b/blog/src/Blog/Entity/Comment.php @@ -4,6 +4,8 @@ namespace App\Blog\Entity; +use App\Blog\Comment\CommentRepository; +use App\Blog\Comment\Scope\PublicScope; use App\User\User; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Entity; @@ -13,8 +15,8 @@ use DateTimeImmutable; #[Entity( - repository: \App\Blog\Comment\CommentRepository::class, - scope: \App\Blog\Comment\Scope\PublicScope::class + repository: CommentRepository::class, + scope: PublicScope::class )] #[Index(columns: ['public', 'published_at'])] #[Behavior\CreatedAt(field: 'created_at', column: 'created_at')] diff --git a/src/Blog/Entity/Post.php b/blog/src/Blog/Entity/Post.php similarity index 96% rename from src/Blog/Entity/Post.php rename to blog/src/Blog/Entity/Post.php index ec400787c..112d8b7db 100644 --- a/src/Blog/Entity/Post.php +++ b/blog/src/Blog/Entity/Post.php @@ -4,6 +4,8 @@ namespace App\Blog\Entity; +use App\Blog\Post\PostRepository; +use App\Blog\Post\Scope\PublicScope; use App\User\User; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Entity; @@ -18,8 +20,8 @@ use Yiisoft\Security\Random; #[Entity( - repository: \App\Blog\Post\PostRepository::class, - scope: \App\Blog\Post\Scope\PublicScope::class + repository: PostRepository::class, + scope: PublicScope::class )] #[Index(columns: ['public', 'published_at'])] #[Behavior\CreatedAt(field: 'created_at', column: 'created_at')] diff --git a/src/Blog/Entity/PostTag.php b/blog/src/Blog/Entity/PostTag.php similarity index 100% rename from src/Blog/Entity/PostTag.php rename to blog/src/Blog/Entity/PostTag.php diff --git a/src/Blog/Entity/Tag.php b/blog/src/Blog/Entity/Tag.php similarity index 95% rename from src/Blog/Entity/Tag.php rename to blog/src/Blog/Entity/Tag.php index ee8d1782d..f449280b5 100644 --- a/src/Blog/Entity/Tag.php +++ b/blog/src/Blog/Entity/Tag.php @@ -4,6 +4,7 @@ namespace App\Blog\Entity; +use App\Blog\Tag\TagRepository; use Cycle\Annotated\Annotation\Column; use Cycle\Annotated\Annotation\Entity; use Cycle\Annotated\Annotation\Relation\ManyToMany; @@ -12,7 +13,7 @@ use Cycle\ORM\Entity\Behavior; use DateTimeImmutable; -#[Entity(repository: \App\Blog\Tag\TagRepository::class)] +#[Entity(repository: TagRepository::class)] #[Index(columns: ['label'], unique: true)] #[Behavior\CreatedAt(field: 'created_at', column: 'created_at')] class Tag diff --git a/src/Blog/Post/PostController.php b/blog/src/Blog/Post/PostController.php similarity index 82% rename from src/Blog/Post/PostController.php rename to blog/src/Blog/Post/PostController.php index 592a62aa3..0530d8d0e 100644 --- a/src/Blog/Post/PostController.php +++ b/blog/src/Blog/Post/PostController.php @@ -9,10 +9,10 @@ use App\User\UserService; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; +use Yiisoft\FormModel\FormHydrator; use Yiisoft\Http\Method; use Yiisoft\Router\CurrentRoute; -use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class PostController { @@ -37,7 +37,7 @@ public function index(CurrentRoute $currentRoute, PostRepository $postRepository return $this->viewRenderer->render('index', ['item' => $item, 'canEdit' => $canEdit, 'slug' => $slug]); } - public function add(Request $request, ValidatorInterface $validator): Response + public function add(Request $request, FormHydrator $formHydrator): Response { $parameters = [ 'title' => 'Add post', @@ -48,14 +48,13 @@ public function add(Request $request, ValidatorInterface $validator): Response if ($request->getMethod() === Method::POST) { $form = new PostForm(); - if ($form->load($parameters['body']) && $validator - ->validate($form) - ->isValid()) { + if ($formHydrator->populateAndValidate($form, $parameters['body'])) { $this->postService->savePost($this->userService->getUser(), new Post(), $form); + return $this->webService->getRedirectResponse('blog/index'); } - $parameters['errors'] = $form->getFormErrors(); + $parameters['errors'] = $form->getValidationResult()->getErrorMessagesIndexedByProperty(); } return $this->viewRenderer->render('__form', $parameters); @@ -64,8 +63,8 @@ public function add(Request $request, ValidatorInterface $validator): Response public function edit( Request $request, PostRepository $postRepository, - ValidatorInterface $validator, - CurrentRoute $currentRoute + CurrentRoute $currentRoute, + FormHydrator $formHydrator ): Response { $slug = $currentRoute->getArgument('slug'); $post = $postRepository->fullPostPage($slug); @@ -87,15 +86,13 @@ public function edit( if ($request->getMethod() === Method::POST) { $form = new PostForm(); $body = $request->getParsedBody(); - if ($form->load($body) && $validator - ->validate($form) - ->isValid()) { + if ($formHydrator->populateAndValidate($form, $body)) { $this->postService->savePost($this->userService->getUser(), $post, $form); return $this->webService->getRedirectResponse('blog/index'); } $parameters['body'] = $body; - $parameters['errors'] = $form->getFormErrors(); + $parameters['errors'] = $form->getValidationResult()->getErrorMessagesIndexedByProperty(); } return $this->viewRenderer->render('__form', $parameters); diff --git a/src/Blog/Post/PostForm.php b/blog/src/Blog/Post/PostForm.php similarity index 74% rename from src/Blog/Post/PostForm.php rename to blog/src/Blog/Post/PostForm.php index 05890ce7f..6c9b0c083 100644 --- a/src/Blog/Post/PostForm.php +++ b/blog/src/Blog/Post/PostForm.php @@ -4,13 +4,17 @@ namespace App\Blog\Post; -use Yiisoft\Form\FormModel; +use Yiisoft\FormModel\FormModel; use Yiisoft\Validator\Rule\Required; final class PostForm extends FormModel { + #[Required] private ?string $title = null; + + #[Required] private ?string $content = null; + private array $tags = []; public function getTitle(): string @@ -32,12 +36,4 @@ public function getTags(): array { return $this->tags; } - - public function getRules(): array - { - return [ - 'title' => [new Required()], - 'content' => [new Required()], - ]; - } } diff --git a/src/Blog/Post/PostRepository.php b/blog/src/Blog/Post/PostRepository.php similarity index 93% rename from src/Blog/Post/PostRepository.php rename to blog/src/Blog/Post/PostRepository.php index ba3a9052d..0207d7a32 100644 --- a/src/Blog/Post/PostRepository.php +++ b/blog/src/Blog/Post/PostRepository.php @@ -9,10 +9,10 @@ use DateTimeImmutable; use DateTimeInterface; use Throwable; +use Yiisoft\Data\Cycle\Reader\EntityReader; +use Yiisoft\Data\Cycle\Writer\EntityWriter; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Yii\Cycle\Data\Reader\EntityReader; -use Yiisoft\Yii\Cycle\Data\Writer\EntityWriter; final class PostRepository extends Select\Repository { @@ -22,7 +22,7 @@ public function __construct(private EntityWriter $entityWriter, Select $select) } /** - * Get posts without filter with preloaded Users and Tags + * Get posts without filter with preloaded Users and Tags. * * @psalm-return DataReaderInterface */ @@ -31,6 +31,7 @@ public function findAllPreloaded(): DataReaderInterface $query = $this ->select() ->load(['user', 'tags']); + return $this->prepareDataReader($query); } @@ -43,6 +44,7 @@ public function findByTag($tagId): DataReaderInterface ->select() ->where(['tags.id' => $tagId]) ->load('user', ['method' => Select::SINGLE_QUERY]); + return $this->prepareDataReader($query); } @@ -56,6 +58,7 @@ public function fullPostPage(string $slug): ?Post // force loading in single query with comments ->load('comments.user', ['method' => Select::SINGLE_QUERY]) ->load('comments', ['method' => Select::OUTER_QUERY]); + return $query->fetchOne(); } diff --git a/src/Blog/Post/PostService.php b/blog/src/Blog/Post/PostService.php similarity index 100% rename from src/Blog/Post/PostService.php rename to blog/src/Blog/Post/PostService.php diff --git a/src/Blog/Post/Scope/PublicScope.php b/blog/src/Blog/Post/Scope/PublicScope.php similarity index 100% rename from src/Blog/Post/Scope/PublicScope.php rename to blog/src/Blog/Post/Scope/PublicScope.php index 5c6e37f7b..0456d684d 100644 --- a/src/Blog/Post/Scope/PublicScope.php +++ b/blog/src/Blog/Post/Scope/PublicScope.php @@ -4,8 +4,8 @@ namespace App\Blog\Post\Scope; -use Cycle\ORM\Select\ScopeInterface as ConstrainInterface; use Cycle\ORM\Select\QueryBuilder; +use Cycle\ORM\Select\ScopeInterface as ConstrainInterface; final class PublicScope implements ConstrainInterface { diff --git a/src/Blog/Tag/TagController.php b/blog/src/Blog/Tag/TagController.php similarity index 96% rename from src/Blog/Tag/TagController.php rename to blog/src/Blog/Tag/TagController.php index 43ea522c9..277aeeae9 100644 --- a/src/Blog/Tag/TagController.php +++ b/blog/src/Blog/Tag/TagController.php @@ -9,7 +9,7 @@ use Psr\Http\Message\ResponseInterface as Response; use Yiisoft\Data\Paginator\OffsetPaginator; use Yiisoft\Router\CurrentRoute; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class TagController { @@ -39,6 +39,7 @@ public function index(CurrentRoute $currentRoute, TagRepository $tagRepository, 'item' => $item, 'paginator' => $paginator, ]; + return $this->viewRenderer->render('index', $data); } } diff --git a/src/Blog/Tag/TagRepository.php b/blog/src/Blog/Tag/TagRepository.php similarity index 95% rename from src/Blog/Tag/TagRepository.php rename to blog/src/Blog/Tag/TagRepository.php index 6b149a2c7..6963efbd9 100644 --- a/src/Blog/Tag/TagRepository.php +++ b/blog/src/Blog/Tag/TagRepository.php @@ -11,9 +11,9 @@ use Cycle\ORM\ORMInterface; use Cycle\ORM\Select; use Cycle\ORM\Select\Repository; +use Yiisoft\Data\Cycle\Reader\EntityReader; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Yii\Cycle\Data\Reader\EntityReader; final class TagRepository extends Repository { @@ -25,6 +25,7 @@ public function __construct(private ORMInterface $orm, Select $select) public function getOrCreate(string $label): Tag { $tag = $this->findByLabel($label); + return $tag ?? new Tag($label); } @@ -53,7 +54,7 @@ public function getTagMentions(int $limit = 0): DataReaderInterface // All SQL-queries received on mysql database. SQL-queries may vary by driver /** - * Case 1 would look like: + * Case 1 would look like:. * * SELECT `t`.`label`, count(*) `count` * FROM `post_tag` AS `postTag` @@ -76,7 +77,7 @@ public function getTagMentions(int $limit = 0): DataReaderInterface ->groupBy('t.label, tag_id'); /** - * Case 2 would look like: + * Case 2 would look like:. * * SELECT `label`, count(*) `count` * FROM `tag` AS `tag` @@ -95,7 +96,7 @@ public function getTagMentions(int $limit = 0): DataReaderInterface ->groupBy('tag.label, tag_id'); /** - * Case 3 would look like: + * Case 3 would look like:. * * SELECT `label`, count(*) `count` * FROM `tag` AS `tag` @@ -114,7 +115,7 @@ public function getTagMentions(int $limit = 0): DataReaderInterface ->columns(['label', 'count(*) count']); /** - * Case 4 would look like: + * Case 4 would look like:. * * SELECT `label`, count(*) `count` * FROM `post` AS `post` @@ -133,6 +134,7 @@ public function getTagMentions(int $limit = 0): DataReaderInterface ->columns(['label', 'count(*) count']); $sort = Sort::only(['count', 'label'])->withOrder(['count' => 'desc']); + return (new EntityReader($case3)) ->withSort($sort) ->withLimit($limit); diff --git a/src/Blog/Widget/PostCard.php b/blog/src/Blog/Widget/PostCard.php similarity index 98% rename from src/Blog/Widget/PostCard.php rename to blog/src/Blog/Widget/PostCard.php index e83991ab9..94d87be22 100644 --- a/src/Blog/Widget/PostCard.php +++ b/blog/src/Blog/Widget/PostCard.php @@ -19,7 +19,7 @@ public function __construct(private UrlGeneratorInterface $urlGenerator) { } - protected function run(): string + public function render(): string { if (!isset($this->options['id'])) { $this->options['id'] = "{$this->getId()}-post-card"; @@ -70,6 +70,7 @@ protected function renderBody(): string mb_substr($this->post->getContent(), 0, 400) . (mb_strlen($this->post->getContent()) > 400 ? '…' : '') ); + return $return . Html::closeTag('div'); } @@ -83,6 +84,7 @@ protected function renderTags(): string ['class' => 'btn btn-outline-secondary btn-sm me-2 mt-1'] ); } + return $return . Html::closeTag('div'); } diff --git a/src/Command/Fixture/AddCommand.php b/blog/src/Command/Fixture/AddCommand.php similarity index 80% rename from src/Command/Fixture/AddCommand.php rename to blog/src/Command/Fixture/AddCommand.php index a20dcf2dd..f9e7cfd2e 100644 --- a/src/Command/Fixture/AddCommand.php +++ b/blog/src/Command/Fixture/AddCommand.php @@ -14,14 +14,16 @@ use Exception; use Faker\Factory; use Faker\Generator; +use Psr\Log\LoggerInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; +use Throwable; +use Yiisoft\Data\Cycle\Writer\EntityWriter; use Yiisoft\Yii\Console\ExitCode; use Yiisoft\Yii\Cycle\Command\CycleDependencyProxy; -use Yiisoft\Yii\Cycle\Data\Writer\EntityWriter; final class AddCommand extends Command { @@ -37,7 +39,8 @@ final class AddCommand extends Command public function __construct( private CycleDependencyProxy $promise, - private EntityManager $entityManager + private EntityManager $entityManager, + private readonly LoggerInterface $logger, ) { parent::__construct(); } @@ -54,10 +57,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); - $count = (int)$input->getArgument('count'); + $count = (int) $input->getArgument('count'); // get faker if (!class_exists(Factory::class)) { $io->error('Faker should be installed. Run `composer install --dev`'); + return ExitCode::UNSPECIFIED_ERROR; } $this->faker = Factory::create(); @@ -68,11 +72,14 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->addPosts($count); $this->saveEntities(); - } catch (\Throwable $t) { + } catch (Throwable $t) { $io->error($t->getMessage()); + $this->logger->error($t->getMessage(), ['exception' => $t]); + return $t->getCode() ?: ExitCode::UNSPECIFIED_ERROR; } $io->success('Done'); + return ExitCode::OK; } @@ -83,7 +90,7 @@ private function saveEntities(): void private function addUsers(int $count): void { - for ($i = 0; $i < $count; ++$i) { + for ($i = 0; $i < $count; $i++) { $login = $this->faker->unique()->firstName; $user = new User($login, $login); $this->users[] = $user; @@ -98,11 +105,11 @@ private function addTags(int $count): void ->getRepository(Tag::class); $this->tags = []; $tagWords = []; - for ($i = 0, $fails = 0; $i < $count; ++$i) { + for ($i = 0, $fails = 0; $i < $count; $i++) { $word = $this->faker->word(); if (in_array($word, $tagWords, true)) { - --$i; - ++$fails; + $i--; + $fails++; if ($fails >= $count) { break; } @@ -119,18 +126,18 @@ private function addPosts(int $count): void if (empty($this->users)) { throw new Exception('No users'); } - for ($i = 0; $i < $count; ++$i) { + for ($i = 0; $i < $count; $i++) { /** @var User $postUser */ $postUser = $this->users[array_rand($this->users)]; - $post = new Post($this->faker->text(64), $this->faker->realText(rand(1000, 4000))); + $post = new Post($this->faker->text(64), $this->faker->realText(random_int(1000, 4000))); $postUser->addPost($post); - $public = rand(0, 2) > 0; + $public = random_int(0, 2) > 0; $post->setPublic($public); if ($public) { - $post->setPublishedAt(new DateTimeImmutable(date('r', rand(time(), strtotime('-2 years'))))); + $post->setPublishedAt(new DateTimeImmutable(date('r', random_int(strtotime('-2 years'), time())))); } // link tags - $postTags = (array)array_rand($this->tags, rand(1, count($this->tags))); + $postTags = (array) array_rand($this->tags, random_int(1, count($this->tags))); foreach ($postTags as $tagId) { $tag = $this->tags[$tagId]; $post->addTag($tag); @@ -138,13 +145,13 @@ private function addPosts(int $count): void // $tag->addPost($post); } // add comments - $commentsCount = rand(0, $count); - for ($j = 0; $j <= $commentsCount; ++$j) { - $comment = new Comment($this->faker->realText(rand(100, 500))); - $commentPublic = rand(0, 3) > 0; + $commentsCount = random_int(0, $count); + for ($j = 0; $j <= $commentsCount; $j++) { + $comment = new Comment($this->faker->realText(random_int(100, 500))); + $commentPublic = random_int(0, 3) > 0; $comment->setPublic($commentPublic); if ($commentPublic) { - $comment->setPublishedAt(new DateTimeImmutable(date('r', rand(time(), strtotime('-1 years'))))); + $comment->setPublishedAt(new DateTimeImmutable(date('r', random_int(strtotime('-1 years'), time())))); } $commentUser = $this->users[array_rand($this->users)]; $commentUser->addComment($comment); diff --git a/src/Command/Fixture/SchemaClearCommand.php b/blog/src/Command/Fixture/SchemaClearCommand.php similarity index 100% rename from src/Command/Fixture/SchemaClearCommand.php rename to blog/src/Command/Fixture/SchemaClearCommand.php index 37ed4a108..b0a18ea05 100644 --- a/src/Command/Fixture/SchemaClearCommand.php +++ b/blog/src/Command/Fixture/SchemaClearCommand.php @@ -4,16 +4,16 @@ namespace App\Command\Fixture; +use App\Blog\Entity\Comment; +use App\Blog\Entity\Post; use App\Blog\Entity\PostTag; use App\Blog\Entity\Tag; +use App\User\User; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Yiisoft\Yii\Console\ExitCode; use Yiisoft\Yii\Cycle\Command\CycleDependencyProxy; -use App\Blog\Entity\Comment; -use App\Blog\Entity\Post; -use App\User\User; final class SchemaClearCommand extends Command { diff --git a/src/Command/Router/ListCommand.php b/blog/src/Command/Router/ListCommand.php similarity index 99% rename from src/Command/Router/ListCommand.php rename to blog/src/Command/Router/ListCommand.php index 27c163499..4f1d3baf3 100644 --- a/src/Command/Router/ListCommand.php +++ b/blog/src/Command/Router/ListCommand.php @@ -58,6 +58,7 @@ static function (Route $a, Route $b) { $table->setColumnMaxWidth(2, 15); $table->setColumnMaxWidth(3, 15); $table->render(); + return ExitCode::OK; } } diff --git a/src/Command/Translation/TranslateCommand.php b/blog/src/Command/Translation/TranslateCommand.php similarity index 99% rename from src/Command/Translation/TranslateCommand.php rename to blog/src/Command/Translation/TranslateCommand.php index db4760f5d..a2fb9d55c 100644 --- a/src/Command/Translation/TranslateCommand.php +++ b/blog/src/Command/Translation/TranslateCommand.php @@ -32,6 +32,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $locale = $input->getArgument('locale'); $output->writeln($this->translator->translate($message, [], null, $locale)); + return 0; } } diff --git a/src/Contact/ContactController.php b/blog/src/Contact/ContactController.php similarity index 53% rename from src/Contact/ContactController.php rename to blog/src/Contact/ContactController.php index aaeb807ba..ee855b4fe 100644 --- a/src/Contact/ContactController.php +++ b/blog/src/Contact/ContactController.php @@ -7,12 +7,11 @@ use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use Yiisoft\FormModel\FormHydrator; use Yiisoft\Http\Header; -use Yiisoft\Http\Method; use Yiisoft\Http\Status; use Yiisoft\Router\UrlGeneratorInterface; -use Yiisoft\Validator\ValidatorInterface; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class ContactController { @@ -28,21 +27,18 @@ public function __construct( } public function contact( - ValidatorInterface $validator, - ServerRequestInterface $request + FormHydrator $formHydrator, + ServerRequestInterface $request, ): ResponseInterface { - $body = $request->getParsedBody(); $form = new ContactForm(); - if (($request->getMethod() === Method::POST) && $form->load((array)$body) && $validator - ->validate($form) - ->isValid()) { - $this->mailer->send($form, $request); - - return $this->responseFactory - ->createResponse(Status::FOUND) - ->withHeader(Header::LOCATION, $this->url->generate('site/contact')); + if (!$formHydrator->populateFromPostAndValidate($form, $request)) { + return $this->viewRenderer->render('form', ['form' => $form]); } - return $this->viewRenderer->render('form', ['form' => $form]); + $this->mailer->send($form); + + return $this->responseFactory + ->createResponse(Status::FOUND) + ->withHeader(Header::LOCATION, $this->url->generate('site/contact')); } } diff --git a/src/Contact/ContactForm.php b/blog/src/Contact/ContactForm.php similarity index 51% rename from src/Contact/ContactForm.php rename to blog/src/Contact/ContactForm.php index 182570215..b5ad5304d 100644 --- a/src/Contact/ContactForm.php +++ b/blog/src/Contact/ContactForm.php @@ -4,19 +4,26 @@ namespace App\Contact; -use Yiisoft\Form\FormModel; +use Yiisoft\FormModel\FormModel; +use Yiisoft\Input\Http\Attribute\Parameter\UploadedFiles; +use Yiisoft\Validator\PropertyTranslator\ArrayPropertyTranslator; +use Yiisoft\Validator\PropertyTranslatorInterface; +use Yiisoft\Validator\PropertyTranslatorProviderInterface; use Yiisoft\Validator\Rule\Email; use Yiisoft\Validator\Rule\Required; +use Yiisoft\Validator\RulesProviderInterface; -final class ContactForm extends FormModel +final class ContactForm extends FormModel implements RulesProviderInterface, PropertyTranslatorProviderInterface { private string $name = ''; private string $email = ''; private string $subject = ''; private string $body = ''; - private ?array $attachFiles = null; - public function getAttributeLabels(): array + #[UploadedFiles('ContactForm.attachFiles')] + private array $attachFiles = []; + + public function getPropertyLabels(): array { return [ 'name' => 'Name', @@ -40,4 +47,9 @@ public function getRules(): array 'body' => [new Required()], ]; } + + public function getPropertyTranslator(): ?PropertyTranslatorInterface + { + return new ArrayPropertyTranslator($this->getPropertyLabels()); + } } diff --git a/src/Contact/ContactMailer.php b/blog/src/Contact/ContactMailer.php similarity index 74% rename from src/Contact/ContactMailer.php rename to blog/src/Contact/ContactMailer.php index da90fe7f5..82fea5807 100644 --- a/src/Contact/ContactMailer.php +++ b/blog/src/Contact/ContactMailer.php @@ -5,16 +5,14 @@ namespace App\Contact; use Exception; -use Psr\Http\Message\ServerRequestInterface; use Psr\Log\LoggerInterface; -use Yiisoft\Form\FormModelInterface; use Yiisoft\Mailer\File; use Yiisoft\Mailer\MailerInterface; use Yiisoft\Mailer\MessageBodyTemplate; use Yiisoft\Session\Flash\FlashInterface; /** - * ContactMailer sends an email from the contact form + * ContactMailer sends an email from the contact form. */ final class ContactMailer { @@ -28,27 +26,26 @@ public function __construct( $this->mailer = $this->mailer->withTemplate(new MessageBodyTemplate(__DIR__ . '/mail/')); } - public function send(FormModelInterface $form, ServerRequestInterface $request): void + public function send(ContactForm $form): void { $message = $this->mailer ->compose( 'contact-email', [ - 'content' => $form->getAttributeValue('body'), + 'content' => $form->getPropertyValue('body'), ] ) - ->withSubject($form->getAttributeValue('subject')) - ->withFrom([$form->getAttributeValue('email') => $form->getAttributeValue('name')]) + ->withSubject($form->getPropertyValue('subject')) + ->withFrom([$form->getPropertyValue('email') => $form->getPropertyValue('name')]) ->withSender($this->sender) ->withTo($this->to); - $attachFiles = $request->getUploadedFiles(); - foreach ($attachFiles as $attachFile) { + foreach ($form->getPropertyValue('attachFiles') as $attachFile) { foreach ($attachFile as $file) { if ($file[0]?->getError() === UPLOAD_ERR_OK) { $message = $message->withAttached( File::fromContent( - (string)$file->getStream(), + (string) $file->getStream(), $file->getClientFilename(), $file->getClientMediaType() ), diff --git a/src/Contact/mail/contact-email.php b/blog/src/Contact/mail/contact-email.php similarity index 99% rename from src/Contact/mail/contact-email.php rename to blog/src/Contact/mail/contact-email.php index 584eedff7..9cfe7a4d8 100644 --- a/src/Contact/mail/contact-email.php +++ b/blog/src/Contact/mail/contact-email.php @@ -5,5 +5,4 @@ use Yiisoft\Html\Html; /** @var string $content */ - echo Html::p(Html::encode($content)); diff --git a/src/Contact/mail/layouts/html.php b/blog/src/Contact/mail/layouts/html.php similarity index 100% rename from src/Contact/mail/layouts/html.php rename to blog/src/Contact/mail/layouts/html.php diff --git a/src/Contact/views/contact/form.php b/blog/src/Contact/views/contact/form.php similarity index 87% rename from src/Contact/views/contact/form.php rename to blog/src/Contact/views/contact/form.php index 11338dbf4..60ab70392 100644 --- a/src/Contact/views/contact/form.php +++ b/blog/src/Contact/views/contact/form.php @@ -2,20 +2,22 @@ declare(strict_types=1); +use App\Contact\ContactForm; use App\Widget\FlashMessage; -use Yiisoft\Form\Field; +use Yiisoft\FormModel\Field; use Yiisoft\Html\Html; use Yiisoft\Html\Tag\Form; +use Yiisoft\Router\UrlGeneratorInterface; +use Yiisoft\Translator\TranslatorInterface; use Yiisoft\View\WebView; /** - * @var Yiisoft\Yii\View\Csrf $csrf - * @var \App\Contact\ContactForm $form - * @var \Yiisoft\Router\UrlGeneratorInterface $url - * @var WebView $this - * @var \Yiisoft\Translator\TranslatorInterface $translator + * @var Yiisoft\Yii\View\Renderer\Csrf $csrf + * @var ContactForm $form + * @var UrlGeneratorInterface $url + * @var WebView $this + * @var TranslatorInterface $translator */ - $this->setTitle($translator->translate('menu.contact')); ?> diff --git a/blog/src/Controller/Actions/ApiInfo.php b/blog/src/Controller/Actions/ApiInfo.php new file mode 100644 index 000000000..f4e65c51c --- /dev/null +++ b/blog/src/Controller/Actions/ApiInfo.php @@ -0,0 +1,50 @@ +responseFactory = $responseFactory; + } + + #[OA\Get( + path: '/api/info/v2', + description: '', + summary: 'Returns info about the API', + responses: [ + new OA\Response( + response:'200', + description:'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property(property: 'data', properties: [ + new OA\Property(property: 'version', type: 'string', example: '2.0'), + new OA\Property(property: 'author', type: 'string', example: 'yiisoft'), + ], type: 'object'), + ]), + ] + ), + ), + ] + )] + public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface + { + return $this->responseFactory->createResponse(['version' => '2.0', 'author' => 'yiisoft']); + } +} diff --git a/src/Controller/SiteController.php b/blog/src/Controller/SiteController.php similarity index 89% rename from src/Controller/SiteController.php rename to blog/src/Controller/SiteController.php index 086730be2..cbceaa931 100644 --- a/src/Controller/SiteController.php +++ b/blog/src/Controller/SiteController.php @@ -5,7 +5,7 @@ namespace App\Controller; use Psr\Http\Message\ResponseInterface; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class SiteController { diff --git a/src/Handler/NotFoundHandler.php b/blog/src/Handler/NotFoundHandler.php similarity index 93% rename from src/Handler/NotFoundHandler.php rename to blog/src/Handler/NotFoundHandler.php index 3b689b0e8..84a9187c5 100644 --- a/src/Handler/NotFoundHandler.php +++ b/blog/src/Handler/NotFoundHandler.php @@ -8,7 +8,7 @@ use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; use Yiisoft\Http\Status; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class NotFoundHandler implements RequestHandlerInterface { diff --git a/blog/src/Installer.php b/blog/src/Installer.php new file mode 100644 index 000000000..015753369 --- /dev/null +++ b/blog/src/Installer.php @@ -0,0 +1,40 @@ +permission === null) { - throw new \InvalidArgumentException('Permission not set.'); + throw new InvalidArgumentException('Permission not set.'); } if (!$this->userService->hasPermission($this->permission)) { @@ -39,6 +40,7 @@ public function withPermission(string $permission): self { $new = clone $this; $new->permission = $permission; + return $new; } } diff --git a/src/Middleware/ApiDataWrapper.php b/blog/src/Middleware/ApiDataWrapper.php similarity index 77% rename from src/Middleware/ApiDataWrapper.php rename to blog/src/Middleware/ApiDataWrapper.php index b2d3cbfeb..89793e308 100644 --- a/src/Middleware/ApiDataWrapper.php +++ b/blog/src/Middleware/ApiDataWrapper.php @@ -9,7 +9,16 @@ use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; use Yiisoft\DataResponse\DataResponse; +use OpenApi\Attributes as OA; +#[OA\Schema( + schema: 'Response', + properties: [ + new OA\Property(property: 'status', type: 'string', enum: ['success', 'failed']), + new OA\Property(property: 'error', type:'object', nullable: true), + new OA\Property(property: 'data', type: 'object', nullable: true), + ] +)] final class ApiDataWrapper implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface @@ -23,11 +32,13 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface } else { $message = 'Unknown error'; } + return $response->withData([ 'status' => 'failed', 'error' => ['message' => $message, 'status' => $response->getStatusCode()], ]); } + return $response->withData(['status' => 'success', 'data' => $data]); } diff --git a/src/Service/WebControllerService.php b/blog/src/Service/WebControllerService.php similarity index 100% rename from src/Service/WebControllerService.php rename to blog/src/Service/WebControllerService.php diff --git a/src/Timer.php b/blog/src/Timer.php similarity index 76% rename from src/Timer.php rename to blog/src/Timer.php index cecd778e8..c86555b88 100644 --- a/src/Timer.php +++ b/blog/src/Timer.php @@ -4,6 +4,8 @@ namespace App; +use InvalidArgumentException; + final class Timer { private array $timers = []; @@ -16,7 +18,7 @@ public function start(string $name): void public function get(string $name): float { if (!array_key_exists($name, $this->timers)) { - throw new \InvalidArgumentException("There is no \"$name\" timer started"); + throw new InvalidArgumentException("There is no \"$name\" timer started"); } return microtime(true) - $this->timers[$name]; diff --git a/src/User/Console/AssignRoleCommand.php b/blog/src/User/Console/AssignRoleCommand.php similarity index 98% rename from src/User/Console/AssignRoleCommand.php rename to blog/src/User/Console/AssignRoleCommand.php index eaf5b51de..bd47c2d8e 100644 --- a/src/User/Console/AssignRoleCommand.php +++ b/blog/src/User/Console/AssignRoleCommand.php @@ -12,9 +12,10 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; use Symfony\Component\Console\Style\SymfonyStyle; +use Throwable; +use Yiisoft\Rbac\ItemsStorageInterface; use Yiisoft\Rbac\Manager; use Yiisoft\Rbac\Role; -use Yiisoft\Rbac\ItemsStorageInterface; use Yiisoft\Yii\Console\ExitCode; use Yiisoft\Yii\Cycle\Command\CycleDependencyProxy; @@ -75,8 +76,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->manager->assign($roleName, $userId); $io->success('Role was assigned to given user'); - } catch (\Throwable $t) { + } catch (Throwable $t) { $io->error($t->getMessage()); + return $t->getCode() ?: ExitCode::UNSPECIFIED_ERROR; } diff --git a/src/User/Console/CreateCommand.php b/blog/src/User/Console/CreateCommand.php similarity index 64% rename from src/User/Console/CreateCommand.php rename to blog/src/User/Console/CreateCommand.php index 53f16a42f..a8c8e23de 100644 --- a/src/User/Console/CreateCommand.php +++ b/blog/src/User/Console/CreateCommand.php @@ -5,12 +5,14 @@ namespace App\User\Console; use App\Auth\Form\SignupForm; +use LogicException; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Throwable; +use Yiisoft\FormModel\FormHydrator; use Yiisoft\Rbac\Manager; use Yiisoft\Yii\Console\ExitCode; @@ -18,8 +20,11 @@ final class CreateCommand extends Command { protected static $defaultName = 'user/create'; - public function __construct(private SignupForm $signupForm, private Manager $manager) - { + public function __construct( + private readonly SignupForm $signupForm, + private readonly Manager $manager, + private readonly FormHydrator $formHydrator + ) { parent::__construct(); } @@ -37,17 +42,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int { $io = new SymfonyStyle($input, $output); - $login = (string)$input->getArgument('login'); - $password = (string)$input->getArgument('password'); - $isAdmin = (bool)$input->getArgument('isAdmin'); - - $this->signupForm->load([ - 'login' => $login, - 'password' => $password, - 'passwordVerify' => $password, - ], ''); - + $login = (string) $input->getArgument('login'); + $password = (string) $input->getArgument('password'); + $isAdmin = (bool) $input->getArgument('isAdmin'); try { + $this->formHydrator->populate(model: $this->signupForm, data: [ + 'login' => $login, + 'password' => $password, + 'passwordVerify' => $password, + ], scope: ''); $user = $this->signupForm->signup(); } catch (Throwable $t) { $io->error($t->getMessage() . ' ' . $t->getFile() . ' ' . $t->getLine()); @@ -55,19 +58,20 @@ protected function execute(InputInterface $input, OutputInterface $output): int } if ($user === false) { - $errors = $this->signupForm->getFormErrors()->getFirstErrors(); - array_walk($errors, fn ($error, $attribute) => $io->error("$attribute: $error")); + $errors = $this->signupForm->getValidationResult()?->getErrorMessagesIndexedByProperty(); + array_walk($errors, fn($error, $attribute) => $io->error("$attribute: " . implode("\n", (array) $error))); return ExitCode::DATAERR; } if ($isAdmin) { $userId = $user->getId(); if ($userId === null) { - throw new \LogicException('User Id is NULL'); + throw new LogicException('User Id is NULL'); } $this->manager->assign('admin', $userId); } $io->success('User created'); + return ExitCode::OK; } } diff --git a/blog/src/User/Controller/ApiUserController.php b/blog/src/User/Controller/ApiUserController.php new file mode 100644 index 000000000..ce43136da --- /dev/null +++ b/blog/src/User/Controller/ApiUserController.php @@ -0,0 +1,109 @@ +findAll() + ->withSort(Sort::only(['login'])->withOrderString('login')); + $users = $dataReader->read(); + + $items = []; + foreach ($users as $user) { + $items[] = ['login' => $user->getLogin(), 'created_at' => $user + ->getCreatedAt() + ->format('H:i:s d.m.Y'), ]; + } + + return $this->responseFactory->createResponse($items); + } + + #[OA\Get( + path: '/api/user/{login}', + description: '', + summary: 'Get user info', + tags: ['user'], + parameters: [ + new OA\Parameter(parameter: 'login', name: 'Login', in: 'path'), + ], + responses: [ + new OA\Response( + response: '200', + description: 'Success', + content: new OA\JsonContent( + allOf: [ + new OA\Schema(ref: '#/components/schemas/Response'), + new OA\Schema(properties: [ + new OA\Property(property: 'data', properties: [ + new OA\Property(property: 'login', type: 'string', example: 'exampleLogin'), + new OA\Property(property: 'created_at', type: 'string', example: '13.12.2020 00:04:20'), + ], type: 'object'), + ]), + ] + ), + ), + ] + )] + public function profile(UserRepository $userRepository, CurrentRoute $currentRoute): ResponseInterface + { + $login = $currentRoute->getArgument('login'); + + /** @var User $user */ + $user = $userRepository->findByLogin($login); + if ($user === null) { + return $this->responseFactory->createResponse('Page not found', 404); + } + + return $this->responseFactory->createResponse( + ['login' => $user->getLogin(), 'created_at' => $user + ->getCreatedAt() + ->format('H:i:s d.m.Y'), ] + ); + } +} diff --git a/src/User/Controller/UserController.php b/blog/src/User/Controller/UserController.php similarity index 56% rename from src/User/Controller/UserController.php rename to blog/src/User/Controller/UserController.php index 3cf7717aa..d6387b354 100644 --- a/src/User/Controller/UserController.php +++ b/blog/src/User/Controller/UserController.php @@ -5,56 +5,50 @@ namespace App\User\Controller; use App\User\UserRepository; +use Yiisoft\Data\Paginator\PageToken; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface as Response; -use Psr\Http\Message\ServerRequestInterface; use Yiisoft\Data\Paginator\OffsetPaginator; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Router\CurrentRoute; -use Yiisoft\Yii\View\ViewRenderer; +use Yiisoft\Input\Http\Attribute\Parameter\Body; +use Yiisoft\Input\Http\Attribute\Parameter\Query; +use Yiisoft\Router\HydratorAttribute\RouteArgument; +use Yiisoft\Yii\View\Renderer\ViewRenderer; final class UserController { - private const PAGINATION_INDEX = 5; - public function __construct(private ViewRenderer $viewRenderer) { $this->viewRenderer = $viewRenderer->withControllerName('user'); } public function index( - CurrentRoute $currentRoute, - ServerRequestInterface $request, - UserRepository $userRepository + UserRepository $userRepository, + #[Body] ?array $body, + #[Query('sort')] ?string $sortOrder = null, + #[RouteArgument('page')] int $page = 1, + #[RouteArgument('pagesize')] int $pageSize = null, ): Response { - /** @var array */ - $body = $request->getParsedBody(); - $sortOrderString = $request->getQueryParams(); - $dataReader = $userRepository ->findAll() ->withSort(Sort::only(['id', 'login']) - ->withOrderString($sortOrderString['sort'] ?? 'id')); + ->withOrderString($sortOrder ?? 'id')); - $page = (int) $currentRoute->getArgument('page', '1'); - - $pageSize = (int) $currentRoute->getArgument( - 'pagesize', - $body['pageSize'] ?? (string) OffSetPaginator::DEFAULT_PAGE_SIZE, - ); + if ($pageSize === null) { + $pageSize = (int) ($body['pageSize'] ?? OffSetPaginator::DEFAULT_PAGE_SIZE); + } $paginator = (new OffsetPaginator($dataReader)); - $paginator = $paginator->withNextPageToken((string) $page)->withPageSize($pageSize); + $paginator = $paginator->withToken(PageToken::next((string) $page))->withPageSize($pageSize); return $this->viewRenderer->render('index', ['paginator' => $paginator]); } public function profile( - CurrentRoute $currentRoute, + #[RouteArgument('login')] string $login, ResponseFactoryInterface $responseFactory, UserRepository $userRepository ): Response { - $login = $currentRoute->getArgument('login'); $item = $userRepository->findByLogin($login); if ($item === null) { diff --git a/src/User/User.php b/blog/src/User/User.php similarity index 92% rename from src/User/User.php rename to blog/src/User/User.php index e18bff9e4..52539ad73 100644 --- a/src/User/User.php +++ b/blog/src/User/User.php @@ -17,7 +17,7 @@ use Doctrine\Common\Collections\ArrayCollection; use Yiisoft\Security\PasswordHasher; -#[Entity(repository: \App\User\UserRepository::class)] +#[Entity(repository: UserRepository::class)] #[Index(columns: ['login'], unique: true)] #[Behavior\CreatedAt(field: 'created_at', column: 'created_at')] #[Behavior\UpdatedAt(field: 'updated_at', column: 'updated_at')] @@ -44,13 +44,13 @@ class User /** * @var ArrayCollection */ - #[HasMany(target: \App\Blog\Entity\Post::class)] + #[HasMany(target: Post::class)] private ArrayCollection $posts; /** * @var ArrayCollection */ - #[HasMany(target: \App\Blog\Entity\Comment::class)] + #[HasMany(target: Comment::class)] private ArrayCollection $comments; public function __construct(string $login, string $password) @@ -66,7 +66,7 @@ public function __construct(string $login, string $password) public function getId(): ?string { - return $this->id === null ? null : (string)$this->id; + return $this->id === null ? null : (string) $this->id; } public function getLogin(): string diff --git a/src/User/UserRepository.php b/blog/src/User/UserRepository.php similarity index 94% rename from src/User/UserRepository.php rename to blog/src/User/UserRepository.php index 9237fb044..00d7a7b2e 100644 --- a/src/User/UserRepository.php +++ b/blog/src/User/UserRepository.php @@ -6,10 +6,10 @@ use Cycle\ORM\Select; use Throwable; +use Yiisoft\Data\Cycle\Reader\EntityReader; +use Yiisoft\Data\Cycle\Writer\EntityWriter; use Yiisoft\Data\Reader\DataReaderInterface; use Yiisoft\Data\Reader\Sort; -use Yiisoft\Yii\Cycle\Data\Reader\EntityReader; -use Yiisoft\Yii\Cycle\Data\Writer\EntityWriter; final class UserRepository extends Select\Repository { diff --git a/src/User/UserService.php b/blog/src/User/UserService.php similarity index 99% rename from src/User/UserService.php rename to blog/src/User/UserService.php index 2374ff293..243f69a61 100644 --- a/src/User/UserService.php +++ b/blog/src/User/UserService.php @@ -30,6 +30,7 @@ public function getUser(): ?User public function hasPermission(string $permission): bool { $userId = $this->currentUser->getId(); + return null !== $userId && $this->accessChecker->userHasPermission($userId, $permission); } } diff --git a/src/ViewInjection/CommonViewInjection.php b/blog/src/ViewInjection/CommonViewInjection.php similarity index 85% rename from src/ViewInjection/CommonViewInjection.php rename to blog/src/ViewInjection/CommonViewInjection.php index 530849468..ec5fa0b81 100644 --- a/src/ViewInjection/CommonViewInjection.php +++ b/blog/src/ViewInjection/CommonViewInjection.php @@ -5,7 +5,7 @@ namespace App\ViewInjection; use Yiisoft\Router\UrlGeneratorInterface; -use Yiisoft\Yii\View\CommonParametersInjectionInterface; +use Yiisoft\Yii\View\Renderer\CommonParametersInjectionInterface; final class CommonViewInjection implements CommonParametersInjectionInterface { diff --git a/src/ViewInjection/LayoutViewInjection.php b/blog/src/ViewInjection/LayoutViewInjection.php similarity index 89% rename from src/ViewInjection/LayoutViewInjection.php rename to blog/src/ViewInjection/LayoutViewInjection.php index 9a6d41447..86b98c7ef 100644 --- a/src/ViewInjection/LayoutViewInjection.php +++ b/blog/src/ViewInjection/LayoutViewInjection.php @@ -6,7 +6,7 @@ use App\Auth\Identity; use Yiisoft\User\CurrentUser; -use Yiisoft\Yii\View\LayoutParametersInjectionInterface; +use Yiisoft\Yii\View\Renderer\LayoutParametersInjectionInterface; final class LayoutViewInjection implements LayoutParametersInjectionInterface { diff --git a/src/ViewInjection/LinkTagsViewInjection.php b/blog/src/ViewInjection/LinkTagsViewInjection.php similarity index 85% rename from src/ViewInjection/LinkTagsViewInjection.php rename to blog/src/ViewInjection/LinkTagsViewInjection.php index 13286282d..d2ac7dc8a 100644 --- a/src/ViewInjection/LinkTagsViewInjection.php +++ b/blog/src/ViewInjection/LinkTagsViewInjection.php @@ -4,7 +4,7 @@ namespace App\ViewInjection; -use Yiisoft\Yii\View\LinkTagsInjectionInterface; +use Yiisoft\Yii\View\Renderer\LinkTagsInjectionInterface; final class LinkTagsViewInjection implements LinkTagsInjectionInterface { diff --git a/src/ViewInjection/MetaTagsViewInjection.php b/blog/src/ViewInjection/MetaTagsViewInjection.php similarity index 85% rename from src/ViewInjection/MetaTagsViewInjection.php rename to blog/src/ViewInjection/MetaTagsViewInjection.php index bbdd0dc41..ba4884e86 100644 --- a/src/ViewInjection/MetaTagsViewInjection.php +++ b/blog/src/ViewInjection/MetaTagsViewInjection.php @@ -4,7 +4,7 @@ namespace App\ViewInjection; -use Yiisoft\Yii\View\MetaTagsInjectionInterface; +use Yiisoft\Yii\View\Renderer\MetaTagsInjectionInterface; final class MetaTagsViewInjection implements MetaTagsInjectionInterface { diff --git a/src/Widget/FlashMessage.php b/blog/src/Widget/FlashMessage.php similarity index 86% rename from src/Widget/FlashMessage.php rename to blog/src/Widget/FlashMessage.php index a2910b3a3..3f4b549eb 100644 --- a/src/Widget/FlashMessage.php +++ b/blog/src/Widget/FlashMessage.php @@ -5,8 +5,8 @@ namespace App\Widget; use Yiisoft\Session\Flash\FlashInterface; -use Yiisoft\Yii\Bootstrap5\Alert; use Yiisoft\Widget\Widget; +use Yiisoft\Yii\Bootstrap5\Alert; final class FlashMessage extends Widget { @@ -14,7 +14,7 @@ public function __construct(private FlashInterface $flash) { } - public function run(): string + public function render(): string { $flashes = $this->flash->getAll(); @@ -23,8 +23,7 @@ public function run(): string foreach ($data as $message) { $html[] = Alert::widget() ->options(['class' => "alert-{$type} shadow"]) - ->body($message['body']) - ; + ->body($message['body']); } } diff --git a/src/Widget/OffsetPagination.php b/blog/src/Widget/OffsetPagination.php similarity index 93% rename from src/Widget/OffsetPagination.php rename to blog/src/Widget/OffsetPagination.php index 9f5f01116..cca652972 100644 --- a/src/Widget/OffsetPagination.php +++ b/blog/src/Widget/OffsetPagination.php @@ -24,18 +24,20 @@ public function paginator(?Paginator $paginator): self { $this->paginator = $paginator; $this->prepared = false; + return $this; } public function urlGenerator(Closure $generator): self { $this->urlGenerator = $generator; + return $this; } public function isRequired(): bool { - return $this->paginator === null ? false : $this->paginator->isRequired(); + return $this->paginator !== null && $this->paginator->isPaginationRequired(); } /** @@ -50,7 +52,7 @@ public function options(array $value): self return $this; } - protected function run(): string + public function render(): string { if ($this->paginator === null) { return ''; @@ -119,7 +121,7 @@ protected function renderButtons(): string if ($page === null) { $result .= Html::span('…', ['class' => 'page-link']); } else { - $result .= Html::a((string)$page, $this->getPageLink($page), ['class' => 'page-link']); + $result .= Html::a((string) $page, $this->getPageLink($page), ['class' => 'page-link']); } $result .= Html::closeTag('li'); } @@ -135,7 +137,7 @@ protected function renderButtons(): string protected function getPageLink(int $page): ?string { - return $this->urlGenerator === null ? null : (string)($this->urlGenerator)($page); + return $this->urlGenerator === null ? null : (string) ($this->urlGenerator)($page); } protected function initOptions(): void diff --git a/src/Widget/PerformanceMetrics.php b/blog/src/Widget/PerformanceMetrics.php similarity index 91% rename from src/Widget/PerformanceMetrics.php rename to blog/src/Widget/PerformanceMetrics.php index 953c7adef..d98443373 100644 --- a/src/Widget/PerformanceMetrics.php +++ b/blog/src/Widget/PerformanceMetrics.php @@ -13,7 +13,7 @@ public function __construct(private Timer $timer) { } - protected function run(): string + public function render(): string { $time = round($this->timer->get('overall'), 4); $memory = round(memory_get_peak_usage() / (1024 * 1024), 4); diff --git a/tests/Acceptance.suite.yml b/blog/tests/Acceptance.suite.yml similarity index 65% rename from tests/Acceptance.suite.yml rename to blog/tests/Acceptance.suite.yml index 032811f98..d4c578c4c 100644 --- a/tests/Acceptance.suite.yml +++ b/blog/tests/Acceptance.suite.yml @@ -2,11 +2,11 @@ actor: AcceptanceTester extensions: enabled: - Codeception\Extension\RunProcess: - 0: php -d variables_order=EGPCS -S 127.0.0.1:8080 -t public + 0: php -d variables_order=EGPCS -S 127.0.0.1:8881 -t public sleep: 1 modules: enabled: - PhpBrowser: - url: http://127.0.0.1:8080 + url: http://127.0.0.1:8881%BASE_URL% - \App\Tests\Support\Helper\Acceptance step_decorators: ~ diff --git a/tests/Acceptance/BlogPageCest.php b/blog/tests/Acceptance/BlogPageCest.php similarity index 87% rename from tests/Acceptance/BlogPageCest.php rename to blog/tests/Acceptance/BlogPageCest.php index a70be885e..499354706 100644 --- a/tests/Acceptance/BlogPageCest.php +++ b/blog/tests/Acceptance/BlogPageCest.php @@ -18,6 +18,7 @@ public function testBlogPage(AcceptanceTester $I): void { $I->expectTo('see blog page.'); $I->see('Blog'); - $I->see('No records'); + $I->see('Popular tags'); + $I->see('Archive'); } } diff --git a/tests/Acceptance/CommentPageCest.php b/blog/tests/Acceptance/CommentPageCest.php similarity index 100% rename from tests/Acceptance/CommentPageCest.php rename to blog/tests/Acceptance/CommentPageCest.php diff --git a/tests/Acceptance/ContactPageCest.php b/blog/tests/Acceptance/ContactPageCest.php similarity index 100% rename from tests/Acceptance/ContactPageCest.php rename to blog/tests/Acceptance/ContactPageCest.php diff --git a/tests/Acceptance/IndexPageCest.php b/blog/tests/Acceptance/IndexPageCest.php similarity index 100% rename from tests/Acceptance/IndexPageCest.php rename to blog/tests/Acceptance/IndexPageCest.php diff --git a/tests/Acceptance/LoginAcceptanceCest.php b/blog/tests/Acceptance/LoginAcceptanceCest.php similarity index 93% rename from tests/Acceptance/LoginAcceptanceCest.php rename to blog/tests/Acceptance/LoginAcceptanceCest.php index 2d2b66423..022beff39 100644 --- a/tests/Acceptance/LoginAcceptanceCest.php +++ b/blog/tests/Acceptance/LoginAcceptanceCest.php @@ -28,8 +28,8 @@ public function testLoginEmptyDataTest(AcceptanceTester $I): void $I->click('Submit', '#loginForm'); $I->expectTo('see validations errors.'); - $I->see('Value cannot be blank'); - $I->see('Value cannot be blank'); + $I->see('Login cannot be blank.'); + $I->see('Password cannot be blank.'); $I->seeElement('button', ['name' => 'login-button']); } @@ -66,7 +66,7 @@ public function testLoginSubmitFormWrongDataPassword(AcceptanceTester $I): void } /** - * @depends \App\Tests\Acceptance\SignupAcceptanceCest:testRegisterSuccess + * @depends App\Tests\Acceptance\SignupAcceptanceCest:testRegisterSuccess */ public function testLoginUsernameSubmitFormSuccessData(AcceptanceTester $I): void { diff --git a/tests/Acceptance/SignupAcceptanceCest.php b/blog/tests/Acceptance/SignupAcceptanceCest.php similarity index 91% rename from tests/Acceptance/SignupAcceptanceCest.php rename to blog/tests/Acceptance/SignupAcceptanceCest.php index 6bf61c19b..ccd7e3b28 100644 --- a/tests/Acceptance/SignupAcceptanceCest.php +++ b/blog/tests/Acceptance/SignupAcceptanceCest.php @@ -44,9 +44,10 @@ public function testRegisterEmptyData(AcceptanceTester $I): void $I->click('Submit', '#signupForm'); $I->expectTo('see registration register validation.'); - $I->see('Value cannot be blank'); - $I->see('Value cannot be blank'); - $I->see('Value cannot be blank'); + $I->see('Login cannot be blank.'); + $I->see('Password cannot be blank.'); + $I->see('Password must contain at least 8 characters.'); + $I->see('Confirm password cannot be blank.'); $I->seeElement('button', ['name' => 'register-button']); } diff --git a/tests/Acceptance/UserPageCest.php b/blog/tests/Acceptance/UserPageCest.php similarity index 100% rename from tests/Acceptance/UserPageCest.php rename to blog/tests/Acceptance/UserPageCest.php diff --git a/tests/Cli.suite.yml b/blog/tests/Cli.suite.yml similarity index 100% rename from tests/Cli.suite.yml rename to blog/tests/Cli.suite.yml diff --git a/tests/Cli/ConsoleCest.php b/blog/tests/Cli/ConsoleCest.php similarity index 79% rename from tests/Cli/ConsoleCest.php rename to blog/tests/Cli/ConsoleCest.php index 73df9b8ca..7cf9f997f 100644 --- a/tests/Cli/ConsoleCest.php +++ b/blog/tests/Cli/ConsoleCest.php @@ -30,10 +30,17 @@ public function testCommandListCommand(CliTester $I): void $I->seeResultCodeIs(ExitCode::OK); } + public function testCommandUserCreateSuccessCommand(CliTester $I): void + { + $command = dirname(__DIR__, 2) . '/yii'; + $I->runShellCommand($command . ' user/create user create123456'); + $I->seeResultCodeIs(ExitCode::OK); + } + /** * Clear all data created with testCommandFixtureAdd(). * Clearing database prevents from getting errors during multiple continuous testing with other test, - * what are based on empty database (eg, BlogPageCest) + * what are based on empty database (eg, BlogPageCest). */ public function testCommandCycleSchemaClear(CliTester $I): void { diff --git a/blog/tests/Functional.suite.yml b/blog/tests/Functional.suite.yml new file mode 100644 index 000000000..125f6c5bb --- /dev/null +++ b/blog/tests/Functional.suite.yml @@ -0,0 +1,12 @@ +actor: FunctionalTester +extensions: + enabled: + - Codeception\Extension\RunProcess: + 0: php -d variables_order=EGPCS -S 127.0.0.1:8881 -t public + sleep: 1 +modules: + enabled: + - PhpBrowser: + url: http://127.0.0.1:8881%BASE_URL% + - \App\Tests\Support\Helper\Functional + step_decorators: ~ diff --git a/tests/Functional/ContactCest.php b/blog/tests/Functional/ContactCest.php similarity index 84% rename from tests/Functional/ContactCest.php rename to blog/tests/Functional/ContactCest.php index 9a30936d4..a15d119ec 100644 --- a/tests/Functional/ContactCest.php +++ b/blog/tests/Functional/ContactCest.php @@ -24,7 +24,11 @@ public function submitEmptyForm(FunctionalTester $I) { $I->submitForm('#form-contact', []); $I->expectTo('see validations errors'); - $I->see('Value cannot be blank.'); + $I->see('Name cannot be blank.'); + $I->see('Email cannot be blank.'); + $I->see('Email is not a valid email address.'); + $I->see('Subject cannot be blank.'); + $I->see('Body cannot be blank.'); } public function submitFormWithIncorrectEmail(FunctionalTester $I) @@ -37,7 +41,7 @@ public function submitFormWithIncorrectEmail(FunctionalTester $I) 'ContactForm[verifyCode]' => 'testme', ]); $I->expectTo('see that email address is wrong'); - $I->see('This value is not a valid email address.'); + $I->see('Email is not a valid email address.'); } public function submitFormSuccessfully(FunctionalTester $I) diff --git a/blog/tests/Functional/EventListenerConfigurationTest.php b/blog/tests/Functional/EventListenerConfigurationTest.php new file mode 100644 index 000000000..721dfd400 --- /dev/null +++ b/blog/tests/Functional/EventListenerConfigurationTest.php @@ -0,0 +1,43 @@ +withDefinitions($config->get('di-console')) + ->withProviders($config->get('di-providers-console')) + ); + + $checker = $container->get(ListenerConfigurationChecker::class); + + $checker->check($config->get('events-console')); + $checker->check($config->get('events-web')); + + self::assertInstanceOf(ListenerConfigurationChecker::class, $checker); + } +} diff --git a/tests/Functional/IndexControllerTest.php b/blog/tests/Functional/IndexControllerTest.php similarity index 88% rename from tests/Functional/IndexControllerTest.php rename to blog/tests/Functional/IndexControllerTest.php index a66431881..4da8e7d68 100644 --- a/tests/Functional/IndexControllerTest.php +++ b/blog/tests/Functional/IndexControllerTest.php @@ -21,7 +21,7 @@ public function testGetIndex() $method = 'GET'; $url = '/'; - $this->tester->bootstrapApplication('web', dirname(__DIR__, 2)); + $this->tester->bootstrapApplication(dirname(__DIR__, 2)); $response = $this->tester->doRequest($method, $url); $this->assertStringContainsString('Hello, everyone', $response->getContent()); diff --git a/blog/tests/Support/AcceptanceTester.php b/blog/tests/Support/AcceptanceTester.php new file mode 100644 index 000000000..664821bd1 --- /dev/null +++ b/blog/tests/Support/AcceptanceTester.php @@ -0,0 +1,32 @@ +run(); diff --git a/blog/yii.bat b/blog/yii.bat new file mode 100644 index 000000000..cdb29a68f --- /dev/null +++ b/blog/yii.bat @@ -0,0 +1,6 @@ +@echo off +@setlocal +set YII_PATH=%~dp0 +if "%PHP_COMMAND%" == "" set PHP_COMMAND=php +"%PHP_COMMAND%" "%YII_PATH%yii" %* +@endlocal diff --git a/composer.json b/composer.json deleted file mode 100644 index 311b587f9..000000000 --- a/composer.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "name": "yiisoft/demo", - "type": "project", - "description": "Yii Framework Project Demo", - "keywords": [ - "yii", - "app" - ], - "homepage": "https://github.com/yiisoft/demo", - "license": "BSD-3-Clause", - "support": { - "source": "https://github.com/yiisoft/demo", - "issues": "https://github.com/yiisoft/demo/issues", - "forum": "https://www.yiiframework.com/forum/" - }, - "minimum-stability": "dev", - "prefer-stable": true, - "require": { - "php": "^8.1", - "ext-mbstring": "*", - "ext-pdo_sqlite": "*", - "cebe/markdown": "^1.2@dev", - "cycle/database": "^2.0", - "cycle/entity-behavior": "^1.0", - "cycle/orm": "^2.0", - "doctrine/collections": "^1.6", - "fakerphp/faker": "^1.14", - "httpsoft/http-message": "^1.0.5", - "php-http/guzzle7-adapter": "^1.0", - "psr/container": "^2.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "psr/http-server-handler": "^1.0", - "psr/http-server-middleware": "^1.0", - "psr/log": "^3.0", - "symfony/console": "^6.0", - "vlucas/phpdotenv": "^5.3", - "yiisoft/access": "^1.0", - "yiisoft/aliases": "^2.0", - "yiisoft/assets": "^2.1", - "yiisoft/auth": "^3.0", - "yiisoft/cache": "^2.0", - "yiisoft/cache-file": "^2.0", - "yiisoft/config": "^1.0", - "yiisoft/cookies": "^1.2", - "yiisoft/csrf": "^1.2", - "yiisoft/data": "^3.0@dev", - "yiisoft/data-response": "^1.0", - "yiisoft/definitions": "^3.0", - "yiisoft/di": "^1.2", - "yiisoft/error-handler": "^2.0", - "yiisoft/factory": "^1.0", - "yiisoft/form": "^1.0@dev", - "yiisoft/html": "^2.4", - "yiisoft/http": "^1.2", - "yiisoft/injector": "^1.0", - "yiisoft/log": "^2.0", - "yiisoft/log-target-file": "^2.0", - "yiisoft/mailer": "^4.0", - "yiisoft/mailer-symfony": "^2.0", - "yiisoft/rate-limiter": "dev-master", - "yiisoft/rbac": "^1.0", - "yiisoft/rbac-php": "^1.0", - "yiisoft/rbac-rules-container": "^1.1", - "yiisoft/router": "^2.0", - "yiisoft/router-fastroute": "^2.0", - "yiisoft/security": "^1.0", - "yiisoft/session": "^1.0", - "yiisoft/translator": "^2.0", - "yiisoft/translator-message-php": "^1.1", - "yiisoft/user": "^1.0", - "yiisoft/validator": "3.0.x-dev", - "yiisoft/var-dumper": "^1.0", - "yiisoft/view": "^6.0", - "yiisoft/widget": "^1.0", - "yiisoft/yii-bootstrap5": "^3.0@dev", - "yiisoft/yii-console": "^1.0", - "yiisoft/yii-cycle": "dev-master", - "yiisoft/yii-dataview": "^3.0@dev", - "yiisoft/yii-debug": "^3.0@dev", - "yiisoft/yii-debug-api": "^3.0@dev", - "yiisoft/yii-event": "^1.0", - "yiisoft/yii-http": "^1.0", - "yiisoft/yii-middleware": "dev-master", - "yiisoft/yii-runner-console": "^1.0", - "yiisoft/yii-runner-http": "^1.1", - "yiisoft/yii-sentry": "dev-master", - "yiisoft/yii-swagger": "^1.0", - "yiisoft/yii-view": "^5.0" - }, - "require-dev": { - "codeception/c3": "^2.6", - "codeception/codeception": "^5.0", - "codeception/module-asserts": "^3.0", - "codeception/module-cli": "^2.0", - "codeception/module-phpbrowser": "^3.0", - "phpunit/phpunit": "^9.5", - "roave/infection-static-analysis-plugin": "^1.16", - "roave/security-advisories": "dev-master", - "spatie/phpunit-watcher": "^1.23", - "vimeo/psalm": "^4.18", - "yiisoft/translator-extractor": "^1.0", - "yiisoft/yii-debug-viewer": "^3.0@dev", - "yiisoft/yii-gii": "^3.0@dev", - "yiisoft/yii-testing": "dev-master" - }, - "autoload": { - "psr-4": { - "App\\": "src" - } - }, - "scripts": { - "serve": [ - "Composer\\Config::disableProcessTimeout", - "./yii serve" - ], - "post-update-cmd": [ - "App\\Installer::postUpdate", - "App\\Installer::copyEnvFile" - ], - "post-create-project-cmd": [ - "App\\Installer::copyEnvFile" - ], - "test": "codecept run", - "test-watch": "phpunit-watcher watch" - }, - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - }, - "config-plugin-options": { - "source-directory": "config" - }, - "config-plugin-environments": { - "dev": { - "params": [ - "test/params.php" - ] - }, - "prod": { - "params": [ - "test/params.php" - ] - }, - "test": { - "params": [ - "test/params.php" - ] - } - }, - "config-plugin": { - "common": "common/*.php", - "params": [ - "params.php", - "?params-local.php" - ], - "web": [ - "$common", - "web/*.php" - ], - "console": [ - "$common", - "console/*.php" - ], - "events": "events.php", - "events-web": [ - "$events", - "events-web.php" - ], - "events-console": [ - "$events", - "events-console.php" - ], - "providers": "providers.php", - "providers-web": [ - "$providers", - "providers-web.php" - ], - "providers-console": [ - "$providers", - "providers-console.php" - ], - "delegates": "delegates.php", - "delegates-web": [ - "$delegates", - "delegates-web.php" - ], - "delegates-console": [ - "$delegates", - "delegates-console.php" - ], - "routes": [ - "routes-backend.php", - "routes.php" - ], - "bootstrap": "bootstrap.php", - "bootstrap-web": [ - "$bootstrap", - "bootstrap-web.php" - ], - "bootstrap-console": [ - "$bootstrap", - "bootstrap-console.php" - ], - "widgets": "widgets.php" - }, - "installer-types": [ - "npm-asset" - ], - "installer-paths": { - "./node_modules/{$name}": [ - "type:npm-asset" - ] - } - }, - "config": { - "sort-packages": true, - "allow-plugins": { - "codeception/c3": true, - "oomphinc/composer-installers-extender": true, - "composer/installers": true, - "composer/package-versions-deprecated": true, - "infection/extension-installer": true, - "yiisoft/config": true - } - }, - "repositories": [ - { - "type": "composer", - "url": "https://asset-packagist.org" - } - ] -} diff --git a/config/bootstrap-web.php b/config/bootstrap-web.php deleted file mode 100644 index 0dae23dee..000000000 --- a/config/bootstrap-web.php +++ /dev/null @@ -1,5 +0,0 @@ - static function (RouteCollectorInterface $collector) use ($config) { - $collector - ->middleware(CsrfMiddleware::class) - ->middleware(FormatDataResponse::class) - ->addGroup( - Group::create('/{_language}') - ->routes(...$config->get('routes')) - ); - - if (!str_starts_with(getenv('YII_ENV') ?: '', 'prod')) { - $collector->middleware(ToolbarMiddleware::class); - } - - return new RouteCollection($collector); - }, -]; diff --git a/config/delegates-console.php b/config/delegates-console.php deleted file mode 100644 index 0dae23dee..000000000 --- a/config/delegates-console.php +++ /dev/null @@ -1,5 +0,0 @@ - [ - static fn (Timer $timer) => $timer->start('overall'), - ], -]; diff --git a/config/events.php b/config/events.php deleted file mode 100644 index 0dae23dee..000000000 --- a/config/events.php +++ /dev/null @@ -1,5 +0,0 @@ - + + + + + + Yii Demos + + + + + + + + + + + + + + + + +
    +

    Demo examples

    + +
    + +

    Try out our demos

    +
    +

    + We have two worked demos at the moment +

    +

    + blog is a demo site with server side rendering. It's use PHP template engine.
    + If you need OpenAPI schema you may see it under the link. +

    +

    + blog-api is a demo site providing only API access.
    + You may open openapi documentation by click on the link. +

    +
    + blog + blog-api +
    +
    +
    + +
    +
    + + + diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 000000000..57f1fcf5c --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,46 @@ +version: "3.4" + +services: + blog-backend: + build: + context: blog + dockerfile: docker/dev/php/Dockerfile + target: stage + environment: + YII_ENV: dev + YII_DEBUG: "true" + volumes: + - ./blog:/app:delegated + + blog-nginx: + build: + context: blog + dockerfile: docker/dev/nginx/Dockerfile + + blog-api-backend: + build: + context: blog-api + dockerfile: docker/dev/php/Dockerfile + target: stage + environment: + YII_ENV: dev + YII_DEBUG: "true" + volumes: + - ./blog-api:/app:delegated + + blog-api-nginx: + build: + context: blog-api + dockerfile: docker/dev/nginx/Dockerfile + + demo: + restart: unless-stopped + volumes: + - ./demo/html:/usr/share/nginx + + gateway: + build: + context: gateway/nginx + dockerfile: dev/Dockerfile + volumes: + - ./gateway/nginx/dev/templates:/etc/nginx/templates:ro diff --git a/docker-compose.yml b/docker-compose.yml index b8295a7c4..1db39001b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,12 +1,102 @@ -version: '3' +version: "3.4" services: - php: - image: yiisoftware/yii-php:8.1-apache - working_dir: /app - volumes: - - ./:/app - # host-volume for composer cache - - ~/.composer-docker/cache:/root/.composer/cache:delegated - ports: - - '30080:80' + blog-backend: + restart: unless-stopped + image: ${REGISTRY}/blog-backend:${IMAGE_TAG} + build: + context: blog + dockerfile: docker/prod/php/Dockerfile + target: stage + environment: + YII_ENV: prod + YII_DEBUG: "false" + healthcheck: + disable: true + volumes: + - /etc/group:/etc/group:r + - /etc/passwd:/etc/passwd:r + - blog-assets:/app/public/assets:delegated + + blog-nginx: + restart: unless-stopped + image: ${REGISTRY}/blog-nginx:${IMAGE_TAG} + build: + context: blog + dockerfile: docker/prod/nginx/Dockerfile + depends_on: + - blog-backend + volumes: + - blog-assets:/app/public/assets:ro + + blog-api-backend: + restart: unless-stopped + image: ${REGISTRY}/blog-api-backend:${IMAGE_TAG} + build: + context: blog-api + dockerfile: docker/prod/php/Dockerfile + target: stage + environment: + YII_ENV: prod + YII_DEBUG: "false" + healthcheck: + disable: true + volumes: + - /etc/group:/etc/group:r + - /etc/passwd:/etc/passwd:r + - blog-api-assets:/app/public/assets:delegated + + blog-api-nginx: + restart: unless-stopped + image: ${REGISTRY}/blog-api-nginx:${IMAGE_TAG} + build: + context: blog-api + dockerfile: docker/prod/nginx/Dockerfile + depends_on: + - blog-api-backend + volumes: + - blog-api-assets:/app/public/assets:ro + + demo: + restart: unless-stopped + image: ${REGISTRY}/demo-nginx:${IMAGE_TAG} + build: + context: demo + dockerfile: Dockerfile + + gateway: + restart: unless-stopped + image: ${REGISTRY}/gateway-nginx:${IMAGE_TAG} + build: + context: gateway/nginx + dockerfile: prod/Dockerfile + environment: + DOMAIN: ${DOMAIN} + volumes: + - ./var/ssl:/etc/letsencrypt:r + depends_on: + - demo + - blog-nginx + - blog-api-nginx + ports: + - 80:80 + - 443:443 + + certbot: + restart: "no" + image: certbot/certbot + volumes: + - ./var/ssl:/etc/letsencrypt:rw + command: > + certonly --webroot --webroot-path=/etc/letsencrypt/www + --email ${SUPPORT_EMAIL} --agree-tos --no-eff-email + --force-renewal -d ${DOMAIN} -v + # --dry-run + # --preferred-challenges dns + # --force-renewal -d *.${DOMAIN} -v + +volumes: + blog-assets: + driver: local + blog-api-assets: + driver: local diff --git a/gateway/nginx/dev/Dockerfile b/gateway/nginx/dev/Dockerfile new file mode 100644 index 000000000..dd6408a94 --- /dev/null +++ b/gateway/nginx/dev/Dockerfile @@ -0,0 +1,8 @@ +FROM nginx:1.21.1-alpine AS nginx + +RUN apk add --no-cache curl nano + +WORKDIR /app + +RUN rm /etc/nginx/conf.d/default.conf +COPY ./dev/templates/*.conf.template /etc/nginx/templates/ diff --git a/gateway/nginx/dev/templates/http.conf.template b/gateway/nginx/dev/templates/http.conf.template new file mode 100644 index 000000000..55751e816 --- /dev/null +++ b/gateway/nginx/dev/templates/http.conf.template @@ -0,0 +1,64 @@ +# server { +# listen 80 default_server; +# server_name ${DOMAIN}; +# server_tokens off; +# +# return 404; +# } + +server { + server_name ${DOMAIN}; + listen 80 default_server; + + client_max_body_size 15m; + server_tokens off; + root /app/public; + resolver 127.0.0.11 ipv6=off; + + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml; + gzip_disable "MSIE [1-6]\."; + add_header Strict-Transport-Security "max-age=0;"; + + # To allow special characters in headers + ignore_invalid_headers off; + + location ~ ^/blog(/.*) { + set $upstream http://blog-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location ~ ^/blog-api(/.*) { + set $upstream http://blog-api-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location / { + set $upstream http://demo; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } +} diff --git a/gateway/nginx/prod/Dockerfile b/gateway/nginx/prod/Dockerfile new file mode 100644 index 000000000..de0b151a8 --- /dev/null +++ b/gateway/nginx/prod/Dockerfile @@ -0,0 +1,12 @@ +FROM nginx:1.21.1-alpine AS nginx + +RUN apk add --no-cache curl nano + +WORKDIR /app + +RUN rm /etc/nginx/conf.d/default.conf +#COPY ./prod/templates/https.conf.template /etc/nginx/templates/ +COPY ./prod/templates/*.conf.template /etc/nginx/templates/ + +#CMD ["nginx-debug", "-g", "daemon off;"] + diff --git a/gateway/nginx/prod/backup/http.conf.template b/gateway/nginx/prod/backup/http.conf.template new file mode 100644 index 000000000..c13c84e38 --- /dev/null +++ b/gateway/nginx/prod/backup/http.conf.template @@ -0,0 +1,72 @@ +server { + listen 80; + server_tokens off; + + return 404; +} + +server { + listen 80; + server_name ${DOMAIN}; + + client_max_body_size 15m; + server_tokens off; + root /app/public; + resolver 127.0.0.11 ipv6=off; + + # To allow special characters in headers + ignore_invalid_headers off; + + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml; + gzip_disable "MSIE [1-6]\."; + + location /.well-known/acme-challenge/ { + alias /etc/letsencrypt/www/.well-known/acme-challenge/; + } + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location ~ ^/blog(/.*) { + set $upstream http://blog-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location ~ ^/blog-api(/.*) { + set $upstream http://blog-api-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location / { + set $upstream http://demo; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } +} diff --git a/gateway/nginx/prod/backup/https.conf.template b/gateway/nginx/prod/backup/https.conf.template new file mode 100644 index 000000000..e2c3bec8a --- /dev/null +++ b/gateway/nginx/prod/backup/https.conf.template @@ -0,0 +1,94 @@ +server { + server_name ${DOMAIN}; + listen 80; + server_tokens off; + error_log /var/log/nginx/error.log debug; + + location /.well-known/acme-challenge/ { + alias /etc/letsencrypt/www/.well-known/acme-challenge/; + } + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location / { + rewrite ^ https://$host$request_uri?; #permanent; + } +} + +server { + server_name ${DOMAIN}; + listen 443 ssl; + client_max_body_size 15m; + server_tokens off; + root /app/public; + resolver 127.0.0.11 ipv6=off; + error_log /var/log/nginx/error.log debug; + + # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; + + ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem; + ssl_buffer_size 8k; + ssl_dhparam /etc/letsencrypt/dhparam/dhparam-2048.pem; + ssl_protocols TLSv1.2 TLSv1.1 TLSv1; + ssl_prefer_server_ciphers on; + ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; + ssl_ecdh_curve secp384r1; + ssl_session_tickets off; + ssl_stapling on; + ssl_stapling_verify on; + + # To allow special characters in headers + ignore_invalid_headers off; + + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml; + gzip_disable "MSIE [1-6]\."; + + location /.well-known/acme-challenge/ { + alias /etc/letsencrypt/www/.well-known/acme-challenge/; + } + + location ~ ^/blog(/.*) { + set $upstream http://blog-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location ~ ^/blog-api(/.*) { + set $upstream http://blog-api-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location / { + set $upstream http://demo; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } +} diff --git a/gateway/nginx/prod/templates/https.conf.template b/gateway/nginx/prod/templates/https.conf.template new file mode 100644 index 000000000..e2c3bec8a --- /dev/null +++ b/gateway/nginx/prod/templates/https.conf.template @@ -0,0 +1,94 @@ +server { + server_name ${DOMAIN}; + listen 80; + server_tokens off; + error_log /var/log/nginx/error.log debug; + + location /.well-known/acme-challenge/ { + alias /etc/letsencrypt/www/.well-known/acme-challenge/; + } + + location /health { + add_header Content-Type text/plain; + access_log off; + return 200 'alive'; + } + + location / { + rewrite ^ https://$host$request_uri?; #permanent; + } +} + +server { + server_name ${DOMAIN}; + listen 443 ssl; + client_max_body_size 15m; + server_tokens off; + root /app/public; + resolver 127.0.0.11 ipv6=off; + error_log /var/log/nginx/error.log debug; + + # add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; + + ssl_certificate /etc/letsencrypt/live/${DOMAIN}/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/${DOMAIN}/privkey.pem; + ssl_buffer_size 8k; + ssl_dhparam /etc/letsencrypt/dhparam/dhparam-2048.pem; + ssl_protocols TLSv1.2 TLSv1.1 TLSv1; + ssl_prefer_server_ciphers on; + ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5; + ssl_ecdh_curve secp384r1; + ssl_session_tickets off; + ssl_stapling on; + ssl_stapling_verify on; + + # To allow special characters in headers + ignore_invalid_headers off; + + gzip on; + gzip_vary on; + gzip_min_length 1024; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml; + gzip_disable "MSIE [1-6]\."; + + location /.well-known/acme-challenge/ { + alias /etc/letsencrypt/www/.well-known/acme-challenge/; + } + + location ~ ^/blog(/.*) { + set $upstream http://blog-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location ~ ^/blog-api(/.*) { + set $upstream http://blog-api-nginx; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } + + location / { + set $upstream http://demo; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 60s; + proxy_send_timeout 300s; + proxy_pass $upstream$1$is_args$args; + } +} diff --git a/src/Blog/CommentController.php b/src/Blog/CommentController.php deleted file mode 100644 index ebe2ee8ac..000000000 --- a/src/Blog/CommentController.php +++ /dev/null @@ -1,40 +0,0 @@ -viewRenderer = $viewRenderer->withControllerName('blog/comments'); - } - - public function index(Request $request, CommentService $service, CurrentRoute $currentRoute): Response - { - $paginator = $service->getFeedPaginator(); - if ($currentRoute->getArgument('next') !== null) { - $paginator = $paginator->withNextPageToken((string)$currentRoute->getArgument('next')); - } - - if ($this->isAjaxRequest($request)) { - return $this->viewRenderer->renderPartial('_comments', ['data' => $paginator]); - } - - return $this->viewRenderer->render('index', ['data' => $paginator]); - } - - private function isAjaxRequest(Request $request): bool - { - return $request->getHeaderLine('X-Requested-With') === 'XMLHttpRequest'; - } -} diff --git a/src/Controller/Actions/ApiInfo.php b/src/Controller/Actions/ApiInfo.php deleted file mode 100644 index 1f196079d..000000000 --- a/src/Controller/Actions/ApiInfo.php +++ /dev/null @@ -1,36 +0,0 @@ -responseFactory = $responseFactory; - } - - /** - * @OA\Get( - * path="/api/info/v2", - * @OA\Response(response="200", description="Get api version") - * ) - */ - public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface - { - return $this->responseFactory->createResponse(['version' => '2.0', 'author' => 'yiisoft']); - } -} diff --git a/src/User/Controller/ApiUserController.php b/src/User/Controller/ApiUserController.php deleted file mode 100644 index 1f3bb769a..000000000 --- a/src/User/Controller/ApiUserController.php +++ /dev/null @@ -1,80 +0,0 @@ -findAll() - ->withSort(Sort::only(['login'])->withOrderString('login')); - $users = $dataReader->read(); - - $items = []; - foreach ($users as $user) { - $items[] = ['login' => $user->getLogin(), 'created_at' => $user - ->getCreatedAt() - ->format('H:i:s d.m.Y'), ]; - } - - return $this->responseFactory->createResponse($items); - } - - /** - * @OA\Get( - * path="/api/user/{login}", - * tags={"user"}, - * @OA\Parameter( - * @OA\Schema(type="string"), - * in="path", - * name="login", - * parameter="login" - * ), - * @OA\Response(response="200", description="Get user info") - * ) - */ - public function profile(UserRepository $userRepository, CurrentRoute $currentRoute): ResponseInterface - { - $login = $currentRoute->getArgument('login'); - - /** @var User $user */ - $user = $userRepository->findByLogin($login); - if ($user === null) { - return $this->responseFactory->createResponse('Page not found', 404); - } - - return $this->responseFactory->createResponse( - ['login' => $user->getLogin(), 'created_at' => $user - ->getCreatedAt() - ->format('H:i:s d.m.Y'), ] - ); - } -} diff --git a/tests/Functional/EventListenerConfigurationTest.php b/tests/Functional/EventListenerConfigurationTest.php deleted file mode 100644 index 7c99b766a..000000000 --- a/tests/Functional/EventListenerConfigurationTest.php +++ /dev/null @@ -1,31 +0,0 @@ -withDefinitions($config->get('console')); - $container = (new Container($containerConfig))->get(ContainerInterface::class); - $checker = $container->get(ListenerConfigurationChecker::class); - $checker->check($config->get('events-console')); - - self::assertInstanceOf(ListenerConfigurationChecker::class, $checker); - } -} diff --git a/var/.gitignore b/var/.gitignore new file mode 100644 index 000000000..8a340cb37 --- /dev/null +++ b/var/.gitignore @@ -0,0 +1,3 @@ +* +!ssl/www/.gitignore +!.gitignore \ No newline at end of file diff --git a/var/ssl/www/.gitignore b/var/ssl/www/.gitignore new file mode 100644 index 000000000..c96a04f00 --- /dev/null +++ b/var/ssl/www/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file