From cdede3969d130a850b7766b111a94eb5fa4dfd6b Mon Sep 17 00:00:00 2001 From: andig Date: Mon, 2 Oct 2017 15:55:35 +0200 Subject: [PATCH 1/2] Use proxy repo to make installable --- composer.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index ada7ee4..8ad063c 100644 --- a/composer.json +++ b/composer.json @@ -3,11 +3,17 @@ "require": { "symfony/http-foundation": "^2.6|^3.0", "symfony/http-kernel": "^2.6|^3.0", - "php-pm/php-pm": "dev-master" + "php-pm/php-pm": "dev-react-0.8" }, "autoload": { "psr-4": { "PHPPM\\": "" } - } + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/andig/php-pm" + } + ] } From bf1c01c8e308d49a11158f865dea1e736a0af8a4 Mon Sep 17 00:00:00 2001 From: andig Date: Tue, 21 Nov 2017 20:18:40 +0100 Subject: [PATCH 2/2] Upgrade react/http --- Bootstraps/BootstrapInterface.php | 11 + Bootstraps/Drupal.php | 7 - Bootstraps/Laravel.php | 7 - Bootstraps/Symfony.php | 13 +- Bridges/HttpKernel.php | 114 ++- composer.json | 13 +- composer.lock | 1128 +++++++++++++++++++++++++---- 7 files changed, 1056 insertions(+), 237 deletions(-) create mode 100644 Bootstraps/BootstrapInterface.php diff --git a/Bootstraps/BootstrapInterface.php b/Bootstraps/BootstrapInterface.php new file mode 100644 index 0000000..fea8bb9 --- /dev/null +++ b/Bootstraps/BootstrapInterface.php @@ -0,0 +1,11 @@ +debug = $debug; } - /** - * @return string - */ - public function getStaticDirectory() { - return './'; - } - /** * Create a Drupal application. */ diff --git a/Bootstraps/Laravel.php b/Bootstraps/Laravel.php index 52e231b..2cf41fa 100644 --- a/Bootstraps/Laravel.php +++ b/Bootstraps/Laravel.php @@ -39,13 +39,6 @@ public function initialize($appenv, $debug) putenv("APP_ENV=" . $this->appenv); } - /** - * {@inheritdoc} - */ - public function getStaticDirectory() { - return 'public/'; - } - /** * {@inheritdoc} */ diff --git a/Bootstraps/Symfony.php b/Bootstraps/Symfony.php index db7adef..143ef3d 100644 --- a/Bootstraps/Symfony.php +++ b/Bootstraps/Symfony.php @@ -33,14 +33,6 @@ public function initialize($appenv, $debug) $this->debug = $debug; } - /** - * @return string - */ - public function getStaticDirectory() - { - return 'web/'; - } - /** * Create a Symfony application * @@ -58,9 +50,10 @@ public function getApplication() //since we need to change some services, we need to manually change some services $app = new \AppKernel($this->appenv, $this->debug); + // We need to change some services, before the boot, because they would + // otherwise be instantiated and passed to other classes which makes it + // impossible to replace them. - //we need to change some services, before the boot, because they would otherwise - //be instantiated and passed to other classes which makes it impossible to replace them. Utils::bindAndCall(function() use ($app) { // init bundles $app->initializeBundles(); diff --git a/Bridges/HttpKernel.php b/Bridges/HttpKernel.php index eed3a1f..fab72e7 100644 --- a/Bridges/HttpKernel.php +++ b/Bridges/HttpKernel.php @@ -6,10 +6,11 @@ use PHPPM\Bootstraps\BootstrapInterface; use PHPPM\Bootstraps\HooksInterface; use PHPPM\Bootstraps\RequestClassProviderInterface; -use PHPPM\React\HttpResponse; use PHPPM\Utils; use React\EventLoop\LoopInterface; -use React\Http\Request as ReactRequest; +use Psr\Http\Message\ServerRequestInterface; +use Psr\Http\Message\ResponseInterface; +use RingCentral\Psr7; use Symfony\Component\HttpFoundation\Cookie; use Symfony\Component\HttpFoundation\Request as SymfonyRequest; use Symfony\Component\HttpFoundation\Response as SymfonyResponse; @@ -43,7 +44,7 @@ class HttpKernel implements BridgeInterface * @param string $appBootstrap The name of the class used to bootstrap the application * @param string|null $appenv The environment your application will use to bootstrap (if any) * @param boolean $debug If debug is enabled - * @see http://stackphp.com + * @param LoopInterface $loop Event loop */ public function bootstrap($appBootstrap, $appenv, $debug, LoopInterface $loop) { @@ -61,23 +62,11 @@ public function bootstrap($appBootstrap, $appenv, $debug, LoopInterface $loop) /** * {@inheritdoc} */ - public function getStaticDirectory() - { - return $this->bootstrap->getStaticDirectory(); - } - - /** - * Handle a request using a HttpKernelInterface implementing application. - * - * @param ReactRequest $request - * @param HttpResponse $response - * - * @throws \Exception - */ - public function onRequest(ReactRequest $request, HttpResponse $response) + public function handle(ServerRequestInterface $request) { if (null === $this->application) { - return; + // internal server error + return new Psr7\Response(500, ['Content-type' => 'text/plain'], 'Application not configured during bootstrap'); } $syRequest = $this->mapRequest($request); @@ -94,18 +83,18 @@ public function onRequest(ReactRequest $request, HttpResponse $response) $syResponse = $this->application->handle($syRequest); } catch (\Exception $exception) { - $response->writeHead(500); // internal server error - $response->end(); + // internal server error + $response = new Psr7\Response(500, ['Content-type' => 'text/plain'], $exception->getMessage()); // end buffering if we need to throw @ob_end_clean(); - throw $exception; + return $response; } // should not receive output from application->handle() @ob_end_clean(); - $this->mapResponse($response, $syResponse); + $response = $this->mapResponse($syResponse); if ($this->application instanceof TerminableInterface) { $this->application->terminate($syRequest, $syResponse); @@ -114,6 +103,8 @@ public function onRequest(ReactRequest $request, HttpResponse $response) if ($this->bootstrap instanceof HooksInterface) { $this->bootstrap->postHandle($this->application); } + + return $response; } /** @@ -122,48 +113,51 @@ public function onRequest(ReactRequest $request, HttpResponse $response) * @param ReactRequest $reactRequest * @return SymfonyRequest $syRequest */ - protected function mapRequest(ReactRequest $reactRequest) + protected function mapRequest(ServerRequestInterface $psrRequest) { - $method = $reactRequest->getMethod(); - $headers = $reactRequest->getHeaders(); - $query = $reactRequest->getQuery(); + $method = $psrRequest->getMethod(); + $query = $psrRequest->getQueryParams(); + // cookies $_COOKIE = []; - $sessionCookieSet = false; + $headersCookie = explode(';', $psrRequest->getHeaderLine('Cookie')); - if (isset($headers['Cookie']) || isset($headers['cookie'])) { - $headersCookie = explode(';', isset($headers['Cookie']) ? $headers['Cookie'] : $headers['cookie']); - foreach ($headersCookie as $cookie) { - list($name, $value) = explode('=', trim($cookie)); - $_COOKIE[$name] = $value; + foreach ($headersCookie as $cookie) { + list($name, $value) = explode('=', trim($cookie)); + $_COOKIE[$name] = $value; - if ($name === session_name()) { - session_id($value); - $sessionCookieSet = true; - } + if ($name === session_name()) { + session_id($value); + $sessionCookieSet = true; } } if (!$sessionCookieSet && session_id()) { - //session id already set from the last round but not got from the cookie header, - //so generate a new one, since php is not doing it automatically with session_start() if session - //has already been started. + // session id already set from the last round but not obtained + // from the cookie header, so generate a new one, since php is + // not doing it automatically with session_start() if session + // has already been started. session_id(Utils::generateSessionId()); } - $files = $reactRequest->getFiles(); - $post = $reactRequest->getPost(); + // files + $files = $psrRequest->getUploadedFiles(); + + // @todo check howto handle additional headers + + // @todo check howto support other HTTP methods with bodies + $post = $psrRequest->getParsedBody() ?: array(); if ($this->bootstrap instanceof RequestClassProviderInterface) { $class = $this->bootstrap->requestClass(); } else { - $class = '\Symfony\Component\HttpFoundation\Request'; + $class = SymfonyRequest::class; } /** @var SymfonyRequest $syRequest */ - $syRequest = new $class($query, $post, $attributes = [], $_COOKIE, $files, $_SERVER, $reactRequest->getBody()); + $syRequest = new $class($query, $post, $attributes = [], $_COOKIE, $files, $_SERVER, $psrRequest->getBody()); $syRequest->setMethod($method); @@ -173,10 +167,10 @@ protected function mapRequest(ReactRequest $reactRequest) /** * Convert Symfony\Component\HttpFoundation\Response to React\Http\Response * - * @param HttpResponse $reactResponse * @param SymfonyResponse $syResponse + « @return ResponseInterface */ - protected function mapResponse(HttpResponse $reactResponse, SymfonyResponse $syResponse) + protected function mapResponse(SymfonyResponse $syResponse) { // end active session if (PHP_SESSION_ACTIVE === session_status()) { @@ -241,33 +235,27 @@ protected function mapResponse(HttpResponse $reactResponse, SymfonyResponse $syR $headers['Set-Cookie'] = $cookies; } - if ($syResponse instanceof SymfonyStreamedResponse) { - $reactResponse->writeHead($syResponse->getStatusCode(), $headers); - - // asynchronously get content - ob_start(function($buffer) use ($reactResponse) { - $reactResponse->write($buffer); - return ''; - }, 4096); + $psrResponse = new Psr7\Response($syResponse->getStatusCode(), $headers); + // get contents + ob_start(); + if ($syResponse instanceof SymfonyStreamedResponse) { $syResponse->sendContent(); - - // flush remaining content - @ob_end_flush(); - $reactResponse->end(); + $content = @ob_get_clean(); } else { ob_start(); $content = $syResponse->getContent(); @ob_end_flush(); + } - if (!isset($headers['Content-Length'])) { - $headers['Content-Length'] = strlen($content); - } - - $reactResponse->writeHead($syResponse->getStatusCode(), $headers); - $reactResponse->end($content); + if (!isset($headers['Content-Length'])) { + $psrResponse = $psrResponse->withAddedHeader('Content-Length', strlen($content)); } + + $psrResponse = $psrResponse->withBody(Psr7\stream_for($content)); + + return $psrResponse; } /** diff --git a/composer.json b/composer.json index 8ad063c..c4baa5e 100644 --- a/composer.json +++ b/composer.json @@ -1,19 +1,16 @@ { "name": "php-pm/httpkernel-adapter", + "minimum-stability": "dev", + "prefer-stable": true, "require": { + "php-pm/php-pm": "dev-master", "symfony/http-foundation": "^2.6|^3.0", "symfony/http-kernel": "^2.6|^3.0", - "php-pm/php-pm": "dev-react-0.8" + "ringcentral/psr7": "^1.2" }, "autoload": { "psr-4": { "PHPPM\\": "" } - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/andig/php-pm" - } - ] + } } diff --git a/composer.lock b/composer.lock index f4b379f..e06c2c9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,628 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "a769b9fe3a43f64000b9085473a5b837", - "content-hash": "589c89a3bdfd9e260937ac0f738d2a75", + "content-hash": "b0772d73425829b5145e93c09e7c24b9", "packages": [ { - "name": "ircmaxell/password-compat", - "version": "v1.0.4", + "name": "evenement/evenement", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/ircmaxell/password_compat.git", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + "url": "https://github.com/igorw/evenement.git", + "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "url": "https://api.github.com/repos/igorw/evenement/zipball/f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", + "reference": "f6e843799fd4f4184d54d8fc7b5b3551c9fa803e", "shasum": "" }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-0": { + "Evenement": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch", + "homepage": "http://wiedler.ch/igor/" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "time": "2012-11-02T14:49:47+00:00" + }, + { + "name": "http-interop/http-middleware", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/http-interop/http-middleware.git", + "reference": "b49e1f9f6c584e704317b563302e566b8ce11858" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/http-interop/http-middleware/zipball/b49e1f9f6c584e704317b563302e566b8ce11858", + "reference": "b49e1f9f6c584e704317b563302e566b8ce11858", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Interop\\Http\\Server\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP server-side middleware", + "keywords": [ + "http", + "middleware", + "psr", + "psr-15", + "psr-7", + "request", + "response" + ], + "abandoned": "http-interop/http-server-middleware", + "time": "2017-09-18T15:27:03+00:00" + }, + { + "name": "mkraemer/react-pcntl", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/mkraemer/react-pcntl.git", + "reference": "b410b6e52965714d44395ac14646a01bd362e5c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mkraemer/react-pcntl/zipball/b410b6e52965714d44395ac14646a01bd362e5c6", + "reference": "b410b6e52965714d44395ac14646a01bd362e5c6", + "shasum": "" + }, + "require": { + "evenement/evenement": "2.0.*", + "ext-pcntl": "*", + "php": ">=5.4", + "react/event-loop": "0.4.*" + }, + "require-dev": { + "satooshi/php-coveralls": "^1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "MKraemer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Krämer", + "email": "marius@marius-kraemer.de" + } + ], + "description": "PCNTL bindings for ReactPHP", + "keywords": [ + "pcntl", + "react" + ], + "time": "2016-11-16T14:20:20+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v2.0.11", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2017-09-27T21:40:39+00:00" + }, + { + "name": "php-pm/php-pm", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-pm/php-pm.git", + "reference": "66b7f702b29ca8d96af9c21b5c9f5dbeb1537e4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-pm/php-pm/zipball/66b7f702b29ca8d96af9c21b5c9f5dbeb1537e4d", + "reference": "66b7f702b29ca8d96af9c21b5c9f5dbeb1537e4d", + "shasum": "" + }, + "require": { + "http-interop/http-middleware": "^0.5", + "mkraemer/react-pcntl": "^2.0", + "monolog/monolog": "^1.3", + "paragonie/random_compat": "^2.0", + "php": ">=5.6.0", + "react/event-loop": "^0.4", + "react/http": "dev-master", + "react/socket": "^0.8.6", + "react/stream": "^0.7.1", + "ringcentral/psr7": "^1.2", + "symfony/console": "^2.6|^3.0", + "symfony/debug": "^2.6|^3.0", + "symfony/process": "^2.6|^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-event": "Allows for use of a more performant event-loop implementation.", + "ext-libev": "Allows for use of a more performant event-loop implementation.", + "ext-libevent": "Allows for use of a more performant event-loop implementation.", + "php-pm/httpkernel-adapter": "HttpKernel adapter for Symfony and Laravel frameworks", + "php-pm/psr7-adapter": "PSR-7 adapter", + "php-pm/zend-adapter": "Zend application framework adapter" + }, + "bin": [ + "bin/ppm" + ], + "type": "library", + "autoload": { + "psr-4": { + "PHPPM\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "time": "2017-11-21T19:16:17+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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "react/cache", + "version": "v0.4.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "558f614891341b1d817a8cdf9a358948ec49638f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/558f614891341b1d817a8cdf9a358948ec49638f", + "reference": "558f614891341b1d817a8cdf9a358948ec49638f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "~2.0|~1.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async caching.", + "keywords": [ + "cache" + ], + "time": "2016-02-25T18:17:16+00:00" + }, + { + "name": "react/dns", + "version": "v0.4.11", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "8558bba4f2784aa997670d15fc6f7461a8eb4e53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/8558bba4f2784aa997670d15fc6f7461a8eb4e53", + "reference": "8558bba4f2784aa997670d15fc6f7461a8eb4e53", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "~0.4.0|~0.3.0", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^2.1 || ^1.2.1", + "react/promise-timer": "^1.2", + "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5 || ^0.4.4", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.5" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^5.0 || ^4.8.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "time": "2017-08-25T08:22:48+00:00" + }, + { + "name": "react/event-loop", + "version": "v0.4.3", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/8bde03488ee897dc6bb3d91e4e17c353f9c5252f", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-event": "~1.0", + "ext-libev": "*", + "ext-libevent": ">=0.1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event loop abstraction layer that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "time": "2017-04-27T10:56:23+00:00" + }, + { + "name": "react/http", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/reactphp/http.git", + "reference": "1d5bd0ba0ec5f97c00798c02e599e5dcb6c7bad2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/http/zipball/1d5bd0ba0ec5f97c00798c02e599e5dcb6c7bad2", + "reference": "1d5bd0ba0ec5f97c00798c02e599e5dcb6c7bad2", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/promise": "^2.3 || ^1.2.1", + "react/promise-stream": "^1.0 || ^0.1.2", + "react/socket": "^1.0 || ^0.8.3", + "react/stream": "^1.0 || ^0.7.1", + "ringcentral/psr7": "^1.2" + }, + "require-dev": { + "clue/block-react": "^1.1", + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event-driven, streaming plaintext HTTP and secure HTTPS server for ReactPHP", + "keywords": [ + "event-driven", + "http", + "https", + "reactphp", + "server", + "streaming" + ], + "time": "2017-11-20T19:04:01+00:00" + }, + { + "name": "react/promise", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/62785ae604c8d69725d693eb370e1d67e94c4053", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, "require-dev": { - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "~4.8" }, "type": "library", "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, "files": [ - "lib/password.php" + "src/functions_include.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -36,38 +634,103 @@ ], "authors": [ { - "name": "Anthony Ferrara", - "email": "ircmaxell@php.net", - "homepage": "http://blog.ircmaxell.com" + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" } ], - "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", - "homepage": "https://github.com/ircmaxell/password_compat", + "description": "A lightweight implementation of CommonJS Promises/A for PHP", "keywords": [ - "hashing", - "password" + "promise", + "promises" ], - "time": "2014-11-20 16:49:30" + "time": "2017-03-25T12:08:31+00:00" }, { - "name": "psr/log", - "version": "1.0.0", + "name": "react/promise-stream", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/reactphp/promise-stream.git", + "reference": "1503761d01116bf893f86b9843b3bc7a80682587" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/1503761d01116bf893f86b9843b3bc7a80682587", + "reference": "1503761d01116bf893f86b9843b3bc7a80682587", "shasum": "" }, + "require": { + "php": ">=5.3", + "react/promise": "^2.1 || ^1.2", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4 || ^0.3" + }, + "require-dev": { + "clue/block-react": "^1.0", + "phpunit/phpunit": "^4.8", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3", + "react/promise-timer": "^1.0" + }, "type": "library", "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "psr-4": { + "React\\Promise\\Stream\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" } + ], + "description": "The missing link between Promise-land and Stream-land for ReactPHP", + "homepage": "https://github.com/reactphp/promise-stream", + "keywords": [ + "Buffer", + "async", + "promise", + "reactphp", + "stream", + "unwrap" + ], + "time": "2017-10-24T14:35:40+00:00" + }, + { + "name": "react/promise-timer", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise-timer.git", + "reference": "3bc527fbd1201a193ab41c19b9a770d71a3514af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/3bc527fbd1201a193ab41c19b9a770d71a3514af", + "reference": "3bc527fbd1201a193ab41c19b9a770d71a3514af", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "~2.1|~1.2" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\Timer\\": "src/" + }, + "files": [ + "src/functions.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -75,39 +738,141 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Christian Lück", + "email": "christian@lueck.tv" } ], - "description": "Common interface for logging libraries", + "description": "Trivial timeout implementation for Promises", + "homepage": "https://github.com/react/promise-timer", "keywords": [ - "log", - "psr", - "psr-3" + "async", + "event-loop", + "promise", + "reactphp", + "timeout", + "timer" ], - "time": "2012-12-21 11:40:51" + "time": "2017-08-08T16:30:19+00:00" }, { - "name": "stack/builder", - "version": "v1.0.3", + "name": "react/socket", + "version": "v0.8.6", "source": { "type": "git", - "url": "https://github.com/stackphp/builder.git", - "reference": "c1f8a4693b55c563405024f708a76ef576c3b276" + "url": "https://github.com/reactphp/socket.git", + "reference": "2e8660111d14df908a913a058bce4a1786de489f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/stackphp/builder/zipball/c1f8a4693b55c563405024f708a76ef576c3b276", - "reference": "c1f8a4693b55c563405024f708a76ef576c3b276", + "url": "https://api.github.com/repos/reactphp/socket/zipball/2e8660111d14df908a913a058bce4a1786de489f", + "reference": "2e8660111d14df908a913a058bce4a1786de489f", "shasum": "" }, "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "symfony/http-foundation": "~2.1", - "symfony/http-kernel": "~2.1" + "react/dns": "^0.4.11", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^2.1 || ^1.2", + "react/promise-timer": "~1.0", + "react/stream": "^1.0 || ^0.7.1" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "time": "2017-11-18T16:47:56+00:00" + }, + { + "name": "react/stream", + "version": "v0.7.5", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "a41bbffdda5e3f4282012f8e346cef48ecb28b24" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/a41bbffdda5e3f4282012f8e346cef48ecb28b24", + "reference": "a41bbffdda5e3f4282012f8e346cef48ecb28b24", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "suggest": { + "react/event-loop": "^0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "time": "2017-11-20T11:55:48+00:00" + }, + { + "name": "ringcentral/psr7", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/ringcentral/psr7.git", + "reference": "2594fb47cdc659f3fcf0aa1559b7355460555303" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ringcentral/psr7/zipball/2594fb47cdc659f3fcf0aa1559b7355460555303", + "reference": "2594fb47cdc659f3fcf0aa1559b7355460555303", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { - "silex/silex": "~1.0" + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { @@ -116,9 +881,12 @@ } }, "autoload": { - "psr-0": { - "Stack": "src" - } + "psr-4": { + "RingCentral\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -126,45 +894,116 @@ ], "authors": [ { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Builder for stack middlewares based on HttpKernelInterface.", + "description": "PSR-7 message implementation", "keywords": [ - "stack" + "http", + "message", + "stream", + "uri" + ], + "time": "2016-03-25T17:36:49+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], - "time": "2014-11-23 20:37:11" + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-16T15:24:32+00:00" }, { "name": "symfony/debug", - "version": "v2.8.3", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "8e255a0c551d443a8159e3da95b5f99997d100fd" + "reference": "74557880e2846b5c84029faa96b834da37e29810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/8e255a0c551d443a8159e3da95b5f99997d100fd", - "reference": "8e255a0c551d443a8159e3da95b5f99997d100fd", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", "shasum": "" }, "require": { - "php": ">=5.3.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.2|~3.0.0", - "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2|~3.0.0" + "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -191,29 +1030,32 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-01-27 05:14:19" + "time": "2017-11-10T16:38:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.0.3", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4dd5df31a28c0f82b41cb1e1599b74b5dcdbdafa" + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4dd5df31a28c0f82b41cb1e1599b74b5dcdbdafa", - "reference": "4dd5df31a28c0f82b41cb1e1599b74b5dcdbdafa", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/271d8c27c3ec5ecee6e2ac06016232e249d638d9", + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -224,7 +1066,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -251,34 +1093,33 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-01-27 05:14:46" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/http-foundation", - "version": "v2.8.3", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "6f4e41c41e7d352ed9adf71ff6f2ec1756490a1b" + "reference": "5943f0f19817a7e05992d20a90729b0dc93faf36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6f4e41c41e7d352ed9adf71ff6f2ec1756490a1b", - "reference": "6f4e41c41e7d352ed9adf71ff6f2ec1756490a1b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5943f0f19817a7e05992d20a90729b0dc93faf36", + "reference": "5943f0f19817a7e05992d20a90729b0dc93faf36", "shasum": "" }, "require": { - "php": ">=5.3.9", - "symfony/polyfill-php54": "~1.0", - "symfony/polyfill-php55": "~1.0" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-mbstring": "~1.1" }, "require-dev": { - "symfony/expression-language": "~2.4|~3.0.0" + "symfony/expression-language": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -305,48 +1146,52 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-02-28 16:20:50" + "time": "2017-11-13T18:13:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v2.8.3", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "67ca6a98d8d7cf243ccb4b716deab2342f409a4d" + "reference": "a2a942172b742217ab2ccd9399494af2aa17c766" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/67ca6a98d8d7cf243ccb4b716deab2342f409a4d", - "reference": "67ca6a98d8d7cf243ccb4b716deab2342f409a4d", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a2a942172b742217ab2ccd9399494af2aa17c766", + "reference": "a2a942172b742217ab2ccd9399494af2aa17c766", "shasum": "" }, "require": { - "php": ">=5.3.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0", - "symfony/debug": "~2.6,>=2.6.2", - "symfony/event-dispatcher": "~2.6,>=2.6.7|~3.0.0", - "symfony/http-foundation": "~2.5,>=2.5.4|~3.0.0" + "symfony/debug": "~2.8|~3.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/http-foundation": "^3.3.11" }, "conflict": { - "symfony/config": "<2.7" + "symfony/config": "<2.8", + "symfony/dependency-injection": "<3.3", + "symfony/var-dumper": "<3.3", + "twig/twig": "<1.34|<2.4,>=2" }, "require-dev": { - "symfony/browser-kit": "~2.3|~3.0.0", - "symfony/class-loader": "~2.1|~3.0.0", - "symfony/config": "~2.8", - "symfony/console": "~2.3|~3.0.0", - "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0", - "symfony/dependency-injection": "~2.8|~3.0.0", - "symfony/dom-crawler": "~2.0,>=2.0.5|~3.0.0", - "symfony/expression-language": "~2.4|~3.0.0", - "symfony/finder": "~2.0,>=2.0.5|~3.0.0", - "symfony/process": "~2.0,>=2.0.5|~3.0.0", - "symfony/routing": "~2.8|~3.0.0", - "symfony/stopwatch": "~2.3|~3.0.0", - "symfony/templating": "~2.2|~3.0.0", - "symfony/translation": "~2.0,>=2.0.5|~3.0.0", - "symfony/var-dumper": "~2.6|~3.0.0" + "psr/cache": "~1.0", + "symfony/browser-kit": "~2.8|~3.0", + "symfony/class-loader": "~2.8|~3.0", + "symfony/config": "~2.8|~3.0", + "symfony/console": "~2.8|~3.0", + "symfony/css-selector": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", + "symfony/dom-crawler": "~2.8|~3.0", + "symfony/expression-language": "~2.8|~3.0", + "symfony/finder": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0", + "symfony/routing": "~2.8|~3.0", + "symfony/stopwatch": "~2.8|~3.0", + "symfony/templating": "~2.8|~3.0", + "symfony/translation": "~2.8|~3.0", + "symfony/var-dumper": "~3.3" }, "suggest": { "symfony/browser-kit": "", @@ -360,7 +1205,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.8-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -387,40 +1232,40 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-02-28 21:06:17" + "time": "2017-11-16T18:14:43+00:00" }, { - "name": "symfony/polyfill-php54", - "version": "v1.1.1", + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php54.git", - "reference": "9ba741ca01c77282ecf5796c2c1d667f03454ffb" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/9ba741ca01c77282ecf5796c2c1d667f03454ffb", - "reference": "9ba741ca01c77282ecf5796c2c1d667f03454ffb", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "suggest": { + "ext-mbstring": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.6-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php54\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -437,46 +1282,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], - "time": "2016-01-25 19:13:00" + "time": "2017-10-11T12:05:26+00:00" }, { - "name": "symfony/polyfill-php55", - "version": "v1.1.1", + "name": "symfony/process", + "version": "v3.3.13", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "b4f3f07d91702f8f926339fc4fcf81671d8c27e6" + "url": "https://github.com/symfony/process.git", + "reference": "a56a3989fb762d7b19a0cf8e7693ee99a6ffb78d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/b4f3f07d91702f8f926339fc4fcf81671d8c27e6", - "reference": "b4f3f07d91702f8f926339fc4fcf81671d8c27e6", + "url": "https://api.github.com/repos/symfony/process/zipball/a56a3989fb762d7b19a0cf8e7693ee99a6ffb78d", + "reference": "a56a3989fb762d7b19a0cf8e7693ee99a6ffb78d", "shasum": "" }, "require": { - "ircmaxell/password-compat": "~1.0", - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php55\\": "" + "Symfony\\Component\\Process\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -485,31 +1330,30 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "description": "Symfony Process Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "time": "2016-01-20 09:13:37" + "time": "2017-11-13T15:31:11+00:00" } ], "packages-dev": [], "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, + "minimum-stability": "dev", + "stability-flags": { + "php-pm/php-pm": 20 + }, + "prefer-stable": true, "prefer-lowest": false, "platform": [], - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } }