diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..6bad3c6 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [Ocramius] diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4ae74ec --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +{ + "version": 2, + "updates": [ + { + "allow": [ + { + "dependency-type": "all" + } + ], + "directory": "/", + "package-ecosystem": "composer", + "schedule": { + "interval": "daily" + }, + "versioning-strategy": "increase" + }, + { + "directory": "/", + "package-ecosystem": "github-actions", + "schedule": { + "interval": "daily" + } + } + ] +} diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml new file mode 100644 index 0000000..5121764 --- /dev/null +++ b/.github/workflows/continuous-integration.yml @@ -0,0 +1,34 @@ +# See https://github.com/laminas/laminas-continuous-integration-action +# Generates a job matrix based on current dependencies and supported version +# ranges, then runs all those jobs +name: "Continuous Integration" + +on: + pull_request: + push: + +jobs: + matrix: + name: Generate job matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.matrix.outputs.matrix }} + steps: + - name: Gather CI configuration + id: matrix + uses: laminas/laminas-ci-matrix-action@1.10.0 + + qa: + name: QA Checks + needs: [ matrix ] + runs-on: ${{ matrix.operatingSystem }} + strategy: + fail-fast: false + matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }} + steps: + - name: ${{ matrix.name }} + uses: laminas/laminas-continuous-integration-action@1.12.0 + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + with: + job: ${{ matrix.job }} diff --git a/.github/workflows/merge-dependabot-upgrades.yml b/.github/workflows/merge-dependabot-upgrades.yml new file mode 100644 index 0000000..3baf832 --- /dev/null +++ b/.github/workflows/merge-dependabot-upgrades.yml @@ -0,0 +1,23 @@ +# See https://github.com/ridedott/merge-me-action/ +# This workflow automates merges from patches sent by Dependabot, and +# only by dependabot, once the other CI workflows pass +name: Auto-merge Dependabot PRs + +on: + workflow_run: + types: + - completed + workflows: + - "Continuous Integration" + +jobs: + merge-me: + name: Auto-merge Dependabot PRs + runs-on: ubuntu-latest + steps: + - name: Auto-Merge + if: ${{ github.event.workflow_run.conclusion == 'success' }} + uses: ridedott/merge-me-action@v2.9.35 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MERGE_METHOD: MERGE diff --git a/.github/workflows/release-on-milestone-closed.yml b/.github/workflows/release-on-milestone-closed.yml new file mode 100644 index 0000000..169fd65 --- /dev/null +++ b/.github/workflows/release-on-milestone-closed.yml @@ -0,0 +1,67 @@ +# https://help.github.com/en/categories/automating-your-workflow-with-github-actions + +name: "Automatic Releases" + +on: + milestone: + types: + - "closed" + +jobs: + release: + name: "GIT tag, release & create merge-up PR" + runs-on: ubuntu-latest + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Release" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:release" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create Merge-Up Pull Request" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:create-merge-up-pull-request" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create and/or Switch to new Release Branch" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:switch-default-branch-to-next-minor" + env: + "GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Bump Changelog Version On Originating Release Branch" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:bump-changelog" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} + + - name: "Create new milestones" + uses: "laminas/automatic-releases@v1" + with: + command-name: "laminas:automatic-releases:create-milestones" + env: + "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} + "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} + "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} + "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} diff --git a/.gitignore b/.gitignore index 88f46f6..b71975e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ vendor .idea composer.phar -composer.lock \ No newline at end of file diff --git a/.scrutinizer.yml b/.scrutinizer.yml deleted file mode 100644 index 8821e2c..0000000 --- a/.scrutinizer.yml +++ /dev/null @@ -1,40 +0,0 @@ -before_commands: - - "composer update --prefer-source" - -tools: - external_code_coverage: - timeout: 1200 - php_code_sniffer: - enabled: true - config: - standard: PSR2 - filter: - paths: ["src/*", "tests/*"] - php_cpd: - enabled: true - excluded_dirs: ["build/*", "tests", "vendor"] - php_cs_fixer: - enabled: true - config: - level: all - filter: - paths: ["src/*", "tests/*"] - php_loc: - enabled: true - excluded_dirs: ["build/*", "tests", "vendor"] - php_mess_detector: - enabled: true - filter: - paths: ["src/*"] - php_pdepend: - enabled: true - excluded_dirs: ["build/*", "tests", "vendor"] - php_analyzer: - enabled: true - filter: - paths: ["src/*", "tests/*"] - php_hhvm: - enabled: true - filter: - paths: ["src/*", "tests/*"] - sensiolabs_security_checker: true diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3ff210d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,32 +0,0 @@ -language: php - -sudo: false - -php: - - 7.0 - - 7.1 - - 7.2 - - hhvm - -env: - matrix: - - DEPENDENCIES="" - - DEPENDENCIES="--prefer-lowest --prefer-stable" - -matrix: - allow_failures: - - php: hhvm - -before_script: - - composer self-update - - composer update --prefer-source $DEPENDENCIES - -script: - - ./vendor/bin/phpunit --coverage-clover ./clover.xml - - ./vendor/bin/phpcs --standard=PSR2 ./src/ ./tests/ - -after_script: - - if [ "$TRAVIS_PHP_VERSION" = '7.0' ] ; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover ./clover.xml; fi; - -notifications: - irc: "irc.freenode.org#zftalk.modules" diff --git a/README.md b/README.md index 833e80a..2f9b480 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # OcraCachedViewResolver -OcraCachedViewResolver is performance-oriented Zend Framework 2 Module that increases performance +OcraCachedViewResolver is performance-oriented Laminas MVC 2 Module that increases performance in your application by caching the process of resolving template names to template paths. -In ZF3, the process of resolving template paths causes a lot of stat calls. This module adds -a cache layer to avoid that. +In [`laminas/laminas-mvc-skeleton`](https://github.com/laminas/laminas-mvc-skeleton), the process of resolving template +paths causes a lot of stat calls (disk access). This module adds a cache layer to avoid that. -| Tests | Releases | Downloads | Dependencies | -| ----- | -------- | ------- | ------------- | -|[![Build Status](https://travis-ci.org/Ocramius/OcraCachedViewResolver.png?branch=master)](https://travis-ci.org/Ocramius/OcraCachedViewResolver) [![Code Coverage](https://scrutinizer-ci.com/g/Ocramius/OcraCachedViewResolver/badges/coverage.png?s=2e8b79821b59bfccea8e4fcdec087df12d13be96)](https://scrutinizer-ci.com/g/Ocramius/OcraCachedViewResolver/) [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/Ocramius/OcraCachedViewResolver/badges/quality-score.png?s=30f146bf14c64a11d4bc304c4e7786e4016786c0)](https://scrutinizer-ci.com/g/Ocramius/OcraCachedViewResolver/) | [![Latest Stable Version](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/v/stable.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) [![Latest Unstable Version](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/v/unstable.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) | [![Total Downloads](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/downloads.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) | [![Dependency Status](https://www.versioneye.com/package/php--ocramius--ocra-cached-view-resolver/badge.png)](https://www.versioneye.com/package/php--ocramius--ocra-cached-view-resolver) | +| Releases | Downloads | +| -------- | ------- | +| [![Latest Stable Version](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/v/stable.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) [![Latest Unstable Version](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/v/unstable.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) | [![Total Downloads](https://poser.pugx.org/ocramius/ocra-cached-view-resolver/downloads.png)](https://packagist.org/packages/ocramius/ocra-cached-view-resolver) | ## Installation @@ -16,13 +16,9 @@ The recommended way to install `ocramius/ocra-cached-view-resolver` is through [composer](http://getcomposer.org/): ```sh -php composer.phar require ocramius/ocra-cached-view-resolver:3.0.* +php composer.phar require ocramius/ocra-cached-view-resolver ``` -If you use legacy/outdated PHP versions, such as `5.5.x` and `5.6.x`, you can use any -[`3.x`](https://github.com/Ocramius/OcraCachedViewResolver/tree/3.0.0) version -of `ocramius/ocra-cached-view-resolver`. - You can then enable the module in your `config/application.config.php` by adding `'OcraCachedViewResolver'` to the `'modules'` section. diff --git a/composer.json b/composer.json index b9acc20..7080684 100644 --- a/composer.json +++ b/composer.json @@ -18,16 +18,17 @@ } ], "require": { - "php": "~7.0", - "zendframework/zend-servicemanager": "^3.1.0", - "zendframework/zend-mvc": "^3.0", - "zendframework/zend-view": "^2.7", - "zendframework/zend-cache": "^2.7.1" + "php": "^7.4.7 || ~8.0.0", + "laminas/laminas-servicemanager": "^3.10.0", + "laminas/laminas-mvc": "^3.2.0", + "laminas/laminas-modulemanager": "^2.10.2", + "laminas/laminas-view": "^2.12.0", + "laminas/laminas-cache": "^2.13.0" }, "require-dev": { - "phpunit/phpunit": "^6.4", - "squizlabs/php_codesniffer": "~2.6.1", - "zendframework/zend-config": "^2.6 || ^3.0" + "phpunit/phpunit": "^9.5.9", + "doctrine/coding-standard": "^9.0.0", + "vimeo/psalm": "^4.10.0" }, "autoload": { "psr-0": { diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..bce9776 --- /dev/null +++ b/composer.lock @@ -0,0 +1,6360 @@ +{ + "_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": "56045d797fd1dac7226497c2a9df9f68", + "packages": [ + { + "name": "brick/varexporter", + "version": "0.3.5", + "source": { + "type": "git", + "url": "https://github.com/brick/varexporter.git", + "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/varexporter/zipball/05241f28dfcba2b51b11e2d750e296316ebbe518", + "reference": "05241f28dfcba2b51b11e2d750e296316ebbe518", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.0", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^8.5 || ^9.0", + "vimeo/psalm": "4.4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\VarExporter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A powerful alternative to var_export(), which can export closures and objects without __set_state()", + "keywords": [ + "var_export" + ], + "support": { + "issues": "https://github.com/brick/varexporter/issues", + "source": "https://github.com/brick/varexporter/tree/0.3.5" + }, + "time": "2021-02-10T13:53:07+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "support": { + "issues": "https://github.com/container-interop/container-interop/issues", + "source": "https://github.com/container-interop/container-interop/tree/master" + }, + "abandoned": "psr/container", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "laminas/laminas-cache", + "version": "2.13.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache.git", + "reference": "566948e32f30881cb903ffbd0e3e20dac00cd83e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache/zipball/566948e32f30881cb903ffbd0e3e20dac00cd83e", + "reference": "566948e32f30881cb903ffbd0e3e20dac00cd83e", + "shasum": "" + }, + "require": { + "laminas/laminas-cache-storage-adapter-apc": "^1.0", + "laminas/laminas-cache-storage-adapter-apcu": "^1.0", + "laminas/laminas-cache-storage-adapter-blackhole": "^1.0", + "laminas/laminas-cache-storage-adapter-dba": "^1.0", + "laminas/laminas-cache-storage-adapter-ext-mongodb": "^1.0", + "laminas/laminas-cache-storage-adapter-filesystem": "^1.0", + "laminas/laminas-cache-storage-adapter-memcache": "^1.0", + "laminas/laminas-cache-storage-adapter-memcached": "^1.0", + "laminas/laminas-cache-storage-adapter-memory": "^1.0", + "laminas/laminas-cache-storage-adapter-mongodb": "^1.0", + "laminas/laminas-cache-storage-adapter-redis": "^1.0", + "laminas/laminas-cache-storage-adapter-session": "^1.0", + "laminas/laminas-cache-storage-adapter-wincache": "^1.0", + "laminas/laminas-cache-storage-adapter-xcache": "^1.0", + "laminas/laminas-cache-storage-adapter-zend-server": "^1.0", + "laminas/laminas-eventmanager": "^3.3", + "laminas/laminas-servicemanager": "^3.6", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0" + }, + "conflict": { + "symfony/console": "<5.1" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "replace": { + "zendframework/zend-cache": "^2.9.0" + }, + "require-dev": { + "laminas/laminas-cli": "^1.0", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config-aggregator": "^1.5", + "laminas/laminas-feed": "^2.14", + "laminas/laminas-serializer": "^2.6", + "phpbench/phpbench": "^1.0.0-beta2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5" + }, + "suggest": { + "laminas/laminas-cli": "The laminas-cli binary can be used to consume commands provided by this component", + "laminas/laminas-serializer": "Laminas\\Serializer component" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Cache", + "config-provider": "Laminas\\Cache\\ConfigProvider" + } + }, + "autoload": { + "files": [ + "autoload/patternPluginManagerPolyfill.php" + ], + "psr-4": { + "Laminas\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Caching implementation with a variety of storage options, as well as codified caching strategies for callbacks, classes, and output", + "homepage": "https://laminas.dev", + "keywords": [ + "cache", + "laminas", + "psr-16", + "psr-6" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-cache/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-cache/issues", + "rss": "https://github.com/laminas/laminas-cache/releases.atom", + "source": "https://github.com/laminas/laminas-cache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-08-08T10:21:18+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-apc", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-apc.git", + "reference": "8b375d994f6e67534f6ae6e995249e706faa30c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-apc/zipball/8b375d994f6e67534f6ae6e995249e706faa30c1", + "reference": "8b375d994f6e67534f6ae6e995249e706faa30c1", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2" + }, + "suggest": { + "ext-apc": "APC or compatible extension, to use the APC storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-apc/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-apc/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-apc/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-apc" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2020-10-12T16:04:12+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-apcu", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-apcu.git", + "reference": "e182aab739d6b03992a9915cc3c7019391a94548" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-apcu/zipball/e182aab739d6b03992a9915cc3c7019391a94548", + "reference": "e182aab739d6b03992a9915cc3c7019391a94548", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "ext-apcu": "*", + "laminas/laminas-cache": "^2.10.1", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-apcu": "APCU >= 5.1.0, to use the APCu storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for apcu", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-apcu/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-apcu/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-apcu/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-apcu" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-05-03T20:41:53+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-blackhole", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole.git", + "reference": "4af1053efd81785a292c2a9442871c075700345a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-blackhole/zipball/4af1053efd81785a292c2a9442871c075700345a", + "reference": "4af1053efd81785a292c2a9442871c075700345a", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10.1", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "^2.1.4", + "squizlabs/php_codesniffer": "^3.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for blackhole", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-blackhole/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-04-29T21:06:24+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-dba", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-dba.git", + "reference": "ad968d3d8a0350af8e6717be58bb96e5a9e77f3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-dba/zipball/ad968d3d8a0350af8e6717be58bb96e5a9e77f3b", + "reference": "ad968d3d8a0350af8e6717be58bb96e5a9e77f3b", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-dba": "DBA, to use the DBA storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for dba", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-dba/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-dba/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-dba/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-dba" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2020-10-12T16:08:58+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-ext-mongodb", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb.git", + "reference": "72f68589cc8323fa688167a4720b795dd0907f4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-ext-mongodb/zipball/72f68589cc8323fa688167a4720b795dd0907f4e", + "reference": "72f68589cc8323fa688167a4720b795dd0907f4e", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10", + "mongodb/mongodb": "<1.8" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10.3", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "~2.2.0", + "laminas/laminas-serializer": "^2.10.1", + "mongodb/mongodb": "^1.8.0", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "mongodb/mongodb": "MongoDB, to use the ExtMongoDb storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for ext-mongodb", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-ext-mongodb/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-08-10T18:17:48+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-filesystem", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem.git", + "reference": "76fc488c3fa0ad442e4e70f807305c940d1bdcbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-filesystem/zipball/76fc488c3fa0ad442e4e70f807305c940d1bdcbc", + "reference": "76fc488c3fa0ad442e4e70f807305c940d1bdcbc", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-serializer": "^2.10", + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for filesystem", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-filesystem/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-04-25T00:27:54+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memcache", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memcache.git", + "reference": "1d2a74e300a0fd0b8d0e0cb4e379a173ccad0088" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memcache/zipball/1d2a74e300a0fd0b8d0e0cb4e379a173ccad0088", + "reference": "1d2a74e300a0fd0b8d0e0cb4e379a173ccad0088", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10.1", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "^2.1.4", + "laminas/laminas-serializer": "^2.10.1", + "squizlabs/php_codesniffer": "^3.6.0" + }, + "suggest": { + "ext-memcache": "Memcache >= 2.0.0 to use the Memcache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memcache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memcache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memcache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memcache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memcache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2021-04-29T19:57:43+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memcached", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memcached.git", + "reference": "d05f33e43a352b85c6d0208e9cfbf2a59f02ede3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memcached/zipball/d05f33e43a352b85c6d0208e9cfbf2a59f02ede3", + "reference": "d05f33e43a352b85c6d0208e9cfbf2a59f02ede3", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0.2", + "laminas/laminas-coding-standard": "~2.2.0", + "phpunit/phpunit": "^9.5.8" + }, + "suggest": { + "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memcached", + "keywords": [ + "cache", + "laminas", + "memcached" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memcached/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memcached" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-08-08T14:51:12+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-memory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-memory.git", + "reference": "02c7a4a1118bbd47d1c0f0bfe1e8b140af79d2bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memory/zipball/02c7a4a1118bbd47d1c0f0bfe1e8b140af79d2bd", + "reference": "02c7a4a1118bbd47d1c0f0bfe1e8b140af79d2bd", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10.1", + "laminas/laminas-cache-storage-adapter-test": "^1.1.1", + "laminas/laminas-coding-standard": "^2.1.4", + "squizlabs/php_codesniffer": "^3.5.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for memory", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memory/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-memory/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-memory/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-memory" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-04-28T17:27:13+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-mongodb", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb.git", + "reference": "ef4aa396b55533b8eb3e1d4126c39a78a22e49a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-mongodb/zipball/ef4aa396b55533b8eb3e1d4126c39a78a22e49a6", + "reference": "ef4aa396b55533b8eb3e1d4126c39a78a22e49a6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for mongodb", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-mongodb/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-mongodb" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2020-10-12T16:19:10+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-redis", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-redis.git", + "reference": "de8a63d4a0ef1ccead401eb7fb6d75b57fa3f9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-redis/zipball/de8a63d4a0ef1ccead401eb7fb6d75b57fa3f9ee", + "reference": "de8a63d4a0ef1ccead401eb7fb6d75b57fa3f9ee", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10", + "phpunit/phpunit": "<6.1.0" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "composer-runtime-api": "^2", + "ext-posix": "*", + "ext-redis": "*", + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.1", + "laminas/laminas-coding-standard": "^2.1", + "laminas/laminas-serializer": "^2.10", + "psalm/plugin-phpunit": "^0.15.1", + "vimeo/psalm": "^4.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for redis", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-redis/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-redis/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-redis/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-redis" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-06-03T16:14:07+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-session", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-session.git", + "reference": "74a275056cfca2300eb9a67cd1d917f7066b4113" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-session/zipball/74a275056cfca2300eb9a67cd1d917f7066b4113", + "reference": "74a275056cfca2300eb9a67cd1d917f7066b4113", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.1", + "laminas/laminas-coding-standard": "^2.1", + "laminas/laminas-session": "^2.7.4" + }, + "suggest": { + "laminas/laminas-session": "Laminas\\Session component" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for session", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-session/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-session/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-session/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-session" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-05-02T13:52:36+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-wincache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-wincache.git", + "reference": "0f54599c5d9aff11b01adadd2742097f923170ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-wincache/zipball/0f54599c5d9aff11b01adadd2742097f923170ba", + "reference": "0f54599c5d9aff11b01adadd2742097f923170ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-wincache": "WinCache, to use the WinCache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for wincache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-wincache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-wincache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-wincache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-wincache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2020-10-12T16:22:49+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-xcache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-xcache.git", + "reference": "24049557aa796ec7527bcc8032ed68346232b219" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-xcache/zipball/24049557aa796ec7527bcc8032ed68346232b219", + "reference": "24049557aa796ec7527bcc8032ed68346232b219", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-serializer": "^2.9", + "squizlabs/php_codesniffer": "^2.7" + }, + "suggest": { + "ext-xcache": "XCache, to use the XCache storage adapter" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for xcache", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-xcache/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-xcache/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-xcache/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-xcache" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "abandoned": true, + "time": "2020-10-12T16:23:46+00:00" + }, + { + "name": "laminas/laminas-cache-storage-adapter-zend-server", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server.git", + "reference": "8d0b0d219a048a92472d89a5e527990f3ea2decc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-zend-server/zipball/8d0b0d219a048a92472d89a5e527990f3ea2decc", + "reference": "8d0b0d219a048a92472d89a5e527990f3ea2decc", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "conflict": { + "laminas/laminas-cache": "<2.10" + }, + "provide": { + "laminas/laminas-cache-storage-implementation": "1.0" + }, + "require-dev": { + "laminas/laminas-cache": "^2.10", + "laminas/laminas-cache-storage-adapter-test": "^1.0@dev", + "laminas/laminas-coding-standard": "~1.0.0", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Cache\\Storage\\Adapter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas cache adapter for zend-server", + "keywords": [ + "cache", + "laminas" + ], + "support": { + "docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-zend-server/", + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server/issues", + "rss": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server/releases.atom", + "source": "https://github.com/laminas/laminas-cache-storage-adapter-zend-server" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-10-12T16:24:25+00:00" + }, + { + "name": "laminas/laminas-config", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-config.git", + "reference": "2f2273a6bdf966a9adf6042f8950b6c33199a3b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-config/zipball/2f2273a6bdf966a9adf6042f8950b6c33199a3b7", + "reference": "2f2273a6bdf966a9adf6042f8950b6c33199a3b7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laminas/laminas-stdlib": "^2.7.7 || ^3.1", + "php": "^7.3 || ~8.0.0", + "psr/container": "^1.0" + }, + "conflict": { + "container-interop/container-interop": "<1.2.0", + "zendframework/zend-config": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-filter": "^2.7.2", + "laminas/laminas-i18n": "^2.10.3", + "laminas/laminas-servicemanager": "^3.4.1", + "malukenho/docheader": "^0.1.6", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "laminas/laminas-filter": "^2.7.2; install if you want to use the Filter processor", + "laminas/laminas-i18n": "^2.7.4; install if you want to use the Translator processor", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3; if you need an extensible plugin manager for use with the Config Factory" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Config\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a nested object property based user interface for accessing this configuration data within application code", + "homepage": "https://laminas.dev", + "keywords": [ + "config", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-config/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-config/issues", + "rss": "https://github.com/laminas/laminas-config/releases.atom", + "source": "https://github.com/laminas/laminas-config" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-08T09:58:39+00:00" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/891ad70986729e20ed2e86355fcf93c9dc238a5f", + "reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-escaper": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.3.0", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.12.2", + "vimeo/psalm": "^3.16" + }, + "suggest": { + "ext-iconv": "*", + "ext-mbstring": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-02T17:10:53+00:00" + }, + { + "name": "laminas/laminas-eventmanager", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-eventmanager.git", + "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", + "reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-eventmanager": "*" + }, + "require-dev": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-stdlib": "^3.6", + "phpbench/phpbench": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5" + }, + "suggest": { + "container-interop/container-interop": "^1.1, to use the lazy listeners feature", + "laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://laminas.dev", + "keywords": [ + "event", + "eventmanager", + "events", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-eventmanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-eventmanager/issues", + "rss": "https://github.com/laminas/laminas-eventmanager/releases.atom", + "source": "https://github.com/laminas/laminas-eventmanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-07T22:35:32+00:00" + }, + { + "name": "laminas/laminas-http", + "version": "2.15.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-http.git", + "reference": "e1f3420ab35e21ea135913d213b8d570e5e7b513" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-http/zipball/e1f3420ab35e21ea135913d213b8d570e5e7b513", + "reference": "e1f3420ab35e21ea135913d213b8d570e5e7b513", + "shasum": "" + }, + "require": { + "laminas/laminas-loader": "^2.8", + "laminas/laminas-stdlib": "^3.6", + "laminas/laminas-uri": "^2.9.1", + "laminas/laminas-validator": "^2.15", + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-http": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "phpunit/phpunit": "^9.5.5" + }, + "suggest": { + "paragonie/certainty": "For automated management of cacert.pem" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "homepage": "https://laminas.dev", + "keywords": [ + "http", + "http client", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-http/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-http/issues", + "rss": "https://github.com/laminas/laminas-http/releases.atom", + "source": "https://github.com/laminas/laminas-http" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-10T10:45:31+00:00" + }, + { + "name": "laminas/laminas-json", + "version": "3.3.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-json.git", + "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-json/zipball/9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", + "reference": "9a0ce9f330b7d11e70c4acb44d67e8c4f03f437f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-json": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-stdlib": "^2.7.7 || ^3.1", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-json-server": "For implementing JSON-RPC servers", + "laminas/laminas-xml2json": "For converting XML documents to JSON" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://laminas.dev", + "keywords": [ + "json", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-json/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-json/issues", + "rss": "https://github.com/laminas/laminas-json/releases.atom", + "source": "https://github.com/laminas/laminas-json" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-02T18:02:31+00:00" + }, + { + "name": "laminas/laminas-loader", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-loader.git", + "reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-loader/zipball/d0589ec9dd48365fd95ad10d1c906efd7711c16b", + "reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-loader": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Loader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Autoloading and plugin loading strategies", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "loader" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-loader/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-loader/issues", + "rss": "https://github.com/laminas/laminas-loader/releases.atom", + "source": "https://github.com/laminas/laminas-loader" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-02T18:30:53+00:00" + }, + { + "name": "laminas/laminas-modulemanager", + "version": "2.10.2", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-modulemanager.git", + "reference": "2068e0b300e87e139112016a6025be341ceaaf33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-modulemanager/zipball/2068e0b300e87e139112016a6025be341ceaaf33", + "reference": "2068e0b300e87e139112016a6025be341ceaaf33", + "shasum": "" + }, + "require": { + "brick/varexporter": "^0.3.2", + "laminas/laminas-config": "^3.4", + "laminas/laminas-eventmanager": "^3.3", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.1", + "php": "^7.3 || ^8.0", + "webimpress/safe-writer": "^1.0.2 || ^2.1" + }, + "replace": { + "zendframework/zend-modulemanager": "^2.8.4" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-console": "^2.8", + "laminas/laminas-di": "^2.6.1", + "laminas/laminas-loader": "^2.6.1", + "laminas/laminas-mvc": "^3.1.1", + "laminas/laminas-servicemanager": "^3.4.1", + "phpunit/phpunit": "^9.3.7" + }, + "suggest": { + "laminas/laminas-console": "Laminas\\Console component", + "laminas/laminas-loader": "Laminas\\Loader component if you are not using Composer autoloading for your modules", + "laminas/laminas-mvc": "Laminas\\Mvc component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\ModuleManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Modular application system for laminas-mvc applications", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "modulemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-modulemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-modulemanager/issues", + "rss": "https://github.com/laminas/laminas-modulemanager/releases.atom", + "source": "https://github.com/laminas/laminas-modulemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-04-13T20:11:28+00:00" + }, + { + "name": "laminas/laminas-mvc", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-mvc.git", + "reference": "88da7200cf8f5a970c35d91717a5c4db94981e5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-mvc/zipball/88da7200cf8f5a970c35d91717a5c4db94981e5e", + "reference": "88da7200cf8f5a970c35d91717a5c4db94981e5e", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-eventmanager": "^3.2", + "laminas/laminas-http": "^2.7", + "laminas/laminas-modulemanager": "^2.8", + "laminas/laminas-router": "^3.0.2", + "laminas/laminas-servicemanager": "^3.3", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-view": "^2.11.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-mvc": "^3.1.1" + }, + "require-dev": { + "http-interop/http-middleware": "^0.4.1", + "laminas/laminas-coding-standard": "^1.0.0", + "laminas/laminas-json": "^2.6.1 || ^3.0", + "laminas/laminas-psr7bridge": "^1.0", + "laminas/laminas-stratigility": ">=2.0.1 <2.2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.4.2" + }, + "suggest": { + "laminas/laminas-json": "(^2.6.1 || ^3.0) To auto-deserialize JSON body content in AbstractRestfulController extensions, when json_decode is unavailable", + "laminas/laminas-log": "^2.9.1 To provide log functionality via LogFilterManager, LogFormatterManager, and LogProcessorManager", + "laminas/laminas-mvc-console": "laminas-mvc-console provides the ability to expose laminas-mvc as a console application", + "laminas/laminas-mvc-i18n": "laminas-mvc-i18n provides integration with laminas-i18n, including a translation bridge and translatable route segments", + "laminas/laminas-mvc-middleware": "To dispatch middleware in your laminas-mvc application", + "laminas/laminas-mvc-plugin-fileprg": "To provide Post/Redirect/Get functionality around forms that container file uploads", + "laminas/laminas-mvc-plugin-flashmessenger": "To provide flash messaging capabilities between requests", + "laminas/laminas-mvc-plugin-identity": "To access the authenticated identity (per laminas-authentication) in controllers", + "laminas/laminas-mvc-plugin-prg": "To provide Post/Redirect/Get functionality within controllers", + "laminas/laminas-paginator": "^2.7 To provide pagination functionality via PaginatorPluginManager", + "laminas/laminas-servicemanager-di": "laminas-servicemanager-di provides utilities for integrating laminas-di and laminas-servicemanager in your laminas-mvc application" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Mvc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Laminas's event-driven MVC layer, including MVC Applications, Controllers, and Plugins", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "mvc" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-mvc/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-mvc/issues", + "rss": "https://github.com/laminas/laminas-mvc/releases.atom", + "source": "https://github.com/laminas/laminas-mvc" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2020-12-14T21:54:40+00:00" + }, + { + "name": "laminas/laminas-router", + "version": "3.4.5", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-router.git", + "reference": "aaf2eb364eedeb5c4d5b9ee14cd2938d0f7e89b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-router/zipball/aaf2eb364eedeb5c4d5b9ee14cd2938d0f7e89b7", + "reference": "aaf2eb364eedeb5c4d5b9ee14cd2938d0f7e89b7", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-http": "^2.8.1", + "laminas/laminas-servicemanager": "^2.7.8 || ^3.3", + "laminas/laminas-stdlib": "^3.3", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "replace": { + "zendframework/zend-router": "^3.3.0" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-i18n": "^2.7.4", + "phpunit/phpunit": "^9.4" + }, + "suggest": { + "laminas/laminas-i18n": "^2.7.4, if defining translatable HTTP path segments" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Router", + "config-provider": "Laminas\\Router\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Router\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Flexible routing system for HTTP and console applications", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "routing" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-router/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-router/issues", + "rss": "https://github.com/laminas/laminas-router/releases.atom", + "source": "https://github.com/laminas/laminas-router" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-04-19T16:06:00+00:00" + }, + { + "name": "laminas/laminas-servicemanager", + "version": "3.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-servicemanager.git", + "reference": "e52b985909e0940bf22d34f322eb3f48bbef6bd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/e52b985909e0940bf22d34f322eb3f48bbef6bd1", + "reference": "e52b985909e0940bf22d34f322eb3f48bbef6bd1", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "laminas/laminas-stdlib": "^3.2.1", + "php": "~7.4.0 || ~8.0.0 || ~8.1.0", + "psr/container": "^1.0" + }, + "conflict": { + "laminas/laminas-code": "<3.3.1", + "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.0", + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-container-config-test": "^0.3", + "laminas/laminas-dependency-plugin": "^2.1.2", + "mikey179/vfsstream": "^1.6.10@alpha", + "ocramius/proxy-manager": "^2.11", + "phpbench/phpbench": "^1.1", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.16.1", + "vimeo/psalm": "^4.8" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services" + }, + "bin": [ + "bin/generate-deps-for-config-factory", + "bin/generate-factory-for-class" + ], + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Factory-Driven Dependency Injection Container", + "homepage": "https://laminas.dev", + "keywords": [ + "PSR-11", + "dependency-injection", + "di", + "dic", + "laminas", + "service-manager", + "servicemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-servicemanager/issues", + "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", + "source": "https://github.com/laminas/laminas-servicemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-18T20:19:36+00:00" + }, + { + "name": "laminas/laminas-stdlib", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-stdlib.git", + "reference": "c53d8537f108fac3fae652677a19735db730ba46" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/c53d8537f108fac3fae652677a19735db730ba46", + "reference": "c53d8537f108fac3fae652677a19735db730ba46", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-stdlib": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.3.0", + "phpbench/phpbench": "^0.17.1", + "phpunit/phpunit": "~9.3.7", + "psalm/plugin-phpunit": "^0.16.0", + "vimeo/psalm": "^4.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "SPL extensions, array utilities, error handlers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "stdlib" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-stdlib/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-stdlib/issues", + "rss": "https://github.com/laminas/laminas-stdlib/releases.atom", + "source": "https://github.com/laminas/laminas-stdlib" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-02T16:11:32+00:00" + }, + { + "name": "laminas/laminas-uri", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-uri.git", + "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-uri/zipball/7e837dc15c8fd3949df7d1213246fd7c8640032b", + "reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b", + "shasum": "" + }, + "require": { + "laminas/laminas-escaper": "^2.9", + "laminas/laminas-validator": "^2.15", + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-uri": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.2.1", + "phpunit/phpunit": "^9.5.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "uri" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-uri/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-uri/issues", + "rss": "https://github.com/laminas/laminas-uri/releases.atom", + "source": "https://github.com/laminas/laminas-uri" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-09T18:37:15+00:00" + }, + { + "name": "laminas/laminas-validator", + "version": "2.15.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-validator.git", + "reference": "270380e87904f5a1a1fba3059989d4ca157e16a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-validator/zipball/270380e87904f5a1a1fba3059989d4ca157e16a9", + "reference": "270380e87904f5a1a1fba3059989d4ca157e16a9", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.1", + "laminas/laminas-stdlib": "^3.6", + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "conflict": { + "zendframework/zend-validator": "*" + }, + "require-dev": { + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~2.2.1", + "laminas/laminas-db": "^2.7", + "laminas/laminas-filter": "^2.6", + "laminas/laminas-http": "^2.14.2", + "laminas/laminas-i18n": "^2.6", + "laminas/laminas-math": "^2.6", + "laminas/laminas-servicemanager": "^2.7.11 || ^3.0.3", + "laminas/laminas-session": "^2.8", + "laminas/laminas-uri": "^2.7", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5.5", + "psalm/plugin-phpunit": "^0.15.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "vimeo/psalm": "^4.3" + }, + "suggest": { + "laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator", + "laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator", + "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", + "laminas/laminas-i18n-resources": "Translations of validator messages", + "laminas/laminas-math": "Laminas\\Math component, required by the Csrf validator", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator", + "laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators", + "psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators" + }, + "type": "library", + "extra": { + "laminas": { + "component": "Laminas\\Validator", + "config-provider": "Laminas\\Validator\\ConfigProvider" + } + }, + "autoload": { + "psr-4": { + "Laminas\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "validator" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-validator/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-validator/issues", + "rss": "https://github.com/laminas/laminas-validator/releases.atom", + "source": "https://github.com/laminas/laminas-validator" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-08T23:16:56+00:00" + }, + { + "name": "laminas/laminas-view", + "version": "2.12.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-view.git", + "reference": "3ef103da6887809f08ecf52f42c31a76c9bf08b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-view/zipball/3ef103da6887809f08ecf52f42c31a76c9bf08b1", + "reference": "3ef103da6887809f08ecf52f42c31a76c9bf08b1", + "shasum": "" + }, + "require": { + "laminas/laminas-eventmanager": "^3.0", + "laminas/laminas-json": "^2.6.1 || ^3.0", + "laminas/laminas-loader": "^2.5", + "laminas/laminas-stdlib": "^3.2.1", + "laminas/laminas-zendframework-bridge": "^1.0", + "php": "^7.3 || ~8.0.0" + }, + "conflict": { + "laminas/laminas-servicemanager": "<3.3" + }, + "replace": { + "zendframework/zend-view": "^2.11.4" + }, + "require-dev": { + "laminas/laminas-authentication": "^2.5", + "laminas/laminas-cache": "^2.6.1", + "laminas/laminas-coding-standard": "~1.0.0", + "laminas/laminas-config": "^2.6", + "laminas/laminas-console": "^2.6", + "laminas/laminas-escaper": "^2.5", + "laminas/laminas-feed": "^2.7", + "laminas/laminas-filter": "^2.6.1", + "laminas/laminas-http": "^2.5.4", + "laminas/laminas-i18n": "^2.6", + "laminas/laminas-log": "^2.7", + "laminas/laminas-modulemanager": "^2.7.1", + "laminas/laminas-mvc": "^2.7.14 || ^3.0", + "laminas/laminas-navigation": "^2.5", + "laminas/laminas-paginator": "^2.5", + "laminas/laminas-permissions-acl": "^2.6", + "laminas/laminas-router": "^3.0.1", + "laminas/laminas-serializer": "^2.6.1", + "laminas/laminas-servicemanager": "^3.3", + "laminas/laminas-session": "^2.8.1", + "laminas/laminas-uri": "^2.5", + "phpspec/prophecy": "^1.12", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "laminas/laminas-authentication": "Laminas\\Authentication component", + "laminas/laminas-escaper": "Laminas\\Escaper component", + "laminas/laminas-feed": "Laminas\\Feed component", + "laminas/laminas-filter": "Laminas\\Filter component", + "laminas/laminas-http": "Laminas\\Http component", + "laminas/laminas-i18n": "Laminas\\I18n component", + "laminas/laminas-mvc": "Laminas\\Mvc component", + "laminas/laminas-mvc-plugin-flashmessenger": "laminas-mvc-plugin-flashmessenger component, if you want to use the FlashMessenger view helper with laminas-mvc versions 3 and up", + "laminas/laminas-navigation": "Laminas\\Navigation component", + "laminas/laminas-paginator": "Laminas\\Paginator component", + "laminas/laminas-permissions-acl": "Laminas\\Permissions\\Acl component", + "laminas/laminas-servicemanager": "Laminas\\ServiceManager component", + "laminas/laminas-uri": "Laminas\\Uri component" + }, + "bin": [ + "bin/templatemap_generator.php" + ], + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\View\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Flexible view layer supporting and providing multiple view layers, helpers, and more", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "view" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-view/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-view/issues", + "rss": "https://github.com/laminas/laminas-view/releases.atom", + "source": "https://github.com/laminas/laminas-view" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-01-01T14:07:41+00:00" + }, + { + "name": "laminas/laminas-zendframework-bridge", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-zendframework-bridge.git", + "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", + "reference": "bf180a382393e7db5c1e8d0f2ec0c4af9c724baf", + "shasum": "" + }, + "require": { + "php": "^7.3 || ~8.0.0 || ~8.1.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.15.1", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.6" + }, + "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\ZendFrameworkBridge" + } + }, + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ZendFrameworkBridge\\": "src//" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Alias legacy ZF class names to Laminas Project equivalents.", + "keywords": [ + "ZendFramework", + "autoloading", + "laminas", + "zf" + ], + "support": { + "forum": "https://discourse.laminas.dev/", + "issues": "https://github.com/laminas/laminas-zendframework-bridge/issues", + "rss": "https://github.com/laminas/laminas-zendframework-bridge/releases.atom", + "source": "https://github.com/laminas/laminas-zendframework-bridge" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2021-09-03T17:53:30+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.12.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" + }, + "time": "2021-07-21T10:44:31+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.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": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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/master" + }, + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "webimpress/safe-writer", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/webimpress/safe-writer.git", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webimpress/safe-writer/zipball/9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "reference": "9d37cc8bee20f7cb2f58f6e23e05097eab5072e6", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.4", + "vimeo/psalm": "^4.7", + "webimpress/coding-standard": "^1.2.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev", + "dev-develop": "2.3.x-dev", + "dev-release-1.0": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Webimpress\\SafeWriter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "description": "Tool to write files safely, to avoid race conditions", + "keywords": [ + "concurrent write", + "file writer", + "race condition", + "safe writer", + "webimpress" + ], + "support": { + "issues": "https://github.com/webimpress/safe-writer/issues", + "source": "https://github.com/webimpress/safe-writer/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/michalbundyra", + "type": "github" + } + ], + "time": "2021-04-19T16:34:45+00:00" + } + ], + "packages-dev": [ + { + "name": "amphp/amp", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/amp.git", + "reference": "caa95edeb1ca1bf7532e9118ede4a3c3126408cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/amp/zipball/caa95edeb1ca1bf7532e9118ede4a3c3126408cc", + "reference": "caa95edeb1ca1bf7532e9118ede4a3c3126408cc", + "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", + "psalm/phar": "^3.11@dev", + "react/promise": "^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\": "lib" + }, + "files": [ + "lib/functions.php", + "lib/Internal/functions.php" + ] + }, + "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": "http://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.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-07-16T20:06:06+00:00" + }, + { + "name": "amphp/byte-stream", + "version": "v1.8.1", + "source": { + "type": "git", + "url": "https://github.com/amphp/byte-stream.git", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "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", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\ByteStream\\": "lib" + }, + "files": [ + "lib/functions.php" + ] + }, + "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": "http://amphp.org/byte-stream", + "keywords": [ + "amp", + "amphp", + "async", + "io", + "non-blocking", + "stream" + ], + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" + }, + { + "name": "composer/package-versions-deprecated", + "version": "1.11.99.4", + "source": { + "type": "git", + "url": "https://github.com/composer/package-versions-deprecated.git", + "reference": "b174585d1fe49ceed21928a945138948cb394600" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b174585d1fe49ceed21928a945138948cb394600", + "reference": "b174585d1fe49ceed21928a945138948cb394600", + "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.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-09-13T08:41:34+00:00" + }, + { + "name": "composer/semver", + "version": "3.2.5", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.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": "2021-05-24T12:41:47+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-07-31T17:03:58+00:00" + }, + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.1", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "fe390591e0241955f22eb9ba327d137e501c771c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", + "reference": "fe390591e0241955f22eb9ba327d137e501c771c", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "phpcompatibility/php-compatibility": "^9.0", + "sensiolabs/security-checker": "^4.1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + }, + "time": "2020-12-07T18:04:37+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": "doctrine/coding-standard", + "version": "9.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/coding-standard.git", + "reference": "35a2452c6025cb739c3244b3348bcd1604df07d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/35a2452c6025cb739c3244b3348bcd1604df07d1", + "reference": "35a2452c6025cb739c3244b3348bcd1604df07d1", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.1 || ^8.0", + "slevomat/coding-standard": "^7.0.0", + "squizlabs/php_codesniffer": "^3.6.0" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Steve Müller", + "email": "st.mueller@dzh-online.de" + } + ], + "description": "The Doctrine Coding Standard is a set of PHPCS rules applied to all Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/coding-standard.html", + "keywords": [ + "checks", + "code", + "coding", + "cs", + "doctrine", + "rules", + "sniffer", + "sniffs", + "standard", + "style" + ], + "support": { + "issues": "https://github.com/doctrine/coding-standard/issues", + "source": "https://github.com/doctrine/coding-standard/tree/9.0.0" + }, + "time": "2021-04-12T15:11:14+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "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/1.4.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": "2020-11-10T18:47:58+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": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/felixfbecker/php-language-server-protocol.git", + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "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/1.5.1" + }, + "time": "2021-02-22T14:02:09+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.2", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "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.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" + }, + { + "name": "netresearch/jsonmapper", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/cweiske/jsonmapper.git", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.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.0.0" + }, + "time": "2020-12-01T19:48:11+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.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "bae7c545bef187884426f042434e561ab1ddb182" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "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.1.0" + }, + "time": "2021-02-23T14:00:09+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.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/30f38bffc6f24293dadd1823936372dfa9e86e2f", + "reference": "30f38bffc6f24293dadd1823936372dfa9e86e2f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "psalm/phar": "^4.8" + }, + "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.5.0" + }, + "time": "2021-09-17T15:28:14+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.14.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + }, + "time": "2021-09-10T09:02:12+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "0.5.6", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "fac86158ffc7392e49636f77e63684c026df43b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fac86158ffc7392e49636f77e63684c026df43b8", + "reference": "fac86158ffc7392e49636f77e63684c026df43b8", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.87", + "phpstan/phpstan-strict-rules": "^0.12.5", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5-dev" + } + }, + "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/0.5.6" + }, + "time": "2021-08-31T08:08:22+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", + "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.12.0", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library 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", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-09-17T05:39:03+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+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.5.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", + "reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "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", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-08-31T06:47:40+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "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.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+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.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "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.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "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.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:52:38+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "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": "http://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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-11T13:31:12+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "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.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+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.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "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": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "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" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-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/2.3.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-15T12:49:02+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": "slevomat/coding-standard", + "version": "7.0.15", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "cc80e59f9b4ca642f02dc1b615c37a9afc2a0f80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/cc80e59f9b4ca642f02dc1b615c37a9afc2a0f80", + "reference": "cc80e59f9b4ca642f02dc1b615c37a9afc2a0f80", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.1 || ^8.0", + "phpstan/phpdoc-parser": "0.5.1 - 0.5.6", + "squizlabs/php_codesniffer": "^3.6.0" + }, + "require-dev": { + "phing/phing": "2.17.0", + "php-parallel-lint/php-parallel-lint": "1.3.1", + "phpstan/phpstan": "0.12.98", + "phpstan/phpstan-deprecation-rules": "0.12.6", + "phpstan/phpstan-phpunit": "0.12.22", + "phpstan/phpstan-strict-rules": "0.12.11", + "phpunit/phpunit": "7.5.20|8.5.5|9.5.9" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/7.0.15" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2021-09-09T10:29:09+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.6.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", + "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "support": { + "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", + "source": "https://github.com/squizlabs/PHP_CodeSniffer", + "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + }, + "time": "2021-04-09T00:54:41+00:00" + }, + { + "name": "symfony/console", + "version": "v5.3.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.3.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-08-25T20:02:16+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", + "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-28T13:41:28+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-04-01T10:43:52+00:00" + }, + { + "name": "symfony/string", + "version": "v5.3.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.3.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-08-26T08:00:08+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "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.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "vimeo/psalm", + "version": "4.10.0", + "source": { + "type": "git", + "url": "https://github.com/vimeo/psalm.git", + "reference": "916b098b008f6de4543892b1e0651c1c3b92cbfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/916b098b008f6de4543892b1e0651c1c3b92cbfa", + "reference": "916b098b008f6de4543892b1e0651c1c3b92cbfa", + "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", + "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.12", + "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", + "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", + "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", + "weirdan/prophecy-shim": "^1.0 || ^2.0" + }, + "suggest": { + "ext-igbinary": "^2.0.5" + }, + "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": { + "psr-4": { + "Psalm\\": "src/Psalm/" + }, + "files": [ + "src/functions.php", + "src/spl_object_id.php" + ] + }, + "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.10.0" + }, + "time": "2021-09-04T21:00:09+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "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.10.0" + }, + "time": "2021-03-09T10:59:23+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" + }, + "time": "2015-12-17T08:42:14+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.4.7 || ~8.0.0" + }, + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..d64a281 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + src + tests + tests/OcraCachedViewResolverTest/Compiler/_files/* + + + + + + + + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index e5ebb4b..ba44216 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,22 +1,17 @@ ./tests/OcraCachedViewResolverTest - - + + ./src - - + + diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..4f11f42 --- /dev/null +++ b/psalm.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/OcraCachedViewResolver/Compiler/TemplateMapCompiler.php b/src/OcraCachedViewResolver/Compiler/TemplateMapCompiler.php index f43ecf0..3a992c0 100644 --- a/src/OcraCachedViewResolver/Compiler/TemplateMapCompiler.php +++ b/src/OcraCachedViewResolver/Compiler/TemplateMapCompiler.php @@ -1,41 +1,34 @@ - * @license MIT + * an {@see \Laminas\View\Resolver\TemplateMapResolver}, a + * {@see \Laminas\View\Resolver\TemplatePathStack} or a + * {@see \Laminas\View\Resolver\AggregateResolver} */ class TemplateMapCompiler { @@ -43,13 +36,11 @@ class TemplateMapCompiler * Generates a list of all existing templates in the given resolver, * with their names being keys, and absolute paths being values * - * @param ResolverInterface $resolver + * @return array * - * @return array - * - * @throws \Zend\View\Exception\DomainException + * @throws DomainException */ - public function compileMap(ResolverInterface $resolver) : array + public function compileMap(ResolverInterface $resolver): array { if ($resolver instanceof AggregateResolver) { return $this->compileFromAggregateResolver($resolver); @@ -66,12 +57,14 @@ public function compileMap(ResolverInterface $resolver) : array return []; } - protected function compileFromAggregateResolver(AggregateResolver $resolver) : array + /** @psalm-return array */ + protected function compileFromAggregateResolver(AggregateResolver $resolver): array { $map = []; - /* @var $queuedResolver ResolverInterface */ foreach ($resolver->getIterator() as $queuedResolver) { + assert($queuedResolver instanceof ResolverInterface); + /** @psalm-var array $map */ $map = ArrayUtils::merge($this->compileMap($queuedResolver), $map); } @@ -79,32 +72,37 @@ protected function compileFromAggregateResolver(AggregateResolver $resolver) : a } /** - * @param TemplatePathStack $resolver - * - * @return array + * @return array * - * @throws \Zend\View\Exception\DomainException + * @throws DomainException */ - protected function compileFromTemplatePathStack(TemplatePathStack $resolver) : array + protected function compileFromTemplatePathStack(TemplatePathStack $resolver): array { $map = []; foreach ($resolver->getPaths()->toArray() as $path) { - $path = realpath($path); + assert(is_string($path)); + $path = realpath($path); + /** @var iterable $iterator */ $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($iterator as $file) { - $this->addResolvedPath($file, $map, $path, $resolver); + $map = $this->addResolvedPath($file, $map, $path, $resolver); } } return $map; } - protected function compileFromTemplateMapResolver(TemplateMapResolver $resolver) : array + /** + * @psalm-return array + * + * @psalm-suppress MixedReturnTypeCoercion the {@see TemplateMapResolver} does not have refined type declarations + */ + protected function compileFromTemplateMapResolver(TemplateMapResolver $resolver): array { return $resolver->getMap(); } @@ -112,24 +110,31 @@ protected function compileFromTemplateMapResolver(TemplateMapResolver $resolver) /** * Add the given file to the map if it corresponds to a resolved view * - * @param SplFileInfo $file - * @param array $map - * @param string $basePath - * @param TemplatePathStack $resolver + * @param array $map * - * @return void + * @return array * - * @throws \Zend\View\Exception\DomainException + * @throws DomainException */ - private function addResolvedPath(SplFileInfo $file, array & $map, $basePath, TemplatePathStack $resolver) + private function addResolvedPath(SplFileInfo $file, array $map, string $basePath, TemplatePathStack $resolver): array { - $filePath = $file->getRealPath(); - $fileName = pathinfo($filePath, PATHINFO_FILENAME); - $relativePath = trim(str_replace($basePath, '', $file->getPath()), '/\\'); - $templateName = str_replace('\\', '/', trim($relativePath . '/' . $fileName, '/')); + $filePath = $file->getRealPath(); + $fileName = pathinfo($filePath, PATHINFO_FILENAME); + $relativePath = trim(str_replace($basePath, '', $file->getPath()), '/\\'); + $templateName = str_replace('\\', '/', trim($relativePath . '/' . $fileName, '/')); + + if (! $fileName) { + return $map; + } + + $resolvedPath = $resolver->resolve($templateName); - if ($fileName && ($resolvedPath = $resolver->resolve($templateName))) { - $map[$templateName] = realpath($resolvedPath); + if (! $resolvedPath) { + return $map; } + + $map[$templateName] = realpath($resolvedPath); + + return $map; } } diff --git a/src/OcraCachedViewResolver/Factory/CacheFactory.php b/src/OcraCachedViewResolver/Factory/CacheFactory.php index dcfc0bf..0d0e146 100644 --- a/src/OcraCachedViewResolver/Factory/CacheFactory.php +++ b/src/OcraCachedViewResolver/Factory/CacheFactory.php @@ -1,37 +1,22 @@ - * @license MIT + * @see Module + * + * @psalm-import-type OcraCachedViewResolverConfiguration from Module */ final class CacheFactory { @@ -39,11 +24,10 @@ final class CacheFactory * {@inheritDoc} * * @throws InvalidArgumentException - * @throws ContainerException - * @throws NotFoundException */ - public function __invoke(ContainerInterface $container) : StorageInterface + public function __invoke(ContainerInterface $container): StorageInterface { + /** @psalm-var OcraCachedViewResolverConfiguration $config */ $config = $container->get('Config'); return StorageFactory::factory($config[Module::CONFIG][Module::CONFIG_CACHE_DEFINITION]); diff --git a/src/OcraCachedViewResolver/Factory/CompiledMapResolverDelegatorFactory.php b/src/OcraCachedViewResolver/Factory/CompiledMapResolverDelegatorFactory.php index be89fa2..e9ebc4f 100644 --- a/src/OcraCachedViewResolver/Factory/CompiledMapResolverDelegatorFactory.php +++ b/src/OcraCachedViewResolver/Factory/CompiledMapResolverDelegatorFactory.php @@ -1,62 +1,49 @@ - * @license MIT + * @see Module + * + * @psalm-import-type OcraCachedViewResolverConfiguration from Module */ final class CompiledMapResolverDelegatorFactory implements DelegatorFactoryInterface { - /** - * {@inheritDoc} - * - * @return AggregateResolver - * - * @throws ContainerException - * @throws NotFoundException - */ + /** {@inheritDoc} */ public function __invoke( ContainerInterface $container, $name, callable $callback, - array $options = null - ) : ResolverInterface { - $config = $container->get('Config')[Module::CONFIG]; - /* @var $cache \Zend\Cache\Storage\StorageInterface */ - $cache = $container->get($config[Module::CONFIG_CACHE_SERVICE]); + ?array $options = null + ): ResolverInterface { + /** @psalm-var OcraCachedViewResolverConfiguration $allConfig */ + $allConfig = $container->get('Config'); + $config = $allConfig[Module::CONFIG]; + $cache = $container->get($config[Module::CONFIG_CACHE_SERVICE]); + assert($cache instanceof StorageInterface); $resolver = new AggregateResolver(); +//phpcs:disable SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration.MissingVariable +//phpcs:disable SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration.NoAssignment + /** @var callable(): ResolverInterface $callback */ +//phpcs:enable $resolver->attach(new LazyResolver($callback), 50); $resolver->attach(new CachingMapResolver($cache, $config[Module::CONFIG_CACHE_KEY], $callback), 100); diff --git a/src/OcraCachedViewResolver/Module.php b/src/OcraCachedViewResolver/Module.php index ce76324..86e381b 100644 --- a/src/OcraCachedViewResolver/Module.php +++ b/src/OcraCachedViewResolver/Module.php @@ -1,62 +1,53 @@ - * @license MIT + * @psalm-type OcraCachedViewResolverConfiguration = array{ + * ocra_cached_view_resolver: array{ + * cache: array, + * cached_template_map_key: non-empty-string, + * cache_service: non-empty-string, + * }, + * } */ final class Module implements ConfigProviderInterface { /** * Name of the cache namespace where configs for this module are wrapped */ - const CONFIG = 'ocra_cached_view_resolver'; + public const CONFIG = 'ocra_cached_view_resolver'; /** * Name of the config key referencing the array with cache definitions to be passed to - * the {@see \Zend\Cache\StorageFactory} + * the {@see \Laminas\Cache\StorageFactory} */ - const CONFIG_CACHE_DEFINITION = 'cache'; + public const CONFIG_CACHE_DEFINITION = 'cache'; /** * Name of the config key referencing the cache service to be used when storing the cached map */ - const CONFIG_CACHE_SERVICE = 'cache_service'; + public const CONFIG_CACHE_SERVICE = 'cache_service'; /** * Name of the config key referencing the cache key to be used when storing the cached map */ - const CONFIG_CACHE_KEY = 'cached_template_map_key'; + public const CONFIG_CACHE_KEY = 'cached_template_map_key'; /** * {@inheritDoc} */ - public function getConfig() : array + public function getConfig(): array { return [ self::CONFIG => [ diff --git a/src/OcraCachedViewResolver/View/Resolver/CachingMapResolver.php b/src/OcraCachedViewResolver/View/Resolver/CachingMapResolver.php index f8bbad2..cf0fc31 100644 --- a/src/OcraCachedViewResolver/View/Resolver/CachingMapResolver.php +++ b/src/OcraCachedViewResolver/View/Resolver/CachingMapResolver.php @@ -1,79 +1,46 @@ - * @license MIT - */ + +use function is_array; + final class CachingMapResolver implements ResolverInterface { - /** - * @var callable - */ + /** @var callable(): ResolverInterface */ private $realResolverInstantiator; - /** - * @var StorageInterface - */ - private $cache; + private StorageInterface $cache; - /** - * @var string - */ - private $cacheKey; + private string $cacheKey; - /** - * @var null|array - */ - private $map; + /** @var array|null */ + private ?array $map = null; - /** - * @param StorageInterface $cache - * @param string $cacheKey - * @param callable $realResolverInstantiator - */ - public function __construct(StorageInterface $cache, $cacheKey, callable $realResolverInstantiator) + /** @param callable(): ResolverInterface $realResolverInstantiator */ + public function __construct(StorageInterface $cache, string $cacheKey, callable $realResolverInstantiator) { $this->cache = $cache; - $this->cacheKey = (string) $cacheKey; + $this->cacheKey = $cacheKey; $this->realResolverInstantiator = $realResolverInstantiator; } /** * {@inheritDoc} */ - public function resolve($name, RendererInterface $renderer = null) + public function resolve($name, ?RendererInterface $renderer = null) { if (isset($this->map[$name])) { return $this->map[$name]; } - if (null !== $this->map) { + if ($this->map !== null) { return false; } @@ -85,22 +52,18 @@ public function resolve($name, RendererInterface $renderer = null) /** * Load the template map into memory */ - private function loadMap() + private function loadMap(): void { - $this->map = $this->cache->getItem($this->cacheKey); + /** @var array|false $map */ + $map = $this->cache->getItem($this->cacheKey); - if (is_array($this->map)) { - return; - } + if (is_array($map)) { + $this->map = $map; - $realResolverInstantiator = $this->realResolverInstantiator; - $realResolver = $realResolverInstantiator(); - - if (! $realResolver instanceof ResolverInterface) { - throw InvalidResolverInstantiatorException::fromInvalidResolver($realResolver); + return; } - $this->map = (new TemplateMapCompiler())->compileMap($realResolver); + $this->map = (new TemplateMapCompiler())->compileMap(($this->realResolverInstantiator)()); $this->cache->setItem($this->cacheKey, $this->map); } diff --git a/src/OcraCachedViewResolver/View/Resolver/Exception/ExceptionInterface.php b/src/OcraCachedViewResolver/View/Resolver/Exception/ExceptionInterface.php deleted file mode 100644 index 0b36f22..0000000 --- a/src/OcraCachedViewResolver/View/Resolver/Exception/ExceptionInterface.php +++ /dev/null @@ -1,29 +0,0 @@ - - * @license MIT - */ -interface ExceptionInterface -{ -} diff --git a/src/OcraCachedViewResolver/View/Resolver/Exception/InvalidResolverInstantiatorException.php b/src/OcraCachedViewResolver/View/Resolver/Exception/InvalidResolverInstantiatorException.php deleted file mode 100644 index 0bc49fa..0000000 --- a/src/OcraCachedViewResolver/View/Resolver/Exception/InvalidResolverInstantiatorException.php +++ /dev/null @@ -1,57 +0,0 @@ - - * @license MIT - */ -final class InvalidResolverInstantiatorException extends InvalidArgumentException implements ExceptionInterface -{ - /** - * @param mixed $instantiator - * - * @return self - */ - public static function fromInvalidInstantiator($instantiator) : self - { - return new self(sprintf( - 'Invalid instantiator given, expected `callable`, `%s` given.', - is_object($instantiator) ? get_class($instantiator) : gettype($instantiator) - )); - } - - /** - * @param mixed $resolver - * - * @return self - */ - public static function fromInvalidResolver($resolver) : self - { - return new self(sprintf( - 'Invalid resolver found, expected `' . ResolverInterface::class . '`, `%s` given.', - is_object($resolver) ? get_class($resolver) : gettype($resolver) - )); - } -} diff --git a/src/OcraCachedViewResolver/View/Resolver/LazyResolver.php b/src/OcraCachedViewResolver/View/Resolver/LazyResolver.php index d532323..a9d8048 100644 --- a/src/OcraCachedViewResolver/View/Resolver/LazyResolver.php +++ b/src/OcraCachedViewResolver/View/Resolver/LazyResolver.php @@ -1,68 +1,35 @@ - * @license MIT */ final class LazyResolver implements ResolverInterface { - /** - * @var callable - */ - private $resolverInstantiator; + /** @var callable(): ResolverInterface $makeResolver */ + private $makeResolver; - /** - * @var ResolverInterface|null - */ - private $resolver; + private ?ResolverInterface $resolver = null; - public function __construct($resolverInstantiator) + /** @param callable(): ResolverInterface $makeResolver */ + public function __construct(callable $makeResolver) { - if (! is_callable($resolverInstantiator)) { - throw InvalidResolverInstantiatorException::fromInvalidInstantiator($resolverInstantiator); - } - - $this->resolverInstantiator = $resolverInstantiator; + $this->makeResolver = $makeResolver; } /** * {@inheritDoc} */ - public function resolve($name, RendererInterface $renderer = null) + public function resolve($name, ?RendererInterface $renderer = null) { if (! $this->resolver) { - $resolverInstantiator = $this->resolverInstantiator; - $resolver = $resolverInstantiator(); - - if (! $resolver instanceof ResolverInterface) { - throw InvalidResolverInstantiatorException::fromInvalidResolver($resolver); - } - - $this->resolver = $resolver; + $this->resolver = ($this->makeResolver)(); } return $this->resolver->resolve($name, $renderer); diff --git a/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerFunctionalTest.php b/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerFunctionalTest.php index 4fa3bbf..edc05b8 100644 --- a/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerFunctionalTest.php +++ b/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerFunctionalTest.php @@ -1,60 +1,33 @@ - * @license MIT - * * @group Functional * @coversNothing */ class TemplateMapCompilerFunctionalTest extends TestCase { - /** - * @var TemplateMapCompiler - */ - protected $compiler; - - /** - * {@inheritDoc} - */ - public function setUp() + protected TemplateMapCompiler $compiler; + + protected function setUp(): void { parent::setUp(); $this->compiler = new TemplateMapCompiler(); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileFromTemplatePathStack - * - * @throws \Zend\View\Exception\InvalidArgumentException - */ - public function testCompileFromTemplatePathStack() + public function testCompileFromTemplatePathStack(): void { $resolver = new TemplatePathStack(); $resolver->addPath(__DIR__ . '/_files/subdir1'); @@ -63,8 +36,8 @@ public function testCompileFromTemplatePathStack() $template2 = realpath(__DIR__ . '/_files/subdir2/template2.phtml'); $template4 = realpath(__DIR__ . '/_files/subdir1/valid/template4.phtml'); - self::assertInternalType('string', $template2); - self::assertInternalType('string', $template4); + self::assertIsString($template2); + self::assertIsString($template4); self::assertSame( [ @@ -75,19 +48,13 @@ public function testCompileFromTemplatePathStack() ); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileFromTemplatePathStack - * - * @throws \Zend\View\Exception\InvalidArgumentException - */ - public function testCompileFromTemplatePathStackWithDifferentPaths() + public function testCompileFromTemplatePathStackWithDifferentPaths(): void { $template2 = realpath(__DIR__ . '/_files/subdir1/template2.phtml'); $template4 = realpath(__DIR__ . '/_files/subdir1/valid/template4.phtml'); - self::assertInternalType('string', $template2); - self::assertInternalType('string', $template4); + self::assertIsString($template2); + self::assertIsString($template4); // inverse directory order $resolver = new TemplatePathStack(); diff --git a/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerTest.php b/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerTest.php index cceb121..e4459b8 100644 --- a/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerTest.php +++ b/tests/OcraCachedViewResolverTest/Compiler/TemplateMapCompilerTest.php @@ -1,87 +1,52 @@ - * @license MIT - * * @group Coverage - * * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler */ class TemplateMapCompilerTest extends TestCase { - /** - * @var TemplateMapCompiler - */ - protected $compiler; - - /** - * {@inheritDoc} - */ - public function setUp() + protected TemplateMapCompiler $compiler; + + protected function setUp(): void { parent::setUp(); $this->compiler = new TemplateMapCompiler(); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * - * @throws \PHPUnit_Framework_Exception - */ - public function testCompileFromUnknownResolverProducesEmptyMap() + public function testCompileFromUnknownResolverProducesEmptyMap(): void { - /* @var $resolver ResolverInterface */ $resolver = $this->createMock(ResolverInterface::class); + assert($resolver instanceof ResolverInterface); self::assertSame([], $this->compiler->compileMap($resolver)); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileFromTemplateMapResolver - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::addResolvedPath - * - * @throws \PHPUnit_Framework_Exception - */ - public function testCompileFromMapResolver() + public function testCompileFromMapResolver(): void { - /* @var $mapResolver TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject */ $mapResolver = $this->createMock(TemplateMapResolver::class); $mapResolver - ->expects(self::any()) ->method('getMap') - ->will(self::returnValue(['a' => 'b', 'c' => 'd'])); + ->willReturn(['a' => 'b', 'c' => 'd']); $map = $this->compiler->compileMap($mapResolver); @@ -90,31 +55,20 @@ public function testCompileFromMapResolver() self::assertSame('d', $map['c']); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileFromTemplatePathStack - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::addResolvedPath - * - * @throws \PHPUnit_Framework_Exception - */ - public function testCompileFromTemplatePathStack() + public function testCompileFromTemplatePathStack(): void { - /* @var $templatePathStack TemplatePathStack|\PHPUnit_Framework_MockObject_MockObject */ $templatePathStack = $this->createMock(TemplatePathStack::class); - $paths = $this->createMock(SplStack::class); + $paths = $this->createMock(SplStack::class); $paths - ->expects(self::any()) ->method('toArray') - ->will(self::returnValue([__DIR__ . '/_files/subdir2', __DIR__ . '/_files/subdir1'])); + ->willReturn([__DIR__ . '/_files/subdir2', __DIR__ . '/_files/subdir1']); $templatePathStack - ->expects(self::any()) ->method('getPaths') - ->will(self::returnValue($paths)); + ->willReturn($paths); $templatePathStack - ->expects(self::any()) ->method('resolve') - ->willReturnCallback(function ($name) { + ->willReturnCallback(static function (string $name) { $keys = [ 'template2' => __DIR__ . '/_files/subdir2/template2.phtml', 'template3' => false, @@ -130,48 +84,33 @@ public function testCompileFromTemplatePathStack() $template2 = realpath(__DIR__ . '/_files/subdir2/template2.phtml'); $template4 = realpath(__DIR__ . '/_files/subdir1/valid/template4.phtml'); - self::assertInternalType('string', $template2); - self::assertInternalType('string', $template4); + self::assertIsString($template2); + self::assertIsString($template4); self::assertSame($template2, $map['template2']); self::assertSame($template4, $map['valid/template4']); } - /** - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileMap - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::compileFromAggregateResolver - * @covers \OcraCachedViewResolver\Compiler\TemplateMapCompiler::addResolvedPath - * - * @throws \PHPUnit_Framework_Exception - */ - public function testCompileFromAggregateResolver() + public function testCompileFromAggregateResolver(): void { - /* @var $aggregateResolver AggregateResolver|\PHPUnit_Framework_MockObject_MockObject */ $aggregateResolver = $this->createMock(AggregateResolver::class); - /* @var $mapResolver1 TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject */ - $mapResolver1 = $this->createMock(TemplateMapResolver::class); + $mapResolver1 = $this->createMock(TemplateMapResolver::class); $mapResolver1 - ->expects(self::any()) ->method('getMap') - ->will(self::returnValue(['a' => 'a-value', 'b' => 'b-value'])); - /* @var $mapResolver2 TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject */ + ->willReturn(['a' => 'a-value', 'b' => 'b-value']); $mapResolver2 = $this->createMock(TemplateMapResolver::class); $mapResolver2 - ->expects(self::any()) ->method('getMap') - ->will(self::returnValue(['c' => 'c-value', 'd' => 'd-value'])); - /* @var $mapResolver3 TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject */ + ->willReturn(['c' => 'c-value', 'd' => 'd-value']); $mapResolver3 = $this->createMock(TemplateMapResolver::class); $mapResolver3 - ->expects(self::any()) ->method('getMap') - ->will(self::returnValue(['a' => 'override-a-value', 'd' => 'override-d-value', 'e' => 'e-value'])); + ->willReturn(['a' => 'override-a-value', 'd' => 'override-d-value', 'e' => 'e-value']); $iterator = new ArrayIterator([$mapResolver1, $mapResolver2, $mapResolver3]); $aggregateResolver - ->expects(self::any()) ->method('getIterator') - ->will(self::returnValue($iterator)); + ->willReturn($iterator); $map = $this->compiler->compileMap($aggregateResolver); diff --git a/tests/OcraCachedViewResolverTest/Factory/CacheFactoryTest.php b/tests/OcraCachedViewResolverTest/Factory/CacheFactoryTest.php index 8d00602..aa98914 100644 --- a/tests/OcraCachedViewResolverTest/Factory/CacheFactoryTest.php +++ b/tests/OcraCachedViewResolverTest/Factory/CacheFactoryTest.php @@ -1,47 +1,28 @@ - * @license MIT - * * @group Coverage - * * @covers \OcraCachedViewResolver\Factory\CacheFactory */ class CacheFactoryTest extends TestCase { - public function testCreateService() + public function testCreateService(): void { - /* @var $locator ContainerInterface|\PHPUnit_Framework_MockObject_MockObject */ $locator = $this->createMock(ContainerInterface::class); - $locator->expects(self::any())->method('get')->with('Config')->will(self::returnValue([ + $locator->method('get')->with('Config')->will(self::returnValue([ Module::CONFIG => [ Module::CONFIG_CACHE_DEFINITION => [ 'adapter' => Memory::class, diff --git a/tests/OcraCachedViewResolverTest/Factory/CompiledMapResolverDelegatorFactoryTest.php b/tests/OcraCachedViewResolverTest/Factory/CompiledMapResolverDelegatorFactoryTest.php index 84238fb..fc1c58f 100644 --- a/tests/OcraCachedViewResolverTest/Factory/CompiledMapResolverDelegatorFactoryTest.php +++ b/tests/OcraCachedViewResolverTest/Factory/CompiledMapResolverDelegatorFactoryTest.php @@ -1,73 +1,47 @@ - * @license MIT - * * @group Coverage - * * @covers \OcraCachedViewResolver\Factory\CompiledMapResolverDelegatorFactory */ class CompiledMapResolverDelegatorFactoryTest extends TestCase { - /** - * @var ContainerInterface|\PHPUnit_Framework_MockObject_MockObject - */ + /** @var ContainerInterface&MockObject */ private $locator; - /** - * @var callable|\PHPUnit_Framework_MockObject_MockObject - */ - private $callback; + private MockObject $callback; - /** - * @var StorageInterface|\PHPUnit_Framework_MockObject_MockObject - */ + /** @var StorageInterface&MockObject */ private $cache; - /** - * {@inheritDoc} - * - * @throws \PHPUnit_Framework_Exception - */ - protected function setUp() + protected function setUp(): void { + parent::setUp(); + $this->locator = $this->createMock(ContainerInterface::class); - $this->callback = $this->getMockBuilder(stdClass::class)->setMethods(['__invoke'])->getMock(); + $this->callback = $this->getMockBuilder(stdClass::class)->addMethods(['__invoke'])->getMock(); $this->cache = $this->createMock(StorageInterface::class); - $this->locator->expects(self::any())->method('get')->will(self::returnValueMap([ + $this->locator->method('get')->will(self::returnValueMap([ [ 'Config', [ @@ -84,19 +58,21 @@ protected function setUp() ])); } - public function testCreateServiceWithExistingCachedTemplateMap() + public function testCreateServiceWithExistingCachedTemplateMap(): void { $this ->cache ->expects(self::once()) ->method('getItem') ->with('key-name') - ->will(self::returnValue(['foo' => 'bar'])); + ->willReturn(['foo' => 'bar']); $this->callback->expects(self::never())->method('__invoke'); + /** @var callable(): ResolverInterface $callback */ + $callback = $this->callback; $factory = new CompiledMapResolverDelegatorFactory(); - $resolver = $factory->__invoke($this->locator, 'resolver', $this->callback); + $resolver = $factory->__invoke($this->locator, 'resolver', $callback); self::assertInstanceOf(AggregateResolver::class, $resolver); @@ -108,16 +84,18 @@ public function testCreateServiceWithExistingCachedTemplateMap() self::assertSame('bar', $resolver->resolve('foo')); } - public function testCreateServiceWithEmptyCachedTemplateMap() + public function testCreateServiceWithEmptyCachedTemplateMap(): void { $realResolver = new TemplateMapResolver(['bar' => 'baz']); - $this->cache->expects(self::once())->method('getItem')->with('key-name')->will(self::returnValue(null)); + $this->cache->expects(self::once())->method('getItem')->with('key-name')->willReturn(null); $this->cache->expects(self::once())->method('setItem')->with('key-name', ['bar' => 'baz']); - $this->callback->expects(self::once())->method('__invoke')->will(self::returnValue($realResolver)); + $this->callback->expects(self::once())->method('__invoke')->willReturn($realResolver); + /** @var callable(): ResolverInterface $callback */ + $callback = $this->callback; $factory = new CompiledMapResolverDelegatorFactory(); - $resolver = $factory->__invoke($this->locator, 'resolver', $this->callback); + $resolver = $factory->__invoke($this->locator, 'resolver', $callback); self::assertInstanceOf(AggregateResolver::class, $resolver); diff --git a/tests/OcraCachedViewResolverTest/ModuleFunctionalTest.php b/tests/OcraCachedViewResolverTest/ModuleFunctionalTest.php index ef0bf72..de422b8 100644 --- a/tests/OcraCachedViewResolverTest/ModuleFunctionalTest.php +++ b/tests/OcraCachedViewResolverTest/ModuleFunctionalTest.php @@ -1,71 +1,43 @@ - * @license MIT - * * @group Functional - * * @coversNothing */ class ModuleFunctionalTest extends TestCase { - /** - * @var ServiceManager - */ - protected $serviceManager; - - /** - * @var AggregateResolver|\Zend\View\Resolver\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject; - */ - protected $originalResolver; - - /** - * @var \Zend\View\Resolver\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject; - */ + protected ServiceManager $serviceManager; + + /** @var AggregateResolver ; */ + protected AggregateResolver $originalResolver; + + /** @var ResolverInterface&MockObject ; */ protected $fallbackResolver; - /** - * {@inheritDoc} - * - * @throws \PHPUnit_Framework_Exception - * @throws ContainerException - * @throws NotFoundException - */ - public function setUp() + protected function setUp(): void { + parent::setUp(); + $this->serviceManager = new ServiceManager(); (new ServiceManagerConfig())->configureServiceManager($this->serviceManager); @@ -75,7 +47,7 @@ public function setUp() 'ApplicationConfig', [ 'modules' => [ - 'Zend\Router', + 'Laminas\Router', 'OcraCachedViewResolver', ], 'module_listener_options' => [ @@ -86,16 +58,15 @@ public function setUp() ] ); - /* @var $moduleManager \Zend\ModuleManager\ModuleManager */ $moduleManager = $this->serviceManager->get('ModuleManager'); + assert($moduleManager instanceof ModuleManager); $moduleManager->loadModules(); $this->originalResolver = new AggregateResolver(); - /* @var $mapResolver TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject */ $mapResolver = $this->createMock(TemplateMapResolver::class); $this->fallbackResolver = $this->createMock(ResolverInterface::class); - $mapResolver->expects(self::any())->method('getMap')->will(self::returnValue(['a' => 'b'])); + $mapResolver->method('getMap')->willReturn(['a' => 'b']); $this->originalResolver->attach($mapResolver, 10); $this->originalResolver->attach($this->fallbackResolver, 5); @@ -103,26 +74,27 @@ public function setUp() $originalResolver = $this->originalResolver; $this->serviceManager->setFactory( 'ViewResolver', - function () use ($originalResolver) { + static function () use ($originalResolver) { return $originalResolver; } ); } - public function testDefinedServices() + public function testDefinedServices(): void { self::assertInstanceOf( StorageInterface::class, $this->serviceManager->get('OcraCachedViewResolver\\Cache\\ResolverCache') ); - /* @var $resolver \Zend\View\Resolver\AggregateResolver */ $resolver = $this->serviceManager->get('ViewResolver'); + assert($resolver instanceof AggregateResolver); self::assertInstanceOf(AggregateResolver::class, $resolver); self::assertSame($resolver, $this->serviceManager->get('ViewResolver')); foreach ($resolver->getIterator() as $previousResolver) { + assert($previousResolver instanceof ResolverInterface); self::assertThat( $previousResolver, self::logicalOr( @@ -133,15 +105,15 @@ public function testDefinedServices() } } - public function testCachesResolvedTemplates() + public function testCachesResolvedTemplates(): void { - /* @var $cache \Zend\Cache\Storage\StorageInterface */ $cache = $this->serviceManager->get('OcraCachedViewResolver\\Cache\\ResolverCache'); + assert($cache instanceof StorageInterface); self::assertFalse($cache->hasItem('testing_cache_key')); - /* @var $resolver AggregateResolver */ $resolver = $this->serviceManager->build('ViewResolver'); + assert($resolver instanceof AggregateResolver); self::assertFalse($cache->hasItem('testing_cache_key')); self::assertSame('b', $resolver->resolve('a')); @@ -150,17 +122,18 @@ public function testCachesResolvedTemplates() $this->serviceManager->build('ViewResolver'); } - public function testFallbackResolverCall() + public function testFallbackResolverCall(): void { - /* @var $resolver \Zend\View\Resolver\TemplateMapResolver */ $resolver = $this->serviceManager->get('ViewResolver'); + self::assertInstanceOf(ResolverInterface::class, $resolver); + $this ->fallbackResolver ->expects(self::once()) ->method('resolve') ->with('fallback.phtml') - ->will(self::returnValue('fallback-path.phtml')); + ->willReturn('fallback-path.phtml'); self::assertSame('fallback-path.phtml', $resolver->resolve('fallback.phtml')); } diff --git a/tests/OcraCachedViewResolverTest/ModuleTest.php b/tests/OcraCachedViewResolverTest/ModuleTest.php index dfe4f53..8e898bc 100644 --- a/tests/OcraCachedViewResolverTest/ModuleTest.php +++ b/tests/OcraCachedViewResolverTest/ModuleTest.php @@ -1,42 +1,28 @@ - * @license MIT - * * @covers \OcraCachedViewResolver\Module */ class ModuleTest extends TestCase { - public function testConfigIsAnArray() + public function testConfigIsAnArray(): void { - self::assertInternalType('array', (new Module())->getConfig()); + self::assertIsArray((new Module())->getConfig()); } - public function testConfigIsSerializable() + public function testConfigIsSerializable(): void { $module = new Module(); diff --git a/tests/OcraCachedViewResolverTest/View/Resolver/CachingMapResolverTest.php b/tests/OcraCachedViewResolverTest/View/Resolver/CachingMapResolverTest.php index d3cac5f..22d0bc7 100644 --- a/tests/OcraCachedViewResolverTest/View/Resolver/CachingMapResolverTest.php +++ b/tests/OcraCachedViewResolverTest/View/Resolver/CachingMapResolverTest.php @@ -1,104 +1,71 @@ - * @license MIT - * * @group Coverage - * * @covers \OcraCachedViewResolver\View\Resolver\CachingMapResolver */ class CachingMapResolverTest extends TestCase { - /** - * @var callable|\PHPUnit_Framework_MockObject_MockObject - */ - private $resolverInstantiator; - - /** - * @var TemplateMapResolver|\PHPUnit_Framework_MockObject_MockObject - */ + private MockObject $resolverInstantiator; + + /** @var TemplateMapResolver&MockObject */ private $realResolver; - /** - * @var RendererInterface|\PHPUnit_Framework_MockObject_MockObject - */ + /** @var RendererInterface&MockObject */ private $renderer; - /** - * @var StorageInterface|\PHPUnit_Framework_MockObject_MockObject - */ + /** @var StorageInterface&MockObject */ private $cache; - /** - * @var string - */ - private $cacheKey = 'cache-key'; - - /** - * @var CachingMapResolver - */ - private $cachingMapResolver; - - /** - * {@inheritDoc} - * - * @throws \PHPUnit_Framework_Exception - */ - protected function setUp() + private string $cacheKey = 'cache-key'; + + private CachingMapResolver $cachingMapResolver; + + protected function setUp(): void { - $this->resolverInstantiator = $this->getMockBuilder(stdClass::class)->setMethods(['__invoke'])->getMock(); + parent::setUp(); + + $this->resolverInstantiator = $this->getMockBuilder(stdClass::class)->addMethods(['__invoke'])->getMock(); $this->realResolver = $this->createMock(TemplateMapResolver::class); $this->renderer = $this->createMock(RendererInterface::class); $this->cache = $this->createMock(StorageInterface::class); - $this->cachingMapResolver = new CachingMapResolver( + /** @psalm-var callable(): ResolverInterface $resolverInstantiator */ + $resolverInstantiator = $this->resolverInstantiator; + $this->cachingMapResolver = new CachingMapResolver( $this->cache, $this->cacheKey, - $this->resolverInstantiator + $resolverInstantiator ); $this ->realResolver ->expects(self::any()) ->method('getMap') - ->will(self::returnValue(['view-name' => 'path/to/script'])); + ->willReturn(['view-name' => 'path/to/script']); } - public function testResolverCacheIsPopulatedOnResolve() + public function testResolverCacheIsPopulatedOnResolve(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->cache ->expects(self::once()) @@ -113,13 +80,13 @@ public function testResolverCacheIsPopulatedOnResolve() self::assertSame('path/to/script', $this->cachingMapResolver->resolve('view-name', $this->renderer)); } - public function testResolvingMultipleTimesDoesNotHitResolverInstantiatorOrCache() + public function testResolvingMultipleTimesDoesNotHitResolverInstantiatorOrCache(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->cache ->expects(self::once()) @@ -136,7 +103,7 @@ public function testResolvingMultipleTimesDoesNotHitResolverInstantiatorOrCache( self::assertFalse($this->cachingMapResolver->resolve('unknown-view-name', $this->renderer)); } - public function testResolvingWithNonEmptyCacheWillNotHitResolverInstantiatorOrWriteToCache() + public function testResolvingWithNonEmptyCacheWillNotHitResolverInstantiatorOrWriteToCache(): void { $this->resolverInstantiator->expects(self::never())->method('__invoke'); $this->cache->expects(self::never())->method('setItem'); @@ -146,48 +113,27 @@ public function testResolvingWithNonEmptyCacheWillNotHitResolverInstantiatorOrWr ->expects(self::once()) ->method('getItem') ->with($this->cacheKey) - ->will(self::returnValue(['view-name' => 'path/to/cached/script'])); + ->willReturn(['view-name' => 'path/to/cached/script']); self::assertSame('path/to/cached/script', $this->cachingMapResolver->resolve('view-name', $this->renderer)); self::assertSame('path/to/cached/script', $this->cachingMapResolver->resolve('view-name', $this->renderer)); self::assertFalse($this->cachingMapResolver->resolve('unknown-view-name', $this->renderer)); } - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testResolveWithoutRenderer() + public function testResolveWithoutRenderer(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->realResolver ->expects(self::any()) ->method('resolve') ->with('view-name', null) - ->will(self::returnValue('path/to/script')); + ->willReturn('path/to/script'); self::assertSame('path/to/script', $this->cachingMapResolver->resolve('view-name')); } - - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testLazyResolverRefusesInvalidRealResolver() - { - $this - ->resolverInstantiator - ->expects(self::once()) - ->method('__invoke') - ->will(self::returnValue(null)); - - $cachingMapResolver = new CachingMapResolver($this->cache, $this->cacheKey, $this->resolverInstantiator); - - $this->expectException(InvalidResolverInstantiatorException::class); - - $cachingMapResolver->resolve('foo'); - } } diff --git a/tests/OcraCachedViewResolverTest/View/Resolver/Exception/InvalidResolverInstantiatorExceptionTest.php b/tests/OcraCachedViewResolverTest/View/Resolver/Exception/InvalidResolverInstantiatorExceptionTest.php deleted file mode 100644 index abb11a1..0000000 --- a/tests/OcraCachedViewResolverTest/View/Resolver/Exception/InvalidResolverInstantiatorExceptionTest.php +++ /dev/null @@ -1,86 +0,0 @@ - - * @license MIT - * - * @covers \OcraCachedViewResolver\View\Resolver\Exception\InvalidResolverInstantiatorException - * @covers \OcraCachedViewResolver\View\Resolver\Exception\ExceptionInterface - */ -class InvalidResolverInstantiatorExceptionTest extends TestCase -{ - public function testInstanceOfBaseExceptionInterface() - { - self::assertInstanceOf( - InvalidResolverInstantiatorException::class, - new InvalidResolverInstantiatorException() - ); - } - - public function testFromInvalidNullInstantiator() - { - $exception = InvalidResolverInstantiatorException::fromInvalidInstantiator(null); - - self::assertInstanceOf(InvalidResolverInstantiatorException::class, $exception); - self::assertSame( - 'Invalid instantiator given, expected `callable`, `NULL` given.', - $exception->getMessage() - ); - } - - public function testFromInvalidObjectInstantiator() - { - $exception = InvalidResolverInstantiatorException::fromInvalidInstantiator($this); - - self::assertInstanceOf(InvalidResolverInstantiatorException::class, $exception); - self::assertSame( - 'Invalid instantiator given, expected `callable`, `' . __CLASS__ . '` given.', - $exception->getMessage() - ); - } - - public function testFromInvalidNullResolver() - { - $exception = InvalidResolverInstantiatorException::fromInvalidResolver(null); - - self::assertInstanceOf(InvalidResolverInstantiatorException::class, $exception); - self::assertSame( - 'Invalid resolver found, expected `Zend\View\Resolver\ResolverInterface`, `NULL` given.', - $exception->getMessage() - ); - } - - public function testFromInvalidObjectResolver() - { - $exception = InvalidResolverInstantiatorException::fromInvalidResolver($this); - - self::assertInstanceOf(InvalidResolverInstantiatorException::class, $exception); - self::assertSame( - 'Invalid resolver found, expected `Zend\View\Resolver\ResolverInterface`, `' . __CLASS__ . '` given.', - $exception->getMessage() - ); - } -} diff --git a/tests/OcraCachedViewResolverTest/View/Resolver/LazyResolverTest.php b/tests/OcraCachedViewResolverTest/View/Resolver/LazyResolverTest.php index 45bcd03..c804e7f 100644 --- a/tests/OcraCachedViewResolverTest/View/Resolver/LazyResolverTest.php +++ b/tests/OcraCachedViewResolverTest/View/Resolver/LazyResolverTest.php @@ -1,171 +1,105 @@ - * @license MIT - * * @group Coverage - * * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver */ class LazyResolverTest extends TestCase { - /** - * @var callable|\PHPUnit_Framework_MockObject_MockObject - */ - private $resolverInstantiator; - - /** - * @var \Zend\View\Resolver\ResolverInterface|\PHPUnit_Framework_MockObject_MockObject - */ + private MockObject $resolverInstantiator; + + /** @var ResolverInterface&MockObject */ private $realResolver; - /** - * @var \Zend\View\Renderer\RendererInterface|\PHPUnit_Framework_MockObject_MockObject - */ + /** @var RendererInterface&MockObject */ private $renderer; - /** - * @var LazyResolver - */ - private $lazyResolver; - - /** - * {@inheritDoc} - * - * @throws \PHPUnit_Framework_Exception - */ - protected function setUp() + private LazyResolver $lazyResolver; + + protected function setUp(): void { - $this->resolverInstantiator = $this->getMockBuilder(stdClass::class)->setMethods(['__invoke'])->getMock(); + parent::setUp(); + + $this->resolverInstantiator = $this->getMockBuilder(stdClass::class)->addMethods(['__invoke'])->getMock(); $this->realResolver = $this->createMock(ResolverInterface::class); $this->renderer = $this->createMock(RendererInterface::class); - $this->lazyResolver = new LazyResolver($this->resolverInstantiator); + /** @psalm-var callable(): ResolverInterface $resolverInstantiator */ + $resolverInstantiator = $this->resolverInstantiator; + + $this->lazyResolver = new LazyResolver($resolverInstantiator); } - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testResolve() + public function testResolve(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->realResolver ->expects(self::any()) ->method('resolve') ->with('view-name', $this->renderer) - ->will(self::returnValue('path/to/script')); + ->willReturn('path/to/script'); self::assertSame('path/to/script', $this->lazyResolver->resolve('view-name', $this->renderer)); } - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testResolveWithoutRenderer() + public function testResolveWithoutRenderer(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->realResolver - ->expects(self::any()) ->method('resolve') ->with('view-name', null) - ->will(self::returnValue('path/to/script')); + ->willReturn('path/to/script'); self::assertSame('path/to/script', $this->lazyResolver->resolve('view-name')); } - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::__construct - */ - public function testRealResolverNotCreatedIfNotNeeded() + public function testRealResolverNotCreatedIfNotNeeded(): void { $this->resolverInstantiator->expects(self::never())->method('__invoke'); - new LazyResolver($this->resolverInstantiator); + /** @psalm-var callable(): ResolverInterface $resolverInstantiator */ + $resolverInstantiator = $this->resolverInstantiator; + + new LazyResolver($resolverInstantiator); } - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testResolveCausesRealResolverInstantiationOnlyOnce() + public function testResolveCausesRealResolverInstantiationOnlyOnce(): void { $this ->resolverInstantiator ->expects(self::once()) ->method('__invoke') - ->will(self::returnValue($this->realResolver)); + ->willReturn($this->realResolver); $this ->realResolver ->expects(self::exactly(2)) ->method('resolve') ->with('view-name', $this->renderer) - ->will(self::returnValue('path/to/script')); + ->willReturn('path/to/script'); self::assertSame('path/to/script', $this->lazyResolver->resolve('view-name', $this->renderer)); self::assertSame('path/to/script', $this->lazyResolver->resolve('view-name', $this->renderer)); } - - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testLazyResolverRefusesNonCallableInstantiator() - { - $this->expectException(InvalidResolverInstantiatorException::class); - - new LazyResolver($this); - } - - /** - * @covers \OcraCachedViewResolver\View\Resolver\LazyResolver::resolve - */ - public function testLazyResolverRefusesInvalidRealResolver() - { - $this - ->resolverInstantiator - ->expects(self::once()) - ->method('__invoke') - ->will(self::returnValue(null)); - - $lazyResolver = new LazyResolver($this->resolverInstantiator); - - $this->expectException(InvalidResolverInstantiatorException::class); - - $lazyResolver->resolve('foo'); - } } diff --git a/tests/testing.config.php b/tests/testing.config.php index 39131eb..dcc29a7 100644 --- a/tests/testing.config.php +++ b/tests/testing.config.php @@ -1,23 +1,9 @@ [