PK {±˜RÝè‡úÚ Ú
LICENSE.mdnu €žÙ˜ Copyright (c) 2019-2020, Laminas Foundation
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither the name of Laminas Foundation nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PK {±˜R½%'\ \ COPYRIGHT.mdnu €žÙ˜ Copyright (c) 2019-2020, Laminas Foundation.
All rights reserved. (https://getlaminas.org/)
PK {±˜RÄ[»š2 2 .laminas-ci.jsonnu €žÙ˜ {
"extensions": [
"memcached"
]
}
PK {±˜Rxú= = .coveralls.ymlnu €žÙ˜ coverage_clover: clover.xml
json_path: coveralls-upload.json
PK {±˜R«(Ió ó
composer.locknu €žÙ˜ {
"_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": "7e24818b3ec993c9b0ef5569cdd00bf8",
"packages": [],
"packages-dev": [
{
"name": "cache/integration-tests",
"version": "0.16.0",
"source": {
"type": "git",
"url": "https://github.com/php-cache/integration-tests.git",
"reference": "a8d9538a44ed5a70d551f9b87f534c98dfe6b0ee"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-cache/integration-tests/zipball/a8d9538a44ed5a70d551f9b87f534c98dfe6b0ee",
"reference": "a8d9538a44ed5a70d551f9b87f534c98dfe6b0ee",
"shasum": ""
},
"require": {
"cache/tag-interop": "^1.0",
"php": "^5.4|^7",
"psr/cache": "~1.0"
},
"require-dev": {
"cache/cache": "dev-master",
"illuminate/cache": "^5.0",
"madewithlove/illuminate-psr-cache-bridge": "^1.0",
"phpunit/phpunit": "^4.0|^5.0",
"symfony/cache": "^3.1",
"tedivm/stash": "dev-master"
},
"type": "library",
"autoload": {
"psr-4": {
"Cache\\IntegrationTests\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Aaron Scherer",
"email": "aequasi@gmail.com",
"homepage": "https://github.com/aequasi"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
}
],
"description": "Integration tests for PSR-6 and PSR-16 cache implementations",
"homepage": "https://github.com/php-cache/integration-tests",
"keywords": [
"cache",
"psr16",
"psr6",
"test"
],
"support": {
"issues": "https://github.com/php-cache/integration-tests/issues",
"source": "https://github.com/php-cache/integration-tests/tree/master"
},
"time": "2017-02-02T14:29:50+00:00"
},
{
"name": "cache/tag-interop",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-cache/tag-interop.git",
"reference": "909a5df87e698f1665724a9e84851c11c45fbfb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-cache/tag-interop/zipball/909a5df87e698f1665724a9e84851c11c45fbfb9",
"reference": "909a5df87e698f1665724a9e84851c11c45fbfb9",
"shasum": ""
},
"require": {
"php": "^5.5 || ^7.0 || ^8.0",
"psr/cache": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Cache\\TagInterop\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/nyholm"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com",
"homepage": "https://github.com/nicolas-grekas"
}
],
"description": "Framework interoperable interfaces for tags",
"homepage": "https://www.php-cache.com/en/latest/",
"keywords": [
"cache",
"psr",
"psr6",
"tag"
],
"support": {
"issues": "https://github.com/php-cache/tag-interop/issues",
"source": "https://github.com/php-cache/tag-interop/tree/1.0.1"
},
"time": "2020-12-04T14:11:04+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": "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": "laminas/laminas-cache",
"version": "2.10.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache.git",
"reference": "c0c24cb12f6180c4025eaabe092f63309876c2a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache/zipball/c0c24cb12f6180c4025eaabe092f63309876c2a9",
"reference": "c0c24cb12f6180c4025eaabe092f63309876c2a9",
"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": "^2.6.3 || ^3.2",
"laminas/laminas-servicemanager": "^2.7.8 || ^3.3",
"laminas/laminas-stdlib": "^3.2.1",
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^5.6 || ^7.0",
"psr/cache": "^1.0",
"psr/simple-cache": "^1.0"
},
"provide": {
"psr/cache-implementation": "1.0",
"psr/simple-cache-implementation": "1.0"
},
"replace": {
"zendframework/zend-cache": "^2.9.0"
},
"require-dev": {
"cache/integration-tests": "^0.16",
"laminas/laminas-coding-standard": "~1.0.0",
"laminas/laminas-serializer": "^2.6",
"phpbench/phpbench": "^0.13",
"phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
},
"suggest": {
"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-02-25T20:03:34+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"
}
],
"time": "2020-10-12T16:04:12+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-apcu",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-apcu.git",
"reference": "1fdd7585042c1a577f6e630535df1e86e23cf5dc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-apcu/zipball/1fdd7585042c1a577f6e630535df1e86e23cf5dc",
"reference": "1fdd7585042c1a577f6e630535df1e86e23cf5dc",
"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-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": "2020-10-12T16:05:19+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-blackhole",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-blackhole.git",
"reference": "8d6c5741e46c4797e332d05b9eb53e743fe0c073"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-blackhole/zipball/8d6c5741e46c4797e332d05b9eb53e743fe0c073",
"reference": "8d6c5741e46c4797e332d05b9eb53e743fe0c073",
"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.2",
"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 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-02-26T08:20:16+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"
}
],
"time": "2020-10-12T16:08:58+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-ext-mongodb",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-ext-mongodb.git",
"reference": "011ec5a8ca721ba012d232b1a01b50a55904b99f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-ext-mongodb/zipball/011ec5a8ca721ba012d232b1a01b50a55904b99f",
"reference": "011ec5a8ca721ba012d232b1a01b50a55904b99f",
"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-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": "2020-10-12T16:11:06+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-filesystem",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-filesystem.git",
"reference": "e803d9942b30396491efbe649a3886450d22385f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-filesystem/zipball/e803d9942b30396491efbe649a3886450d22385f",
"reference": "e803d9942b30396491efbe649a3886450d22385f",
"shasum": ""
},
"require": {
"laminas/laminas-cache": "^2.10@dev",
"php": "^7.3 || ~8.0.0"
},
"provide": {
"laminas/laminas-cache-storage-implementation": "1.0"
},
"require-dev": {
"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 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": "2020-12-31T04:18:10+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-memcache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-memcache.git",
"reference": "62d0fab1cd261b44a81821e986c0110d7dda896b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memcache/zipball/62d0fab1cd261b44a81821e986c0110d7dda896b",
"reference": "62d0fab1cd261b44a81821e986c0110d7dda896b",
"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-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"
}
],
"time": "2020-10-12T16:13:36+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-memory",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-memory.git",
"reference": "58f4b45281552bb6673c900fadddad21e0ed05c8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memory/zipball/58f4b45281552bb6673c900fadddad21e0ed05c8",
"reference": "58f4b45281552bb6673c900fadddad21e0ed05c8",
"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 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": "2020-10-12T16:17:47+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"
}
],
"time": "2020-10-12T16:19:10+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-redis",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-redis.git",
"reference": "3fe904953d17728d7fdaa87be603231f23fb0a4d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-redis/zipball/3fe904953d17728d7fdaa87be603231f23fb0a4d",
"reference": "3fe904953d17728d7fdaa87be603231f23fb0a4d",
"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 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": "2020-10-12T16:20:13+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-session",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-session.git",
"reference": "0d2276cd61bd162cd38c53aaa22f18137621dc0c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-session/zipball/0d2276cd61bd162cd38c53aaa22f18137621dc0c",
"reference": "0d2276cd61bd162cd38c53aaa22f18137621dc0c",
"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-session": "^2.7.4",
"squizlabs/php_codesniffer": "^2.7"
},
"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": "2020-10-12T16:21:28+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-test",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-test.git",
"reference": "4896c384cce35c49e514cc55f40364b08886c65f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-test/zipball/4896c384cce35c49e514cc55f40364b08886c65f",
"reference": "4896c384cce35c49e514cc55f40364b08886c65f",
"shasum": ""
},
"require": {
"cache/integration-tests": "^0.16",
"php": "^5.6 || ^7.0",
"phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1.2"
},
"conflict": {
"laminas/laminas-cache": "<2.10"
},
"require-dev": {
"laminas/laminas-cache": "^2.10",
"squizlabs/php_codesniffer": "^3.5"
},
"type": "library",
"autoload": {
"psr-4": {
"LaminasTest\\Cache\\Storage\\Adapter\\": "src/"
},
"files": [
"autoload/phpunit-backward-compatibility.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Laminas cache storage adapter shared test dependency",
"keywords": [
"cache",
"laminas",
"test"
],
"support": {
"docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-test/",
"forum": "https://discourse.laminas.dev/",
"issues": "https://github.com/laminas/laminas-cache-storage-adapter-test/issues",
"rss": "https://github.com/laminas/laminas-cache-storage-adapter-test/releases.atom",
"source": "https://github.com/laminas/laminas-cache-storage-adapter-test"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-02-25T09:08:16+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"
}
],
"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"
}
],
"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-coding-standard",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-coding-standard.git",
"reference": "08880ce2fbfe62d471cd3cb766a91da630b32539"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/08880ce2fbfe62d471cd3cb766a91da630b32539",
"reference": "08880ce2fbfe62d471cd3cb766a91da630b32539",
"shasum": ""
},
"require": {
"laminas/laminas-zendframework-bridge": "^1.0",
"squizlabs/php_codesniffer": "^2.7"
},
"replace": {
"zendframework/zend-coding-standard": "self.version"
},
"type": "library",
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Laminas coding standard",
"homepage": "https://laminas.dev",
"keywords": [
"Coding Standard",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-coding-standard/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-coding-standard/issues",
"rss": "https://github.com/laminas/laminas-coding-standard/releases.atom",
"source": "https://github.com/laminas/laminas-coding-standard"
},
"time": "2019-12-31T16:28:26+00:00"
},
{
"name": "laminas/laminas-eventmanager",
"version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-eventmanager.git",
"reference": "966c859b67867b179fde1eff0cd38df51472ce4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/966c859b67867b179fde1eff0cd38df51472ce4a",
"reference": "966c859b67867b179fde1eff0cd38df51472ce4a",
"shasum": ""
},
"require": {
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^7.3 || ^8.0"
},
"replace": {
"zendframework/zend-eventmanager": "^3.2.1"
},
"require-dev": {
"container-interop/container-interop": "^1.1",
"laminas/laminas-coding-standard": "~1.0.0",
"laminas/laminas-stdlib": "^2.7.3 || ^3.0",
"phpbench/phpbench": "^0.17.1",
"phpunit/phpunit": "^8.5.8"
},
"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-03-08T15:24:29+00:00"
},
{
"name": "laminas/laminas-servicemanager",
"version": "3.6.4",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-servicemanager.git",
"reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/b1445e1a7077c21b0fad0974a1b7a11b9dbe0828",
"reference": "b1445e1a7077c21b0fad0974a1b7a11b9dbe0828",
"shasum": ""
},
"require": {
"container-interop/container-interop": "^1.2",
"laminas/laminas-stdlib": "^3.2.1",
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^7.3 || ~8.0.0",
"psr/container": "^1.0"
},
"conflict": {
"laminas/laminas-code": "<3.3.1",
"zendframework/zend-code": "<3.3.1"
},
"provide": {
"container-interop/container-interop-implementation": "^1.2",
"psr/container-implementation": "^1.0"
},
"replace": {
"zendframework/zend-servicemanager": "^3.4.0"
},
"require-dev": {
"composer/package-versions-deprecated": "^1.0",
"laminas/laminas-coding-standard": "~1.0.0",
"laminas/laminas-container-config-test": "^0.3",
"laminas/laminas-dependency-plugin": "^2.1",
"mikey179/vfsstream": "^1.6.8",
"ocramius/proxy-manager": "^2.2.3",
"phpbench/phpbench": "^1.0.0-alpha3",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.4"
},
"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-02-03T08:44:41+00:00"
},
{
"name": "laminas/laminas-stdlib",
"version": "3.3.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-stdlib.git",
"reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/d81c7ffe602ed0e6ecb18691019111c0f4bf1efe",
"reference": "d81c7ffe602ed0e6ecb18691019111c0f4bf1efe",
"shasum": ""
},
"require": {
"laminas/laminas-zendframework-bridge": "^1.0",
"php": "^7.3 || ^8.0"
},
"replace": {
"zendframework/zend-stdlib": "^3.2.1"
},
"require-dev": {
"laminas/laminas-coding-standard": "~1.0.0",
"phpbench/phpbench": "^0.17.1",
"phpunit/phpunit": "~9.3.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": "2020-11-19T20:18:59+00:00"
},
{
"name": "laminas/laminas-zendframework-bridge",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-zendframework-bridge.git",
"reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-zendframework-bridge/zipball/6cccbddfcfc742eb02158d6137ca5687d92cee32",
"reference": "6cccbddfcfc742eb02158d6137ca5687d92cee32",
"shasum": ""
},
"require": {
"php": "^7.3 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.1 || ^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-02-25T21:54:58+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": "phar-io/manifest",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
"reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
"reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-phar": "*",
"phar-io/version": "^2.0",
"php": "^5.6 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.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/master"
},
"time": "2018-07-08T19:23:20+00:00"
},
{
"name": "phar-io/version",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/phar-io/version.git",
"reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
"reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.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/master"
},
"time": "2018-07-08T19:19:57+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.4.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*"
},
"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.4.0"
},
"time": "2020-09-17T18:55:26+00:00"
},
{
"name": "phpspec/prophecy",
"version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2",
"php": "^7.2 || ~8.0, <8.1",
"phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0"
},
"require-dev": {
"phpspec/phpspec": "^6.0",
"phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.11.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.13.0"
},
"time": "2021-03-17T13:42:18+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "6.1.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
"reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-xmlwriter": "*",
"php": "^7.1",
"phpunit/php-file-iterator": "^2.0",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-token-stream": "^3.0",
"sebastian/code-unit-reverse-lookup": "^1.0.1",
"sebastian/environment": "^3.1 || ^4.0",
"sebastian/version": "^2.0.1",
"theseer/tokenizer": "^1.1"
},
"require-dev": {
"phpunit/phpunit": "^7.0"
},
"suggest": {
"ext-xdebug": "^2.6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.1-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
"keywords": [
"coverage",
"testing",
"xunit"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master"
},
"time": "2018-10-31T16:06:48+00:00"
},
{
"name": "phpunit/php-file-iterator",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357",
"reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"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": "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/2.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:25:21+00:00"
},
{
"name": "phpunit/php-text-template",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"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/1.2.1"
},
"time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
"version": "2.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
"reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.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": "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/2.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:20:02+00:00"
},
{
"name": "phpunit/php-token-stream",
"version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "472b687829041c24b25f475e14c2f38a09edf1c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2",
"reference": "472b687829041c24b25f475e14c2f38a09edf1c2",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^7.0"
},
"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"
}
],
"description": "Wrapper around PHP's tokenizer extension.",
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
"keywords": [
"tokenizer"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
"source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"abandoned": true,
"time": "2020-11-30T08:38:46+00:00"
},
{
"name": "phpunit/phpunit",
"version": "7.5.20",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "9467db479d1b0487c99733bb1e7944d32deded2c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c",
"reference": "9467db479d1b0487c99733bb1e7944d32deded2c",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.1",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"myclabs/deep-copy": "^1.7",
"phar-io/manifest": "^1.0.2",
"phar-io/version": "^2.0",
"php": "^7.1",
"phpspec/prophecy": "^1.7",
"phpunit/php-code-coverage": "^6.0.7",
"phpunit/php-file-iterator": "^2.0.1",
"phpunit/php-text-template": "^1.2.1",
"phpunit/php-timer": "^2.1",
"sebastian/comparator": "^3.0",
"sebastian/diff": "^3.0",
"sebastian/environment": "^4.0",
"sebastian/exporter": "^3.1",
"sebastian/global-state": "^2.0",
"sebastian/object-enumerator": "^3.0.3",
"sebastian/resource-operations": "^2.0",
"sebastian/version": "^2.0.1"
},
"conflict": {
"phpunit/phpunit-mock-objects": "*"
},
"require-dev": {
"ext-pdo": "*"
},
"suggest": {
"ext-soap": "*",
"ext-xdebug": "*",
"phpunit/php-invoker": "^2.0"
},
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "7.5-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": "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/7.5.20"
},
"time": "2020-01-08T08:45:45+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": "sebastian/code-unit-reverse-lookup",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
"reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
"reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-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/1.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:15:22+00:00"
},
{
"name": "sebastian/comparator",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "1071dfcef776a57013124ff35e1fc41ccd294758"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758",
"reference": "1071dfcef776a57013124ff35e1fc41ccd294758",
"shasum": ""
},
"require": {
"php": ">=7.1",
"sebastian/diff": "^3.0",
"sebastian/exporter": "^3.1"
},
"require-dev": {
"phpunit/phpunit": "^8.5"
},
"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"
},
{
"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/3.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T08:04:30+00:00"
},
{
"name": "sebastian/diff",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
"reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^7.5 || ^8.0",
"symfony/process": "^2 || ^3.3 || ^4"
},
"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"
},
{
"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/3.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:59:04+00:00"
},
{
"name": "sebastian/environment",
"version": "4.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
"reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "^7.5"
},
"suggest": {
"ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.2-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/4.2.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:53:42+00:00"
},
{
"name": "sebastian/exporter",
"version": "3.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "6b853149eab67d4da22291d36f5b0631c0fd856e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e",
"reference": "6b853149eab67d4da22291d36f5b0631c0fd856e",
"shasum": ""
},
"require": {
"php": ">=7.0",
"sebastian/recursion-context": "^3.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1.x-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/3.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:47:53+00:00"
},
{
"name": "sebastian/global-state",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
"reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
"shasum": ""
},
"require": {
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"suggest": {
"ext-uopz": "*"
},
"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": "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/2.0.0"
},
"time": "2017-04-27T15:39:26+00:00"
},
{
"name": "sebastian/object-enumerator",
"version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
"reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
"reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
"shasum": ""
},
"require": {
"php": ">=7.0",
"sebastian/object-reflector": "^1.1.1",
"sebastian/recursion-context": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-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/3.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:40:27+00:00"
},
{
"name": "sebastian/object-reflector",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
"reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
"reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
"shasum": ""
},
"require": {
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-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/1.1.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:37:18+00:00"
},
{
"name": "sebastian/recursion-context",
"version": "3.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
"reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
"shasum": ""
},
"require": {
"php": ">=7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-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/3.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:34:24+00:00"
},
{
"name": "sebastian/resource-operations",
"version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
"reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
"reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"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": "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/2.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-30T07:30:19+00:00"
},
{
"name": "sebastian/version",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"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": "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/master"
},
"time": "2016-10-03T07:35:21+00:00"
},
{
"name": "squizlabs/php_codesniffer",
"version": "2.9.2",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "2acf168de78487db620ab4bc524135a13cfe6745"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/2acf168de78487db620ab4bc524135a13cfe6745",
"reference": "2acf168de78487db620ab4bc524135a13cfe6745",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": ">=5.1.2"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"bin": [
"scripts/phpcs",
"scripts/phpcbf"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"classmap": [
"CodeSniffer.php",
"CodeSniffer/CLI.php",
"CodeSniffer/Exception.php",
"CodeSniffer/File.php",
"CodeSniffer/Fixer.php",
"CodeSniffer/Report.php",
"CodeSniffer/Reporting.php",
"CodeSniffer/Sniff.php",
"CodeSniffer/Tokens.php",
"CodeSniffer/Reports/",
"CodeSniffer/Tokenizers/",
"CodeSniffer/DocGenerators/",
"CodeSniffer/Standards/AbstractPatternSniff.php",
"CodeSniffer/Standards/AbstractScopeSniff.php",
"CodeSniffer/Standards/AbstractVariableSniff.php",
"CodeSniffer/Standards/IncorrectPatternException.php",
"CodeSniffer/Standards/Generic/Sniffs/",
"CodeSniffer/Standards/MySource/Sniffs/",
"CodeSniffer/Standards/PEAR/Sniffs/",
"CodeSniffer/Standards/PSR1/Sniffs/",
"CodeSniffer/Standards/PSR2/Sniffs/",
"CodeSniffer/Standards/Squiz/Sniffs/",
"CodeSniffer/Standards/Zend/Sniffs/"
]
},
"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": "http://www.squizlabs.com/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": "2018-11-07T22:31:41+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.22.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
"reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.22-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.22.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-01-07T16:49:33+00:00"
},
{
"name": "theseer/tokenizer",
"version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
"reference": "75a63c33a8577608444246075ea0af0d052e452a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
"reference": "75a63c33a8577608444246075ea0af0d052e452a",
"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/master"
},
"funding": [
{
"url": "https://github.com/theseer",
"type": "github"
}
],
"time": "2020-07-12T23:59:07+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"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^7.3"
},
"platform-dev": [],
"plugin-api-version": "2.0.0"
}
PK {±˜R}CCÜ Ü phpcs.xmlnu €žÙ˜ 
src
test
PK {±˜RÝ¥ñ ñ README.mdnu €žÙ˜ # laminas-cache-storage-adapter-memcached
[![Build Status](https://github.com/{organization}/{repository}/workflows/continuous-integration.yml/badge.svg)](https://github.com/{organization}/{repository}/actions/workflows/continuous-integration.yml)
This library provides a `laminas-cache` compatible `StorageInterface` implementation for Memcached.
## Installation
Run the following to install this library:
```bash
$ composer require laminas/laminas-cache-storage-adapter-memcached
```
## Documentation
Browse the documentation online at https://docs.laminas.dev/laminas-cache-storage-adapter-memcached/
## Support
* [Issues](https://github.com/laminas/laminas-cache-storage-adapter-memcached/issues/)
* [Forum](https://discourse.laminas.dev/)
PK {±˜RöÅz*š š .laminas-ci/pre-install.shnu €žÙ˜ #!/bin/bash
WORKING_DIRECTORY=$2
JOB=$3
PHP_VERSION=$(echo "${JOB}" | jq -r '.php')
${WORKING_DIRECTORY}/.laminas-ci/composer-root-version.sh || exit 1
PK {±˜R®uîú™ ™ $ .laminas-ci/composer-root-version.shnu €žÙ˜ #!/bin/bash -l
if [[ -z "${GITHUB_BASE_REF}" ]]; then
echo "Environment variable \"GITHUB_BASE_REF\" does not exist."
exit 0
fi
BRANCH_REGEX="[0-9]+\.[0-9]+\.x"
if ! [[ "${GITHUB_BASE_REF}" =~ ${BRANCH_REGEX} ]]; then
echo "Environment variable \"GITHUB_BASE_REF\" does not match expectations."
echo "Must match ${BRANCH_REGEX}";
exit 0
fi
COMPOSER_ROOT_VERSION=$(echo ${GITHUB_BASE_REF} | sed 's/\.x/\.99/g')
echo "Determined composer root version as \"${COMPOSER_ROOT_VERSION}\"."
if [[ true = "${GITHUB_ACTIONS}" ]]; then
echo "Setting COMPOSER_ROOT_VERSION environment variable to \"${COMPOSER_ROOT_VERSION}\"."
if [ ! -w "${GITHUB_ENV}" ]; then
echo "Missing GITHUB_ENV environment variable. Cannot store COMPOSER_ROOT_VERSION to be available within the current check."
exit 1
fi
echo "COMPOSER_ROOT_VERSION=${COMPOSER_ROOT_VERSION}" >> "${GITHUB_ENV}"
fi
PK {±˜RÝ„h[ [
.gitignorenu €žÙ˜ /.phpunit.result.cache
/docs/html/
/laminas-mkdoc-theme.tgz
/laminas-mkdoc-theme/
/vendor/
PK {±˜RÖ-ºµR> R> src/MemcachedResourceManager.phpnu €žÙ˜ , 'port' => , 'weight' => )
*/
public function getServers($id)
{
if (! $this->hasResource($id)) {
throw new Exception\RuntimeException("No resource with id '{$id}'");
}
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
return $resource->getServerList();
}
return $resource['servers'];
}
/**
* Normalize one server into the following format:
* array('host' => , 'port' => , 'weight' => )
*
* @param string|array &$server
* @throws Exception\InvalidArgumentException
*/
protected function normalizeServer(&$server)
{
$host = null;
$port = 11211;
$weight = 0;
// convert a single server into an array
if ($server instanceof Traversable) {
$server = ArrayUtils::iteratorToArray($server);
}
if (is_array($server)) {
// array([, [, ]])
if (isset($server[0])) {
$host = (string) $server[0];
$port = isset($server[1]) ? (int) $server[1] : $port;
$weight = isset($server[2]) ? (int) $server[2] : $weight;
}
// array('host' => [, 'port' => [, 'weight' => ]])
if (! isset($server[0]) && isset($server['host'])) {
$host = (string) $server['host'];
$port = isset($server['port']) ? (int) $server['port'] : $port;
$weight = isset($server['weight']) ? (int) $server['weight'] : $weight;
}
} else {
// parse server from URI host{:?port}{?weight}
$server = trim($server);
if (strpos($server, '://') === false) {
$server = 'tcp://' . $server;
}
$server = parse_url($server);
if (! $server) {
throw new Exception\InvalidArgumentException("Invalid server given");
}
$host = $server['host'];
$port = isset($server['port']) ? (int) $server['port'] : $port;
if (isset($server['query'])) {
$query = null;
parse_str($server['query'], $query);
if (isset($query['weight'])) {
$weight = (int) $query['weight'];
}
}
}
if (! $host) {
throw new Exception\InvalidArgumentException('Missing required server host');
}
$server = [
'host' => $host,
'port' => $port,
'weight' => $weight,
];
}
/**
* Check if a resource exists
*
* @param string $id
* @return bool
*/
public function hasResource($id)
{
return isset($this->resources[$id]);
}
/**
* Gets a memcached resource
*
* @param string $id
* @return MemcachedResource
* @throws Exception\RuntimeException
*/
public function getResource($id)
{
if (! $this->hasResource($id)) {
throw new Exception\RuntimeException("No resource with id '{$id}'");
}
$resource = $this->resources[$id];
if ($resource instanceof MemcachedResource) {
return $resource;
}
if ($resource['persistent_id'] !== '') {
$memc = new MemcachedResource($resource['persistent_id']);
} else {
$memc = new MemcachedResource();
}
if (method_exists($memc, 'setOptions')) {
$memc->setOptions($resource['lib_options']);
} else {
foreach ($resource['lib_options'] as $k => $v) {
$memc->setOption($k, $v);
}
}
// merge and add servers (with persistence id servers could be added already)
$servers = array_udiff($resource['servers'], $memc->getServerList(), [$this, 'compareServers']);
if ($servers) {
$memc->addServers(array_values(array_map('array_values', $servers)));
}
// buffer and return
$this->resources[$id] = $memc;
return $memc;
}
/**
* Set a resource
*
* @param string $id
* @param array|Traversable|MemcachedResource $resource
* @return MemcachedResourceManager Provides a fluent interface
*/
public function setResource($id, $resource)
{
$id = (string) $id;
if (! ($resource instanceof MemcachedResource)) {
if ($resource instanceof Traversable) {
$resource = ArrayUtils::iteratorToArray($resource);
} elseif (! is_array($resource)) {
throw new Exception\InvalidArgumentException(
'Resource must be an instance of Memcached or an array or Traversable'
);
}
$resource = array_merge([
'persistent_id' => '',
'lib_options' => [],
'servers' => [],
], $resource);
// normalize and validate params
$this->normalizePersistentId($resource['persistent_id']);
$this->normalizeLibOptions($resource['lib_options']);
$this->normalizeServers($resource['servers']);
}
$this->resources[$id] = $resource;
return $this;
}
/**
* Remove a resource
*
* @param string $id
* @return MemcachedResourceManager Provides a fluent interface
*/
public function removeResource($id)
{
unset($this->resources[$id]);
return $this;
}
/**
* Set the persistent id
*
* @param string $id
* @param string $persistentId
* @return MemcachedResourceManager Provides a fluent interface
* @throws Exception\RuntimeException
*/
public function setPersistentId($id, $persistentId)
{
if (! $this->hasResource($id)) {
return $this->setResource($id, [
'persistent_id' => $persistentId
]);
}
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
throw new Exception\RuntimeException(
"Can't change persistent id of resource {$id} after instanziation"
);
}
$this->normalizePersistentId($persistentId);
$resource['persistent_id'] = $persistentId;
return $this;
}
/**
* Get the persistent id
*
* @param string $id
* @return string
* @throws Exception\RuntimeException
*/
public function getPersistentId($id)
{
if (! $this->hasResource($id)) {
throw new Exception\RuntimeException("No resource with id '{$id}'");
}
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
throw new Exception\RuntimeException(
"Can't get persistent id of an instantiated memcached resource"
);
}
return $resource['persistent_id'];
}
/**
* Normalize the persistent id
*
* @param string $persistentId
*/
protected function normalizePersistentId(& $persistentId)
{
$persistentId = (string) $persistentId;
}
/**
* Set Libmemcached options
*
* @param string $id
* @param array $libOptions
* @return MemcachedResourceManager Provides a fluent interface
*/
public function setLibOptions($id, array $libOptions)
{
if (! $this->hasResource($id)) {
return $this->setResource($id, [
'lib_options' => $libOptions
]);
}
$this->normalizeLibOptions($libOptions);
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
if (method_exists($resource, 'setOptions')) {
$resource->setOptions($libOptions);
} else {
foreach ($libOptions as $key => $value) {
$resource->setOption($key, $value);
}
}
} else {
$resource['lib_options'] = $libOptions;
}
return $this;
}
/**
* Get Libmemcached options
*
* @param string $id
* @return array
* @throws Exception\RuntimeException
*/
public function getLibOptions($id)
{
if (! $this->hasResource($id)) {
throw new Exception\RuntimeException("No resource with id '{$id}'");
}
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
$libOptions = [];
$reflection = new ReflectionClass('Memcached');
$constants = $reflection->getConstants();
foreach ($constants as $constName => $constValue) {
if (strpos($constName, 'OPT_') === 0) {
$libOptions[$constValue] = $resource->getOption($constValue);
}
}
return $libOptions;
}
return $resource['lib_options'];
}
/**
* Set one Libmemcached option
*
* @param string $id
* @param string|int $key
* @param mixed $value
* @return MemcachedResourceManager Fluent interface
*/
public function setLibOption($id, $key, $value)
{
return $this->setLibOptions($id, [$key => $value]);
}
/**
* Get one Libmemcached option
*
* @param string $id
* @param string|int $key
* @return mixed
* @throws Exception\RuntimeException
*/
public function getLibOption($id, $key)
{
if (! $this->hasResource($id)) {
throw new Exception\RuntimeException("No resource with id '{$id}'");
}
$this->normalizeLibOptionKey($key);
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
return $resource->getOption($key);
}
return isset($resource['lib_options'][$key]) ? $resource['lib_options'][$key] : null;
}
/**
* Normalize libmemcached options
*
* @param array|Traversable $libOptions
* @throws Exception\InvalidArgumentException
*/
protected function normalizeLibOptions(& $libOptions)
{
if (! is_array($libOptions) && ! ($libOptions instanceof Traversable)) {
throw new Exception\InvalidArgumentException(
"Lib-Options must be an array or an instance of Traversable"
);
}
$result = [];
foreach ($libOptions as $key => $value) {
$this->normalizeLibOptionKey($key);
$result[$key] = $value;
}
$libOptions = $result;
}
/**
* Convert option name into it's constant value
*
* @param string|int $key
* @throws Exception\InvalidArgumentException
*/
protected function normalizeLibOptionKey(& $key)
{
// convert option name into it's constant value
if (is_string($key)) {
$const = 'Memcached::OPT_' . str_replace([' ', '-'], '_', strtoupper($key));
if (! defined($const)) {
throw new Exception\InvalidArgumentException("Unknown libmemcached option '{$key}' ({$const})");
}
$key = constant($const);
} else {
$key = (int) $key;
}
}
/**
* Set servers
*
* $servers can be an array list or a comma separated list of servers.
* One server in the list can be descripted as follows:
* - URI: [tcp://][:][?weight=]
* - Assoc: array('host' => [, 'port' => ][, 'weight' => ])
* - List: array([, ][, ])
*
* @param string $id
* @param string|array $servers
* @return MemcachedResourceManager Provides a fluent interface
*/
public function setServers($id, $servers)
{
if (! $this->hasResource($id)) {
return $this->setResource($id, [
'servers' => $servers
]);
}
$this->normalizeServers($servers);
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
// don't add servers twice
$servers = array_udiff($servers, $resource->getServerList(), [$this, 'compareServers']);
if ($servers) {
$resource->addServers($servers);
}
} else {
$resource['servers'] = $servers;
}
return $this;
}
/**
* Add servers
*
* @param string $id
* @param string|array $servers
* @return MemcachedResourceManager Provides a fluent interface
*/
public function addServers($id, $servers)
{
if (! $this->hasResource($id)) {
return $this->setResource($id, [
'servers' => $servers
]);
}
$this->normalizeServers($servers);
$resource = & $this->resources[$id];
if ($resource instanceof MemcachedResource) {
// don't add servers twice
$servers = array_udiff($servers, $resource->getServerList(), [$this, 'compareServers']);
if ($servers) {
$resource->addServers($servers);
}
} else {
// don't add servers twice
$resource['servers'] = array_merge(
$resource['servers'],
array_udiff($servers, $resource['servers'], [$this, 'compareServers'])
);
}
return $this;
}
/**
* Add one server
*
* @param string $id
* @param string|array $server
* @return MemcachedResourceManager
*/
public function addServer($id, $server)
{
return $this->addServers($id, [$server]);
}
/**
* Normalize a list of servers into the following format:
* array(array('host' => , 'port' => , 'weight' => )[, ...])
*
* @param string|array $servers
*/
protected function normalizeServers(& $servers)
{
if (! is_array($servers) && ! $servers instanceof Traversable) {
// Convert string into a list of servers
$servers = explode(',', $servers);
}
$result = [];
foreach ($servers as $server) {
$this->normalizeServer($server);
$result[$server['host'] . ':' . $server['port']] = $server;
}
$servers = array_values($result);
}
/**
* Compare 2 normalized server arrays
* (Compares only the host and the port)
*
* @param array $serverA
* @param array $serverB
* @return int
*/
protected function compareServers(array $serverA, array $serverB)
{
$keyA = $serverA['host'] . ':' . $serverA['port'];
$keyB = $serverB['host'] . ':' . $serverB['port'];
if ($keyA === $keyB) {
return 0;
}
return $keyA > $keyB ? 1 : -1;
}
}
PK {±˜RŒM´zè# è# src/MemcachedOptions.phpnu €žÙ˜ namespaceSeparator !== $namespaceSeparator) {
$this->triggerOptionEvent('namespace_separator', $namespaceSeparator);
$this->namespaceSeparator = $namespaceSeparator;
}
return $this;
}
/**
* Get namespace separator
*
* @return string
*/
public function getNamespaceSeparator()
{
return $this->namespaceSeparator;
}
/**
* A memcached resource to share
*
* @param null|MemcachedResource $memcachedResource
* @return MemcachedOptions Provides a fluent interface
* @deprecated Please use the resource manager instead
*/
public function setMemcachedResource(MemcachedResource $memcachedResource = null)
{
trigger_error(
'This method is deprecated and will be removed in the feature'
. ', please use the resource manager instead',
E_USER_DEPRECATED
);
if ($memcachedResource !== null) {
$this->triggerOptionEvent('memcached_resource', $memcachedResource);
$resourceManager = $this->getResourceManager();
$resourceId = $this->getResourceId();
$resourceManager->setResource($resourceId, $memcachedResource);
}
return $this;
}
/**
* Get memcached resource to share
*
* @return MemcachedResource
* @deprecated Please use the resource manager instead
*/
public function getMemcachedResource()
{
trigger_error(
'This method is deprecated and will be removed in the feature'
. ', please use the resource manager instead',
E_USER_DEPRECATED
);
return $this->resourceManager->getResource($this->getResourceId());
}
/**
* Set the memcached resource manager to use
*
* @param null|MemcachedResourceManager $resourceManager
* @return MemcachedOptions Provides a fluent interface
*/
public function setResourceManager(MemcachedResourceManager $resourceManager = null)
{
if ($this->resourceManager !== $resourceManager) {
$this->triggerOptionEvent('resource_manager', $resourceManager);
$this->resourceManager = $resourceManager;
}
return $this;
}
/**
* Get the memcached resource manager
*
* @return MemcachedResourceManager
*/
public function getResourceManager()
{
if (! $this->resourceManager) {
$this->resourceManager = new MemcachedResourceManager();
}
return $this->resourceManager;
}
/**
* Get the memcached resource id
*
* @return string
*/
public function getResourceId()
{
return $this->resourceId;
}
/**
* Set the memcached resource id
*
* @param string $resourceId
* @return MemcachedOptions Provides a fluent interface
*/
public function setResourceId($resourceId)
{
$resourceId = (string) $resourceId;
if ($this->resourceId !== $resourceId) {
$this->triggerOptionEvent('resource_id', $resourceId);
$this->resourceId = $resourceId;
}
return $this;
}
/**
* Get the persistent id
*
* @return string
*/
public function getPersistentId()
{
return $this->getResourceManager()->getPersistentId($this->getResourceId());
}
/**
* Set the persistent id
*
* @param string $persistentId
* @return MemcachedOptions Provides a fluent interface
*/
public function setPersistentId($persistentId)
{
$this->triggerOptionEvent('persistent_id', $persistentId);
$this->getResourceManager()->setPersistentId($this->getResourceId(), $persistentId);
return $this;
}
/**
* Add a server to the list
*
* @param string $host
* @param int $port
* @param int $weight
* @return MemcachedOptions Provides a fluent interface
* @deprecated Please use the resource manager instead
*/
public function addServer($host, $port = 11211, $weight = 0)
{
trigger_error(
'This method is deprecated and will be removed in the feature'
. ', please use the resource manager instead',
E_USER_DEPRECATED
);
$this->getResourceManager()->addServer($this->getResourceId(), [
'host' => $host,
'port' => $port,
'weight' => $weight
]);
return $this;
}
/**
* Set a list of memcached servers to add on initialize
*
* @param string|array $servers list of servers
* @return MemcachedOptions Provides a fluent interface
* @throws Exception\InvalidArgumentException
*/
public function setServers($servers)
{
$this->getResourceManager()->setServers($this->getResourceId(), $servers);
return $this;
}
/**
* Get Servers
*
* @return array
*/
public function getServers()
{
return $this->getResourceManager()->getServers($this->getResourceId());
}
/**
* Set libmemcached options
*
* @param array $libOptions
* @return MemcachedOptions Provides a fluent interface
* @link http://php.net/manual/memcached.constants.php
*/
public function setLibOptions(array $libOptions)
{
$this->getResourceManager()->setLibOptions($this->getResourceId(), $libOptions);
return $this;
}
/**
* Set libmemcached option
*
* @param string|int $key
* @param mixed $value
* @return MemcachedOptions Provides a fluent interface
* @link http://php.net/manual/memcached.constants.php
* @deprecated Please use lib_options or the resource manager instead
*/
public function setLibOption($key, $value)
{
trigger_error(
'This method is deprecated and will be removed in the feature'
. ', please use "lib_options" or the resource manager instead',
E_USER_DEPRECATED
);
$this->getResourceManager()->setLibOption($this->getResourceId(), $key, $value);
return $this;
}
/**
* Get libmemcached options
*
* @return array
* @link http://php.net/manual/memcached.constants.php
*/
public function getLibOptions()
{
return $this->getResourceManager()->getLibOptions($this->getResourceId());
}
/**
* Get libmemcached option
*
* @param string|int $key
* @return mixed
* @link http://php.net/manual/memcached.constants.php
* @deprecated Please use lib_options or the resource manager instead
*/
public function getLibOption($key)
{
trigger_error(
'This method is deprecated and will be removed in the feature'
. ', please use "lib_options" or the resource manager instead',
E_USER_DEPRECATED
);
return $this->getResourceManager()->getLibOption($this->getResourceId(), $key);
}
}
PK {±˜R‚añL ñL src/Memcached.phpnu €žÙ˜ = 1.0.0');
}
parent::__construct($options);
// reset initialized flag on update option(s)
$initialized = & $this->initialized;
$this->getEventManager()->attach('option', function () use (& $initialized) {
$initialized = false;
});
}
/**
* Initialize the internal memcached resource
*
* @return MemcachedResource
*/
protected function getMemcachedResource()
{
if (! $this->initialized) {
$options = $this->getOptions();
// get resource manager and resource id
$this->resourceManager = $options->getResourceManager();
$this->resourceId = $options->getResourceId();
// init namespace prefix
$namespace = $options->getNamespace();
if ($namespace !== '') {
$this->namespacePrefix = $namespace . $options->getNamespaceSeparator();
} else {
$this->namespacePrefix = '';
}
// update initialized flag
$this->initialized = true;
}
return $this->resourceManager->getResource($this->resourceId);
}
/* options */
/**
* Set options.
*
* @param array|Traversable|MemcachedOptions $options
* @return Memcached
* @see getOptions()
*/
public function setOptions($options)
{
if (! $options instanceof MemcachedOptions) {
$options = new MemcachedOptions($options);
}
return parent::setOptions($options);
}
/**
* Get options.
*
* @return MemcachedOptions
* @see setOptions()
*/
public function getOptions()
{
if (! $this->options) {
$this->setOptions(new MemcachedOptions());
}
return $this->options;
}
/* FlushableInterface */
/**
* Flush the whole storage
*
* @return bool
*/
public function flush()
{
$memc = $this->getMemcachedResource();
if (! $memc->flush()) {
throw $this->getExceptionByResultCode($memc->getResultCode());
}
return true;
}
/* TotalSpaceCapableInterface */
/**
* Get total space in bytes
*
* @return int|float
*/
public function getTotalSpace()
{
$memc = $this->getMemcachedResource();
$stats = $memc->getStats();
if ($stats === false) {
throw new Exception\RuntimeException($memc->getResultMessage(), $memc->getResultCode());
}
$mem = array_pop($stats);
return $mem['limit_maxbytes'];
}
/* AvailableSpaceCapableInterface */
/**
* Get available space in bytes
*
* @return int|float
*/
public function getAvailableSpace()
{
$memc = $this->getMemcachedResource();
$stats = $memc->getStats();
if ($stats === false) {
throw new Exception\RuntimeException($memc->getResultMessage(), $memc->getResultCode());
}
$mem = array_pop($stats);
return $mem['limit_maxbytes'] - $mem['bytes'];
}
/* reading */
/**
* Internal method to get an item.
*
* @param string $normalizedKey
* @param bool $success
* @param mixed $casToken
* @return mixed Data on success, null on failure
* @throws Exception\ExceptionInterface
*/
protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null)
{
$memc = $this->getMemcachedResource();
$internalKey = $this->namespacePrefix . $normalizedKey;
if (func_num_args() > 2) {
if (defined('Memcached::GET_EXTENDED')) {
$output = $memc->get($internalKey, null, \Memcached::GET_EXTENDED);
$casToken = $output ? $output['cas'] : $casToken;
$result = $output ? $output['value'] : false;
} else {
$result = $memc->get($internalKey, null, $casToken);
}
} else {
$result = $memc->get($internalKey);
}
$success = true;
if ($result === false) {
$rsCode = $memc->getResultCode();
if ($rsCode == MemcachedResource::RES_NOTFOUND) {
$result = null;
$success = false;
} elseif ($rsCode) {
$success = false;
throw $this->getExceptionByResultCode($rsCode);
}
}
return $result;
}
/**
* Internal method to get multiple items.
*
* @param array $normalizedKeys
* @return array Associative array of keys and values
* @throws Exception\ExceptionInterface
*/
protected function internalGetItems(array & $normalizedKeys)
{
$memc = $this->getMemcachedResource();
foreach ($normalizedKeys as & $normalizedKey) {
$normalizedKey = $this->namespacePrefix . $normalizedKey;
}
$result = $memc->getMulti($normalizedKeys);
if ($result === false) {
throw $this->getExceptionByResultCode($memc->getResultCode());
}
// if $result is empty the loop below can be avouded
// and HHVM returns NULL instead of an empty array in this case
if (empty($result)) {
return [];
}
// remove namespace prefix from result
if ($this->namespacePrefix !== '') {
$tmp = [];
$nsPrefixLength = strlen($this->namespacePrefix);
foreach ($result as $internalKey => $value) {
$tmp[substr($internalKey, $nsPrefixLength)] = $value;
}
$result = $tmp;
}
return $result;
}
/**
* Internal method to test if an item exists.
*
* @param string $normalizedKey
* @return bool
* @throws Exception\ExceptionInterface
*/
protected function internalHasItem(& $normalizedKey)
{
$memc = $this->getMemcachedResource();
$value = $memc->get($this->namespacePrefix . $normalizedKey);
if ($value === false) {
$rsCode = $memc->getResultCode();
if ($rsCode == MemcachedResource::RES_SUCCESS) {
return true;
} elseif ($rsCode == MemcachedResource::RES_NOTFOUND) {
return false;
} else {
throw $this->getExceptionByResultCode($rsCode);
}
}
return true;
}
/**
* Internal method to test multiple items.
*
* @param array $normalizedKeys
* @return array Array of found keys
* @throws Exception\ExceptionInterface
*/
protected function internalHasItems(array & $normalizedKeys)
{
return array_keys($this->internalGetItems($normalizedKeys));
}
/**
* Get metadata of multiple items
*
* @param array $normalizedKeys
* @return array Associative array of keys and metadata
* @throws Exception\ExceptionInterface
*/
protected function internalGetMetadatas(array & $normalizedKeys)
{
return array_fill_keys(array_keys($this->internalGetItems($normalizedKeys)), []);
}
/* writing */
/**
* Internal method to store an item.
*
* @param string $normalizedKey
* @param mixed $value
* @return bool
* @throws Exception\ExceptionInterface
*/
protected function internalSetItem(& $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$expiration = $this->expirationTime();
if (! $memc->set($this->namespacePrefix . $normalizedKey, $value, $expiration)) {
throw $this->getExceptionByResultCode($memc->getResultCode());
}
return true;
}
/**
* Internal method to store multiple items.
*
* @param array $normalizedKeyValuePairs
* @return array Array of not stored keys
* @throws Exception\ExceptionInterface
*/
protected function internalSetItems(array & $normalizedKeyValuePairs)
{
$memc = $this->getMemcachedResource();
$expiration = $this->expirationTime();
$namespacedKeyValuePairs = [];
foreach ($normalizedKeyValuePairs as $normalizedKey => $value) {
$namespacedKeyValuePairs[$this->namespacePrefix . $normalizedKey] = $value;
}
if (! $memc->setMulti($namespacedKeyValuePairs, $expiration)) {
throw $this->getExceptionByResultCode($memc->getResultCode());
}
return [];
}
/**
* Add an item.
*
* @param string $normalizedKey
* @param mixed $value
* @return bool
* @throws Exception\ExceptionInterface
*/
protected function internalAddItem(& $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$expiration = $this->expirationTime();
if (! $memc->add($this->namespacePrefix . $normalizedKey, $value, $expiration)) {
if ($memc->getResultCode() == MemcachedResource::RES_NOTSTORED) {
return false;
}
throw $this->getExceptionByResultCode($memc->getResultCode());
}
return true;
}
/**
* Internal method to replace an existing item.
*
* @param string $normalizedKey
* @param mixed $value
* @return bool
* @throws Exception\ExceptionInterface
*/
protected function internalReplaceItem(& $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$expiration = $this->expirationTime();
if (! $memc->replace($this->namespacePrefix . $normalizedKey, $value, $expiration)) {
$rsCode = $memc->getResultCode();
if ($rsCode == MemcachedResource::RES_NOTSTORED) {
return false;
}
throw $this->getExceptionByResultCode($rsCode);
}
return true;
}
/**
* Internal method to set an item only if token matches
*
* @param mixed $token
* @param string $normalizedKey
* @param mixed $value
* @return bool
* @throws Exception\ExceptionInterface
* @see getItem()
* @see setItem()
*/
protected function internalCheckAndSetItem(& $token, & $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$expiration = $this->expirationTime();
$result = $memc->cas($token, $this->namespacePrefix . $normalizedKey, $value, $expiration);
if ($result === false) {
$rsCode = $memc->getResultCode();
if ($rsCode !== 0 && $rsCode != MemcachedResource::RES_DATA_EXISTS) {
throw $this->getExceptionByResultCode($rsCode);
}
}
return $result;
}
/**
* Internal method to remove an item.
*
* @param string $normalizedKey
* @return bool
* @throws Exception\ExceptionInterface
*/
protected function internalRemoveItem(& $normalizedKey)
{
$memc = $this->getMemcachedResource();
$result = $memc->delete($this->namespacePrefix . $normalizedKey);
if ($result === false) {
$rsCode = $memc->getResultCode();
if ($rsCode == MemcachedResource::RES_NOTFOUND) {
return false;
} elseif ($rsCode != MemcachedResource::RES_SUCCESS) {
throw $this->getExceptionByResultCode($rsCode);
}
}
return true;
}
/**
* Internal method to remove multiple items.
*
* @param array $normalizedKeys
* @return array Array of not removed keys
* @throws Exception\ExceptionInterface
*/
protected function internalRemoveItems(array & $normalizedKeys)
{
$memc = $this->getMemcachedResource();
// support for removing multiple items at once has been added in ext/memcached-2.0.0
// and HHVM doesn't support this feature yet
if (! method_exists($memc, 'deleteMulti')) {
return parent::internalRemoveItems($normalizedKeys);
}
foreach ($normalizedKeys as & $normalizedKey) {
$normalizedKey = $this->namespacePrefix . $normalizedKey;
}
$missingKeys = [];
foreach ($memc->deleteMulti($normalizedKeys) as $normalizedKey => $rsCode) {
if ($rsCode !== true && $rsCode != MemcachedResource::RES_SUCCESS) {
if ($rsCode != MemcachedResource::RES_NOTFOUND) {
throw $this->getExceptionByResultCode($rsCode);
}
$missingKeys[] = $normalizedKey;
}
}
// remove namespace prefix
if ($missingKeys && $this->namespacePrefix !== '') {
$nsPrefixLength = strlen($this->namespacePrefix);
foreach ($missingKeys as & $missingKey) {
$missingKey = substr($missingKey, $nsPrefixLength);
}
}
return $missingKeys;
}
/**
* Internal method to increment an item.
*
* @param string $normalizedKey
* @param int $value
* @return int|bool The new value on success, false on failure
* @throws Exception\ExceptionInterface
*/
protected function internalIncrementItem(& $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$internalKey = $this->namespacePrefix . $normalizedKey;
$value = (int) $value;
$newValue = $memc->increment($internalKey, $value);
if ($newValue === false) {
$rsCode = $memc->getResultCode();
// initial value
if ($rsCode == MemcachedResource::RES_NOTFOUND) {
$newValue = $value;
$memc->add($internalKey, $newValue, $this->expirationTime());
$rsCode = $memc->getResultCode();
}
if ($rsCode) {
throw $this->getExceptionByResultCode($rsCode);
}
}
return $newValue;
}
/**
* Internal method to decrement an item.
*
* @param string $normalizedKey
* @param int $value
* @return int|bool The new value on success, false on failure
* @throws Exception\ExceptionInterface
*/
protected function internalDecrementItem(& $normalizedKey, & $value)
{
$memc = $this->getMemcachedResource();
$internalKey = $this->namespacePrefix . $normalizedKey;
$value = (int) $value;
$newValue = $memc->decrement($internalKey, $value);
if ($newValue === false) {
$rsCode = $memc->getResultCode();
// initial value
if ($rsCode == MemcachedResource::RES_NOTFOUND) {
$newValue = -$value;
$memc->add($internalKey, $newValue, $this->expirationTime());
$rsCode = $memc->getResultCode();
}
if ($rsCode) {
throw $this->getExceptionByResultCode($rsCode);
}
}
return $newValue;
}
/* status */
/**
* Internal method to get capabilities of this adapter
*
* @return Capabilities
*/
protected function internalGetCapabilities()
{
if ($this->capabilities === null) {
$this->capabilityMarker = new stdClass();
$this->capabilities = new Capabilities(
$this,
$this->capabilityMarker,
[
'supportedDatatypes' => [
'NULL' => true,
'boolean' => true,
'integer' => true,
'double' => true,
'string' => true,
'array' => true,
'object' => 'object',
'resource' => false,
],
'supportedMetadata' => [],
'minTtl' => 1,
'maxTtl' => 0,
'staticTtl' => true,
'ttlPrecision' => 1,
'useRequestTime' => false,
'maxKeyLength' => 255,
'namespaceIsPrefix' => true,
]
);
}
return $this->capabilities;
}
/* internal */
/**
* Get expiration time by ttl
*
* Some storage commands involve sending an expiration value (relative to
* an item or to an operation requested by the client) to the server. In
* all such cases, the actual value sent may either be Unix time (number of
* seconds since January 1, 1970, as an integer), or a number of seconds
* starting from current time. In the latter case, this number of seconds
* may not exceed 60*60*24*30 (number of seconds in 30 days); if the
* expiration value is larger than that, the server will consider it to be
* real Unix time value rather than an offset from current time.
*
* @return int
*/
protected function expirationTime()
{
$ttl = $this->getOptions()->getTtl();
if ($ttl > 2592000) {
return time() + $ttl;
}
return $ttl;
}
/**
* Generate exception based of memcached result code
*
* @param int $code
* @throws Exception\RuntimeException
* @throws Exception\InvalidArgumentException On success code
*/
protected function getExceptionByResultCode($code)
{
switch ($code) {
case MemcachedResource::RES_SUCCESS:
throw new Exception\InvalidArgumentException(
"The result code '{$code}' (SUCCESS) isn't an error"
);
default:
return new Exception\RuntimeException(
$this->getMemcachedResource()->getResultMessage(),
$code
);
}
}
}
PK {±˜R³èeMû û
mkdocs.ymlnu €žÙ˜ docs_dir: docs/book
site_dir: docs/html
nav:
- Home: index.md
- Introduction: v1/intro.md
site_name: 'laminas-cache-storage-adapter-memcached'
site_description: ''
repo_url: 'https://github.com/laminas/laminas-cache-storage-adapter-memcached'
PK {±˜RþÕ•{ { , .github/workflows/continuous-integration.ymlnu €žÙ˜ name: "Continuous Integration"
on:
pull_request:
push:
branches:
- '[0-9]+.[0-9]+.x'
- 'refs/pull/*'
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@v1
qa:
name: QA Checks
needs: [matrix]
runs-on: ${{ matrix.operatingSystem }}
services:
memcached:
image: memcached:1.6-alpine
ports:
- 11211:11211
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }}
steps:
- name: ${{ matrix.name }}
uses: laminas/laminas-continuous-integration-action@v1
with:
job: ${{ matrix.job }}
env:
TESTS_LAMINAS_CACHE_MEMCACHED_HOST: memcached
PK {±˜Ru|e)º
º
1 .github/workflows/release-on-milestone-closed.ymlnu €žÙ˜ # Alternate workflow example.
# This one is identical to the one in release-on-milestone.yml, with one change:
# the Release step uses the ORGANIZATION_ADMIN_TOKEN instead, to allow it to
# trigger a release workflow event. This is useful if you have other actions
# that intercept that event.
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.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: "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 }}
PK {±˜RZ' ' .gitattributesnu €žÙ˜ /.coveralls.yml export-ignore
/.gitattributes export-ignore
/.github/ export-ignore
/.gitignore export-ignore
/.laminas-ci/ export-ignore
/.laminas-ci.json export-ignore
/docs/ export-ignore
/mkdocs.yml export-ignore
/phpcs.xml export-ignore
/phpunit.xml.dist export-ignore
/test/ export-ignore
PK {±˜R…X@µw w = test/integration/Psr/SimpleCache/MemcachedIntegrationTest.phpnu €žÙ˜ tz = date_default_timezone_get();
date_default_timezone_set('America/Vancouver');
parent::setUp();
}
protected function tearDown()
{
date_default_timezone_set($this->tz);
if ($this->storage) {
$this->storage->flush();
}
parent::tearDown();
}
public function createSimpleCache()
{
$host = getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST');
$port = getenv('TESTS_LAMINAS_CACHE_MEMCACHED_PORT');
$options = [
'resource_id' => __CLASS__
];
if ($host && $port) {
$options['servers'] = [[$host, $port]];
} elseif ($host) {
$options['servers'] = [[$host]];
}
try {
$storage = StorageFactory::adapterFactory('memcached', $options);
return new SimpleCacheDecorator($storage);
} catch (Exception\ExtensionNotLoadedException $e) {
$this->markTestSkipped($e->getMessage());
} catch (ServiceNotCreatedException $e) {
if ($e->getPrevious() instanceof Exception\ExtensionNotLoadedException) {
$this->markTestSkipped($e->getMessage());
}
throw $e;
}
}
}
PK {±˜RaÃÝÍŒ Œ ? test/integration/Psr/CacheItemPool/MemcachedIntegrationTest.phpnu €žÙ˜ tz = date_default_timezone_get();
date_default_timezone_set('America/Vancouver');
parent::setUp();
}
protected function tearDown()
{
date_default_timezone_set($this->tz);
if ($this->storage) {
$this->storage->flush();
}
parent::tearDown();
}
public function createCachePool()
{
$host = getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST');
$port = getenv('TESTS_LAMINAS_CACHE_MEMCACHED_PORT');
$options = [
'resource_id' => __CLASS__
];
if ($host && $port) {
$options['servers'] = [[$host, $port]];
} elseif ($host) {
$options['servers'] = [[$host]];
}
try {
$storage = StorageFactory::adapterFactory('memcached', $options);
$deferredSkippedMessage = sprintf(
'%s storage doesn\'t support driver deferred',
\get_class($storage)
);
$this->skippedTests['testHasItemReturnsFalseWhenDeferredItemIsExpired'] = $deferredSkippedMessage;
return new CacheItemPoolDecorator($storage);
} catch (Exception\ExtensionNotLoadedException $e) {
$this->markTestSkipped($e->getMessage());
} catch (ServiceNotCreatedException $e) {
if ($e->getPrevious() instanceof Exception\ExtensionNotLoadedException) {
$this->markTestSkipped($e->getMessage());
}
throw $e;
}
}
}
PK {±˜Rüx“§û( û( test/unit/MemcachedTest.phpnu €žÙ˜
*/
class MemcachedTest extends CommonAdapterTest
{
public function setUp()
{
if (! extension_loaded('memcached')) {
$this->markTestSkipped("Memcached extension is not loaded");
}
$this->_options = new Cache\Storage\Adapter\MemcachedOptions([
'resource_id' => __CLASS__
]);
if (getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST') && getenv('TESTS_LAMINAS_CACHE_MEMCACHED_PORT')) {
$this->_options->getResourceManager()->setServers(__CLASS__, [
[getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST'), getenv('TESTS_LAMINAS_CACHE_MEMCACHED_PORT')]
]);
} elseif (getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST')) {
$this->_options->getResourceManager()->setServers(__CLASS__, [
[getenv('TESTS_LAMINAS_CACHE_MEMCACHED_HOST')]
]);
}
$this->_storage = new Cache\Storage\Adapter\Memcached();
$this->_storage->setOptions($this->_options);
$this->_storage->flush();
parent::setUp();
}
public function getCommonAdapterNamesProvider()
{
return [
['memcached'],
['Memcached'],
];
}
/**
* @deprecated
*/
public function testOptionsAddServer()
{
$options = new Cache\Storage\Adapter\MemcachedOptions();
$deprecated = false;
set_error_handler(function () use (& $deprecated) {
$deprecated = true;
}, E_USER_DEPRECATED);
$options->addServer('127.0.0.1', 11211);
$options->addServer('localhost');
$options->addServer('domain.com', 11215);
restore_error_handler();
$this->assertTrue($deprecated, 'Missing deprecated error');
$servers = [
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 0],
['host' => 'localhost', 'port' => 11211, 'weight' => 0],
['host' => 'domain.com', 'port' => 11215, 'weight' => 0],
];
$this->assertEquals($options->getServers(), $servers);
$memcached = new Cache\Storage\Adapter\Memcached($options);
$this->assertEquals($memcached->getOptions()->getServers(), $servers);
}
public function testMemcachedReturnsSuccessFalseOnError()
{
if (! defined('Memcached::GET_EXTENDED')) {
$this->markTestSkipped('Test skipped because Memcached < 3.0 with Memcached::GET_EXTENDED not defined');
return;
}
$resource = $this->prophesize(\Memcached::class);
$resourceManager = $this->prophesize(Cache\Storage\Adapter\MemcachedResourceManager::class);
$resourceManager->getResource(Argument::any())->willReturn($resource->reveal());
$resource->get(Argument::cetera())->willReturn(null);
$resource->getResultCode()->willReturn(\Memcached::RES_PARTIAL_READ);
$resource->getResultMessage()->willReturn('foo');
$storage = new Cache\Storage\Adapter\Memcached([
'resource_manager' => $resourceManager->reveal(),
]);
$storage->getEventManager()->attach(
'getItem.exception',
function (Cache\Storage\ExceptionEvent $e) {
$e->setThrowException(false);
$e->stopPropagation(true);
},
-1
);
$this->assertNull($storage->getItem('unknwon', $success, $casToken));
$this->assertFalse($success);
$this->assertNull($casToken);
}
public function getServersDefinitions()
{
$expectedServers = [
['host' => '127.0.0.1', 'port' => 12345, 'weight' => 1],
['host' => 'localhost', 'port' => 54321, 'weight' => 2],
['host' => 'examp.com', 'port' => 11211, 'weight' => 0],
];
return [
// servers as array list
[
[
['127.0.0.1', 12345, 1],
['localhost', '54321', '2'],
['examp.com'],
],
$expectedServers,
],
// servers as array assoc
[
[
['127.0.0.1', 12345, 1],
['localhost', '54321', '2'],
['examp.com'],
],
$expectedServers,
],
// servers as string list
[
[
'127.0.0.1:12345?weight=1',
'localhost:54321?weight=2',
'examp.com',
],
$expectedServers,
],
// servers as string
[
'127.0.0.1:12345?weight=1, localhost:54321?weight=2,tcp://examp.com',
$expectedServers,
],
];
}
/**
* @dataProvider getServersDefinitions
*/
public function testOptionSetServers($servers, $expectedServers)
{
$options = new Cache\Storage\Adapter\MemcachedOptions();
$options->setServers($servers);
$this->assertEquals($expectedServers, $options->getServers());
}
public function testLibOptionsSet()
{
$options = new Cache\Storage\Adapter\MemcachedOptions();
$options->setLibOptions([
'COMPRESSION' => false
]);
$this->assertEquals($options->getResourceManager()->getLibOption(
$options->getResourceId(),
\Memcached::OPT_COMPRESSION
), false);
$memcached = new Cache\Storage\Adapter\Memcached($options);
$this->assertEquals($memcached->getOptions()->getLibOptions(), [
\Memcached::OPT_COMPRESSION => false
]);
}
/**
* @deprecated
*/
public function testLibOptionSet()
{
$options = new Cache\Storage\Adapter\MemcachedOptions();
$deprecated = false;
set_error_handler(function () use (& $deprecated) {
$deprecated = true;
}, E_USER_DEPRECATED);
$options->setLibOption('COMPRESSION', false);
restore_error_handler();
$this->assertTrue($deprecated, 'Missing deprecated error');
$this->assertEquals($options->getResourceManager()->getLibOption(
$options->getResourceId(),
\Memcached::OPT_COMPRESSION
), false);
$memcached = new Cache\Storage\Adapter\Memcached($options);
$this->assertEquals($memcached->getOptions()->getLibOptions(), [
\Memcached::OPT_COMPRESSION => false
]);
}
public function testOptionPersistentId()
{
$options = new Cache\Storage\Adapter\MemcachedOptions();
$resourceId = $options->getResourceId();
$resourceManager = $options->getResourceManager();
$options->setPersistentId('testPersistentId');
$this->assertSame('testPersistentId', $resourceManager->getPersistentId($resourceId));
$this->assertSame('testPersistentId', $options->getPersistentId());
}
public function testExceptionCodeIsPassedToRuntimeExceptionWhenExceptionIsBeingDetectedByInternalMethod(): void
{
$memcached = new class($this->_options) extends Cache\Storage\Adapter\Memcached {
/** @psalm-param positive-int $code */
public function createExceptionWithCode(int $code): Throwable
{
return $this->getExceptionByResultCode($code);
}
};
$exception = $memcached->createExceptionWithCode(1);
self::assertIsInt($exception->getCode());
self::assertGreaterThan(0, $exception->getCode());
self::assertInstanceOf(Cache\Exception\RuntimeException::class, $exception);
}
public function testExceptionCodeIsPassedToRuntimeExceptionWhenTotalSpaceRequestFails(): void
{
$memcached = $this->createPartialMock(stdClass::class, ['getStats', 'getResultMessage', 'getResultCode']);
$memcached->method('getStats')->willReturn(false);
$memcached->method('getResultMessage')->willReturn('Bar');
$code = random_int(1, 999);
$memcached->method('getResultCode')->willReturn($code);
$options = new Cache\Storage\Adapter\MemcachedOptions();
$resourceManager = $this->createMock(Cache\Storage\Adapter\MemcachedResourceManager::class);
$resourceManager
->method('getResource')
->willReturn($memcached);
$options->setResourceManager($resourceManager);
$storage = new Cache\Storage\Adapter\Memcached($options);
$this->expectException(Cache\Exception\RuntimeException::class);
$this->expectExceptionCode($code);
$this->expectExceptionMessage('Bar');
$storage->getTotalSpace();
}
public function testExceptionCodeIsPassedToRuntimeExceptionWhenAvailableSpaceRequestFails(): void
{
$memcached = $this->createPartialMock(stdClass::class, ['getStats', 'getResultMessage', 'getResultCode']);
$memcached->method('getStats')->willReturn(false);
$memcached->method('getResultMessage')->willReturn('Foo');
$code = random_int(1, 999);
$memcached->method('getResultCode')->willReturn($code);
$options = new Cache\Storage\Adapter\MemcachedOptions();
$resourceManager = $this->createMock(Cache\Storage\Adapter\MemcachedResourceManager::class);
$resourceManager
->method('getResource')
->willReturn($memcached);
$options->setResourceManager($resourceManager);
$storage = new Cache\Storage\Adapter\Memcached($options);
$this->expectException(Cache\Exception\RuntimeException::class);
$this->expectExceptionCode($code);
$this->expectExceptionMessage('Foo');
$storage->getAvailableSpace();
}
public function tearDown()
{
if ($this->_storage) {
$this->_storage->flush();
}
parent::tearDown();
}
}
PK {±˜R>>œ„" „" * test/unit/MemcachedResourceManagerTest.phpnu €žÙ˜ resourceManager = new MemcachedResourceManager();
}
/**
* Data provider to test valid resources
*
* Returns an array of the following structure:
* array(array(
* ,
* ,
* ,
* ,
*
* )[, ...])
*
* @return array
*/
public function validResourceProvider()
{
$data = [
// empty resource
[
'testEmptyResource',
[],
'',
[],
[],
],
// stringify persistent id
[
'testStringifyPersistentId',
['persistent_id' => 1234],
'1234',
[],
[],
],
// servers given as string
[
'testServersGivenAsString',
[
'servers' => '127.0.0.1:1234,127.0.0.1,192.1.0.1?weight=3,localhost,127.0.0.1:11211?weight=0',
],
'',
[
['host' => '127.0.0.1', 'port' => 1234, 'weight' => 0],
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 0],
['host' => '192.1.0.1', 'port' => 11211, 'weight' => 3],
['host' => 'localhost', 'port' => 11211, 'weight' => 0],
],
[],
],
// servers given as list of strings
[
'testServersGivenAsListOfStrings',
[
'servers' => [
'127.0.0.1:1234',
'127.0.0.1',
'192.1.0.1?weight=3',
'localhost',
'127.0.0.1:11211?weight=0'
],
],
'',
[
['host' => '127.0.0.1', 'port' => 1234, 'weight' => 0],
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 0],
['host' => '192.1.0.1', 'port' => 11211, 'weight' => 3],
['host' => 'localhost', 'port' => 11211, 'weight' => 0],
],
[],
],
// servers given as list of arrays
[
'testServersGivenAsListOfArrays',
[
'servers' => [
['127.0.0.1', 1234],
['127.0.0.1'],
['192.1.0.1', 11211, 3],
['localhost'],
['127.0.0.1', 11211, 0],
],
],
'',
[
['host' => '127.0.0.1', 'port' => 1234, 'weight' => 0],
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 0],
['host' => '192.1.0.1', 'port' => 11211, 'weight' => 3],
['host' => 'localhost', 'port' => 11211, 'weight' => 0],
],
[],
],
// servers given as list of assoc arrays
[
'testServersGivenAsListOfAssocArrays',
[
'servers' => [
[
'host' => '127.0.0.1',
'port' => 1234,
],
[
'host' => '127.0.0.1',
],
[
'host' => '192.1.0.1',
'weight' => 3,
],
[
'host' => 'localhost',
],
[
'host' => '127.0.0.1',
'port' => 11211,
'weight' => 0,
],
],
],
'',
[
['host' => '127.0.0.1', 'port' => 1234, 'weight' => 0],
['host' => '127.0.0.1', 'port' => 11211, 'weight' => 0],
['host' => '192.1.0.1', 'port' => 11211, 'weight' => 3],
['host' => 'localhost', 'port' => 11211, 'weight' => 0],
],
[],
],
// lib options given as name
[
'testLibOptionsGivenAsName',
[
'lib_options' => [
'COMPRESSION' => false,
'PREFIX_KEY' => 'test_',
],
],
'',
[],
class_exists('Memcached', false) ? [
\Memcached::OPT_COMPRESSION => false,
\Memcached::OPT_PREFIX_KEY => 'test_',
] : [],
],
// lib options given as constant value
[
'testLibOptionsGivenAsName',
[
'lib_options' => class_exists('Memcached', false) ? [
\Memcached::OPT_COMPRESSION => false,
\Memcached::OPT_PREFIX_KEY => 'test_',
] : [],
],
'',
[],
class_exists('Memcached', false) ? [
\Memcached::OPT_COMPRESSION => false,
\Memcached::OPT_PREFIX_KEY => 'test_',
] : [],
],
];
return $data;
}
/**
* @dataProvider validResourceProvider
* @param string $resourceId
* @param mixed $resource
* @param string $expectedPersistentId
* @param array $expectedServers
* @param array $expectedLibOptions
*/
public function testValidResources(
$resourceId,
$resource,
$expectedPersistentId,
$expectedServers,
$expectedLibOptions
) {
// php-memcached is required to set libmemcached options
if (is_array($resource) && isset($resource['lib_options']) && count($resource['lib_options']) > 0) {
if (! class_exists('Memcached', false)) {
$this->expectException('Laminas\Cache\Exception\InvalidArgumentException');
$this->expectExceptionMessage('Unknown libmemcached option');
}
}
$this->assertSame($this->resourceManager, $this->resourceManager->setResource($resourceId, $resource));
$this->assertTrue($this->resourceManager->hasResource($resourceId));
$this->assertSame($expectedPersistentId, $this->resourceManager->getPersistentId($resourceId));
$this->assertEquals($expectedServers, $this->resourceManager->getServers($resourceId));
$this->assertEquals($expectedLibOptions, $this->resourceManager->getLibOptions($resourceId));
$this->assertSame($this->resourceManager, $this->resourceManager->removeResource($resourceId));
$this->assertFalse($this->resourceManager->hasResource($resourceId));
}
public function testSetLibOptionsOnExistingResource()
{
$memcachedInstalled = class_exists('Memcached', false);
$libOptions = ['compression' => false];
$resourceId = 'testResourceId';
$resourceMock = $this->getMockBuilder('Memcached')
->setMethods(['setOptions'])
->getMock();
if (! $memcachedInstalled) {
$this->expectException('Laminas\Cache\Exception\InvalidArgumentException');
} else {
$resourceMock
->expects($this->once())
->method('setOptions')
->with($this->isType('array'));
}
$this->resourceManager->setResource($resourceId, $resourceMock);
$this->resourceManager->setLibOptions($resourceId, $libOptions);
}
}
PK {±˜R }¼ø ø phpunit.xml.distnu €žÙ˜
./test
./src
PK {±˜R°7F!
composer.jsonnu €žÙ˜ {
"name": "laminas/laminas-cache-storage-adapter-memcached",
"description": "Laminas cache adapter for memcached",
"keywords": [
"laminas",
"cache",
"memcached"
],
"license": "BSD-3-Clause",
"require": {
"php": "^7.3"
},
"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": "~1.0.0",
"squizlabs/php_codesniffer": "^2.7",
"phpunit/phpunit": "^7.5.20"
},
"suggest": {
"ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter"
},
"config": {
"sort-packages": true
},
"autoload": {
"psr-4": {
"Laminas\\Cache\\Storage\\Adapter\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"LaminasTest\\Cache\\Storage\\Adapter\\": "test/unit",
"LaminasTest\\Cache\\Psr\\": "test/integration/Psr"
}
},
"scripts": {
"cs-check": "phpcs",
"cs-fix": "phpcbf",
"test": "phpunit --colors=always",
"test-coverage": "phpunit --colors=always --coverage-clover clover.xml"
},
"support": {
"issues": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/issues",
"forum": "https://discourse.laminas.dev/",
"source": "https://github.com/laminas/laminas-cache-storage-adapter-memcached",
"docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memcached/",
"rss": "https://github.com/laminas/laminas-cache-storage-adapter-memcached/releases.atom"
}
}
PK {±˜R¿º yG G docs/book/v1/intro.mdnu €žÙ˜ # laminas-cache-storage-adapter-memcached
This component provides ...
PK {±˜RÝè‡úÚ Ú
LICENSE.mdnu €žÙ˜ PK {±˜R½%'\ \ COPYRIGHT.mdnu €žÙ˜ PK {±˜RÄ[»š2 2 ¬ .laminas-ci.jsonnu €žÙ˜ PK {±˜Rxú= = .coveralls.ymlnu €žÙ˜ PK {±˜R«(Ió ó
™ composer.locknu €žÙ˜ PK {±˜R}CCÜ Ü É phpcs.xmlnu €žÙ˜ PK {±˜RÝ¥ñ ñ Þ
README.mdnu €žÙ˜ PK {±˜RöÅz*š š .laminas-ci/pre-install.shnu €žÙ˜ PK {±˜R®uîú™ ™ $ ì .laminas-ci/composer-root-version.shnu €žÙ˜ PK {±˜RÝ„h[ [
Ù .gitignorenu €žÙ˜ PK {±˜RÖ-ºµR> R> n src/MemcachedResourceManager.phpnu €žÙ˜ PK {±˜RŒM´zè# è# R src/MemcachedOptions.phpnu €žÙ˜ PK {±˜R‚añL ñL @v src/Memcached.phpnu €žÙ˜ PK {±˜R³èeMû û
rà mkdocs.ymlnu €žÙ˜ PK {±˜RþÕ•{ { , §Ä .github/workflows/continuous-integration.ymlnu €žÙ˜ PK {±˜Ru|e)º
º
1 ~È .github/workflows/release-on-milestone-closed.ymlnu €žÙ˜ PK {±˜RZ' ' ™Ó .gitattributesnu €žÙ˜ PK {±˜R…X@µw w = þÔ test/integration/Psr/SimpleCache/MemcachedIntegrationTest.phpnu €žÙ˜ PK {±˜RaÃÝÍŒ Œ ? âÝ test/integration/Psr/CacheItemPool/MemcachedIntegrationTest.phpnu €žÙ˜ PK {±˜Rüx“§û( û( Ýç test/unit/MemcachedTest.phpnu €žÙ˜ PK {±˜R>>œ„" „" * # test/unit/MemcachedResourceManagerTest.phpnu €žÙ˜ PK {±˜R }¼ø ø 4 phpunit.xml.distnu €žÙ˜ PK {±˜R°7F!
97 composer.jsonnu €žÙ˜ PK {±˜R¿º yG G †> docs/book/v1/intro.mdnu €žÙ˜ PK L ?