docker-compose.yml 0000644 00000000154 13663220355 0010206 0 ustar 00 version: "3"
services:
php:
image: php:7.1
volumes:
- .:/var/www
working_dir: /var/www phpunit.xml 0000644 00000000545 13663220355 0006766 0 ustar 00
./src/Tests
./src/
composer.json 0000644 00000002322 13663220355 0007272 0 ustar 00 {
"name": "deubertit/elastic-apm-doctrine1",
"description": "Doctrine 1 queries as transactions and sends them to elastic apm.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "Ivan Petrov",
"email": "ivan.petrov@deubert.it"
}
],
"minimum-stability": "dev",
"repositories": [
{
"type": "git",
"url": "https://gitlab.deubert.it/deubert-it/elastic-apm-zf1.git"
}
],
"require": {
"ext-curl": "*",
"ext-zip": "^1.15",
"ext-mbstring": "*",
"ext-pdo": "*",
"philkra/elastic-apm-php-agent": "7.0.0-rc3",
"deubertit/elastic-apm-zf1": "*@dev"
},
"require-dev" : {
"zendframework/zendframework1": "*",
"diablomedia/doctrine1": "*",
"phpunit/phpunit" : "5.*"
},
"autoload": {
"psr-4": {
"DeubertIt\\ElasticApmDoctrine\\": "src/"
},
"exclude-from-classmap": [
"src/Tests/"
]
},
"autoload-dev": {
"psr-4": {
"DeubertIt\\ElasticApmDoctrine\\Tests\\": "src/Tests/"
}
},
"config" : {
"optimize-autoloader" : true
}
}
README.md 0000644 00000001517 13663220355 0006034 0 ustar 00 # DeubertIt :: Elastic Apm Doctrine
Doctrine queries as transactions in elastic apm
### How to integrate into a project
Add `\DeubertIt\ElasticApmDoctrine\Bootstrap::attach();` in `Zend_Bootstrap`
### Package Integration
1. Add composer repository
#### Production
```json
{
"repositories": [
{
"type": "git",
"url": "https://gitlab.deubert.it/deubert-it/elastic-apm-doctrine1.git"
}
],
"require": {
"deubertit/elastic-apm-doctrine1": "*@dev"
}
}
```
#### Development
```json
{
"repositories": [
{
"type": "path",
"url": "../"
}
],
"require": {
"deubertit/elastic-apm-doctrine1": "*@dev"
}
}
```
### Tests
```bash
composer install
docker-compose run --rm php php ./vendor/bin/phpunit
```
.gitlab-ci.yml 0000644 00000000456 13663220355 0007212 0 ustar 00 ---
stages:
- postdeploy
include:
- project: 'gitlab/templates'
ref: master
file: '/satis/webhook.yml'
satis_update_job:
extends: .satis_update_job_template
variables:
PACKAGENAME: "deubertit/elastic-apm-doctrine"
WEBHOOKURL: "https://composer.deubert.it/webhookReceiver.php"
.gitignore 0000644 00000000043 13663220355 0006536 0 ustar 00 .idea
.phpunit.result.cache
vendor
src/Transaction/Bag.php 0000644 00000006516 13663220355 0011037 0 ustar 00
*/
class Bag
{
const STATUS_STARTED = 1;
const STATUS_STOPPED = 0;
/**
* @var $this
*/
protected static $instance;
/**
* @var array|Transaction[]
*/
protected $transations = [];
protected function __construct() {}
public static function getInstance()
{
if (is_null(self::$instance)) {
self::$instance = new Bag();
}
return self::$instance;
}
/**
* @return array|Transaction[]
*/
public function getTransations()
{
return $this->transations;
}
/**
* @param array|Transaction[] $transations
* @return Bag
*/
public function setTransations($transations)
{
$this->transations = $transations;
return $this;
}
/**
* @param string|Transaction $transaction transaction name or instance
* @return $this
*/
public function startedTransaction($transaction)
{
$name = $this->getTransactionName($transaction);
$this->transations[$name] = self::STATUS_STARTED;
return $this;
}
/**
* @param string|Transaction $transaction transaction name or instance
* @return $this
*/
public function stoppedTransaction($transaction)
{
$name = $this->getTransactionName($transaction);
if (isset($this->transations[$name])) {
$this->transations[$name] = self::STATUS_STOPPED;
}
return $this;
}
/**
* @param string|Transaction $transaction transaction name or instance
* @return bool
*/
public function transactionAlreadyExists($transaction)
{
$name = $this->getTransactionName($transaction);
if (isset($this->transations[$name])) {
return true;
}
return false;
}
/**
* @param string|Transaction $transaction transaction name or instance
* @return bool
*/
public function transactionIsStopped($transaction)
{
$name = $this->getTransactionName($transaction);
if (!isset($this->transations[$name]) || $this->transations[$name] == self::STATUS_STOPPED) {
return true;
}
return false;
}
/**
* @param string|Transaction $transaction transaction name or instance
* @return string
*/
protected function getTransactionName($transaction)
{
$name = $transaction;
if ($transaction instanceof Transaction) {
$name = $transaction->getTransactionName();
}
return $name;
}
/**
* @param string $name
* @return string
*/
public function getNewTransactionName($name)
{
$count = 1;
array_map(function ($key) use (&$count, $name) {
if (strpos($key, $name) !== false) {
$count++;
}
}, array_keys($this->transations));
return $name.'_'.$count;
}
}
src/Tests/TestCase.php 0000644 00000002217 13663220355 0010670 0 ustar 00
*/
class TestCase extends \PHPUnit\Framework\TestCase
{
/**
* @return Agent|MockObject
*/
protected function getElasticApmAgentMock()
{
$config = [
'appName' => 'test-app',
'appVersion' => 'test-app-dummy',
'serverUrl' => 'http://testing.domain.com:8200',
'active' => true
];
/** @var Agent $agent */
$agent = $this->getMockBuilder(Agent::class)
->setConstructorArgs([
'config' => $config,
])
->disableOriginalConstructor()
->getMock();
return $agent;
}
}
src/Tests/Context/EventContextTests.php 0000644 00000003131 13663220355 0014246 0 ustar 00
*/
class EventContextTests extends TestCase
{
public function testContextData()
{
$doctrineEventMock = $this->getMockBuilder(\Doctrine_Event::class)
->disableOriginalConstructor()
->getMock();
$doctrineEventMock->method('getCode')->willReturn(\Doctrine_Event::STMT_EXECUTE);
$doctrineEventMock->method('getElapsedSecs')->willReturn(0.00031304359436035);
$doctrineEventMock->method('getQuery')->willReturn('SELECT * FROM TABLE_NAME');
$doctrineEventMock->method('getParams')->willReturn(['param1' => 'value1']);
$profilers = [
'default' => [$doctrineEventMock]
];
$eventContext = new EventContext();
$eventContext->setEvent($doctrineEventMock);
$context = $eventContext->getContext();
$expectedContext = [
'query' => 'SELECT * FROM TABLE_NAME',
'time' => '[0.31 ms]',
'params' => [
'param1' => 'value1',
],
];
$this->assertEquals($expectedContext, $context);
}
}
src/Tests/Profiler/ElasticApmDoctrineProfilerTests.php 0000644 00000001200 13663220355 0017166 0 ustar 00
*/
class ElasticApmDoctrineProfilerTests extends TestCase
{
public function testEventTransaction()
{
$this->assertTrue(true);
}
}
src/Tests/ElasticApmDoctrineTests.php 0000644 00000003532 13663220355 0013713 0 ustar 00
*/
class ElasticApmDoctrineTests extends TestCase
{
/**
* @var Agent
*/
protected $agent;
public function setUp()
{
$agent = $this->getElasticApmAgentMock();
\Zend_Registry::set(Base::ELASTIC_APM_REGISTRYKEY, $agent);
$this->agent = $agent;
}
public function testGetDefaultAgent()
{
$elasticApmAgent = ElasticApmDoctrine::getAgent();
$this->assertEquals($elasticApmAgent, $this->agent);
}
public function testTransaction()
{
$transactionMock = $this->getMockBuilder(Transaction::class)
->disableOriginalConstructor()
->getMock();
$transactionMock->method('getTransactionName')
->willReturn('transaction-name');
$agent = $this->agent;
$agent->method('getTransaction')
->willReturn($transactionMock);
$agent->method('startTransaction')
->willReturn($transactionMock);
ElasticApmDoctrine::setAgent($agent);
$transaction = ElasticApmDoctrine::start('transaction-name');
$this->assertInstanceOf(Transaction::class, $transaction);
$this->assertEquals($agent->getTransaction('transaction-name'), $transaction);
$this->assertEquals('transaction-name', $transaction->getTransactionName());
}
}
src/Tests/Listener/ElasticApmDoctrineListenerTests.php 0000644 00000003060 13663220355 0017202 0 ustar 00
*/
class ElasticApmDoctrineListenerTests extends TestCase
{
public function testListen()
{
/** @var \Doctrine_Connection $connectionMock */
$connectionMock = $this->getMockBuilder(\Doctrine_Connection_Mysql::class)
->disableOriginalConstructor()
->getMock();
$connectionMock->method('getName')->willReturn('testing-default');
/** @var MockObject|\Doctrine_Manager $managerMock */
$managerMock = $this->getMockBuilder(\Doctrine_Manager::class)
->disableOriginalConstructor()
->getMock();
$managerMock->method('count')->willReturn(1);
$managerMock->method('getIterator')->willReturn([$connectionMock]);
ElasticApmDoctrineListener::listen(['manager' => $managerMock]);
$this->assertTrue(ElasticApmDoctrineListener::isListening());
$profilers = ElasticApmDoctrineListener::getProfilers();
$this->assertCount(1, $profilers);
}
}
src/Bootstrap.php 0000644 00000001722 13663220355 0010030 0 ustar 00
*/
class Bootstrap
{
/**
* @var Transaction
*/
protected static $transactions;
/**
* @var bool
*/
protected static $attached = false;
/**
* @return bool
*/
public static function isAttached()
{
return self::$attached;
}
public static function attach()
{
self::$attached = true;
ElasticApmDoctrine::enable();
}
public static function detach()
{
self::$attached = false;
ElasticApmDoctrine::disable();
}
}
src/ElasticApmDoctrine.php 0000644 00000013006 13663220355 0011563 0 ustar 00
*/
class ElasticApmDoctrine
{
/**
* @var bool
*/
protected static $enabled = false;
/**
* @var Agent
*/
protected static $agent;
/**
* @var int
*/
public static $transactionNameLength = 100;
/**
* @return bool
*/
public static function isEnabled()
{
return self::$enabled;
}
public static function enable()
{
self::$enabled = true;
ElasticApmDoctrineListener::listen();
}
public static function disable()
{
self::$enabled = false;
}
/**
* @return Agent
* @throws \Exception
*/
public static function getAgent()
{
if (is_null(self::$agent)) {
self::$agent = Base::getRegistryInstance();
}
return self::$agent;
}
/**
* @param Agent|null $agent
*/
public static function setAgent(Agent $agent = null)
{
self::$agent = $agent;
}
/**
* @param int $lenght
*/
public static function setTransactionNameLenght(int $lenght = null)
{
self::$transactionNameLength = $lenght;
}
/**
* @param string $name
* @param Transaction|null $parent
* @return Transaction|null
* @throws \Exception
*/
public static function start(string $name = null, Transaction $parent = null)
{
try {
if (!Bag::getInstance()->transactionAlreadyExists($name)) {
$name = Bag::getInstance()->getNewTransactionName($name);
}
$transaction = self::getAgent()->startTransaction($name);
if (!is_null($parent)) {
$transaction->setParent($parent);
}
Bag::getInstance()->startedTransaction($transaction);
return $transaction;
} catch (\Exception $e) {
throw $e;
}
return null;
}
/**
* @param Transaction|string $transaction
* @throws \Exception
*/
public static function stop($transaction)
{
try {
$name = $transaction;
if ($transaction instanceof Transaction) {
$name = $transaction->getTransactionName();
}
if (Bag::getInstance()->transactionAlreadyExists($name) && !Bag::getInstance()->transactionIsStopped($name)) {
self::getAgent()->stopTransaction($name);
Bag::getInstance()->stoppedTransaction($name);
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* @param string $name
* @return Transaction|null
*/
public static function getTransaction(string $name)
{
try {
return self::getAgent()->getTransaction($name);
} catch (\Exception $e) {}
return null;
}
/**
* @param Transaction|string|null $trasnaction
* @param array|null $context
* @return Transaction
*/
public static function setTransactionContext($trasnaction, array $context = null)
{
if (is_string($trasnaction)) {
$trasnaction = self::getTransaction($trasnaction);
}
if (!is_null($context)) {
$trasnaction->setCustomContext($context);
}
return $trasnaction;
}
/**
* @param string $query
* @return string
*/
public static function generateNameFromQuery(string $query)
{
$name = str_replace('`', '', $query);
if (!is_null(self::$transactionNameLength) && self::$transactionNameLength > 0) {
$ext = '';
if (strlen($name) > self::$transactionNameLength) {
$ext = ' ...';
}
$name = substr($name, 0, self::$transactionNameLength) . $ext;
}
return $name;
}
/**
* Get parent transaction
* If ElasticApmZfMvc::$transaction (current ElasticApmZfMvc transaction) exists, this will be the parent
* Else main transaction will be the parent
*
* @return Transaction|null
* @throws \Exception
*/
public static function getParentTransaction()
{
$parentTransaction = null;
if (class_exists(ElasticApmZfMvc::class)) {
$isEnabled = ElasticApmZfMvc::isEnabled();
if ($isEnabled) {
$parentTransaction = ElasticApmZfMvc::getCurrentTransaction();
} else {
$parentTransaction = self::getMainTransaction();
}
} else {
$parentTransaction = self::getMainTransaction();
}
return $parentTransaction;
}
/**
* @return Transaction|null
* @throws \Zend_Exception
*/
protected static function getMainTransaction()
{
if (\Zend_Registry::isRegistered('elastic-apm-agent_maintransaction')) {
return \Zend_Registry::get('elastic-apm-agent_maintransaction');
}
return null;
}
}
src/Context/EventContext.php 0000644 00000003106 13663220355 0012123 0 ustar 00
*/
class EventContext
{
/**
* @var \Doctrine_Event|null
*/
protected $event;
/**
* @return \Doctrine_Event|null
*/
public function getEvent()
{
return $this->event;
}
/**
* @param \Doctrine_Event|null $event
* @return $this
*/
public function setEvent($event)
{
$this->event = $event;
return $this;
}
/**
* @return array|null
*/
public function getContext()
{
if (!$this->getEvent()) {
return null;
}
$query = $this->getEvent()->getQuery();
//$query = htmlspecialchars($this->getEvent()->getQuery());
//$query = preg_replace('/\b(SELECT|AS|FROM|WHERE|ORDER BY|GROUP BY|LIMIT|ON|LEFT JOIN|JOIN)\b/','$1', $query);
$time = '[' . round($this->getEvent()->getElapsedSecs() * 1000, 2) . ' ms]';
$params = $this->getEvent()->getParams();
if (!empty($params)) {
$params = array_map('htmlspecialchars', $params);
}
return [
'query' => $query,
'time' => $time,
'params' => $params
];
}
}
src/Context/Context.php 0000644 00000005144 13663220355 0011125 0 ustar 00
*/
class Context
{
/**
* @var array
*/
protected $profilers;
/**
* @return array
*/
public function getProfilers()
{
return $this->profilers;
}
/**
* @param array $profilers
* @return $this
*/
public function setProfilers(array $profilers = [])
{
$this->profilers = $profilers;
return $this;
}
/**
* @return string|null
*/
public function getSummary()
{
if (!$this->getProfilers()) {
return null;
}
$data = [];
foreach ($this->getProfilers() as $profiler) {
$queries = 0;
$time = 0;
/** @var \Doctrine_Event $event */
foreach ($profiler as $event) {
if (in_array($event->getCode(), ElasticApmDoctrineListener::getQueryEventCodes())) {
$time += $event->getElapsedSecs();
$queries += 1;
}
}
$data[] = $queries . ' in ' . round($time * 1000, 2) . ' ms';
}
$summary = implode(' / ', $data);
return $summary;
}
/**
* @return array|null
*/
public function getData()
{
if (!$this->getProfilers()) {
return null;
}
$data = [];
foreach ($this->getProfilers() as $name => $profiler) {
$data[$name]['connectionName'] = $name;
/** @var \Doctrine_Event $event */
foreach ($profiler as $event) {
if (in_array($event->getCode(), ElasticApmDoctrineListener::getQueryEventCodes())) {
$eventContext = new EventContext();
$eventContext->setEvent($event);
$data[$name][] = $eventContext->getContext();
}
}
}
return $data;
}
/**
* @return array|null
*/
public function getContext()
{
if (!$this->getProfilers()) {
return null;
}
return [
'summary' => $this->getSummary(),
'data' => $this->getData(),
];
}
}
src/Profiler/ElasticApmDoctrineProfiler.php 0000644 00000004164 13663220355 0015055 0 ustar 00
*/
class ElasticApmDoctrineProfiler extends \Doctrine_Connection_Profiler
{
/**
* @var Transaction|null
*/
protected $transaction;
public function __call($m, $a)
{
// Start transaction on pre event
if (substr($m, 0, 3) === 'pre') {
/** @var \Doctrine_Event $event */
$event = $a[0];
if ($event instanceof \Doctrine_Event && in_array($event->getCode(), ElasticApmDoctrineListener::getQueryEventCodes())) {
$name = ElasticApmDoctrine::generateNameFromQuery($event->getQuery());
$transaction = ElasticApmDoctrine::start($name, ElasticApmDoctrine::getParentTransaction());
$this->transaction = $transaction;
}
}
parent::__call($m, $a);
// Stop transaction on post event
if (substr($m, 0, 3) !== 'pre') {
/** @var \Doctrine_Event $event */
$event = $a[0];
if ($event instanceof \Doctrine_Event && in_array($event->getCode(), ElasticApmDoctrineListener::getQueryEventCodes())) {
$eventContext = new EventContext();
$eventContext->setEvent($event);
$customContext = $eventContext->getContext();
if (!is_null($customContext)) {
ElasticApmDoctrine::setTransactionContext($this->transaction, $customContext);
}
ElasticApmDoctrine::stop($this->transaction);
}
}
}
}
src/Listener/ElasticApmDoctrineListener.php 0000644 00000004146 13663220355 0015063 0 ustar 00
*/
class ElasticApmDoctrineListener
{
/**
* @var bool
*/
protected static $listen = false;
/**
* @var array
*/
protected static $profilers = [];
/**
* @return bool
*/
public static function isListening()
{
return self::$listen;
}
/**
* @return array
*/
public static function getProfilers()
{
return self::$profilers;
}
/**
* @param array $options
*/
public static function listen(array $options = [])
{
if (!self::isListening()) {
if (!isset($options['manager']) || !count($options['manager'])) {
if (\Doctrine_Manager::getInstance()) {
$options['manager'] = \Doctrine_Manager::getInstance();
}
}
foreach ($options['manager']->getIterator() as $connection) {
self::$profilers[$connection->getName()] = new ElasticApmDoctrineProfiler();
$connection->addListener(self::$profilers[$connection->getName()]);
}
}
self::$listen = true;
}
public static function getContext()
{
$context = new Context();
$context->setProfilers(self::$profilers);
return $context->getContext();
}
/**
* return codes for 'query' type of event
*/
public static function getQueryEventCodes()
{
return array(
\Doctrine_Event::CONN_EXEC,
\Doctrine_Event::STMT_EXECUTE,
\Doctrine_Event::CONN_QUERY,
);
}
}
composer.lock 0000644 00000221522 13663220355 0007256 0 ustar 00 {
"_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": "f2740b52a7a48b1caac3e834ac81f7c8",
"packages": [
{
"name": "deubertit/elastic-apm-zf1",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://gitlab.deubert.it/deubert-it/elastic-apm-zf1.git",
"reference": "99d4df7f82312c9a854b766cf042a669b70e9b91"
},
"require": {
"philkra/elastic-apm-php-agent": "7.0.0-rc3"
},
"type": "library",
"autoload": {
"psr-4": {
"DeubertIt\\ElasticApm\\": "src/"
},
"exclude-from-classmap": [
"src/Tests/"
]
},
"license": [
"MIT"
],
"authors": [
{
"name": "Karsten Deubert",
"email": "info@deubert.it"
}
],
"description": "Zend Framework 1 integration with Elastic APM - base project",
"time": "2020-05-14T14:41:35+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.5.x-dev",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
"reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/aab4ebd862aa7d04f01a4b51849d657db56d882e",
"reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.6.1",
"php": ">=5.5",
"symfony/polyfill-intl-idn": "^1.11"
},
"require-dev": {
"ext-curl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
"psr/log": "^1.1"
},
"suggest": {
"psr/log": "Required for using the Log middleware"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "6.5-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle is a PHP HTTP client library",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
"curl",
"framework",
"http",
"http client",
"rest",
"web service"
],
"time": "2020-04-18T10:38:46+00:00"
},
{
"name": "guzzlehttp/promises",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "89b1a76b7fda5853401297dc4b2a093cba1fda23"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/89b1a76b7fda5853401297dc4b2a093cba1fda23",
"reference": "89b1a76b7fda5853401297dc4b2a093cba1fda23",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"phpunit/phpunit": "^5.7.27 || ^7.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"time": "2020-02-15T23:33:03+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.x-dev",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "c247bf84e343f0b95927fa86cf23b7ffc9af04f3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/c247bf84e343f0b95927fa86cf23b7ffc9af04f3",
"reference": "c247bf84e343f0b95927fa86cf23b7ffc9af04f3",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"psr/http-message": "~1.0",
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
},
"provide": {
"psr/http-message-implementation": "1.0"
},
"require-dev": {
"ext-zlib": "*",
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
}
},
"autoload": {
"psr-4": {
"GuzzleHttp\\Psr7\\": "src/"
},
"files": [
"src/functions_include.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Schultze",
"homepage": "https://github.com/Tobion"
}
],
"description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
"http",
"message",
"psr-7",
"request",
"response",
"stream",
"uri",
"url"
],
"time": "2020-05-13T14:56:52+00:00"
},
{
"name": "philkra/elastic-apm-php-agent",
"version": "7.0.0-rc3",
"source": {
"type": "git",
"url": "https://github.com/philkra/elastic-apm-php-agent.git",
"reference": "076d9c4ac8235d2d8fc42ab4b71df23baaa34f15"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/philkra/elastic-apm-php-agent/zipball/076d9c4ac8235d2d8fc42ab4b71df23baaa34f15",
"reference": "076d9c4ac8235d2d8fc42ab4b71df23baaa34f15",
"shasum": ""
},
"require": {
"ext-curl": "*",
"ext-json": "*",
"guzzlehttp/guzzle": "6.*",
"php": ">= 7.1",
"ralouphie/getallheaders": "3.*"
},
"require-dev": {
"phpunit/phpunit": "7.*"
},
"suggest": {
"ext-xdebug": "Required for processing of request headers"
},
"type": "library",
"autoload": {
"psr-4": {
"PhilKra\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Philip Krauss",
"email": "philip@philipkrauss.at",
"homepage": "https://github.com/philkra"
},
{
"name": "George Boot",
"email": "george@entryninja.com"
},
{
"name": "Mohamed Al Ashaal",
"email": "mohamed.alashaal@speakol.com",
"homepage": "https://github.com/speakol-ads"
}
],
"description": "A php agent for Elastic APM v2 Intake API",
"time": "2019-11-07T15:39:00+00:00"
},
{
"name": "psr/http-message",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4",
"reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4",
"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"
],
"time": "2019-08-29T13:16:46+00:00"
},
{
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
"type": "git",
"url": "https://github.com/ralouphie/getallheaders.git",
"reference": "120b605dfeb996808c31b6477290a714d356e822"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
"reference": "120b605dfeb996808c31b6477290a714d356e822",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"require-dev": {
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5 || ^6.5"
},
"type": "library",
"autoload": {
"files": [
"src/getallheaders.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Ralph Khattar",
"email": "ralph.khattar@gmail.com"
}
],
"description": "A polyfill for getallheaders.",
"time": "2019-03-08T08:55:37+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
"reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
"reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-mbstring": "^1.3",
"symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.17-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Intl\\Idn\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Laurent Bassin",
"email": "laurent@bassin.info"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"idn",
"intl",
"polyfill",
"portable",
"shim"
],
"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": "2020-05-12T16:47:27+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
"reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.17-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
"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": "2020-05-12T16:47:27+00:00"
},
{
"name": "symfony/polyfill-php72",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
"reference": "f048e612a3905f34931127360bdd2def19a5e582"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
"reference": "f048e612a3905f34931127360bdd2def19a5e582",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.17-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Php72\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"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": "2020-05-12T16:47:27+00:00"
}
],
"packages-dev": [
{
"name": "diablomedia/doctrine1",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/diablomedia/doctrine1.git",
"reference": "bbe0e016640846865f3edfc1dbc787f93812bba9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/diablomedia/doctrine1/zipball/bbe0e016640846865f3edfc1dbc787f93812bba9",
"reference": "bbe0e016640846865f3edfc1dbc787f93812bba9",
"shasum": ""
},
"require": {
"ext-pdo": "*",
"php": ">=7.0",
"symfony/yaml": "^3.4 || ^4.1"
},
"replace": {
"doctrine/doctrine1": "*"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.16.3",
"phpstan/phpstan": "0.12.19",
"phpunit/php-code-coverage": "^4.0 || ^5.0 || ^6.0 || ^7.0",
"vimeo/psalm": "3.11.2"
},
"type": "library",
"autoload": {
"psr-0": {
"Doctrine_": "lib/"
},
"classmap": [
"lib/Doctrine.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1-or-later"
],
"authors": [
{
"name": "Konsta Vesterinen",
"email": "kvesteri@cc.hut.fi"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
}
],
"description": "PHP5+ Database ORM",
"homepage": "http://www.doctrine-project.org",
"keywords": [
"database",
"orm"
],
"time": "2020-04-27T17:39:16+00:00"
},
{
"name": "doctrine/instantiator",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/6a1471ddbf2f448b35f3a8e390c903435e6dd5de",
"reference": "6a1471ddbf2f448b35f3a8e390c903435e6dd5de",
"shasum": ""
},
"require": {
"php": "^7.1"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-shim": "^0.11",
"phpunit/phpunit": "^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"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": "http://ocramius.github.com/"
}
],
"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"
],
"time": "2019-12-23T19:18:31+00:00"
},
{
"name": "myclabs/deep-copy",
"version": "1.x-dev",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "a491d65139e2411c75704e871dd02bdddf5a4bdc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a491d65139e2411c75704e871dd02bdddf5a4bdc",
"reference": "a491d65139e2411c75704e871dd02bdddf5a4bdc",
"shasum": ""
},
"require": {
"php": "^7.1"
},
"replace": {
"myclabs/deep-copy": "self.version"
},
"require-dev": {
"doctrine/collections": "^1.0",
"doctrine/common": "^2.6",
"phpunit/phpunit": "^7.1"
},
"type": "library",
"autoload": {
"psr-4": {
"DeepCopy\\": "src/DeepCopy/"
},
"files": [
"src/DeepCopy/deep_copy.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Create deep copies (clones) of your objects",
"keywords": [
"clone",
"copy",
"duplicate",
"object",
"object graph"
],
"funding": [
{
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
"type": "tidelift"
}
],
"time": "2020-03-12T21:49:07+00:00"
},
{
"name": "phpdocumentor/reflection-common",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
"reference": "985f414b55eca4296ffc99db960a97b3cc8fbcea"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/985f414b55eca4296ffc99db960a97b3cc8fbcea",
"reference": "985f414b55eca4296ffc99db960a97b3cc8fbcea",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "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"
],
"time": "2020-04-27T09:34:19+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
"reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
"shasum": ""
},
"require": {
"ext-filter": "^7.1",
"php": "^7.2",
"phpdocumentor/reflection-common": "^2.0",
"phpdocumentor/type-resolver": "^1.0",
"webmozart/assert": "^1"
},
"require-dev": {
"doctrine/instantiator": "^1",
"mockery/mockery": "^1"
},
"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.",
"time": "2020-02-22T12:28:44+00:00"
},
{
"name": "phpdocumentor/type-resolver",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "95d8782070ccd738295bbe4483f8760f998ad64d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/95d8782070ccd738295bbe4483f8760f998ad64d",
"reference": "95d8782070ccd738295bbe4483f8760f998ad64d",
"shasum": ""
},
"require": {
"php": "^7.2",
"phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
"ext-tokenizer": "^7.2",
"mockery/mockery": "~1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "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",
"time": "2020-05-13T13:46:15+00:00"
},
{
"name": "phpspec/prophecy",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "451c3cd1418cf640de218914901e51b064abb093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
"reference": "451c3cd1418cf640de218914901e51b064abb093",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
},
"require-dev": {
"phpspec/phpspec": "^2.5 || ^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10.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"
],
"time": "2020-03-05T15:02:03+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "4.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
"reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-xmlwriter": "*",
"php": "^5.6 || ^7.0",
"phpunit/php-file-iterator": "^1.3",
"phpunit/php-text-template": "^1.2",
"phpunit/php-token-stream": "^1.4.2 || ^2.0",
"sebastian/code-unit-reverse-lookup": "^1.0",
"sebastian/environment": "^1.3.2 || ^2.0",
"sebastian/version": "^1.0 || ^2.0"
},
"require-dev": {
"ext-xdebug": "^2.1.4",
"phpunit/phpunit": "^5.7"
},
"suggest": {
"ext-xdebug": "^2.5.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.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"
],
"time": "2017-04-02T07:44:40+00:00"
},
{
"name": "phpunit/php-file-iterator",
"version": "1.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.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"
],
"time": "2017-11-27T13:52:08+00:00"
},
{
"name": "phpunit/php-text-template",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Simple template engine.",
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"keywords": [
"template"
],
"time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
"version": "1.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/9513098641797ce5f459dbc1de5a54c29b0ec1fb",
"reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"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": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Utility class for timing",
"homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
"timer"
],
"time": "2018-01-06T05:27:16+00:00"
},
{
"name": "phpunit/php-token-stream",
"version": "2.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "13eb9aba9626b1a3811c6a492acc9669d24bb85a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/13eb9aba9626b1a3811c6a492acc9669d24bb85a",
"reference": "13eb9aba9626b1a3811c6a492acc9669d24bb85a",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": "^7.0"
},
"require-dev": {
"phpunit/phpunit": "^6.2.4"
},
"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": "Wrapper around PHP's tokenizer extension.",
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
"keywords": [
"tokenizer"
],
"time": "2017-11-27T08:47:38+00:00"
},
{
"name": "phpunit/phpunit",
"version": "5.7.27",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
"reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-xml": "*",
"myclabs/deep-copy": "~1.3",
"php": "^5.6 || ^7.0",
"phpspec/prophecy": "^1.6.2",
"phpunit/php-code-coverage": "^4.0.4",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
"phpunit/php-timer": "^1.0.6",
"phpunit/phpunit-mock-objects": "^3.2",
"sebastian/comparator": "^1.2.4",
"sebastian/diff": "^1.4.3",
"sebastian/environment": "^1.3.4 || ^2.0",
"sebastian/exporter": "~2.0",
"sebastian/global-state": "^1.1",
"sebastian/object-enumerator": "~2.0",
"sebastian/resource-operations": "~1.0",
"sebastian/version": "^1.0.6|^2.0.1",
"symfony/yaml": "~2.1|~3.0|~4.0"
},
"conflict": {
"phpdocumentor/reflection-docblock": "3.0.2"
},
"require-dev": {
"ext-pdo": "*"
},
"suggest": {
"ext-xdebug": "*",
"phpunit/php-invoker": "~1.1"
},
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.7.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
],
"time": "2018-02-01T05:50:59+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
"version": "3.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
"reference": "a23b761686d50a560cc56233b9ecf49597cc9118"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118",
"reference": "a23b761686d50a560cc56233b9ecf49597cc9118",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.6 || ^7.0",
"phpunit/php-text-template": "^1.2",
"sebastian/exporter": "^1.2 || ^2.0"
},
"conflict": {
"phpunit/phpunit": "<5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^5.4"
},
"suggest": {
"ext-soap": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Mock Object library for PHPUnit",
"homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
"keywords": [
"mock",
"xunit"
],
"abandoned": true,
"time": "2017-06-30T09:13:00+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
"reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "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/",
"time": "2017-03-04T06:30:41+00:00"
},
{
"name": "sebastian/comparator",
"version": "1.2.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "18a5d97c25f408f48acaf6d1b9f4079314c5996a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/18a5d97c25f408f48acaf6d1b9f4079314c5996a",
"reference": "18a5d97c25f408f48acaf6d1b9f4079314c5996a",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"sebastian/diff": "~1.2",
"sebastian/exporter": "~1.2 || ~2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
"homepage": "http://www.github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
"equality"
],
"time": "2017-03-07T10:34:43+00:00"
},
{
"name": "sebastian/diff",
"version": "1.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
"diff"
],
"time": "2017-05-22T07:24:03+00:00"
},
{
"name": "sebastian/environment",
"version": "2.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
"reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
"reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^5.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": "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"
],
"time": "2016-11-26T07:53:53+00:00"
},
{
"name": "sebastian/exporter",
"version": "2.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "5e8e30670c3f36481e75211dbbcfd029a41ebf07"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/5e8e30670c3f36481e75211dbbcfd029a41ebf07",
"reference": "5e8e30670c3f36481e75211dbbcfd029a41ebf07",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0",
"sebastian/recursion-context": "^2.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.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": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
"homepage": "http://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
],
"time": "2017-03-07T10:36:49+00:00"
},
{
"name": "sebastian/global-state",
"version": "1.1.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "cea85a84b00f2795341ebbbca4fa396347f2494e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/cea85a84b00f2795341ebbbca4fa396347f2494e",
"reference": "cea85a84b00f2795341ebbbca4fa396347f2494e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.2|~5.0"
},
"suggest": {
"ext-uopz": "*"
},
"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"
}
],
"description": "Snapshotting of global state",
"homepage": "http://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
"time": "2017-02-23T14:11:06+00:00"
},
{
"name": "sebastian/object-enumerator",
"version": "2.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/object-enumerator.git",
"reference": "c956fe7a68318639f694fc6bba0c89b7cdf1b08c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/c956fe7a68318639f694fc6bba0c89b7cdf1b08c",
"reference": "c956fe7a68318639f694fc6bba0c89b7cdf1b08c",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0",
"sebastian/recursion-context": "^2.0"
},
"require-dev": {
"phpunit/phpunit": "^5.7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Traverses array structures and object graphs to enumerate all referenced objects",
"homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"time": "2017-03-07T10:37:45+00:00"
},
{
"name": "sebastian/recursion-context",
"version": "2.0.x-dev",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "7e4d7c56f6e65d215f71ad913a5256e5439aca1c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/7e4d7c56f6e65d215f71ad913a5256e5439aca1c",
"reference": "7e4d7c56f6e65d215f71ad913a5256e5439aca1c",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
},
"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": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
}
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"time": "2017-03-08T08:21:15+00:00"
},
{
"name": "sebastian/resource-operations",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/resource-operations.git",
"reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
"reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
"shasum": ""
},
"require": {
"php": ">=5.6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "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",
"time": "2015-07-28T20:34:47+00:00"
},
{
"name": "sebastian/version",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
"reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
"shasum": ""
},
"require": {
"php": ">=5.6"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
"time": "2016-10-03T07:35:21+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
"reference": "e94c8b1bbe2bc77507a1056cdb06451c75b427f9",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.17-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"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": "2020-05-12T16:14:59+00:00"
},
{
"name": "symfony/yaml",
"version": "4.4.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "fb3e34340351db0e4584ef72753e829f1d2197a0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/fb3e34340351db0e4584ef72753e829f1d2197a0",
"reference": "fb3e34340351db0e4584ef72753e829f1d2197a0",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"symfony/polyfill-ctype": "~1.8"
},
"conflict": {
"symfony/console": "<3.4"
},
"require-dev": {
"symfony/console": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.4-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"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": "2020-05-05T07:39:02+00:00"
},
{
"name": "webmozart/assert",
"version": "1.8.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
"reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
"reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"vimeo/psalm": "<3.9.1"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
"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"
],
"time": "2020-04-18T12:12:48+00:00"
},
{
"name": "zendframework/zendframework1",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/zendframework/zf1.git",
"reference": "136735e776f520b081cd374012852cb88cef9a88"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/zendframework/zf1/zipball/136735e776f520b081cd374012852cb88cef9a88",
"reference": "136735e776f520b081cd374012852cb88cef9a88",
"shasum": ""
},
"require": {
"php": ">=5.2.11"
},
"require-dev": {
"phpunit/dbunit": "1.3.*",
"phpunit/phpunit": "3.7.*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.12.x-dev"
}
},
"autoload": {
"psr-0": {
"Zend_": "library/"
}
},
"notification-url": "https://packagist.org/downloads/",
"include-path": [
"library/"
],
"license": [
"BSD-3-Clause"
],
"description": "Zend Framework 1",
"homepage": "http://framework.zend.com/",
"keywords": [
"ZF1",
"framework"
],
"abandoned": "zendframework/zendframework",
"time": "2018-05-16T15:50:52+00:00"
}
],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {
"deubertit/elastic-apm-zf1": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"ext-curl": "*",
"ext-zip": "^1.15",
"ext-mbstring": "*",
"ext-pdo": "*"
},
"platform-dev": [],
"plugin-api-version": "1.1.0"
}