PK ]TK8%
LICENSE.mdnu ٘ Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC.
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 ]TF[ [ COPYRIGHT.mdnu ٘ Copyright (c) 2020 Laminas Project a Series of LF Projects, LLC. (https://getlaminas.org/)
PK ]Tr r .laminas-ci.jsonnu ٘ {
"extensions": [
"tidy"
],
"ignore_php_platform_requirements": {
"8.1": true
}
}
PK ]Tx= = .coveralls.ymlnu ٘ coverage_clover: clover.xml
json_path: coveralls-upload.json
PK ]T3|
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": "1fdc294e74a6149af1de9a5a2f5c88dc",
"packages": [
{
"name": "laminas/laminas-escaper",
"version": "2.9.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-escaper.git",
"reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/891ad70986729e20ed2e86355fcf93c9dc238a5f",
"reference": "891ad70986729e20ed2e86355fcf93c9dc238a5f",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-escaper": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.3.0",
"phpunit/phpunit": "^9.3",
"psalm/plugin-phpunit": "^0.12.2",
"vimeo/psalm": "^3.16"
},
"suggest": {
"ext-iconv": "*",
"ext-mbstring": "*"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Escaper\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs",
"homepage": "https://laminas.dev",
"keywords": [
"escaper",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-escaper/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-escaper/issues",
"rss": "https://github.com/laminas/laminas-escaper/releases.atom",
"source": "https://github.com/laminas/laminas-escaper"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-02T17:10:53+00:00"
},
{
"name": "laminas/laminas-servicemanager",
"version": "3.14.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-servicemanager.git",
"reference": "918de970b2c3d42acebff3d431d76db52b6a32a2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/918de970b2c3d42acebff3d431d76db52b6a32a2",
"reference": "918de970b2c3d42acebff3d431d76db52b6a32a2",
"shasum": ""
},
"require": {
"laminas/laminas-stdlib": "^3.2.1",
"php": "~7.4.0 || ~8.0.0 || ~8.1.0",
"psr/container": "^1.0"
},
"conflict": {
"ext-psr": "*",
"laminas/laminas-code": "<3.3.1",
"zendframework/zend-code": "<3.3.1",
"zendframework/zend-servicemanager": "*"
},
"provide": {
"psr/container-implementation": "^1.0"
},
"replace": {
"container-interop/container-interop": "^1.2.0"
},
"require-dev": {
"composer/package-versions-deprecated": "^1.0",
"laminas/laminas-coding-standard": "~2.3.0",
"laminas/laminas-container-config-test": "^0.6",
"laminas/laminas-dependency-plugin": "^2.1.2",
"mikey179/vfsstream": "^1.6.10@alpha",
"ocramius/proxy-manager": "^2.11",
"phpbench/phpbench": "^1.1",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.5.5",
"psalm/plugin-phpunit": "^0.17.0",
"vimeo/psalm": "^4.8"
},
"suggest": {
"ocramius/proxy-manager": "ProxyManager ^2.1.1 to handle lazy initialization of services"
},
"bin": [
"bin/generate-deps-for-config-factory",
"bin/generate-factory-for-class"
],
"type": "library",
"autoload": {
"files": [
"src/autoload.php"
],
"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": "2022-07-07T16:13:26+00:00"
},
{
"name": "laminas/laminas-stdlib",
"version": "3.6.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-stdlib.git",
"reference": "c53d8537f108fac3fae652677a19735db730ba46"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-stdlib/zipball/c53d8537f108fac3fae652677a19735db730ba46",
"reference": "c53d8537f108fac3fae652677a19735db730ba46",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-stdlib": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.3.0",
"phpbench/phpbench": "^0.17.1",
"phpunit/phpunit": "~9.3.7",
"psalm/plugin-phpunit": "^0.16.0",
"vimeo/psalm": "^4.7"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Stdlib\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "SPL extensions, array utilities, error handlers, and more",
"homepage": "https://laminas.dev",
"keywords": [
"laminas",
"stdlib"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-stdlib/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-stdlib/issues",
"rss": "https://github.com/laminas/laminas-stdlib/releases.atom",
"source": "https://github.com/laminas/laminas-stdlib"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-02T16:11:32+00:00"
},
{
"name": "psr/container",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
"shasum": ""
},
"require": {
"php": ">=7.4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
"source": "https://github.com/php-fig/container/tree/1.1.2"
},
"time": "2021-11-05T16:50:12+00:00"
}
],
"packages-dev": [
{
"name": "amphp/amp",
"version": "v2.6.2",
"source": {
"type": "git",
"url": "https://github.com/amphp/amp.git",
"reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
"reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"amphp/php-cs-fixer-config": "dev-master",
"amphp/phpunit-util": "^1",
"ext-json": "*",
"jetbrains/phpstorm-stubs": "^2019.3",
"phpunit/phpunit": "^7 | ^8 | ^9",
"psalm/phar": "^3.11@dev",
"react/promise": "^2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
}
},
"autoload": {
"files": [
"lib/functions.php",
"lib/Internal/functions.php"
],
"psr-4": {
"Amp\\": "lib"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Daniel Lowrey",
"email": "rdlowrey@php.net"
},
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
},
{
"name": "Bob Weinand",
"email": "bobwei9@hotmail.com"
},
{
"name": "Niklas Keller",
"email": "me@kelunik.com"
}
],
"description": "A non-blocking concurrency framework for PHP applications.",
"homepage": "https://amphp.org/amp",
"keywords": [
"async",
"asynchronous",
"awaitable",
"concurrency",
"event",
"event-loop",
"future",
"non-blocking",
"promise"
],
"support": {
"irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/amp/issues",
"source": "https://github.com/amphp/amp/tree/v2.6.2"
},
"funding": [
{
"url": "https://github.com/amphp",
"type": "github"
}
],
"time": "2022-02-20T17:52:18+00:00"
},
{
"name": "amphp/byte-stream",
"version": "v1.8.1",
"source": {
"type": "git",
"url": "https://github.com/amphp/byte-stream.git",
"reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
"reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
"shasum": ""
},
"require": {
"amphp/amp": "^2",
"php": ">=7.1"
},
"require-dev": {
"amphp/php-cs-fixer-config": "dev-master",
"amphp/phpunit-util": "^1.4",
"friendsofphp/php-cs-fixer": "^2.3",
"jetbrains/phpstorm-stubs": "^2019.3",
"phpunit/phpunit": "^6 || ^7 || ^8",
"psalm/phar": "^3.11.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"files": [
"lib/functions.php"
],
"psr-4": {
"Amp\\ByteStream\\": "lib"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
},
{
"name": "Niklas Keller",
"email": "me@kelunik.com"
}
],
"description": "A stream abstraction to make working with non-blocking I/O simple.",
"homepage": "http://amphp.org/byte-stream",
"keywords": [
"amp",
"amphp",
"async",
"io",
"non-blocking",
"stream"
],
"support": {
"irc": "irc://irc.freenode.org/amphp",
"issues": "https://github.com/amphp/byte-stream/issues",
"source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
},
"funding": [
{
"url": "https://github.com/amphp",
"type": "github"
}
],
"time": "2021-03-30T17:13:30+00:00"
},
{
"name": "composer/package-versions-deprecated",
"version": "1.11.99.5",
"source": {
"type": "git",
"url": "https://github.com/composer/package-versions-deprecated.git",
"reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
"reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.1.0 || ^2.0",
"php": "^7 || ^8"
},
"replace": {
"ocramius/package-versions": "1.11.99"
},
"require-dev": {
"composer/composer": "^1.9.3 || ^2.0@dev",
"ext-zip": "^1.13",
"phpunit/phpunit": "^6.5 || ^7"
},
"type": "composer-plugin",
"extra": {
"class": "PackageVersions\\Installer",
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"support": {
"issues": "https://github.com/composer/package-versions-deprecated/issues",
"source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-01-17T14:14:24+00:00"
},
{
"name": "composer/pcre",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/composer/pcre.git",
"reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd",
"reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd",
"shasum": ""
},
"require": {
"php": "^7.4 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.3",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Pcre\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
"PCRE",
"preg",
"regex",
"regular expression"
],
"support": {
"issues": "https://github.com/composer/pcre/issues",
"source": "https://github.com/composer/pcre/tree/3.0.0"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-02-25T20:21:48+00:00"
},
{
"name": "composer/semver",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9",
"reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpstan/phpstan": "^1.4",
"symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Semver\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
},
{
"name": "Rob Bast",
"email": "rob.bast@gmail.com",
"homepage": "http://robbast.nl"
}
],
"description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": [
"semantic",
"semver",
"validation",
"versioning"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/semver/issues",
"source": "https://github.com/composer/semver/tree/3.3.2"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-04-01T19:23:25+00:00"
},
{
"name": "composer/xdebug-handler",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "ced299686f41dce890debac69273b47ffe98a40c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c",
"reference": "ced299686f41dce890debac69273b47ffe98a40c",
"shasum": ""
},
"require": {
"composer/pcre": "^1 || ^2 || ^3",
"php": "^7.2.5 || ^8.0",
"psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
"phpstan/phpstan": "^1.0",
"phpstan/phpstan-strict-rules": "^1.1",
"symfony/phpunit-bridge": "^6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Composer\\XdebugHandler\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "John Stevenson",
"email": "john-stevenson@blueyonder.co.uk"
}
],
"description": "Restarts a process without Xdebug.",
"keywords": [
"Xdebug",
"performance"
],
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
"source": "https://github.com/composer/xdebug-handler/tree/3.0.3"
},
"funding": [
{
"url": "https://packagist.com",
"type": "custom"
},
{
"url": "https://github.com/composer",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
"type": "tidelift"
}
],
"time": "2022-02-25T21:32:43+00:00"
},
{
"name": "dealerdirect/phpcodesniffer-composer-installer",
"version": "v0.7.2",
"source": {
"type": "git",
"url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
"reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
"reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
"shasum": ""
},
"require": {
"composer-plugin-api": "^1.0 || ^2.0",
"php": ">=5.3",
"squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
},
"require-dev": {
"composer/composer": "*",
"php-parallel-lint/php-parallel-lint": "^1.3.1",
"phpcompatibility/php-compatibility": "^9.0"
},
"type": "composer-plugin",
"extra": {
"class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
},
"autoload": {
"psr-4": {
"Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Franck Nijhof",
"email": "franck.nijhof@dealerdirect.com",
"homepage": "http://www.frenck.nl",
"role": "Developer / IT Manager"
},
{
"name": "Contributors",
"homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors"
}
],
"description": "PHP_CodeSniffer Standards Composer Installer Plugin",
"homepage": "http://www.dealerdirect.com",
"keywords": [
"PHPCodeSniffer",
"PHP_CodeSniffer",
"code quality",
"codesniffer",
"composer",
"installer",
"phpcbf",
"phpcs",
"plugin",
"qa",
"quality",
"standard",
"standards",
"style guide",
"stylecheck",
"tests"
],
"support": {
"issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
"source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
},
"time": "2022-02-04T12:51:07+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
"version": "v0.1.1",
"source": {
"type": "git",
"url": "https://github.com/dnoegel/php-xdg-base-dir.git",
"reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
"reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
},
"type": "library",
"autoload": {
"psr-4": {
"XdgBaseDir\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "implementation of xdg base directory specification for php",
"support": {
"issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
"source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
},
"time": "2019-12-04T15:06:13+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^8.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "https://ocramius.github.io/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
"constructor",
"instantiate"
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/1.4.0"
},
"funding": [
{
"url": "https://www.doctrine-project.org/sponsorship.html",
"type": "custom"
},
{
"url": "https://www.patreon.com/phpdoctrine",
"type": "patreon"
},
{
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
"type": "tidelift"
}
],
"time": "2020-11-10T18:47:58+00:00"
},
{
"name": "felixfbecker/advanced-json-rpc",
"version": "v3.2.1",
"source": {
"type": "git",
"url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
"reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
"reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
"shasum": ""
},
"require": {
"netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
"php": "^7.1 || ^8.0",
"phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
},
"require-dev": {
"phpunit/phpunit": "^7.0 || ^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
"AdvancedJsonRpc\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"ISC"
],
"authors": [
{
"name": "Felix Becker",
"email": "felix.b@outlook.com"
}
],
"description": "A more advanced JSONRPC implementation",
"support": {
"issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
"source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
},
"time": "2021-06-11T22:34:44+00:00"
},
{
"name": "felixfbecker/language-server-protocol",
"version": "v1.5.2",
"source": {
"type": "git",
"url": "https://github.com/felixfbecker/php-language-server-protocol.git",
"reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842",
"reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"require-dev": {
"phpstan/phpstan": "*",
"squizlabs/php_codesniffer": "^3.1",
"vimeo/psalm": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"LanguageServerProtocol\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"ISC"
],
"authors": [
{
"name": "Felix Becker",
"email": "felix.b@outlook.com"
}
],
"description": "PHP classes for the Language Server Protocol",
"keywords": [
"language",
"microsoft",
"php",
"server"
],
"support": {
"issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
"source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2"
},
"time": "2022-03-02T22:36:06+00:00"
},
{
"name": "laminas/laminas-cache",
"version": "3.1.3",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache.git",
"reference": "dfd5a66f6ea4b1979231560eb75b615c7aafe0e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache/zipball/dfd5a66f6ea4b1979231560eb75b615c7aafe0e6",
"reference": "dfd5a66f6ea4b1979231560eb75b615c7aafe0e6",
"shasum": ""
},
"require": {
"laminas/laminas-cache-storage-implementation": "1.0",
"laminas/laminas-eventmanager": "^3.4",
"laminas/laminas-servicemanager": "^3.7",
"laminas/laminas-stdlib": "^3.6",
"php": "^7.3 || ~8.0.0 || ~8.1.0",
"psr/cache": "^1.0",
"psr/simple-cache": "^1.0",
"webmozart/assert": "^1.9"
},
"conflict": {
"symfony/console": "<5.1"
},
"provide": {
"psr/cache-implementation": "1.0",
"psr/simple-cache-implementation": "1.0"
},
"require-dev": {
"laminas/laminas-cache-storage-adapter-apcu": "^2.0",
"laminas/laminas-cache-storage-adapter-blackhole": "^2.0",
"laminas/laminas-cache-storage-adapter-filesystem": "^2.0",
"laminas/laminas-cache-storage-adapter-memory": "^2.0",
"laminas/laminas-cache-storage-adapter-test": "^2.0",
"laminas/laminas-cli": "^1.0",
"laminas/laminas-coding-standard": "~2.2.0",
"laminas/laminas-config-aggregator": "^1.5",
"laminas/laminas-feed": "^2.14",
"laminas/laminas-serializer": "^2.6",
"phpbench/phpbench": "^1.0",
"phpunit/phpunit": "^9.5",
"psalm/plugin-phpunit": "^0.16.1",
"vimeo/psalm": "^4.9"
},
"suggest": {
"laminas/laminas-cache-storage-adapter-apcu": "APCu implementation",
"laminas/laminas-cache-storage-adapter-blackhole": "Blackhole/Void implementation",
"laminas/laminas-cache-storage-adapter-ext-mongodb": "MongoDB implementation",
"laminas/laminas-cache-storage-adapter-filesystem": "Filesystem implementation",
"laminas/laminas-cache-storage-adapter-memcached": "Memcached implementation",
"laminas/laminas-cache-storage-adapter-memory": "Memory implementation",
"laminas/laminas-cache-storage-adapter-redis": "Redis implementation",
"laminas/laminas-cache-storage-adapter-session": "Session implementation",
"laminas/laminas-cli": "The laminas-cli binary can be used to consume commands provided by this component",
"laminas/laminas-serializer": "Laminas\\Serializer component"
},
"type": "library",
"extra": {
"laminas": {
"component": "Laminas\\Cache",
"config-provider": "Laminas\\Cache\\ConfigProvider"
}
},
"autoload": {
"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": "2022-03-24T09:32:54+00:00"
},
{
"name": "laminas/laminas-cache-storage-adapter-memory",
"version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-cache-storage-adapter-memory.git",
"reference": "f47aed9d5f6f3eac5970693ea5898d67d3f33dcf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-cache-storage-adapter-memory/zipball/f47aed9d5f6f3eac5970693ea5898d67d3f33dcf",
"reference": "f47aed9d5f6f3eac5970693ea5898d67d3f33dcf",
"shasum": ""
},
"require": {
"laminas/laminas-cache": "^3.0",
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"provide": {
"laminas/laminas-cache-storage-implementation": "1.0"
},
"require-dev": {
"laminas/laminas-cache": "3.0.x-dev",
"laminas/laminas-cache-storage-adapter-benchmark": "^1.0",
"laminas/laminas-cache-storage-adapter-test": "2.0.x-dev",
"laminas/laminas-coding-standard": "~2.3.0",
"psalm/plugin-phpunit": "^0.16.1",
"vimeo/psalm": "^4.9"
},
"type": "library",
"extra": {
"laminas": {
"config-provider": "Laminas\\Cache\\Storage\\Adapter\\Memory\\ConfigProvider",
"module": "Laminas\\Cache\\Storage\\Adapter\\Memory"
}
},
"autoload": {
"psr-4": {
"Laminas\\Cache\\Storage\\Adapter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Laminas cache adapter for memory",
"keywords": [
"cache",
"laminas"
],
"support": {
"docs": "https://docs.laminas.dev/laminas-cache-storage-adapter-memory/",
"forum": "https://discourse.laminas.dev/",
"issues": "https://github.com/laminas/laminas-cache-storage-adapter-memory/issues",
"rss": "https://github.com/laminas/laminas-cache-storage-adapter-memory/releases.atom",
"source": "https://github.com/laminas/laminas-cache-storage-adapter-memory"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-11-08T22:17:24+00:00"
},
{
"name": "laminas/laminas-coding-standard",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-coding-standard.git",
"reference": "bcf6e07fe4690240be7beb6d884d0b0fafa6a251"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/bcf6e07fe4690240be7beb6d884d0b0fafa6a251",
"reference": "bcf6e07fe4690240be7beb6d884d0b0fafa6a251",
"shasum": ""
},
"require": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7",
"php": "^7.3 || ^8.0",
"slevomat/coding-standard": "^7.0",
"squizlabs/php_codesniffer": "^3.6",
"webimpress/coding-standard": "^1.2"
},
"type": "phpcodesniffer-standard",
"autoload": {
"psr-4": {
"LaminasCodingStandard\\": "src/LaminasCodingStandard/"
}
},
"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"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-05-29T15:53:59+00:00"
},
{
"name": "laminas/laminas-db",
"version": "2.13.3",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-db.git",
"reference": "e1bcf243f6e56f02590f11a149cd75403e873241"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-db/zipball/e1bcf243f6e56f02590f11a149cd75403e873241",
"reference": "e1bcf243f6e56f02590f11a149cd75403e873241",
"shasum": ""
},
"require": {
"laminas/laminas-stdlib": "^3.6",
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-db": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.2.1",
"laminas/laminas-eventmanager": "^3.4",
"laminas/laminas-hydrator": "^3.2 || ^4.3",
"laminas/laminas-servicemanager": "^3.7",
"phpunit/phpunit": "^9.5.5"
},
"suggest": {
"laminas/laminas-eventmanager": "Laminas\\EventManager component",
"laminas/laminas-hydrator": "(^3.2 || ^4.3) Laminas\\Hydrator component for using HydratingResultSets",
"laminas/laminas-servicemanager": "Laminas\\ServiceManager component"
},
"type": "library",
"extra": {
"laminas": {
"component": "Laminas\\Db",
"config-provider": "Laminas\\Db\\ConfigProvider"
}
},
"autoload": {
"psr-4": {
"Laminas\\Db\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Database abstraction layer, SQL abstraction, result set abstraction, and RowDataGateway and TableDataGateway implementations",
"homepage": "https://laminas.dev",
"keywords": [
"db",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-db/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-db/issues",
"rss": "https://github.com/laminas/laminas-db/releases.atom",
"source": "https://github.com/laminas/laminas-db"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-19T07:38:14+00:00"
},
{
"name": "laminas/laminas-eventmanager",
"version": "3.4.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-eventmanager.git",
"reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-eventmanager/zipball/a93fd278c97b2d41ebbce5ba048a24e3e6f580ba",
"reference": "a93fd278c97b2d41ebbce5ba048a24e3e6f580ba",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-eventmanager": "*"
},
"require-dev": {
"container-interop/container-interop": "^1.1",
"laminas/laminas-coding-standard": "~2.2.1",
"laminas/laminas-stdlib": "^3.6",
"phpbench/phpbench": "^1.1",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.5.5"
},
"suggest": {
"container-interop/container-interop": "^1.1, to use the lazy listeners feature",
"laminas/laminas-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\EventManager\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Trigger and listen to events within a PHP application",
"homepage": "https://laminas.dev",
"keywords": [
"event",
"eventmanager",
"events",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-eventmanager/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-eventmanager/issues",
"rss": "https://github.com/laminas/laminas-eventmanager/releases.atom",
"source": "https://github.com/laminas/laminas-eventmanager"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-07T22:35:32+00:00"
},
{
"name": "laminas/laminas-http",
"version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-http.git",
"reference": "e1f3420ab35e21ea135913d213b8d570e5e7b513"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-http/zipball/e1f3420ab35e21ea135913d213b8d570e5e7b513",
"reference": "e1f3420ab35e21ea135913d213b8d570e5e7b513",
"shasum": ""
},
"require": {
"laminas/laminas-loader": "^2.8",
"laminas/laminas-stdlib": "^3.6",
"laminas/laminas-uri": "^2.9.1",
"laminas/laminas-validator": "^2.15",
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-http": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.2.1",
"phpunit/phpunit": "^9.5.5"
},
"suggest": {
"paragonie/certainty": "For automated management of cacert.pem"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Http\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests",
"homepage": "https://laminas.dev",
"keywords": [
"http",
"http client",
"laminas"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-http/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-http/issues",
"rss": "https://github.com/laminas/laminas-http/releases.atom",
"source": "https://github.com/laminas/laminas-http"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-10T10:45:31+00:00"
},
{
"name": "laminas/laminas-loader",
"version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-loader.git",
"reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-loader/zipball/d0589ec9dd48365fd95ad10d1c906efd7711c16b",
"reference": "d0589ec9dd48365fd95ad10d1c906efd7711c16b",
"shasum": ""
},
"require": {
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-loader": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.2.1",
"phpunit/phpunit": "^9.3"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Loader\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Autoloading and plugin loading strategies",
"homepage": "https://laminas.dev",
"keywords": [
"laminas",
"loader"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-loader/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-loader/issues",
"rss": "https://github.com/laminas/laminas-loader/releases.atom",
"source": "https://github.com/laminas/laminas-loader"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-02T18:30:53+00:00"
},
{
"name": "laminas/laminas-uri",
"version": "2.9.1",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-uri.git",
"reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-uri/zipball/7e837dc15c8fd3949df7d1213246fd7c8640032b",
"reference": "7e837dc15c8fd3949df7d1213246fd7c8640032b",
"shasum": ""
},
"require": {
"laminas/laminas-escaper": "^2.9",
"laminas/laminas-validator": "^2.15",
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-uri": "*"
},
"require-dev": {
"laminas/laminas-coding-standard": "~2.2.1",
"phpunit/phpunit": "^9.5.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Laminas\\Uri\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "A component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)",
"homepage": "https://laminas.dev",
"keywords": [
"laminas",
"uri"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-uri/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-uri/issues",
"rss": "https://github.com/laminas/laminas-uri/releases.atom",
"source": "https://github.com/laminas/laminas-uri"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-09T18:37:15+00:00"
},
{
"name": "laminas/laminas-validator",
"version": "2.15.0",
"source": {
"type": "git",
"url": "https://github.com/laminas/laminas-validator.git",
"reference": "270380e87904f5a1a1fba3059989d4ca157e16a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laminas/laminas-validator/zipball/270380e87904f5a1a1fba3059989d4ca157e16a9",
"reference": "270380e87904f5a1a1fba3059989d4ca157e16a9",
"shasum": ""
},
"require": {
"container-interop/container-interop": "^1.1",
"laminas/laminas-stdlib": "^3.6",
"php": "^7.3 || ~8.0.0 || ~8.1.0"
},
"conflict": {
"zendframework/zend-validator": "*"
},
"require-dev": {
"laminas/laminas-cache": "^2.6.1",
"laminas/laminas-coding-standard": "~2.2.1",
"laminas/laminas-db": "^2.7",
"laminas/laminas-filter": "^2.6",
"laminas/laminas-http": "^2.14.2",
"laminas/laminas-i18n": "^2.6",
"laminas/laminas-math": "^2.6",
"laminas/laminas-servicemanager": "^2.7.11 || ^3.0.3",
"laminas/laminas-session": "^2.8",
"laminas/laminas-uri": "^2.7",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.5.5",
"psalm/plugin-phpunit": "^0.15.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0",
"psr/http-message": "^1.0",
"vimeo/psalm": "^4.3"
},
"suggest": {
"laminas/laminas-db": "Laminas\\Db component, required by the (No)RecordExists validator",
"laminas/laminas-filter": "Laminas\\Filter component, required by the Digits validator",
"laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages",
"laminas/laminas-i18n-resources": "Translations of validator messages",
"laminas/laminas-math": "Laminas\\Math component, required by the Csrf validator",
"laminas/laminas-servicemanager": "Laminas\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
"laminas/laminas-session": "Laminas\\Session component, ^2.8; required by the Csrf validator",
"laminas/laminas-uri": "Laminas\\Uri component, required by the Uri and Sitemap\\Loc validators",
"psr/http-message": "psr/http-message, required when validating PSR-7 UploadedFileInterface instances via the Upload and UploadFile validators"
},
"type": "library",
"extra": {
"laminas": {
"component": "Laminas\\Validator",
"config-provider": "Laminas\\Validator\\ConfigProvider"
}
},
"autoload": {
"psr-4": {
"Laminas\\Validator\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"description": "Validation classes for a wide range of domains, and the ability to chain validators to create complex validation criteria",
"homepage": "https://laminas.dev",
"keywords": [
"laminas",
"validator"
],
"support": {
"chat": "https://laminas.dev/chat",
"docs": "https://docs.laminas.dev/laminas-validator/",
"forum": "https://discourse.laminas.dev",
"issues": "https://github.com/laminas/laminas-validator/issues",
"rss": "https://github.com/laminas/laminas-validator/releases.atom",
"source": "https://github.com/laminas/laminas-validator"
},
"funding": [
{
"url": "https://funding.communitybridge.org/projects/laminas-project",
"type": "community_bridge"
}
],
"time": "2021-09-08T23:16:56+00:00"
},
{
"name": "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"
},
"require-dev": {
"doctrine/collections": "^1.0",
"doctrine/common": "^2.6",
"phpunit/phpunit": "^7.1"
},
"type": "library",
"autoload": {
"files": [
"src/DeepCopy/deep_copy.php"
],
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Create deep copies (clones) of your objects",
"keywords": [
"clone",
"copy",
"duplicate",
"object",
"object graph"
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
"source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
},
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
"type": "tidelift"
}
],
"time": "2020-11-13T09:40:50+00:00"
},
{
"name": "netresearch/jsonmapper",
"version": "v4.0.0",
"source": {
"type": "git",
"url": "https://github.com/cweiske/jsonmapper.git",
"reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
"reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*",
"php": ">=7.1"
},
"require-dev": {
"phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
"squizlabs/php_codesniffer": "~3.5"
},
"type": "library",
"autoload": {
"psr-0": {
"JsonMapper": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"OSL-3.0"
],
"authors": [
{
"name": "Christian Weiske",
"email": "cweiske@cweiske.de",
"homepage": "http://github.com/cweiske/jsonmapper/",
"role": "Developer"
}
],
"description": "Map nested JSON structures onto PHP classes",
"support": {
"email": "cweiske@cweiske.de",
"issues": "https://github.com/cweiske/jsonmapper/issues",
"source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0"
},
"time": "2020-12-01T19:48:11+00:00"
},
{
"name": "nikic/php-parser",
"version": "v4.14.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1",
"reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=7.0"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"bin": [
"bin/php-parse"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.9-dev"
}
},
"autoload": {
"psr-4": {
"PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0"
},
"time": "2022-05-31T20:59:12+00:00"
},
{
"name": "openlss/lib-array2xml",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/nullivex/lib-array2xml.git",
"reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
"reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"type": "library",
"autoload": {
"psr-0": {
"LSS": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Bryan Tong",
"email": "bryan@nullivex.com",
"homepage": "https://www.nullivex.com"
},
{
"name": "Tony Butler",
"email": "spudz76@gmail.com",
"homepage": "https://www.nullivex.com"
}
],
"description": "Array2XML conversion library credit to lalit.org",
"homepage": "https://www.nullivex.com",
"keywords": [
"array",
"array conversion",
"xml",
"xml conversion"
],
"support": {
"issues": "https://github.com/nullivex/lib-array2xml/issues",
"source": "https://github.com/nullivex/lib-array2xml/tree/master"
},
"time": "2019-03-29T20:06:56+00:00"
},
{
"name": "phar-io/manifest",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
"reference": "97803eca37d319dfa7826cc2437fc020857acb53"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
"reference": "97803eca37d319dfa7826cc2437fc020857acb53",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
"email": "arne@blankerts.de",
"role": "Developer"
},
{
"name": "Sebastian Heuer",
"email": "sebastian@phpeople.de",
"role": "Developer"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "Developer"
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
"support": {
"issues": "https://github.com/phar-io/manifest/issues",
"source": "https://github.com/phar-io/manifest/tree/2.0.3"
},
"time": "2021-07-20T11:28:43+00:00"
},
{
"name": "phar-io/version",
"version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/phar-io/version.git",
"reference": "bae7c545bef187884426f042434e561ab1ddb182"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
"reference": "bae7c545bef187884426f042434e561ab1ddb182",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
"email": "arne@blankerts.de",
"role": "Developer"
},
{
"name": "Sebastian Heuer",
"email": "sebastian@phpeople.de",
"role": "Developer"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "Developer"
}
],
"description": "Library for handling version information and constraints",
"support": {
"issues": "https://github.com/phar-io/version/issues",
"source": "https://github.com/phar-io/version/tree/3.1.0"
},
"time": "2021-02-23T14:00:09+00:00"
},
{
"name": "phpdocumentor/reflection-common",
"version": "2.2.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-2.x": "2.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jaap van Otterdijk",
"email": "opensource@ijaap.nl"
}
],
"description": "Common reflection classes used by phpdocumentor to reflect the code structure",
"homepage": "http://www.phpdoc.org",
"keywords": [
"FQSEN",
"phpDocumentor",
"phpdoc",
"reflection",
"static analysis"
],
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
"source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
},
"time": "2020-06-27T09:03:43+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "5.3.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
"shasum": ""
},
"require": {
"ext-filter": "*",
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.2",
"phpdocumentor/type-resolver": "^1.3",
"webmozart/assert": "^1.9.1"
},
"require-dev": {
"mockery/mockery": "~1.3.2",
"psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
},
{
"name": "Jaap van Otterdijk",
"email": "account@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
"support": {
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
},
"time": "2021-10-19T17:43:47+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.6.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "77a32518733312af16a44300404e945338981de3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3",
"reference": "77a32518733312af16a44300404e945338981de3",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "*",
"psalm/phar": "^4.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
}
],
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1"
},
"time": "2022-03-15T21:29:03+00:00"
},
{
"name": "phpspec/prophecy",
"version": "1.14.0",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
"reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.2",
"php": "^7.2 || ~8.0, <8.2",
"phpdocumentor/reflection-docblock": "^5.2",
"sebastian/comparator": "^3.0 || ^4.0",
"sebastian/recursion-context": "^3.0 || ^4.0"
},
"require-dev": {
"phpspec/phpspec": "^6.0 || ^7.0",
"phpunit/phpunit": "^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Prophecy\\": "src/Prophecy"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com",
"homepage": "http://everzet.com"
},
{
"name": "Marcello Duarte",
"email": "marcello.duarte@gmail.com"
}
],
"description": "Highly opinionated mocking framework for PHP 5.3+",
"homepage": "https://github.com/phpspec/prophecy",
"keywords": [
"Double",
"Dummy",
"fake",
"mock",
"spy",
"stub"
],
"support": {
"issues": "https://github.com/phpspec/prophecy/issues",
"source": "https://github.com/phpspec/prophecy/tree/1.14.0"
},
"time": "2021-09-10T09:02:12+00:00"
},
{
"name": "phpstan/phpdoc-parser",
"version": "1.6.4",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
"reference": "135607f9ccc297d6923d49c2bcf309f509413215"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/135607f9ccc297d6923d49c2bcf309f509413215",
"reference": "135607f9ccc297d6923d49c2bcf309f509413215",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "^1.5",
"phpstan/phpstan-phpunit": "^1.1",
"phpstan/phpstan-strict-rules": "^1.0",
"phpunit/phpunit": "^9.5",
"symfony/process": "^5.2"
},
"type": "library",
"autoload": {
"psr-4": {
"PHPStan\\PhpDocParser\\": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
"source": "https://github.com/phpstan/phpdoc-parser/tree/1.6.4"
},
"time": "2022-06-26T13:09:08+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218",
"reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
"nikic/php-parser": "^4.12.0",
"php": ">=7.3",
"phpunit/php-file-iterator": "^3.0.3",
"phpunit/php-text-template": "^2.0.2",
"sebastian/code-unit-reverse-lookup": "^2.0.2",
"sebastian/complexity": "^2.0",
"sebastian/environment": "^5.1.2",
"sebastian/lines-of-code": "^1.0.3",
"sebastian/version": "^3.0.1",
"theseer/tokenizer": "^1.2.0"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-pcov": "*",
"ext-xdebug": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "9.2-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
"keywords": [
"coverage",
"testing",
"xunit"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2021-09-17T05:39:03+00:00"
},
{
"name": "phpunit/php-file-iterator",
"version": "3.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
"reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
"filesystem",
"iterator"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
"source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T05:57:25+00:00"
},
{
"name": "phpunit/php-invoker",
"version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-invoker.git",
"reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
"reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"ext-pcntl": "*",
"phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-pcntl": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Invoke callables with a timeout",
"homepage": "https://github.com/sebastianbergmann/php-invoker/",
"keywords": [
"process"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-invoker/issues",
"source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T05:58:55+00:00"
},
{
"name": "phpunit/php-text-template",
"version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
"reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Simple template engine.",
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"keywords": [
"template"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-text-template/issues",
"source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T05:33:50+00:00"
},
{
"name": "phpunit/php-timer",
"version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
"reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Utility class for timing",
"homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
"timer"
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-timer/issues",
"source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:16:10+00:00"
},
{
"name": "phpunit/phpunit",
"version": "9.5.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b",
"reference": "ea8c2dfb1065eb35a79b3681eee6e6fb0a6f273b",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.3.1",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
"myclabs/deep-copy": "^1.10.1",
"phar-io/manifest": "^2.0.3",
"phar-io/version": "^3.0.2",
"php": ">=7.3",
"phpspec/prophecy": "^1.12.1",
"phpunit/php-code-coverage": "^9.2.3",
"phpunit/php-file-iterator": "^3.0.5",
"phpunit/php-invoker": "^3.1.1",
"phpunit/php-text-template": "^2.0.3",
"phpunit/php-timer": "^5.0.2",
"sebastian/cli-parser": "^1.0.1",
"sebastian/code-unit": "^1.0.6",
"sebastian/comparator": "^4.0.5",
"sebastian/diff": "^4.0.3",
"sebastian/environment": "^5.1.3",
"sebastian/exporter": "^4.0.3",
"sebastian/global-state": "^5.0.1",
"sebastian/object-enumerator": "^4.0.3",
"sebastian/resource-operations": "^3.0.3",
"sebastian/type": "^2.3.4",
"sebastian/version": "^3.0.2"
},
"require-dev": {
"ext-pdo": "*",
"phpspec/prophecy-phpunit": "^2.0.1"
},
"suggest": {
"ext-soap": "*",
"ext-xdebug": "*"
},
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "9.5-dev"
}
},
"autoload": {
"files": [
"src/Framework/Assert/Functions.php"
],
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.9"
},
"funding": [
{
"url": "https://phpunit.de/donate.html",
"type": "custom"
},
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2021-08-31T06:47:40+00:00"
},
{
"name": "psalm/plugin-phpunit",
"version": "0.17.0",
"source": {
"type": "git",
"url": "https://github.com/psalm/psalm-plugin-phpunit.git",
"reference": "45951541beef07e93e3ad197daf01da88e85c31d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/45951541beef07e93e3ad197daf01da88e85c31d",
"reference": "45951541beef07e93e3ad197daf01da88e85c31d",
"shasum": ""
},
"require": {
"composer/package-versions-deprecated": "^1.10",
"composer/semver": "^1.4 || ^2.0 || ^3.0",
"ext-simplexml": "*",
"php": "^7.1 || ^8.0",
"vimeo/psalm": "dev-master || dev-4.x || ^4.5"
},
"conflict": {
"phpunit/phpunit": "<7.5"
},
"require-dev": {
"codeception/codeception": "^4.0.3",
"php": "^7.3 || ^8.0",
"phpunit/phpunit": "^7.5 || ^8.0 || ^9.0",
"squizlabs/php_codesniffer": "^3.3.1",
"weirdan/codeception-psalm-module": "^0.11.0",
"weirdan/prophecy-shim": "^1.0 || ^2.0"
},
"type": "psalm-plugin",
"extra": {
"psalm": {
"pluginClass": "Psalm\\PhpUnitPlugin\\Plugin"
}
},
"autoload": {
"psr-4": {
"Psalm\\PhpUnitPlugin\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Matt Brown",
"email": "github@muglug.com"
}
],
"description": "Psalm plugin for PHPUnit",
"support": {
"issues": "https://github.com/psalm/psalm-plugin-phpunit/issues",
"source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.17.0"
},
"time": "2022-06-14T17:05:57+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/http-message",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
"reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"support": {
"source": "https://github.com/php-fig/http-message/tree/master"
},
"time": "2016-08-06T14:39:51+00:00"
},
{
"name": "psr/log",
"version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
"support": {
"source": "https://github.com/php-fig/log/tree/1.1.4"
},
"time": "2021-05-03T11:20:27+00:00"
},
{
"name": "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/cli-parser",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/cli-parser.git",
"reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
"reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library for parsing CLI options",
"homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
"issues": "https://github.com/sebastianbergmann/cli-parser/issues",
"source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T06:08:49+00:00"
},
{
"name": "sebastian/code-unit",
"version": "1.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit.git",
"reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
"reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Collection of value objects that represent the PHP code units",
"homepage": "https://github.com/sebastianbergmann/code-unit",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit/issues",
"source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:08:54+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
"reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
"reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Looks up which function or method a line of code belongs to",
"homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
"support": {
"issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
"source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T05:30:19+00:00"
},
{
"name": "sebastian/comparator",
"version": "4.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "55f4261989e546dc112258c7a75935a81a7ce382"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
"reference": "55f4261989e546dc112258c7a75935a81a7ce382",
"shasum": ""
},
"require": {
"php": ">=7.3",
"sebastian/diff": "^4.0",
"sebastian/exporter": "^4.0"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
}
],
"description": "Provides the functionality to compare PHP values for equality",
"homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
"equality"
],
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T15:49:45+00:00"
},
{
"name": "sebastian/complexity",
"version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
"shasum": ""
},
"require": {
"nikic/php-parser": "^4.7",
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library for calculating the complexity of PHP code units",
"homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T15:52:27+00:00"
},
{
"name": "sebastian/diff",
"version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
"reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3",
"symfony/process": "^4.2 || ^5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
}
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
"diff",
"udiff",
"unidiff",
"unified diff"
],
"support": {
"issues": "https://github.com/sebastianbergmann/diff/issues",
"source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:10:38+00:00"
},
{
"name": "sebastian/environment",
"version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "388b6ced16caa751030f6a69e588299fa09200ac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
"reference": "388b6ced16caa751030f6a69e588299fa09200ac",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.1-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Provides functionality to handle HHVM/PHP environments",
"homepage": "http://www.github.com/sebastianbergmann/environment",
"keywords": [
"Xdebug",
"environment",
"hhvm"
],
"support": {
"issues": "https://github.com/sebastianbergmann/environment/issues",
"source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T05:52:38+00:00"
},
{
"name": "sebastian/exporter",
"version": "4.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
"shasum": ""
},
"require": {
"php": ">=7.3",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
"homepage": "http://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
],
"support": {
"issues": "https://github.com/sebastianbergmann/exporter/issues",
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T05:24:23+00:00"
},
{
"name": "sebastian/global-state",
"version": "5.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
"shasum": ""
},
"require": {
"php": ">=7.3",
"sebastian/object-reflector": "^2.0",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"ext-dom": "*",
"phpunit/phpunit": "^9.3"
},
"suggest": {
"ext-uopz": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Snapshotting of global state",
"homepage": "http://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2021-06-11T13:31:12+00:00"
},
{
"name": "sebastian/lines-of-code",
"version": "1.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
"shasum": ""
},
"require": {
"nikic/php-parser": "^4.6",
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library for counting the lines of code in PHP source code",
"homepage": "https://github.com/sebastianbergmann/lines-of-code",
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-11-28T06:42:11+00:00"
},
{
"name": "sebastian/object-enumerator",
"version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
"reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
"reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
"shasum": ""
},
"require": {
"php": ">=7.3",
"sebastian/object-reflector": "^2.0",
"sebastian/recursion-context": "^4.0"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
"source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:12:34+00:00"
},
{
"name": "sebastian/object-reflector",
"version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-reflector.git",
"reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
"reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Allows reflection of object attributes, including inherited and non-public ones",
"homepage": "https://github.com/sebastianbergmann/object-reflector/",
"support": {
"issues": "https://github.com/sebastianbergmann/object-reflector/issues",
"source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:14:26+00:00"
},
{
"name": "sebastian/recursion-context",
"version": "4.0.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
"reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
}
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-10-26T13:17:30+00:00"
},
{
"name": "sebastian/resource-operations",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
"reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
"reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Provides a list of PHP built-in functions that operate on resources",
"homepage": "https://www.github.com/sebastianbergmann/resource-operations",
"support": {
"issues": "https://github.com/sebastianbergmann/resource-operations/issues",
"source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T06:45:17+00:00"
},
{
"name": "sebastian/type",
"version": "2.3.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
"reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
"reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"require-dev": {
"phpunit/phpunit": "^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Collection of value objects that represent the types of the PHP type system",
"homepage": "https://github.com/sebastianbergmann/type",
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2021-06-15T12:49:02+00:00"
},
{
"name": "sebastian/version",
"version": "3.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
"reference": "c6c1022351a901512170118436c764e473f6de8c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
"reference": "c6c1022351a901512170118436c764e473f6de8c",
"shasum": ""
},
"require": {
"php": ">=7.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
"support": {
"issues": "https://github.com/sebastianbergmann/version/issues",
"source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
}
],
"time": "2020-09-28T06:39:44+00:00"
},
{
"name": "slevomat/coding-standard",
"version": "7.2.1",
"source": {
"type": "git",
"url": "https://github.com/slevomat/coding-standard.git",
"reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slevomat/coding-standard/zipball/aff06ae7a84e4534bf6f821dc982a93a5d477c90",
"reference": "aff06ae7a84e4534bf6f821dc982a93a5d477c90",
"shasum": ""
},
"require": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
"php": "^7.2 || ^8.0",
"phpstan/phpdoc-parser": "^1.5.1",
"squizlabs/php_codesniffer": "^3.6.2"
},
"require-dev": {
"phing/phing": "2.17.3",
"php-parallel-lint/php-parallel-lint": "1.3.2",
"phpstan/phpstan": "1.4.10|1.7.1",
"phpstan/phpstan-deprecation-rules": "1.0.0",
"phpstan/phpstan-phpunit": "1.0.0|1.1.1",
"phpstan/phpstan-strict-rules": "1.2.3",
"phpunit/phpunit": "7.5.20|8.5.21|9.5.20"
},
"type": "phpcodesniffer-standard",
"extra": {
"branch-alias": {
"dev-master": "7.x-dev"
}
},
"autoload": {
"psr-4": {
"SlevomatCodingStandard\\": "SlevomatCodingStandard"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
"support": {
"issues": "https://github.com/slevomat/coding-standard/issues",
"source": "https://github.com/slevomat/coding-standard/tree/7.2.1"
},
"funding": [
{
"url": "https://github.com/kukulich",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
"type": "tidelift"
}
],
"time": "2022-05-25T10:58:12+00:00"
},
{
"name": "squizlabs/php_codesniffer",
"version": "3.7.1",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "1359e176e9307e906dc3d890bcc9603ff6d90619"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619",
"reference": "1359e176e9307e906dc3d890bcc9603ff6d90619",
"shasum": ""
},
"require": {
"ext-simplexml": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"bin": [
"bin/phpcs",
"bin/phpcbf"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.x-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Greg Sherwood",
"role": "lead"
}
],
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
"homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
"keywords": [
"phpcs",
"standards"
],
"support": {
"issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
"source": "https://github.com/squizlabs/PHP_CodeSniffer",
"wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
},
"time": "2022-06-18T07:21:10+00:00"
},
{
"name": "symfony/console",
"version": "v5.4.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "4d671ab4ddac94ee439ea73649c69d9d200b5000"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/4d671ab4ddac94ee439ea73649c69d9d200b5000",
"reference": "4d671ab4ddac94ee439ea73649c69d9d200b5000",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php73": "^1.9",
"symfony/polyfill-php80": "^1.16",
"symfony/service-contracts": "^1.1|^2|^3",
"symfony/string": "^5.1|^6.0"
},
"conflict": {
"psr/log": ">=3",
"symfony/dependency-injection": "<4.4",
"symfony/dotenv": "<5.1",
"symfony/event-dispatcher": "<4.4",
"symfony/lock": "<4.4",
"symfony/process": "<4.4"
},
"provide": {
"psr/log-implementation": "1.0|2.0"
},
"require-dev": {
"psr/log": "^1|^2",
"symfony/config": "^4.4|^5.0|^6.0",
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
"symfony/lock": "^4.4|^5.0|^6.0",
"symfony/process": "^4.4|^5.0|^6.0",
"symfony/var-dumper": "^4.4|^5.0|^6.0"
},
"suggest": {
"psr/log": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/lock": "",
"symfony/process": ""
},
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Eases the creation of beautiful and testable command line interfaces",
"homepage": "https://symfony.com",
"keywords": [
"cli",
"command line",
"console",
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v5.4.10"
},
"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": "2022-06-26T13:00:04+00:00"
},
{
"name": "symfony/deprecation-contracts",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"files": [
"function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2"
},
"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": "2022-01-02T09:53:40+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
"reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-ctype": "*"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"support": {
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-grapheme",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
"reference": "433d05519ce6990bf3530fba6957499d327395c2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2",
"reference": "433d05519ce6990bf3530fba6957499d327395c2",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's grapheme_* functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"grapheme",
"intl",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-intl-normalizer",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
"reference": "219aa369ceff116e673852dce47c3a41794c14bd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
"reference": "219aa369ceff116e673852dce47c3a41794c14bd",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's Normalizer class and related functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"intl",
"normalizer",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"provide": {
"ext-mbstring": "*"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php73",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php73.git",
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85",
"reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php73\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-24T11:49:31+00:00"
},
{
"name": "symfony/polyfill-php80",
"version": "v1.26.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.26-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php80\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ion Bazan",
"email": "ion.bazan@gmail.com"
},
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-05-10T07:21:04+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v2.5.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/container": "^1.1",
"symfony/deprecation-contracts": "^2.1|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
"suggest": {
"symfony/service-implementation": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "2.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Generic abstractions related to writing services",
"homepage": "https://symfony.com",
"keywords": [
"abstractions",
"contracts",
"decoupling",
"interfaces",
"interoperability",
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v2.5.2"
},
"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": "2022-05-30T19:17:29+00:00"
},
{
"name": "symfony/string",
"version": "v5.4.10",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "4432bc7df82a554b3e413a8570ce2fea90e94097"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/4432bc7df82a554b3e413a8570ce2fea90e94097",
"reference": "4432bc7df82a554b3e413a8570ce2fea90e94097",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/polyfill-ctype": "~1.8",
"symfony/polyfill-intl-grapheme": "~1.0",
"symfony/polyfill-intl-normalizer": "~1.0",
"symfony/polyfill-mbstring": "~1.0",
"symfony/polyfill-php80": "~1.15"
},
"conflict": {
"symfony/translation-contracts": ">=3.0"
},
"require-dev": {
"symfony/error-handler": "^4.4|^5.0|^6.0",
"symfony/http-client": "^4.4|^5.0|^6.0",
"symfony/translation-contracts": "^1.1|^2",
"symfony/var-exporter": "^4.4|^5.0|^6.0"
},
"type": "library",
"autoload": {
"files": [
"Resources/functions.php"
],
"psr-4": {
"Symfony\\Component\\String\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
"homepage": "https://symfony.com",
"keywords": [
"grapheme",
"i18n",
"string",
"unicode",
"utf-8",
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v5.4.10"
},
"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": "2022-06-26T15:57:47+00:00"
},
{
"name": "theseer/tokenizer",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
"reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
"reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
"php": "^7.2 || ^8.0"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Arne Blankerts",
"email": "arne@blankerts.de",
"role": "Developer"
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
"source": "https://github.com/theseer/tokenizer/tree/1.2.1"
},
"funding": [
{
"url": "https://github.com/theseer",
"type": "github"
}
],
"time": "2021-07-28T10:34:58+00:00"
},
{
"name": "vimeo/psalm",
"version": "4.24.0",
"source": {
"type": "git",
"url": "https://github.com/vimeo/psalm.git",
"reference": "06dd975cb55d36af80f242561738f16c5f58264f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vimeo/psalm/zipball/06dd975cb55d36af80f242561738f16c5f58264f",
"reference": "06dd975cb55d36af80f242561738f16c5f58264f",
"shasum": ""
},
"require": {
"amphp/amp": "^2.4.2",
"amphp/byte-stream": "^1.5",
"composer/package-versions-deprecated": "^1.8.0",
"composer/semver": "^1.4 || ^2.0 || ^3.0",
"composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0",
"dnoegel/php-xdg-base-dir": "^0.1.1",
"ext-ctype": "*",
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-simplexml": "*",
"ext-tokenizer": "*",
"felixfbecker/advanced-json-rpc": "^3.0.3",
"felixfbecker/language-server-protocol": "^1.5",
"netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
"nikic/php-parser": "^4.13",
"openlss/lib-array2xml": "^1.0",
"php": "^7.1|^8",
"sebastian/diff": "^3.0 || ^4.0",
"symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0",
"symfony/polyfill-php80": "^1.25",
"webmozart/path-util": "^2.3"
},
"provide": {
"psalm/psalm": "self.version"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.2",
"brianium/paratest": "^4.0||^6.0",
"ext-curl": "*",
"php-parallel-lint/php-parallel-lint": "^1.2",
"phpdocumentor/reflection-docblock": "^5",
"phpmyadmin/sql-parser": "5.1.0||dev-master",
"phpspec/prophecy": ">=1.9.0",
"phpunit/phpunit": "^9.0",
"psalm/plugin-phpunit": "^0.16",
"slevomat/coding-standard": "^7.0",
"squizlabs/php_codesniffer": "^3.5",
"symfony/process": "^4.3 || ^5.0 || ^6.0",
"weirdan/prophecy-shim": "^1.0 || ^2.0"
},
"suggest": {
"ext-curl": "In order to send data to shepherd",
"ext-igbinary": "^2.0.5 is required, used to serialize caching data"
},
"bin": [
"psalm",
"psalm-language-server",
"psalm-plugin",
"psalm-refactor",
"psalter"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.x-dev",
"dev-3.x": "3.x-dev",
"dev-2.x": "2.x-dev",
"dev-1.x": "1.x-dev"
}
},
"autoload": {
"files": [
"src/functions.php",
"src/spl_object_id.php"
],
"psr-4": {
"Psalm\\": "src/Psalm/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Matthew Brown"
}
],
"description": "A static analysis tool for finding errors in PHP applications",
"keywords": [
"code",
"inspection",
"php"
],
"support": {
"issues": "https://github.com/vimeo/psalm/issues",
"source": "https://github.com/vimeo/psalm/tree/4.24.0"
},
"time": "2022-06-26T11:47:54+00:00"
},
{
"name": "webimpress/coding-standard",
"version": "1.2.4",
"source": {
"type": "git",
"url": "https://github.com/webimpress/coding-standard.git",
"reference": "cd0c4b0b97440c337c1f7da17b524674ca2f9ca9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webimpress/coding-standard/zipball/cd0c4b0b97440c337c1f7da17b524674ca2f9ca9",
"reference": "cd0c4b0b97440c337c1f7da17b524674ca2f9ca9",
"shasum": ""
},
"require": {
"php": "^7.3 || ^8.0",
"squizlabs/php_codesniffer": "^3.6.2"
},
"require-dev": {
"phpunit/phpunit": "^9.5.13"
},
"type": "phpcodesniffer-standard",
"extra": {
"dev-master": "1.2.x-dev",
"dev-develop": "1.3.x-dev"
},
"autoload": {
"psr-4": {
"WebimpressCodingStandard\\": "src/WebimpressCodingStandard/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"description": "Webimpress Coding Standard",
"keywords": [
"Coding Standard",
"PSR-2",
"phpcs",
"psr-12",
"webimpress"
],
"support": {
"issues": "https://github.com/webimpress/coding-standard/issues",
"source": "https://github.com/webimpress/coding-standard/tree/1.2.4"
},
"funding": [
{
"url": "https://github.com/michalbundyra",
"type": "github"
}
],
"time": "2022-02-15T19:52:12+00:00"
},
{
"name": "webmozart/assert",
"version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
"reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"php": "^7.2 || ^8.0"
},
"conflict": {
"phpstan/phpstan": "<0.12.20",
"vimeo/psalm": "<4.6.1 || 4.6.2"
},
"require-dev": {
"phpunit/phpunit": "^8.5.13"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
"keywords": [
"assert",
"check",
"validate"
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
"source": "https://github.com/webmozarts/assert/tree/1.11.0"
},
"time": "2022-06-03T18:03:27+00:00"
},
{
"name": "webmozart/path-util",
"version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/path-util.git",
"reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
"reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"webmozart/assert": "~1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.6",
"sebastian/version": "^1.0.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3-dev"
}
},
"autoload": {
"psr-4": {
"Webmozart\\PathUtil\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
}
],
"description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
"support": {
"issues": "https://github.com/webmozart/path-util/issues",
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
},
"abandoned": "symfony/filesystem",
"time": "2015-12-17T08:42:14+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": "^7.4 || ~8.0.0 || ~8.1.0",
"ext-dom": "*",
"ext-libxml": "*"
},
"platform-dev": [],
"platform-overrides": {
"php": "7.4.99"
},
"plugin-api-version": "2.3.0"
}
PK ]T<8 psalm-baseline.xmlnu ٘
$this->httpResponse === null
$this->storage === null
is_array($options)
$callbackUrl
$callbackUrl
$name
$options['storage']
$callbackUrl
$callbackUrl
$https
$https
$iisUrlRewritten
$name
$unencodedUrl
bool|string
string
string
string
string
$_SERVER['QUERY_STRING']
$callbackUrl
$_SERVER[$temp]
$_SERVER[$temp]
$_SERVER['HTTP_HOST']
$callbackUrl
$callbackUrl
$headers[$header]
$name
$unencodedUrl
$httpResponse
$storage
is_array($options)
handle
setHttpResponse
! is_int($code)
strlen($content)
$header['replace']
$header['replace']
$header['name']
$header['name']
$header['name']
$header['name']
$header['replace']
$header['replace']
$header['value']
$header['value']
$header['value']
$header
$header
$header
string|null
$header['name']
$header['name']
$header['value']
$header['value']
$header['value']
(string) $content
(string) $name
(string) $value
null
! is_string($key)
! is_string($key)
null === $this->now
false
$data
$data
$data['created_time']
array
getArrayCopy
$data['lease_seconds']
$result->current()->getArrayCopy()
$now
null === static::$escaper
array<array-key, mixed>|null
$feed->getHubs()
$source instanceof Reader\Feed\AbstractFeed
getHubs
! is_string($name)
! is_string($name)
! is_string($url)
! is_string($url)
! is_string($url)
! is_string($value)
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
is_array($options)
$options['hubUrls']
$options['parameters']
$options['updatedTopicUrls']
$topicUrl
$url
$url
$url
$value
$value
$name
$name
$topicUrl
$url
$url
$url
$value
$value
$response->getContent()
! is_string($name)
! is_string($name)
! is_string($url)
! is_string($url)
! is_string($url)
! is_string($url)
! is_string($value)
$this->storage === null
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
is_array($options)
$bool
setTestStaticToken
$auth[0]
$auth[1]
$authentication
$duplicateKey
$options['authentications']
$options['callbackUrl']
$options['hubUrls']
$options['leaseSeconds']
$options['parameters']
$options['preferredVerificationMode']
$options['storage']
$options['topicUrl']
$options['usePathParameter']
$url
$url
$url
$url
$value
$value
$key
$key
$name
$url
uksort($params, 'strnatcmp')
$auth[0]
$auth[1]
$auth
$authentication
$duplicateKey
$keyduplicate
$params[$name]
$url
$url
$value
$value
$value
$value
$keyduplicate
$params['hub.lease_seconds']
$params['hub.topic']
$value
false
$params['hub.verify_token']
$leaseSeconds
$storage
(string) $token
$this->getLeaseSeconds() !== null
$this->feedUpdate === null
$this->getSubscriberCount()
$_SERVER['REQUEST_METHOD']
$_SERVER['REQUEST_METHOD']
$httpGetData['hub_challenge']
$httpGetData['hub_mode']
$httpGetData['hub_mode']
$httpGetData['hub_topic']
$httpGetData['hub_verify_token']
$params['xhub.subscription']
$queryString
$data['lease_seconds']
$queryString
$verifyToken
false|string
$httpGetData['xhub_subscription']
$httpGetData
$this->_getRawBody()
$verifyTokenKey
$contentType
$contentType
$contentType
$contentType
$contentType
$httpGetData['hub_verify_token']
$httpGetData['hub_verify_token']
setHeader
$currentSubscriptionData
$feedUpdate
Callback
Callback
! $this->xpath
$this->xpath
$entry
$all['core']
$extension
$this->extensions[$extension]
$className
$extension
$extension
$feed
null|Extension\AbstractEntry
string
getClassName
$this->data['type']
$this->extensions[$name . '\Entry']
$entry->ownerDocument
$xpath
Reader::getPluginLoader()
$this->key()
indexEntries
loadExtensions
registerNamespaces
$all['core']
$extension
$extension
$this->entries[$this->key()]
$this->entries[$this->key()]
$this->extensions[$extension]
$extension
$extension
$feed
$plugin
string
setDomDocument
setType
setXpath
$this->data['type']
$originalSourceUri
$element['name']
$authors[]
$element
$element['term']
$categories[]
$categories[]
$element
! $this->xpath
$this->xpath
$all['core']
$extension
$extension
$this->extensions[$extension]
$extension
$extension
$feed
$plugin
string
setEntryElement
setEntryKey
setType
$this->data['type']
$entry->ownerDocument
$xpath
null|string
void
string
$extension
$extension
AuthorCollection
Reader\Collection\Category
array
int
null|DateTime
null|DateTime
null|Reader\Feed\Atom\Source
null|object{href: string, length: int, type: string}
null|string
string
string
string
string
string
string
setEntryElement
setEntryKey
setType
setXpath
$this->data['authors']
$this->data['categories']
$this->data['commentcount']
$this->data['commentfeedlink']
$this->data['commentlink']
$this->data['content']
$this->data['datecreated']
$this->data['datemodified']
$this->data['description']
$this->data['enclosure']
$this->data['id']
$this->data['links']
$this->data['source']
$this->data['title']
null|array<string, string>
$this->getLink(0)
Atom
null|string
null|string
void
string
$this->data['authors']
$entryKey
$dateModified
$dateModified
$author['name']
$author
$commentlink
$dateModified
$description
$extension
$extension
$id
$title
DateTime
Reader\Collection\Category
array
int
null|array
null|object{url?: string, href?: string, length: int, type: string}
null|string
null|string
string
string
string
string
string
setEntryElement
setEntryKey
setType
setXpath
$this->data['authors']
$this->data['categories']
$this->data['commentcount']
$this->data['commentfeedlink']
$this->data['commentlink']
$this->data['commentlink']
$this->data['content']
$this->data['datemodified']
$this->data['description']
$this->data['enclosure']
$this->data['id']
$this->data['id']
$this->data['links']
$this->data['title']
null|array<string, string>
$this->data['commentfeedlink']
$this->data['commentlink']
$this->data['datemodified']
$this->data['id']
$this->getLink(0)
$author->nodeValue
$standard
Rss
getAttribute
! $this->xpath
$this->xpath
null === $type
$this->getEntryElement()
$entryKey
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$type
string
$type
$entry->ownerDocument
(int) $this->entryKey
(int) $this->entryKey
(int) $this->entryKey
null === $this->xpath
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$domDocument
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
$xpath
registerNamespaces
$type
string
$type
null
$author
$element
$content ?? ''
$dateCreated
$dateModified
$link
$link
$link->value
$baseUrl
$baseUrl
$content
$count
$dateCreated
$dateCreated
$dateModified
$dateModified
$description
$id
$link
$link
$title
$type
Collection\Author
Collection\Category
array
int
null|DateTime
null|DateTime
null|Reader\Feed\Atom\Source
null|object{href: string, length: int, type: string}
null|string
string
string
string
string
string
string
$this->data['authors']
$this->data['baseUrl']
$this->data['baseUrl']
$this->data['categories']
$this->data['commentcount']
$this->data['commentcount']
$this->data['commentfeedlink']
$this->data['commentlink']
$this->data['content']
$this->data['datecreated']
$this->data['datemodified']
$this->data['description']
$this->data['description']
$this->data['enclosure']
$this->data['id']
$this->data['id']
$this->data['links']
$this->data['source']
$this->data['title']
$this->data['commentfeedlink']
$this->data['commentlink']
$this->data['description']
$this->data['id']
$this->data['title']
$this->getBaseUrl()
getAttribute
getAttribute
getAttribute
getAttribute
$link->value
$list->item(0)->value
$list->item(0)->value
$list->item(0)->value
$author
$dateCreated
$dateModified
$link
$baseUrl
$copyright
$dateCreated
$dateCreated
$dateModified
$dateModified
$description
$generator
$id
$imageUrl
$language
$language
$link
$title
Collection\Author
Collection\Category
null|DateTime
null|DateTime
null|array
null|array
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
$this->data['authors']
$this->data['baseUrl']
$this->data['baseUrl']
$this->data['categories']
$this->data['copyright']
$this->data['datecreated']
$this->data['datemodified']
$this->data['description']
$this->data['feedlink']
$this->data['generator']
$this->data['generator']
$this->data['hubs']
$this->data['id']
$this->data['id']
$this->data['image']
$this->data['language']
$this->data['language']
$this->data['link']
$this->data['title']
$this->data['title']
$uri->nodeValue
$this->getBaseUrl()
getAttribute
getAttribute
getAttribute
string
$this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)')
$this->xpath->evaluate('string(' . $this->getXpathPrefix() . '/content:encoded)')
$list
array
$this->data[$name]
$license
$licenses[]
$list
array
$license->nodeValue
$list->length
$this->data[$name]
$this->data['authors']
$date
$date
$date
$description
$description
$id
$id
$list
$list
$list
$list
$list
$list
$title
$title
Collection\Category
array
null|DateTime
string
string
string
$this->data['authors']
$this->data['categories']
$this->data['date']
$this->data['description']
$this->data['description']
$this->data['id']
$this->data['id']
$this->data['title']
$this->data['title']
null|array<string, string>
$this->data['authors']
$this->data['description']
$this->data['title']
$this->data['authors']
$date
$copyright
$copyright
$date
$date
$description
$description
$id
$id
$language
$language
$list
$list
$title
$title
Collection\Category
array
null|DateTime
null|string
null|string
null|string
null|string
null|string
$this->data['authors']
$this->data['categories']
$this->data['copyright']
$this->data['copyright']
$this->data['date']
$this->data['description']
$this->data['description']
$this->data['id']
$this->data['id']
$this->data['language']
$this->data['language']
$this->data['title']
$this->data['title']
$this->data['authors']
$block
$description
$explicit
string
string
string
$this->data['block']
$this->data['block']
$this->data['description']
$this->data['description']
$this->data['explicit']
$this->data['explicit']
$this->data['block']
$this->data['description']
$this->data['explicit']
$author
$block
$description
$explicit
$image
null|array
string
string
string
string
string
$this->data['author']
$this->data['author']
$this->data['block']
$this->data['block']
$this->data['categories']
$this->data['description']
$this->data['description']
$this->data['explicit']
$this->data['explicit']
$this->data['image']
$this->data['image']
$this->data['author']
$this->data['block']
$this->data['description']
$this->data['explicit']
$this->data['image']
getAttribute
getAttribute
$author
$block
$duration
$episode
$explicit
$image
$keywords
$season
$status
$subtitle
$summary
$title
$type
bool
null|int
null|int
string
string
string
string
string
string
string
string
string
string
$this->data['author']
$this->data['author']
$this->data['block']
$this->data['block']
$this->data['duration']
$this->data['duration']
$this->data['episode']
$this->data['episodeType']
$this->data['explicit']
$this->data['explicit']
$this->data['image']
$this->data['image']
$this->data['isClosedCaptioned']
$this->data['keywords']
$this->data['keywords']
$this->data['season']
$this->data['subtitle']
$this->data['subtitle']
$this->data['summary']
$this->data['summary']
$this->data['title']
$this->data['title']
$this->data['author']
$this->data['block']
$this->data['duration']
$this->data['explicit']
$this->data['image']
$this->data['keywords']
$this->data['subtitle']
$this->data['summary']
$this->data['title']
$author
$block
$complete
$email
$explicit
$image
$keywords
$name
$newFeedUrl
$owner
$subtitle
$summary
$type
bool
null|array
string
string
string
string
string
string
string
string
string
string
$email
$name
$this->data['author']
$this->data['author']
$this->data['block']
$this->data['block']
$this->data['categories']
$this->data['complete']
$this->data['explicit']
$this->data['explicit']
$this->data['image']
$this->data['image']
$this->data['keywords']
$this->data['keywords']
$this->data['new-feed-url']
$this->data['new-feed-url']
$this->data['owner']
$this->data['owner']
$this->data['podcastType']
$this->data['subtitle']
$this->data['subtitle']
$this->data['summary']
$this->data['summary']
$this->data['author']
$this->data['block']
$this->data['explicit']
$this->data['image']
$this->data['keywords']
$this->data['new-feed-url']
$this->data['owner']
$this->data['subtitle']
$this->data['summary']
getAttribute
getAttribute
null|object{url: string, type: string, language: string, rel: string}
null|object{url: string, type: string}
array<int, object{title: string, startTime: string, duration: string}>
null|object{url: string, type: string, language: string, rel: string}
null|object{url: string, type: string}
$this->data['soundbites']
null|object{url: string, title: string}
$locked
$owner
?string
bool
null|object{url: string, title: string}
$this->data['locked']
$this->data['owner']
$this->data['owner']
$hit
$stringParade
$comments
$data
$stringParade
array
int
null|string
null|string
$comments
$this->data[$name]
$this->data[$name]
$this->getData('department')
$this->getData('section')
$this->data[$name]
$updateBase
$data
$freq
$freq
$period
$updateBase
int
int
string
$freq
$freq
$period
$ticks / $freq
$data
null|int
$this->getData('total')
$data
null|string
$data
$this->data[$name]
ExtensionManager
Extension\AbstractEntry|Extension\AbstractFeed
$this->pluginManager->get($extension)
ExtensionPluginManager
$this->key()
indexEntries
loadExtensions
registerNamespaces
$all['core']
$extension
$extension
$extension
$extension
$this->entries[$this->key()]
$this->entries[$this->key()]
$this->extensions[$extension]
$extension
$extension
$feed
$plugin
null|Reader\Extension\AbstractFeed
string
setDomDocument
setType
setXpath
$this->data['type']
$this->extensions[$name . '\\Feed']
$originalSourceUri
null|array<string, string>
$categoryCollection
$this->entries[$index]
$atomFeed
$atomFeed
$authors
$baseUrl
$categoryCollection
$categoryCollection
$copyright
$dateCreated
$dateModified
$description
$entries
$entry
$extension
$generator
$hubs
$id
$index
$language
$language
$link
$link
$link
$title
Reader\Collection\Category
array
null|DateTime
null|DateTime
null|array
null|array
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
setDomDocument
setDomDocument
setType
setType
setXpath
setXpath
setXpathPrefix
$this->data['authors']
$this->data['authors']
$this->data['baseUrl']
$this->data['baseUrl']
$this->data['categories']
$this->data['categories']
$this->data['copyright']
$this->data['copyright']
$this->data['datecreated']
$this->data['datecreated']
$this->data['datemodified']
$this->data['datemodified']
$this->data['description']
$this->data['description']
$this->data['feedlink']
$this->data['feedlink']
$this->data['generator']
$this->data['generator']
$this->data['hubs']
$this->data['hubs']
$this->data['id']
$this->data['id']
$this->data['image']
$this->data['image']
$this->data['language']
$this->data['language']
$this->data['link']
$this->data['link']
$this->data['title']
$this->data['title']
null|array<string, string>
getAuthors
getBaseUrl
getCategories
getCategories
getCopyright
getDateCreated
getDateModified
getDescription
getFeedLink
getGenerator
getHubs
getId
getImage
getLanguage
getLink
getTitle
Atom
getAuthors
getBaseUrl
getCategories
getCategories
getCopyright
getDateCreated
getDateModified
getDescription
getFeedLink
getGenerator
getHubs
getId
getImage
getLanguage
getLink
getTitle
void
void
void
void
$extension
$extension
setDomDocument
setType
setXpath
setXpathPrefix
$this->domDocument
$source->ownerDocument
Source
null|array<string, string>
$lastBuildDateParsed
$authors
$categoryCollection
$dateModified
$dateModified
$hubs
$lastBuildDate
$author['name']
$this->entries[$index]
$author
$authors
$authorsDc
$categoryCollection
$categoryCollection
$copyright
$copyright
$copyright
$date
$date
$dateModified
$dateModified
$description
$description
$description
$description
$entries
$entries
$entry
$extension
$feed
$feed
$generator
$generator
$generator
$generator
$hubs
$id
$id
$id
$image['description']
$image['height']
$image['link']
$image['title']
$image['uri']
$image['width']
$index
$language
$language
$language
$language
$lastBuildDate
$link
$link
$link
$link
$title
$title
$title
$title
$value
$value
$value
$value
$value
$value
DateTime
DateTime
Reader\Collection\Category
array
null|array
null|array
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
setDomDocument
setDomDocument
setType
setType
setXpath
setXpath
setXpathPrefix
$this->data['authors']
$this->data['authors']
$this->data['categories']
$this->data['categories']
$this->data['copyright']
$this->data['copyright']
$this->data['datemodified']
$this->data['datemodified']
$this->data['description']
$this->data['description']
$this->data['feedlink']
$this->data['feedlink']
$this->data['generator']
$this->data['generator']
$this->data['hubs']
$this->data['id']
$this->data['id']
$this->data['image']
$this->data['language']
$this->data['language']
$this->data['lastBuildDate']
$this->data['link']
$this->data['link']
$this->data['title']
$this->data['title']
null|array<string, string>
$this->data['authors']
$this->data['datemodified']
$this->data['lastBuildDate']
$author->nodeValue
$standard
getAuthors
getAuthors
getCategories
getCategories
getCopyright
getCopyright
getDate
getDateModified
getDescription
getDescription
getFeedLink
getGenerator
getHubs
getId
getId
getLanguage
getLanguage
getLink
getTitle
getTitle
Rss
getAttribute
getAuthors
getAuthors
getCategories
getCategories
getCopyright
getCopyright
getDate
getDateModified
getDescription
getDescription
getFeedLink
getGenerator
getHubs
getId
getId
getLanguage
getLanguage
getLink
getTitle
getTitle
$this->offsetGet('href')
$value
$value
$normalized[$name]
$value
$value
addHeaderLine
addHeaderLine
getHeaderLine
$default
$default
! is_numeric($statusCode)
is_object($statusCode)
is_string($statusCode)
$statusCode
$statusCode
$name
$normalized[strtolower($name)]
$value
getHeaderLine
$this->headers[$normalizedName] ?? $default
$this->headers[$normalizedName] ?? $default
$body
(int) $statusCode
gettype($statusCode)
trim($responseHtml)
trim($string)
ExtensionManagerInterface
ExtensionManagerInterface
null|ExtensionManagerInterface
! static::$httpClient
gettype($response)
static::$httpClient
Feed\FeedInterface
$reader
Feed\FeedInterface
$data
$responseXml
$value
$version
$data
$data
$etag
$lastModified
$responseXml
$value
$value
$value
$version
(int) $response->getStatusCode()
(int) $response->getStatusCode()
(int) $response->getStatusCode()
$cache
$cache
is_object($response)
is_string($feed)
static::$httpConditionalGet && $cache
get
! is_string($string)
setOriginalSourceUri
setOriginalSourceUri
$phpErrormsg
StandaloneExtensionManager
new $class()
new $class()
Extension\AbstractEntry|Extension\AbstractFeed
is_string($class)
string
string
string
$this->host
$this->path
$this->scheme
new static($uri)
! is_string($copyright)
! is_string($description)
! is_string($encoding)
! is_string($id)
! is_string($language)
! is_string($link)
! is_string($link)
! is_string($name)
! is_string($title)
! is_string($uri)
! is_string($url)
! is_string($url)
! is_string($version)
empty($id) || ! is_string($id)
empty($link) || ! is_string($link)
empty($link) || ! is_string($link)
empty($uri) || ! is_string($uri)
empty($url) || ! is_string($url)
empty($url) || ! is_string($url)
$author
$category
$ext
$ext
$ext
$url
$this->data['authors'][]
$this->data['categories'][]
$this->data['feedLinks'][strtolower($type)]
$this->data['hubs'][]
$this->extensions[$ext]
$author
$category
$ext
$exts
$url
null|array
null|array
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
null|string
setEncoding
$this->extensions
$this->data['authors']
$this->data['authors'][$index]
$this->data['baseUrl']
$this->data['categories']
$this->data['copyright']
$this->data['dateCreated']
$this->data['dateModified']
$this->data['description']
$this->data['encoding']
$this->data['feedLinks']
$this->data['generator']
$this->data['hubs']
$this->data['id']
$this->data['image']
$this->data['language']
$this->data['lastBuildDate']
$this->data['link']
$this->data['title']
$extensions
$type
! is_string($reference)
$type
DateTime
null|string
null|string
null|string
string
$this->data['by']
$this->data['comment']
$this->data['encoding']
$this->data['reference']
$this->data['when']
! is_string($content)
! is_string($copyright)
! is_string($description)
! is_string($encoding)
! is_string($id)
! is_string($link)
! is_string($link)
! is_string($title)
empty($link) || ! is_string($link)
empty($link) || ! is_string($link)
$author
$category
$enclosure['uri']
$ext
$link
$this->data['authors'][]
$this->data['categories'][]
$this->data['commentFeedLinks'][]
$this->extensions[$ext]
$author
$category
$ext
$extension
$exts
$link
array
array
array
int
null|string
null|string
null|string
string
string
string
string
string
string
string
string
string
setEncoding
$this->data['authors']
$this->data['categories']
$this->data['commentCount']
$this->data['commentFeedLinks']
$this->data['commentLink']
$this->data['content']
$this->data['copyright']
$this->data['dateCreated']
$this->data['dateModified']
$this->data['description']
$this->data['enclosure']
$this->data['encoding']
$this->data['id']
$this->data['link']
$this->data['links']
$this->data['title']
$this->getEncoding()
$type
$this
$this
$base
$base
$base
$base
$base
$base
$base
$base
$base
$base
$base
$base
$base
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$dom
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$rootElement
$type
$type
$type
$type
$type
$type
$type
$type
$type
$type
$type
$type
$type
$href
$hubUrl
$type
$flinks
$href
$hubUrl
$hubs
$type
getFeedLinks
getHubs
empty($flinks)
empty($hubs)
$content
$content
getContent
$data
$data['name']
$authors
$data
getAuthors
empty($authors)
$data
$data['name']
$authors
$data
getAuthors
empty($authors)
! in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
! is_string($value)
$val
$value
$value
$key
$this->data['authors'][]
$this->data['categories'][$key]
$this->data['categories'][$key]
$this->data['categories'][]
$val
$value
$value
! in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
in_array($value, ['yes', 'no', 'clean'], true)
$block
$description
$explicit
$block
$description
$explicit
getPlayPodcastBlock
getPlayPodcastDescription
getPlayPodcastExplicit
$author
$block
$cat
$description
$explicit
$image
$key
$subcat
$author
$authors
$block
$cat
$cats
$description
$explicit
$image
$key
$subcat
getPlayPodcastAuthors
getPlayPodcastBlock
getPlayPodcastCategories
getPlayPodcastDescription
getPlayPodcastExplicit
getPlayPodcastImage
empty($authors)
empty($cats)
! is_bool($value)
! is_numeric($number)
! is_numeric($number)
! is_string($value)
is_bool($status)
is_float($number)
is_float($number)
is_object($number)
is_object($number)
is_object($type)
$number
$number
$type
$value
$this->data['authors'][]
$value
(int) $number
(int) $number
gettype($number)
gettype($number)
var_export($type, true)
'no'
! is_bool($value)
! is_string($value)
is_bool($status)
is_object($type)
$type
$val
$value
$value
$value
$value['email']
$value['name']
$key
$this->data['authors'][]
$this->data['categories'][$key]
$this->data['categories'][$key]
$this->data['categories'][]
$this->data['owners'][]
$val
$value
$value
$value
(string) $value
var_export($type, true)
'no'
$author
$block
$duration
$episode
$explicit
$image
$keywords
$season
$subtitle
$summary
$title
$type
$author
$authors
$block
$duration
$episode
$explicit
$image
$keywords
$season
$status
$subtitle
$summary
$title
$type
getItunesAuthors
getItunesBlock
getItunesDuration
getItunesEpisode
getItunesEpisodeType
getItunesExplicit
getItunesImage
getItunesIsClosedCaptioned
getItunesKeywords
getItunesSeason
getItunesSubtitle
getItunesSummary
getItunesTitle
empty($authors)
empty($keywords)
$author
$block
$cat
$duration
$explicit
$image
$key
$keywords
$owner['email']
$owner['name']
$subcat
$subtitle
$summary
$type
$url
$owner['email']
$owner['name']
$author
$authors
$block
$cat
$cats
$duration
$explicit
$image
$key
$keywords
$owner
$owners
$status
$subcat
$subtitle
$summary
$type
$url
getItunesAuthors
getItunesBlock
getItunesCategories
getItunesComplete
getItunesDuration
getItunesExplicit
getItunesImage
getItunesKeywords
getItunesNewFeedUrl
getItunesOwners
getItunesSubtitle
getItunesSummary
getItunesType
empty($authors)
empty($cats)
empty($keywords)
empty($owners)
$value
$this->data['soundbites'][]
$value
$soundbite
getPodcastIndexChapters
getPodcastIndexSoundbites
getPodcastIndexTranscript
getPodcastIndexFunding
getPodcastIndexLocked
$count
getCommentCount
$count
$count
$link
$link['uri']
$link['type']
$link['uri']
$count
$count
$link
$link
$links
getCommentCount
getCommentCount
getCommentCount
getCommentFeedLinks
getCommentLink
$link['type']
empty($links)
$link['uri']
$link['type']
$link['uri']
$link
$links
getCommentFeedLinks
empty($links)
?ExtensionManagerInterface
ExtensionManagerInterface
ExtensionManager
Extension\AbstractRenderer
$this->pluginManager->get($extension)
ExtensionPluginManager
new $renderClass($this)
$this->entries[$this->key()]
$entries[$timestamp]
$entry
Entry
Entry
string
getDateCreated
getDateCreated
getDateModified
getDateModified
getTimestamp
getTimestamp
ignoreExceptions
render
saveXml
$renderer->render()->saveXml()
$this->entries[$index]
$this->entries[$this->key()]
$this->getEncoding()
Feed
Feed
gettype($data)
gettype($entries)
$key
$value
$value['link']
$value['type']
$key
$key
$value
$value
is_object($data)
is_object($entries)
is_bool($bool)
$extension
$this->extensions[$extension]
$extension
$exts
$plugin
setDataContainer
setEncoding
$dom
$rootElement
empty($data)
$this
$container
$tidy
$categories
format
format
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$content
$data
$data['email']
$data['length']
$data['name']
$data['type']
$data['uri']
$data['uri']
$source
$this->getDataContainer()->getDateCreated()->format(DateTime::ATOM)
$this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$data['length']
$data['name']
$data['type']
$data['uri']
$cat
$content
$data
$data
$ext
$source
$tidy
cleanRepair
parseString
render
setDomDocument
setRootElement
setType
! $authors || empty($authors)
$this->container->getEncoding()
$this->getDataContainer()->getDescription()
$this->getDataContainer()->getId()
$this->getDataContainer()->getId()
$this->getDataContainer()->getId()
$this->getDataContainer()->getId()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getTitle()
format
format
Atom
Atom
empty($data)
$this
$container
$data
$data['email']
$data['name']
$data['uri']
$this->container->getReference()
$this->container->getWhen()->format(DateTime::ATOM)
$this->getDataContainer()->getComment()
$data['name']
$data
format
$this->container->getEncoding()
Deleted
Deleted
empty($data)
$this
$container
$data
$data['email']
$data['name']
$data['uri']
$this->container->getReference()
$this->container->getWhen()->format(DateTime::ATOM)
$this->getDataContainer()->getComment()
$data['name']
$data
format
$this->container->getEncoding()
AtomDeleted
AtomDeleted
empty($data)
$this
$container
$categories
format
$cat['scheme']
$cat['term']
$data
$data['type']
$data['uri']
$link
$name
$this->getDataContainer()->getDateModified()->format(DateTime::RSS)
$cat['scheme']
$cat['term']
$data['length']
$data['length']
$data['length']
$data['name']
$data['type']
$data['uri']
$cat
$data
$data
$ext
$link
$name
render
setDomDocument
setRootElement
setType
$data['email']
$data['name']
! $authors || empty($authors)
$this->container->getEncoding()
$this->getDataContainer()->getDescription()
$this->getDataContainer()->getId()
$this->getDataContainer()->getId()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getTitle()
format
Rss
Rss
$flinks
$gdata
$gdata
$gdata['name']
$categories
$flinks
$hubs
format
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$data
$data['email']
$data['name']
$data['uri']
$gdata['name']
$href
$hubUrl
$image['uri']
$this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
$type
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$data['name']
$cat
$data
$href
$hubUrl
$type
! $authors || empty($authors)
$gdata['uri']
$gdata['version']
$this->getDataContainer()->getDescription()
$this->getDataContainer()->getId()
$this->getDataContainer()->getLanguage()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getTitle()
$gdata['name']
format
AbstractAtom
AbstractAtom
$this
$entry
$entry
$ext
render
setDomDocument
setEncoding
setRootElement
setType
$this->container->getEncoding()
Atom
Atom
$this->container
$flinks
$gdata
$gdata
$gdata['name']
$categories
$flinks
$hubs
format
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$data
$data['email']
$data['name']
$data['uri']
$gdata['name']
$href
$hubUrl
$image['uri']
$this->getDataContainer()->getDateModified()->format(DateTime::ATOM)
$type
$cat['label']
$cat['scheme']
$cat['term']
$cat['term']
$data['name']
$cat
$data
$href
$hubUrl
$type
! $authors || empty($authors)
$gdata['uri']
$gdata['version']
$this->getDataContainer()->getDescription()
$this->getDataContainer()->getId()
$this->getDataContainer()->getLanguage()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getLink()
$this->getDataContainer()->getTitle()
$gdata['name']
format
AbstractAtom
AbstractAtom
$this
$container
$gdata
$gdata
$gdata['name']
$gdata['name']
$ext
render
setDomDocument
setRootElement
setType
$gdata['uri']
$gdata['version']
$this->container->getEncoding()
$gdata['name']
Source
Source
$this
$gdata
$gdata
$gdata['name']
$gdata['name']
$ext
render
setDomDocument
setRootElement
setType
$gdata['uri']
$gdata['version']
$this->container->getEncoding()
$gdata['name']
AtomSource
AtomSource
$this
$gdata
$gdata
$gdata['name']
$categories
format
format
$cat['scheme']
$cat['term']
$data
$image['height']
$image['uri']
$image['width']
$name
$name
$this->getDataContainer()->getDateModified()->format(DateTime::RSS)
$this->getDataContainer()->getLastBuildDate()->format(DateTime::RSS)
$cat['scheme']
$cat['term']
$data['name']
$cat
$data
$entry
$ext
$name
$name
render
setDomDocument
setEncoding
setRootElement
setType
$data['email']
$data['name']
$name
$name
! $authors || empty($authors)
$this->container->getEncoding()
$this->getDataContainer()->getDescription()
$this->getDataContainer()->getTitle()
$gdata['name']
$gdata['uri']
$gdata['version']
format
format
Rss
Rss
$this->container
setRootElement
setType
Source
Source
StandaloneExtensionManager
new $class()
is_string($class)
ExtensionManagerInterface
ExtensionManagerInterface
ExtensionManagerInterface
static::$extensions['entry']
static::$extensions['entryRenderer']
static::$extensions['feed']
static::$extensions['feedRenderer']
static::$extensions['entry'][]
static::$extensions['entryRenderer'][]
static::$extensions['feed'][]
static::$extensions['feedRenderer'][]
isset(static::$extensionManager)
ClientNotReset
ClientNotReset
ClientNotReset
ClientNotReset
ClientNotReset
ClientNotReset
createTable
execute
assertIsArray
$feed
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
123
123
$className
$className
'Result'
'Result'
setMethods
setMethods
setMethods
$this->tableGateway
''
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
new stdClass()
mockInputStream
getHeader
'Result'
'Result'
$this->assertFalse($this->callback->isValidHubVerification($this->get));
$className
$className
setMethods
getName
$this->storage
getenv('TESTS_LAMINAS_FEED_PUBSUBHUBBUB_BASEURI')
getSubscription
$className
$className
setMethods
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
'0aa'
'10000'
123
123
123
$sendResponseNow
Callback
Callback
(array) $entry->getAuthors()
getCommentLink
getContent
getContent
getContent
getContent
getEnclosure
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthor
getAuthors
getAuthors
getBaseUrl
getBaseUrl
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCommentLink
getCommentLink
getCommentLink
getContent
getContent
getContent
getContent
getContent
getContent
getDateCreated
getDateCreated
getDateCreated
getDateModified
getDateModified
getDateModified
getDescription
getDescription
getEnclosure
getEnclosure
getId
getId
getLink
getLink
getLink
getLink
getTitle
getTitle
getValues
getValues
getValues
getValues
getValues
getValues
$entry->getElement()->tagName
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getDomDocument
getElement
getElement
getElement
getEncoding
getEncoding
getExtension
getExtension
getId
getId
getType
getXpath
getXpathPrefix
saveXml
$entry->getElement()->tagName
public function dateModifiedProvider(): array
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry->getCategories()->getValues()
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
array<int,<array{0:string,1:DateTimeInterface|null}>>
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthor
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getAuthors
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCategories
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentCount
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentFeedLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getCommentLink
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getContent
getDateModified
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getDescription
getEnclosure
getEnclosure
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getId
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getLink
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getTitle
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getInstanceOf
$source->getCategories()->getValues()
$source
$source
$source
$source
$source
$source
$source
$source
$source
$source
$source
$source
$source
getAuthors
getCategories
getCategories
getCopyright
getDateCreated
getDateModified
getDescription
getFeedLink
getGenerator
getHubs
getId
getLanguage
getLink
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getSource
getTitle
getValues
(array) $feed->getAuthors()
(array) $feed->getAuthors()
getBaseUrl
getHubs
getHubs
getImage
getImage
getImage
getImage
getLastBuildDate
setOriginalSourceUri
getDomDocument
getElement
getEncoding
getEncoding
getExtension
getExtension
getXpath
getXpathPrefix
saveXml
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
getValues
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
(array) $feed->getAuthors()
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getHubs
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getImage
getLastBuildDate
getLastBuildDate
setOriginalSourceUri
$headers
$responseHeaders
MockObject<Headers>
$this->client
$this->client
$this->client
MockObject<Headers>
expects
expects
expects
expects
expects
expects
expects
expects
expects
expects
expects
method
method
method
method
method
method
method
method
method
method
method
willReturn
willReturn
willReturn
with
with
with
with
with
with
expects
expects
expects
expects
expects
expects
expects
expects
expects
expects
expects
MockObject<Headers>
MockObject<HttpResponse>
testConstructorRaisesExceptionForInvalidBody
testConstructorRaisesExceptionForInvalidHeaderStructures
testConstructorRaisesExceptionForInvalidStatusCode
$body
$statusCode
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getCastAuthor
getDuration
getEnclosure
getEncoding
getEpisode
getEpisode
getEpisodeType
getEpisodeType
getId
getItunesImage
getPlayPodcastBlock
getPlayPodcastDescription
getPlayPodcastExplicit
getSeason
getSeason
getSubtitle
getTitle
isClosedCaptioned
isClosedCaptioned
isClosedCaptioned
getEncoding
getNewFeedUrl
getOwner
getPlayPodcastAuthor
getPlayPodcastBlock
getPlayPodcastCategories
getPlayPodcastDescription
getPlayPodcastExplicit
getPlayPodcastImage
getPodcastType
getPodcastType
isComplete
isComplete
isComplete
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthors
getContent
getDescription
getEncoding
getId
getLink
getLinks
getPermaLink
getTitle
(array) $feed->getAuthors()
getEncoding
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthors
getContent
getDescription
getEncoding
getId
getLink
getLinks
getPermaLink
getTitle
(array) $feed->getAuthors()
getEncoding
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$keywords
getBlock
getCastAuthor
getDuration
getEnclosure
getEncoding
getEpisode
getEpisode
getEpisodeType
getEpisodeType
getExplicit
getId
getItunesImage
getKeywords
getSeason
getSeason
getSubtitle
getSummary
getTitle
isClosedCaptioned
isClosedCaptioned
isClosedCaptioned
getBlock
getCastAuthor
getEncoding
getExplicit
getItunesCategories
getItunesImage
getNewFeedUrl
getOwner
getPodcastType
getPodcastType
isComplete
isComplete
isComplete
$entry->getContent()
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthors
getContent
getDescription
getEncoding
getId
getLink
getLinks
getPermaLink
getTitle
(array) $feed->getAuthors()
getEncoding
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthors
getContent
getDescription
getEncoding
getId
getLink
getLinks
getPermaLink
getTitle
(array) $feed->getAuthors()
getEncoding
$feed
$feed
$feed
$feed
$feed
$feed
$feed
$feed
$feed
$feed
setMethods
setMethods
new stdClass()
$message
$link['feed']
$link
getEncoding
getEncoding
CustomExtensionManager
new $class()
new $class()
Extension\AbstractEntry|Extension\AbstractFeed
$isbn
$dayPopular
null|string
$this->data['dayPopular']
assertNull
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
'abc'
$entry = new Writer\Deleted();
$entry->setBy(['name' => 'Joe', 'uri' => 'notauri']);
$this->expectException(Writer\Exception\ExceptionInterface::class);
ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
'abc'
'abc'
$count
$message
null
$entry = new Writer\Entry();
$entry = new Writer\Entry();
$entry = new Writer\Entry();
$this->expectException(ExceptionInterface::class);
$this->expectException(ExceptionInterface::class);
$this->expectException(ExceptionInterface::class);
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
testSetPlayPodcastImageRaisesExceptionForInvalidUrl
testSetPlayPodcastImageSetsInternalDataWithValidUrl
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
testEpisodeTypeMaybeMutatedWithAcceptedValues
testSetEpisodeRaisesExceptionForNonNumericEpisodeNumbers
testSetEpisodeTypeRaisesExceptionForInvalidTypes
testSetExplicit
testSetItunesImageRaisesExceptionForInvalidUrl
testSetItunesImageSetsInternalDataWithValidUrl
testSetSeasonRaisesExceptionForNonNumericSeasonNumbers
testSettingClosedCaptioningToNonBooleanRaisesException
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
testSetExplicit
testSetItunesCompleteRaisesExceptionForInvalidStatus
testSetItunesImageRaisesExceptionForInvalidUrl
testSetItunesImageSetsInternalDataWithValidUrl
testSetItunesTypeMutatesTypeWithValidData
testSetItunesTypeWithInvalidTypeRaisesException
'string'
format
format
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
Writer\Exception\ExceptionInterface::class
getTimestamp
getTimestamp
getTimestamp
getTimestamp
$message
$this->expectException(ExceptionInterface::class);
$this->expectException(ExceptionInterface::class);
$this->expectException(Writer\Exception\InvalidArgumentException::class);
$writer = new Writer\Feed();
$writer = new Writer\Feed();
$writer = new Writer\Feed();
$writer->setGenerator('LaminasW', null, 'notauri');
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
$message
$enc
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getCategories
getCommentCount
getCommentFeedLink
getCommentLink
getContent
getDateCreated
getDateModified
getDescription
getEnclosure
getEncoding
getEncoding
getId
getId
getId
getId
getLink
getLink
getTimestamp
getTimestamp
getTitle
$enc->length
$enc->type
$enc->url
$atomFeed = new Renderer\Feed\Atom($this->validWriter);
$atomFeed->render();
$this->expectException(ExceptionInterface::class);
$this->validEntry->remove('id');
$this->validEntry->remove('link');
$this->validEntry->setId('not-a-uri');
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
$message
$enc
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
$entry
getAuthor
getAuthor
getCategories
getCategories
getCommentCount
getCommentFeedLink
getCommentLink
getContent
getContent
getDateCreated
getDateModified
getDescription
getDescription
getEnclosure
getEncoding
getEncoding
getId
getId
getLink
getLink
getTimestamp
getTimestamp
getTitle
getTitle
$enc->length
$enc->type
$enc->url
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
$message
getTimestamp
getBaseUrl
getEncoding
getEncoding
getHubs
getImage
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
ExceptionInterface::class
$feed->getDomDocument()
$message
getTimestamp
$xpath->evaluate('/rss/channel/atom:link[@rel="self"]')->length
getTimestamp
getBaseUrl
getDomDocument
getEncoding
getEncoding
getHubs
getImage
getImage
getLastBuildDate
$extension
$extension
$test
CustomExtensionManager
new $class()
PK ]Td%d
d
README.mdnu ٘ # laminas-feed
[![Build Status](https://travis-ci.com/laminas/laminas-feed.svg?branch=master)](https://travis-ci.com/laminas/laminas-feed)
[![Coverage Status](https://coveralls.io/repos/github/laminas/laminas-feed/badge.svg?branch=master)](https://coveralls.io/github/laminas/laminas-feed?branch=master)
> ## 🇷🇺 Русским гражданам
>
> Мы, участники Laminas, родились и живем в разных странах. У многих из нас есть друзья, родственники и коллеги как в России, так и в Украине. Некоторые из нас родились в России. Некоторые из нас живут в России. У некоторых бабушки и дедушки сражались с фашистами во Второй мировой войне. Здесь никто не поддерживает фашизм.
>
> У одного из нас есть украинская родственница, которая спаслась из дома вместе с сыном. Поезд задержался из-за бомбежки на дороге впереди. У нас есть друзья, которые прячутся в бомбоубежищах. Мы с тревогой ждем весточки от них после воздушных налетов, которые беспорядочно наносят удары и попадают по больницам, школам, детским садам и домам. Мы не берем это из каких-либо СМИ. Мы наблюдаем это напрямую.
>
> Вы доверяете нам достаточно, чтоб использовать наши программы, и мы просим вас довериться нам вновь. Мы нуждаемся в помощи. Выходите и протестуйте против этой бесполезной войны. Остановите кровопролитие. Скажите "Нет войне!"
>
> ## 🇺🇸 To Citizens of Russia
>
> We at Laminas come from all over the world. Many of us have friends, family and colleagues in both Russia and Ukraine. Some of us were born in Russia. Some of us currently live in Russia. Some have grandparents who fought Nazis in World War II. Nobody here supports fascism.
>
> One team member has a Ukrainian relative who fled her home with her son. The train was delayed due to bombing on the road ahead. We have friends who are hiding in bomb shelters. We anxiously follow up on them after the air raids, which indiscriminately fire at hospitals, schools, kindergartens and houses. We're not taking this from any media. These are our actual experiences.
>
> You trust us enough to use our software. We ask that you trust us to say the truth on this. We need your help. Go out and protest this unnecessary war. Stop the bloodshed. Say "stop the war!"
`Laminas\Feed` provides functionality for consuming RSS and Atom feeds. It provides
a natural syntax for accessing elements of feeds, feed attributes, and entry
attributes. `Laminas\Feed` also has extensive support for modifying feed and entry
structure with the same natural syntax, and turning the result back into XML.
- File issues at https://github.com/laminas/laminas-feed/issues
- Documentation is at https://docs.laminas.dev/laminas-feed/
PK ]T{j psalm.xmlnu ٘
PK ]Tm;
renovate.jsonnu ٘ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"local>laminas/.github:renovate-config"
]
}
PK ]TѼ2
.gitignorenu ٘ /.phpcs-cache
/.phpunit.result.cache
/.psalm-cache/
/clover.xml
/coveralls-upload.json
/docs/html/
/laminas-mkdoc-theme.tgz
/laminas-mkdoc-theme/
/phpunit.xml
/vendor/
PK ]T{( {( ( src/PubSubHubbub/Subscriber/Callback.phpnu ٘ subscriptionKey = $key;
return $this;
}
/**
* Handle any callback from a Hub Server responding to a subscription or
* unsubscription request. This should be the Hub Server confirming the
* the request prior to taking action on it.
*
* @param null|array $httpGetData GET data if available and not in $_GET
* @param bool $sendResponseNow Whether to send response now or when asked
* @return void
*/
public function handle(?array $httpGetData = null, $sendResponseNow = false)
{
if ($httpGetData === null) {
$httpGetData = $_GET;
}
/**
* Handle any feed updates (sorry for the mess :P)
*
* This DOES NOT attempt to process a feed update. Feed updates
* SHOULD be validated/processed by an asynchronous process so as
* to avoid holding up responses to the Hub.
*/
$contentType = $this->_getHeader('Content-Type');
if (
strtolower($_SERVER['REQUEST_METHOD']) === 'post'
&& $this->_hasValidVerifyToken(null, false)
&& (stripos($contentType, 'application/atom+xml') === 0
|| stripos($contentType, 'application/rss+xml') === 0
|| stripos($contentType, 'application/xml') === 0
|| stripos($contentType, 'text/xml') === 0
|| stripos($contentType, 'application/rdf+xml') === 0)
) {
$this->setFeedUpdate($this->_getRawBody());
$this->getHttpResponse()->setHeader('X-Hub-On-Behalf-Of', $this->getSubscriberCount());
/**
* Handle any (un)subscribe confirmation requests
*/
} elseif ($this->isValidHubVerification($httpGetData)) {
$this->getHttpResponse()->setContent($httpGetData['hub_challenge']);
switch (strtolower($httpGetData['hub_mode'])) {
case 'subscribe':
$data = $this->currentSubscriptionData;
$data['subscription_state'] = PubSubHubbub\PubSubHubbub::SUBSCRIPTION_VERIFIED;
if (isset($httpGetData['hub_lease_seconds'])) {
$data['lease_seconds'] = $httpGetData['hub_lease_seconds'];
}
$this->getStorage()->setSubscription($data);
break;
case 'unsubscribe':
$verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
$this->getStorage()->deleteSubscription($verifyTokenKey);
break;
default:
throw new Exception\RuntimeException(sprintf(
'Invalid hub_mode ("%s") provided',
$httpGetData['hub_mode']
));
}
/**
* Hey, C'mon! We tried everything else!
*/
} else {
$this->getHttpResponse()->setStatusCode(404);
}
if ($sendResponseNow) {
$this->sendResponse();
}
}
/**
* Checks validity of the request simply by making a quick pass and
* confirming the presence of all REQUIRED parameters.
*
* @return bool
*/
public function isValidHubVerification(array $httpGetData)
{
/**
* As per the specification, the hub.verify_token is OPTIONAL. This
* implementation of Pubsubhubbub considers it REQUIRED and will
* always send a hub.verify_token parameter to be echoed back
* by the Hub Server. Therefore, its absence is considered invalid.
*/
if (strtolower($_SERVER['REQUEST_METHOD']) !== 'get') {
return false;
}
$required = [
'hub_mode',
'hub_topic',
'hub_challenge',
'hub_verify_token',
];
foreach ($required as $key) {
if (! array_key_exists($key, $httpGetData)) {
return false;
}
}
if (
$httpGetData['hub_mode'] !== 'subscribe'
&& $httpGetData['hub_mode'] !== 'unsubscribe'
) {
return false;
}
if (
$httpGetData['hub_mode'] === 'subscribe'
&& ! array_key_exists('hub_lease_seconds', $httpGetData)
) {
return false;
}
if (! Uri::factory($httpGetData['hub_topic'])->isValid()) {
return false;
}
/**
* Attempt to retrieve any Verification Token Key attached to Callback
* URL's path by our Subscriber implementation
*/
if (! $this->_hasValidVerifyToken($httpGetData)) {
return false;
}
return true;
}
/**
* Sets a newly received feed (Atom/RSS) sent by a Hub as an update to a
* Topic we've subscribed to.
*
* @param string $feed
* @return $this
*/
public function setFeedUpdate($feed)
{
$this->feedUpdate = $feed;
return $this;
}
/**
* Check if any newly received feed (Atom/RSS) update was received
*
* @return bool
*/
public function hasFeedUpdate()
{
if ($this->feedUpdate === null) {
return false;
}
return true;
}
/**
* Gets a newly received feed (Atom/RSS) sent by a Hub as an update to a
* Topic we've subscribed to.
*
* @return string
*/
public function getFeedUpdate()
{
return $this->feedUpdate;
}
// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
/**
* Check for a valid verify_token. By default attempts to compare values
* with that sent from Hub, otherwise merely ascertains its existence.
*
* @param array $httpGetData
* @param bool $checkValue
* @return bool
*/
protected function _hasValidVerifyToken(?array $httpGetData = null, $checkValue = true)
{
$verifyTokenKey = $this->_detectVerifyTokenKey($httpGetData);
if (empty($verifyTokenKey)) {
return false;
}
$verifyTokenExists = $this->getStorage()->hasSubscription($verifyTokenKey);
if (! $verifyTokenExists) {
return false;
}
if ($checkValue) {
$data = $this->getStorage()->getSubscription($verifyTokenKey);
$verifyToken = $data['verify_token'];
if ($verifyToken !== hash('sha256', $httpGetData['hub_verify_token'])) {
return false;
}
$this->currentSubscriptionData = $data;
return true;
}
return true;
}
/**
* Attempt to detect the verification token key. This would be passed in
* the Callback URL (which we are handling with this class!) as a URI
* path part (the last part by convention).
*
* @param null|array $httpGetData
* @return false|string
*/
protected function _detectVerifyTokenKey(?array $httpGetData = null)
{
/**
* Available when sub keys encoding in Callback URL path
*/
if (isset($this->subscriptionKey)) {
return $this->subscriptionKey;
}
/**
* Available only if allowed by PuSH 0.2 Hubs
*/
if (
is_array($httpGetData)
&& isset($httpGetData['xhub_subscription'])
) {
return $httpGetData['xhub_subscription'];
}
/**
* Available (possibly) if corrupted in transit and not part of $_GET
*/
$params = $this->_parseQueryString();
if (isset($params['xhub.subscription'])) {
return rawurldecode($params['xhub.subscription']);
}
return false;
}
/**
* Build an array of Query String parameters.
* This bypasses $_GET which munges parameter names and cannot accept
* multiple parameters with the same key.
*
* @return array|void
*/
protected function _parseQueryString()
{
$params = [];
$queryString = '';
if (isset($_SERVER['QUERY_STRING'])) {
$queryString = $_SERVER['QUERY_STRING'];
}
if (empty($queryString)) {
return [];
}
$parts = explode('&', $queryString);
foreach ($parts as $kvpair) {
$pair = explode('=', $kvpair);
$key = rawurldecode($pair[0]);
$value = rawurldecode($pair[1]);
if (isset($params[$key])) {
if (is_array($params[$key])) {
$params[$key][] = $value;
} else {
$params[$key] = [$params[$key], $value];
}
} else {
$params[$key] = $value;
}
}
return $params;
}
// phpcs:enable PSR2.Methods.MethodDeclaration.Underscore
}
PK ]T%;P / src/PubSubHubbub/Exception/RuntimeException.phpnu ٘ Ұu 7 src/PubSubHubbub/Exception/InvalidArgumentException.phpnu ٘ setOptions($options);
}
}
/**
* Process any injected configuration options
*
* @param array|Traversable $options Options array or Traversable object
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setOptions($options)
{
if ($options instanceof Traversable) {
$options = ArrayUtils::iteratorToArray($options);
}
if (! is_array($options)) {
throw new Exception\InvalidArgumentException(
'Array or Traversable object expected, got ' . gettype($options)
);
}
if (is_array($options)) {
$this->setOptions($options);
}
if (array_key_exists('storage', $options)) {
$this->setStorage($options['storage']);
}
return $this;
}
/**
* Send the response, including all headers.
* If you wish to handle this via Laminas\Http, use the getter methods
* to retrieve any data needed to be set on your HTTP Response object, or
* simply give this object the HTTP Response instance to work with for you!
*
* @return void
*/
public function sendResponse()
{
$this->getHttpResponse()->send();
}
/**
* Sets an instance of Laminas\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
* to background save any verification tokens associated with a subscription
* or other.
*
* @return $this
*/
public function setStorage(Model\SubscriptionPersistenceInterface $storage)
{
$this->storage = $storage;
return $this;
}
/**
* Gets an instance of Laminas\Feed\Pubsubhubbub\Model\SubscriptionPersistence used
* to background save any verification tokens associated with a subscription
* or other.
*
* @return Model\SubscriptionPersistenceInterface
* @throws Exception\RuntimeException
*/
public function getStorage()
{
if ($this->storage === null) {
throw new Exception\RuntimeException(
'No storage object has been set that subclasses'
. ' Laminas\Feed\Pubsubhubbub\Model\SubscriptionPersistence'
);
}
return $this->storage;
}
/**
* An instance of a class handling Http Responses. This is implemented in
* Laminas\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
* (i.e. not inherited from) Laminas\Controller\Response\Http.
*
* @param HttpResponse|PhpResponse $httpResponse
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setHttpResponse($httpResponse)
{
if (! $httpResponse instanceof HttpResponse && ! $httpResponse instanceof PhpResponse) {
throw new Exception\InvalidArgumentException(
'HTTP Response object must'
. ' implement one of Laminas\Feed\Pubsubhubbub\HttpResponse or'
. ' Laminas\Http\PhpEnvironment\Response'
);
}
$this->httpResponse = $httpResponse;
return $this;
}
/**
* An instance of a class handling Http Responses. This is implemented in
* Laminas\Feed\Pubsubhubbub\HttpResponse which shares an unenforced interface with
* (i.e. not inherited from) Laminas\Controller\Response\Http.
*
* @return HttpResponse|PhpResponse
*/
public function getHttpResponse()
{
if ($this->httpResponse === null) {
$this->httpResponse = new HttpResponse();
}
return $this->httpResponse;
}
/**
* Sets the number of Subscribers for which any updates are on behalf of.
* In other words, is this class serving one or more subscribers? How many?
* Defaults to 1 if left unchanged.
*
* @param int|string $count
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setSubscriberCount($count)
{
$count = intval($count);
if ($count <= 0) {
throw new Exception\InvalidArgumentException(
'Subscriber count must be'
. ' greater than zero'
);
}
$this->subscriberCount = $count;
return $this;
}
/**
* Gets the number of Subscribers for which any updates are on behalf of.
* In other words, is this class serving one or more subscribers? How many?
*
* @return int
*/
public function getSubscriberCount()
{
return $this->subscriberCount;
}
// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
/**
* Attempt to detect the callback URL (specifically the path forward)
*
* @return string
*/
protected function _detectCallbackUrl()
{
$callbackUrl = null;
// IIS7 with URL Rewrite: make sure we get the unencoded url
// (double slash problem).
$iisUrlRewritten = $_SERVER['IIS_WasUrlRewritten'] ?? null;
$unencodedUrl = $_SERVER['UNENCODED_URL'] ?? null;
if ('1' === $iisUrlRewritten && ! empty($unencodedUrl)) {
return $unencodedUrl;
}
// HTTP proxy requests setup request URI with scheme and host [and port]
// + the URL path, only use URL path.
if (isset($_SERVER['REQUEST_URI'])) {
$callbackUrl = $this->buildCallbackUrlFromRequestUri();
}
if (null !== $callbackUrl) {
return $callbackUrl;
}
if (isset($_SERVER['ORIG_PATH_INFO'])) {
return $this->buildCallbackUrlFromOrigPathInfo();
}
return '';
}
/**
* Get the HTTP host
*
* @return string
*/
protected function _getHttpHost()
{
if (! empty($_SERVER['HTTP_HOST'])) {
return $_SERVER['HTTP_HOST'];
}
$https = $_SERVER['HTTPS'] ?? null;
$scheme = $https === 'on' ? 'https' : 'http';
$name = $_SERVER['SERVER_NAME'] ?? '';
$port = isset($_SERVER['SERVER_PORT']) ? (int) $_SERVER['SERVER_PORT'] : 80;
if (
($scheme === 'http' && $port === 80)
|| ($scheme === 'https' && $port === 443)
) {
return $name;
}
return sprintf('%s:%d', $name, $port);
}
/**
* Retrieve a Header value from either $_SERVER or Apache
*
* @param string $header
* @return bool|string
*/
protected function _getHeader($header)
{
$temp = strtoupper(str_replace('-', '_', $header));
if (! empty($_SERVER[$temp])) {
return $_SERVER[$temp];
}
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
if (! empty($_SERVER[$temp])) {
return $_SERVER[$temp];
}
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
if (! empty($headers[$header])) {
return $headers[$header];
}
}
return false;
}
/**
* Return the raw body of the request
*
* @return false|string Raw body, or false if not present
*/
protected function _getRawBody()
{
$body = is_resource($this->inputStream)
? stream_get_contents($this->inputStream)
: file_get_contents($this->inputStream);
return strlen(trim($body)) > 0 ? $body : false;
}
// phpcs:enable PSR2.Methods.MethodDeclaration.Underscore
/**
* Build the callback URL from the REQUEST_URI server parameter.
*
* @return string
*/
private function buildCallbackUrlFromRequestUri()
{
$callbackUrl = $_SERVER['REQUEST_URI'];
$https = $_SERVER['HTTPS'] ?? null;
$scheme = $https === 'on' ? 'https' : 'http';
if ($https === 'on') {
$scheme = 'https';
}
$schemeAndHttpHost = $scheme . '://' . $this->_getHttpHost();
if (strpos($callbackUrl, $schemeAndHttpHost) === 0) {
$callbackUrl = substr($callbackUrl, strlen($schemeAndHttpHost));
}
return $callbackUrl;
}
/**
* Build the callback URL from the ORIG_PATH_INFO server parameter.
*
* @return string
*/
private function buildCallbackUrlFromOrigPathInfo()
{
$callbackUrl = $_SERVER['ORIG_PATH_INFO'];
if (! empty($_SERVER['QUERY_STRING'])) {
$callbackUrl .= '?' . $_SERVER['QUERY_STRING'];
}
return $callbackUrl;
}
}
PK ]T=e e src/PubSubHubbub/Subscriber.phpnu ٘ setOptions($options);
}
}
/**
* Process any injected configuration options
*
* @param array|Traversable $options
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setOptions($options)
{
if ($options instanceof Traversable) {
$options = ArrayUtils::iteratorToArray($options);
}
if (! is_array($options)) {
throw new Exception\InvalidArgumentException(
'Array or Traversable object expected, got ' . gettype($options)
);
}
if (array_key_exists('hubUrls', $options)) {
$this->addHubUrls($options['hubUrls']);
}
if (array_key_exists('callbackUrl', $options)) {
$this->setCallbackUrl($options['callbackUrl']);
}
if (array_key_exists('topicUrl', $options)) {
$this->setTopicUrl($options['topicUrl']);
}
if (array_key_exists('storage', $options)) {
$this->setStorage($options['storage']);
}
if (array_key_exists('leaseSeconds', $options)) {
$this->setLeaseSeconds($options['leaseSeconds']);
}
if (array_key_exists('parameters', $options)) {
$this->setParameters($options['parameters']);
}
if (array_key_exists('authentications', $options)) {
$this->addAuthentications($options['authentications']);
}
if (array_key_exists('usePathParameter', $options)) {
$this->usePathParameter($options['usePathParameter']);
}
if (array_key_exists('preferredVerificationMode', $options)) {
$this->setPreferredVerificationMode(
$options['preferredVerificationMode']
);
}
return $this;
}
/**
* Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
* event will relate
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setTopicUrl($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->topicUrl = $url;
return $this;
}
/**
* Set the topic URL (RSS or Atom feed) to which the intended (un)subscribe
* event will relate
*
* @return string
* @throws Exception\RuntimeException
*/
public function getTopicUrl()
{
if (empty($this->topicUrl)) {
throw new Exception\RuntimeException(
'A valid Topic (RSS or Atom feed) URL MUST be set before attempting any operation'
);
}
return $this->topicUrl;
}
/**
* Set the number of seconds for which any subscription will remain valid
*
* @param int $seconds
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setLeaseSeconds($seconds)
{
$seconds = intval($seconds);
if ($seconds <= 0) {
throw new Exception\InvalidArgumentException(
'Expected lease seconds must be an integer greater than zero'
);
}
$this->leaseSeconds = $seconds;
return $this;
}
/**
* Get the number of lease seconds on subscriptions
*
* @return int
*/
public function getLeaseSeconds()
{
return $this->leaseSeconds;
}
/**
* Set the callback URL to be used by Hub Servers when communicating with
* this Subscriber
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setCallbackUrl($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->callbackUrl = $url;
return $this;
}
/**
* Get the callback URL to be used by Hub Servers when communicating with
* this Subscriber
*
* @return string
* @throws Exception\RuntimeException
*/
public function getCallbackUrl()
{
if (empty($this->callbackUrl)) {
throw new Exception\RuntimeException(
'A valid Callback URL MUST be set before attempting any operation'
);
}
return $this->callbackUrl;
}
/**
* Set preferred verification mode (sync or async). By default, this
* Subscriber prefers synchronous verification, but does support
* asynchronous if that's the Hub Server's utilised mode.
*
* Laminas\Feed\Pubsubhubbub\Subscriber will always send both modes, whose
* order of occurrence in the parameter list determines this preference.
*
* @param string $mode Should be 'sync' or 'async'
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setPreferredVerificationMode($mode)
{
if (
$mode !== PubSubHubbub::VERIFICATION_MODE_SYNC
&& $mode !== PubSubHubbub::VERIFICATION_MODE_ASYNC
) {
throw new Exception\InvalidArgumentException(
'Invalid preferred mode specified: "' . $mode . '" but should be one of'
. ' Laminas\Feed\Pubsubhubbub::VERIFICATION_MODE_SYNC or'
. ' Laminas\Feed\Pubsubhubbub::VERIFICATION_MODE_ASYNC'
);
}
$this->preferredVerificationMode = $mode;
return $this;
}
/**
* Get preferred verification mode (sync or async).
*
* @return string
*/
public function getPreferredVerificationMode()
{
return $this->preferredVerificationMode;
}
/**
* Add a Hub Server URL supported by Publisher
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function addHubUrl($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->hubUrls[] = $url;
return $this;
}
/**
* Add an array of Hub Server URLs supported by Publisher
*
* @return $this
*/
public function addHubUrls(array $urls)
{
foreach ($urls as $url) {
$this->addHubUrl($url);
}
return $this;
}
/**
* Remove a Hub Server URL
*
* @param string $url
* @return $this
*/
public function removeHubUrl($url)
{
if (! in_array($url, $this->getHubUrls())) {
return $this;
}
$key = array_search($url, $this->hubUrls);
unset($this->hubUrls[$key]);
return $this;
}
/**
* Return an array of unique Hub Server URLs currently available
*
* @return array
*/
public function getHubUrls()
{
$this->hubUrls = array_unique($this->hubUrls);
return $this->hubUrls;
}
/**
* Add authentication credentials for a given URL
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function addAuthentication($url, array $authentication)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->authentications[$url] = $authentication;
return $this;
}
/**
* Add authentication credentials for hub URLs
*
* @return $this
*/
public function addAuthentications(array $authentications)
{
foreach ($authentications as $url => $authentication) {
$this->addAuthentication($url, $authentication);
}
return $this;
}
/**
* Get all hub URL authentication credentials
*
* @return array
*/
public function getAuthentications()
{
return $this->authentications;
}
/**
* Set flag indicating whether or not to use a path parameter
*
* @param bool $bool
* @return $this
*/
public function usePathParameter($bool = true)
{
$this->usePathParameter = $bool;
return $this;
}
/**
* Add an optional parameter to the (un)subscribe requests
*
* @param string|array $name
* @param null|string $value
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setParameter($name, $value = null)
{
if (is_array($name)) {
$this->setParameters($name);
return $this;
}
if (empty($name) || ! is_string($name)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "name" of "' . $name . '" must be a non-empty string'
);
}
if ($value === null) {
$this->removeParameter($name);
return $this;
}
if (empty($value) || (! is_string($value) && $value !== null)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "value" of "' . $value . '" must be a non-empty string'
);
}
$this->parameters[$name] = $value;
return $this;
}
/**
* Add an optional parameter to the (un)subscribe requests
*
* @return $this
*/
public function setParameters(array $parameters)
{
foreach ($parameters as $name => $value) {
$this->setParameter($name, $value);
}
return $this;
}
/**
* Remove an optional parameter for the (un)subscribe requests
*
* @param string $name
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function removeParameter($name)
{
if (empty($name) || ! is_string($name)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "name" of "' . $name . '" must be a non-empty string'
);
}
if (array_key_exists($name, $this->parameters)) {
unset($this->parameters[$name]);
}
return $this;
}
/**
* Return an array of optional parameters for (un)subscribe requests
*
* @return array
*/
public function getParameters()
{
return $this->parameters;
}
/**
* Sets an instance of Laminas\Feed\Pubsubhubbub\Model\SubscriptionPersistence used to background
* save any verification tokens associated with a subscription or other.
*
* @return $this
*/
public function setStorage(Model\SubscriptionPersistenceInterface $storage)
{
$this->storage = $storage;
return $this;
}
/**
* Gets an instance of Laminas\Feed\Pubsubhubbub\Storage\StoragePersistence used
* to background save any verification tokens associated with a subscription
* or other.
*
* @return Model\SubscriptionPersistenceInterface
* @throws Exception\RuntimeException
*/
public function getStorage()
{
if ($this->storage === null) {
throw new Exception\RuntimeException('No storage vehicle has been set.');
}
return $this->storage;
}
/**
* Subscribe to one or more Hub Servers using the stored Hub URLs
* for the given Topic URL (RSS or Atom feed)
*
* @return void
*/
public function subscribeAll()
{
$this->_doRequest('subscribe');
}
/**
* Unsubscribe from one or more Hub Servers using the stored Hub URLs
* for the given Topic URL (RSS or Atom feed)
*
* @return void
*/
public function unsubscribeAll()
{
$this->_doRequest('unsubscribe');
}
/**
* Returns a boolean indicator of whether the notifications to Hub
* Servers were ALL successful. If even one failed, FALSE is returned.
*
* @return bool
*/
public function isSuccess()
{
return ! $this->errors;
}
/**
* Return an array of errors met from any failures, including keys:
* 'response' => the Laminas\Http\Response object from the failure
* 'hubUrl' => the URL of the Hub Server whose notification failed
*
* @return array
*/
public function getErrors()
{
return $this->errors;
}
/**
* Return an array of Hub Server URLs who returned a response indicating
* operation in Asynchronous Verification Mode, i.e. they will not confirm
* any (un)subscription immediately but at a later time (Hubs may be
* doing this as a batch process when load balancing)
*
* @return array
*/
public function getAsyncHubs()
{
return $this->asyncHubs;
}
// phpcs:disable PSR2.Methods.MethodDeclaration.Underscore
/**
* Executes an (un)subscribe request
*
* @param string $mode
* @return void
* @throws Exception\RuntimeException
*/
protected function _doRequest($mode)
{
$client = $this->_getHttpClient();
$hubs = $this->getHubUrls();
if (empty($hubs)) {
throw new Exception\RuntimeException(
'No Hub Server URLs have been set so no subscriptions can be attempted'
);
}
$this->errors = [];
$this->asyncHubs = [];
foreach ($hubs as $url) {
if (array_key_exists($url, $this->authentications)) {
$auth = $this->authentications[$url];
$client->setAuth($auth[0], $auth[1]);
}
$client->setUri($url);
$client->setRawBody($this->_getRequestParameters($url, $mode));
$response = $client->send();
if (
$response->getStatusCode() !== 204
&& $response->getStatusCode() !== 202
) {
$this->errors[] = [
'response' => $response,
'hubUrl' => $url,
];
/**
* At first I thought it was needed, but the backend storage will
* allow tracking async without any user interference. It's left
* here in case the user is interested in knowing what Hubs
* are using async verification modes so they may update Models and
* move these to asynchronous processes.
*/
} elseif ($response->getStatusCode() === 202) {
$this->asyncHubs[] = [
'response' => $response,
'hubUrl' => $url,
];
}
}
}
/**
* Get a basic prepared HTTP client for use
*
* @return Client
*/
protected function _getHttpClient()
{
$client = PubSubHubbub::getHttpClient();
$client->setMethod(HttpRequest::METHOD_POST);
$client->setOptions([
'useragent' => 'Laminas_Feed_Pubsubhubbub_Subscriber/' . Version::VERSION,
]);
return $client;
}
/**
* Return a list of standard protocol/optional parameters for addition to
* client's POST body that are specific to the current Hub Server URL
*
* @param string $hubUrl
* @param string $mode
* @return string
* @throws Exception\InvalidArgumentException
*/
protected function _getRequestParameters($hubUrl, $mode)
{
if (! in_array($mode, ['subscribe', 'unsubscribe'])) {
throw new Exception\InvalidArgumentException(
'Invalid mode specified: "' . $mode . '" which should have been "subscribe" or "unsubscribe"'
);
}
$params = [
'hub.mode' => $mode,
'hub.topic' => $this->getTopicUrl(),
];
if ($this->getPreferredVerificationMode() === PubSubHubbub::VERIFICATION_MODE_SYNC) {
$vmodes = [
PubSubHubbub::VERIFICATION_MODE_SYNC,
PubSubHubbub::VERIFICATION_MODE_ASYNC,
];
} else {
$vmodes = [
PubSubHubbub::VERIFICATION_MODE_ASYNC,
PubSubHubbub::VERIFICATION_MODE_SYNC,
];
}
$params['hub.verify'] = [];
foreach ($vmodes as $vmode) {
$params['hub.verify'][] = $vmode;
}
/**
* Establish a persistent verify_token and attach key to callback
* URL's path/query_string
*/
$key = $this->_generateSubscriptionKey($params, $hubUrl);
$token = $this->_generateVerifyToken();
$params['hub.verify_token'] = $token;
// Note: query string only usable with PuSH 0.2 Hubs
if (! $this->usePathParameter) {
$params['hub.callback'] = $this->getCallbackUrl()
. '?xhub.subscription=' . PubSubHubbub::urlencode($key);
} else {
$params['hub.callback'] = rtrim($this->getCallbackUrl(), '/')
. '/' . PubSubHubbub::urlencode($key);
}
if ($mode === 'subscribe' && $this->getLeaseSeconds() !== null) {
$params['hub.lease_seconds'] = $this->getLeaseSeconds();
}
// hub.secret not currently supported
$optParams = $this->getParameters();
foreach ($optParams as $name => $value) {
$params[$name] = $value;
}
// store subscription to storage
$now = new DateTime();
$expires = null;
if (isset($params['hub.lease_seconds'])) {
$expires = $now->add(new DateInterval('PT' . $params['hub.lease_seconds'] . 'S'))
->format('Y-m-d H:i:s');
}
// phpcs:disable Generic.Files.LineLength.TooLong
$data = [
'id' => $key,
'topic_url' => $params['hub.topic'],
'hub_url' => $hubUrl,
'created_time' => $now->format('Y-m-d H:i:s'),
'lease_seconds' => $params['hub.lease_seconds'],
/** @psalm-suppress PossiblyInvalidCast */
'verify_token' => hash('sha256', (string) $params['hub.verify_token']),
'secret' => null,
'expiration_time' => $expires,
'subscription_state' => $mode === 'unsubscribe' ? PubSubHubbub::SUBSCRIPTION_TODELETE : PubSubHubbub::SUBSCRIPTION_NOTVERIFIED,
];
// phpcs:enable Generic.Files.LineLength.TooLong
$this->getStorage()->setSubscription($data);
return $this->_toByteValueOrderedString(
$this->_urlEncode($params)
);
}
/**
* Simple helper to generate a verification token used in (un)subscribe
* requests to a Hub Server. Follows no particular method, which means
* it might be improved/changed in future.
*
* @return string
*/
protected function _generateVerifyToken()
{
if (! empty($this->testStaticToken)) {
return $this->testStaticToken;
}
return uniqid((string) rand(), true) . time();
}
/**
* Simple helper to generate a verification token used in (un)subscribe
* requests to a Hub Server.
*
* @param array $params
* @param string $hubUrl The Hub Server URL for which this token will apply
* @return string
*/
protected function _generateSubscriptionKey(array $params, $hubUrl)
{
$keyBase = $params['hub.topic'] . $hubUrl;
return md5($keyBase);
}
/**
* URL Encode an array of parameters
*
* @param array $params
* @return array
*/
protected function _urlEncode(array $params)
{
$encoded = [];
foreach ($params as $key => $value) {
if (is_array($value)) {
$ekey = PubSubHubbub::urlencode($key);
$encoded[$ekey] = [];
foreach ($value as $duplicateKey) {
$encoded[$ekey][] = PubSubHubbub::urlencode($duplicateKey);
}
} else {
$encoded[PubSubHubbub::urlencode($key)] = PubSubHubbub::urlencode($value);
}
}
return $encoded;
}
/**
* Order outgoing parameters
*
* @param array $params
* @return string
*/
protected function _toByteValueOrderedString(array $params)
{
$return = [];
uksort($params, 'strnatcmp');
foreach ($params as $key => $value) {
if (is_array($value)) {
foreach ($value as $keyduplicate) {
$return[] = $key . '=' . $keyduplicate;
}
} else {
$return[] = $key . '=' . $value;
}
}
return implode('&', $return);
}
// phpcs:enable PSR2.Methods.MethodDeclaration.Underscore
/**
* This is STRICTLY for testing purposes only...
*
* @internal
*
* @var null|string
*/
protected $testStaticToken;
/**
* @internal
*/
final public function setTestStaticToken(string $token)
{
$this->testStaticToken = (string) $token;
}
}
PK ]T|? src/PubSubHubbub/Version.phpnu ٘ db->select(['id' => $data['id']]);
if (0 < count($result)) {
/** @psalm-suppress UndefinedInterfaceMethod */
$data['created_time'] = $result->current()->created_time;
$now = $this->getNow();
if (
array_key_exists('lease_seconds', $data)
&& $data['lease_seconds']
) {
$data['expiration_time'] = $now->add(new DateInterval('PT' . $data['lease_seconds'] . 'S'))
->format('Y-m-d H:i:s');
}
$this->db->update(
$data,
['id' => $data['id']]
);
return false;
}
$this->db->insert($data);
return true;
}
/**
* Get subscription by ID/key
*
* @param string $key
* @return array
* @throws PubSubHubbub\Exception\InvalidArgumentException
*/
public function getSubscription($key)
{
if (empty($key) || ! is_string($key)) {
throw new PubSubHubbub\Exception\InvalidArgumentException(
'Invalid parameter "key" of "' . $key . '" must be a non-empty string'
);
}
$result = $this->db->select(['id' => $key]);
if (count($result)) {
/** @psalm-suppress UndefinedInterfaceMethod */
return $result->current()->getArrayCopy();
}
return false;
}
/**
* Determine if a subscription matching the key exists
*
* @param string $key
* @return bool
* @throws PubSubHubbub\Exception\InvalidArgumentException
*/
public function hasSubscription($key)
{
if (empty($key) || ! is_string($key)) {
throw new PubSubHubbub\Exception\InvalidArgumentException(
'Invalid parameter "key" of "' . $key . '" must be a non-empty string'
);
}
$result = $this->db->select(['id' => $key]);
if (count($result)) {
return true;
}
return false;
}
/**
* Delete a subscription
*
* @param string $key
* @return bool
*/
public function deleteSubscription($key)
{
$result = $this->db->select(['id' => $key]);
if (count($result)) {
$this->db->delete(
['id' => $key]
);
return true;
}
return false;
}
/**
* Get a new DateTime or the one injected for testing
*
* @return DateTime
*/
public function getNow()
{
if (null === $this->now) {
return new DateTime();
}
return $this->now;
}
/**
* Set a DateTime instance for assisting with unit testing
*
* @return $this
*/
public function setNow(DateTime $now)
{
$this->now = $now;
return $this;
}
}
PK ]Te ( src/PubSubHubbub/Model/AbstractModel.phpnu ٘ db = new TableGateway($table, null);
} else {
$this->db = $tableGateway;
}
}
}
PK ]T 9- - src/PubSubHubbub/Publisher.phpnu ٘ setOptions($options);
}
}
/**
* Process any injected configuration options
*
* @param array|Traversable $options Options array or Traversable object
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setOptions($options)
{
if ($options instanceof Traversable) {
$options = ArrayUtils::iteratorToArray($options);
}
if (! is_array($options)) {
throw new Exception\InvalidArgumentException(
'Array or Traversable object expected, got ' . gettype($options)
);
}
if (array_key_exists('hubUrls', $options)) {
$this->addHubUrls($options['hubUrls']);
}
if (array_key_exists('updatedTopicUrls', $options)) {
$this->addUpdatedTopicUrls($options['updatedTopicUrls']);
}
if (array_key_exists('parameters', $options)) {
$this->setParameters($options['parameters']);
}
return $this;
}
/**
* Add a Hub Server URL supported by Publisher
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function addHubUrl($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->hubUrls[] = $url;
return $this;
}
/**
* Add an array of Hub Server URLs supported by Publisher
*
* @return $this
*/
public function addHubUrls(array $urls)
{
foreach ($urls as $url) {
$this->addHubUrl($url);
}
return $this;
}
/**
* Remove a Hub Server URL
*
* @param string $url
* @return $this
*/
public function removeHubUrl($url)
{
if (! in_array($url, $this->getHubUrls())) {
return $this;
}
$key = array_search($url, $this->hubUrls);
unset($this->hubUrls[$key]);
return $this;
}
/**
* Return an array of unique Hub Server URLs currently available
*
* @return array
*/
public function getHubUrls()
{
$this->hubUrls = array_unique($this->hubUrls);
return $this->hubUrls;
}
/**
* Add a URL to a topic (Atom or RSS feed) which has been updated
*
* @param string $url
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function addUpdatedTopicUrl($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$this->updatedTopicUrls[] = $url;
return $this;
}
/**
* Add an array of Topic URLs which have been updated
*
* @return $this
*/
public function addUpdatedTopicUrls(array $urls)
{
foreach ($urls as $url) {
$this->addUpdatedTopicUrl($url);
}
return $this;
}
/**
* Remove an updated topic URL
*
* @param string $url
* @return $this
*/
public function removeUpdatedTopicUrl($url)
{
if (! in_array($url, $this->getUpdatedTopicUrls())) {
return $this;
}
$key = array_search($url, $this->updatedTopicUrls);
unset($this->updatedTopicUrls[$key]);
return $this;
}
/**
* Return an array of unique updated topic URLs currently available
*
* @return array
*/
public function getUpdatedTopicUrls()
{
$this->updatedTopicUrls = array_unique($this->updatedTopicUrls);
return $this->updatedTopicUrls;
}
/**
* Notifies a single Hub Server URL of changes
*
* @param string $url The Hub Server's URL
* @return void
* @throws Exception\InvalidArgumentException
* @throws Exception\RuntimeException
*/
public function notifyHub($url)
{
if (empty($url) || ! is_string($url) || ! Uri::factory($url)->isValid()) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "url" of "' . $url . '" must be a non-empty string and a valid URL'
);
}
$client = $this->_getHttpClient();
$client->setUri($url);
$response = $client->getResponse();
if ($response->getStatusCode() !== 204) {
throw new Exception\RuntimeException(
'Notification to Hub Server at "' . $url . '" appears to have failed with a status code of'
. ' "' . $response->getStatusCode() . '" and message "' . $response->getContent() . '"'
);
}
}
/**
* Notifies all Hub Server URLs of changes
*
* If a Hub notification fails, certain data will be retained in an
* an array retrieved using getErrors(), if a failure occurs for any Hubs
* the isSuccess() check will return FALSE. This method is designed not
* to needlessly fail with an Exception/Error unless from Laminas\Http\Client.
*
* @return void
* @throws Exception\RuntimeException
*/
public function notifyAll()
{
$client = $this->_getHttpClient();
$hubs = $this->getHubUrls();
if (empty($hubs)) {
throw new Exception\RuntimeException(
'No Hub Server URLs have been set so no notifications can be sent'
);
}
$this->errors = [];
foreach ($hubs as $url) {
$client->setUri($url);
$client->send();
$response = $client->getResponse();
if ($response->getStatusCode() !== 204) {
$this->errors[] = [
'response' => $response,
'hubUrl' => $url,
];
}
}
}
/**
* Add an optional parameter to the update notification requests
*
* @param string|array $name
* @param null|string $value
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function setParameter($name, $value = null)
{
if (is_array($name)) {
$this->setParameters($name);
return $this;
}
if (empty($name) || ! is_string($name)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "name" of "' . $name . '" must be a non-empty string'
);
}
if ($value === null) {
$this->removeParameter($name);
return $this;
}
if (empty($value) || (! is_string($value) && $value !== null)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "value" of "' . $value . '" must be a non-empty string'
);
}
$this->parameters[$name] = $value;
return $this;
}
/**
* Add an optional parameter to the update notification requests
*
* @return $this
*/
public function setParameters(array $parameters)
{
foreach ($parameters as $name => $value) {
$this->setParameter($name, $value);
}
return $this;
}
/**
* Remove an optional parameter for the notification requests
*
* @param string $name
* @return $this
* @throws Exception\InvalidArgumentException
*/
public function removeParameter($name)
{
if (empty($name) || ! is_string($name)) {
throw new Exception\InvalidArgumentException(
'Invalid parameter "name" of "' . $name . '" must be a non-empty string'
);
}
if (array_key_exists($name, $this->parameters)) {
unset($this->parameters[$name]);
}
return $this;
}
/**
* Return an array of optional parameters for notification requests
*
* @return array
*/
public function getParameters()
{
return $this->parameters;
}
/**
* Returns a boolean indicator of whether the notifications to Hub
* Servers were ALL successful. If even one failed, FALSE is returned.
*
* @return bool
*/
public function isSuccess()
{
return ! $this->errors;
}
/**
* Return an array of errors met from any failures, including keys:
* 'response' => the Laminas\Http\Response object from the failure
* 'hubUrl' => the URL of the Hub Server whose notification failed
*
* @return array
*/
public function getErrors()
{
return $this->errors;
}
/**
* Get a basic prepared HTTP client for use
*
* @return Client
* @throws Exception\RuntimeException
*/
// phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
protected function _getHttpClient()
{
$client = PubSubHubbub::getHttpClient();
$client->setMethod(HttpRequest::METHOD_POST);
$client->setOptions([
'useragent' => 'Laminas_Feed_Pubsubhubbub_Publisher/' . Version::VERSION,
]);
$params = [];
$params[] = 'hub.mode=publish';
$topics = $this->getUpdatedTopicUrls();
if (empty($topics)) {
throw new Exception\RuntimeException('No updated topic URLs have been set');
}
foreach ($topics as $topicUrl) {
$params[] = 'hub.url=' . urlencode($topicUrl);
}
$optParams = $this->getParameters();
foreach ($optParams as $name => $value) {
$params[] = urlencode($name) . '=' . urlencode($value);
}
$paramString = implode('&', $params);
$client->setRawBody($paramString);
return $client;
}
}
PK ]TE &