├── .gitignore ├── logs └── README.md ├── phpunit.xml ├── users.json ├── public ├── .htaccess └── index.php ├── src ├── middleware.php ├── settings.php ├── dependencies.php └── routes.php ├── CONTRIBUTING.md ├── composer.json ├── LICENSE ├── templates └── index.phtml ├── tests └── Functional │ ├── RoutesTest.php │ └── BaseTestCase.php ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /logs/* 3 | !/logs/README.md 4 | .idea -------------------------------------------------------------------------------- /logs/README.md: -------------------------------------------------------------------------------- 1 | Your Slim Framework application's log files will be written to this directory. 2 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | tests 5 | 6 | 7 | -------------------------------------------------------------------------------- /users.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "user_id": "1", 4 | "user_login": "neo", 5 | "user_pwd": "neo" 6 | }, 7 | { 8 | "user_id": "2", 9 | "user_login": "keanu", 10 | "user_pwd": "keanu" 11 | } 12 | ] -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteEngine On 2 | 3 | # Some hosts may require you to use the `RewriteBase` directive. 4 | # If you need to use the `RewriteBase` directive, it should be the 5 | # absolute physical path to the directory that contains this htaccess file. 6 | # 7 | # RewriteBase / 8 | 9 | RewriteCond %{REQUEST_FILENAME} !-f 10 | RewriteRule ^ index.php [QSA,L] 11 | -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | getContainer(); 9 | 10 | // Register dependencies 11 | require __DIR__ . '/../src/dependencies.php'; 12 | 13 | // Register middleware 14 | require __DIR__ . '/../src/middleware.php'; 15 | 16 | // Register routes 17 | require __DIR__ . '/../src/routes.php'; 18 | 19 | 20 | $app->run(); 21 | -------------------------------------------------------------------------------- /src/middleware.php: -------------------------------------------------------------------------------- 1 | add(new \Slim\Csrf\Guard); 5 | 6 | // A middleware for enabling CORS 7 | $app->add(function ($req, $res, $next) { 8 | $response = $next($req, $res); 9 | 10 | return $response 11 | ->withHeader('Access-Control-Allow-Origin', '*') 12 | ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization') 13 | ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); 14 | }); 15 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to Contribute 2 | 3 | ## Pull Requests 4 | 5 | 1. Fork the Slim Skeleton repository 6 | 2. Create a new branch for each feature or improvement 7 | 3. Send a pull request from each feature branch to the **3.x** branch 8 | 9 | It is very important to separate new features or improvements into separate feature branches, and to send a 10 | pull request for each branch. This allows us to review and pull in new features or improvements individually. 11 | 12 | ## Style Guide 13 | 14 | All pull requests must adhere to the [PSR-2 standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). 15 | -------------------------------------------------------------------------------- /src/settings.php: -------------------------------------------------------------------------------- 1 | [ 4 | 'displayErrorDetails' => true, // set to false in production 5 | 'addContentLengthHeader' => false, // Allow the web server to send the content-length header 6 | 7 | // Renderer settings 8 | 'renderer' => [ 9 | 'template_path' => __DIR__ . '/../templates/', 10 | ], 11 | 12 | // Monolog settings 13 | 'logger' => [ 14 | 'name' => 'slim-app', 15 | 'path' => __DIR__ . '/../logs/app.log', 16 | 'level' => \Monolog\Logger::DEBUG, 17 | ], 18 | 19 | // DB Settings 20 | 'db' => [ 21 | 'host' => '127.0.0.1', 22 | 'name' => 'tokens', 23 | 'user' => 'root', 24 | 'password' => '' 25 | ] 26 | ], 27 | ]; 28 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slim/slim-skeleton", 3 | "description": "A Slim Framework skeleton application for rapid development", 4 | "keywords": ["microframework", "rest", "router", "psr7"], 5 | "homepage": "http://github.com/slimphp/Slim-Skeleton", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Josh Lockhart", 10 | "email": "info@joshlockhart.com", 11 | "homepage": "http://www.joshlockhart.com/" 12 | } 13 | ], 14 | "require": { 15 | "php": ">=5.5.0", 16 | "slim/slim": "^3.1", 17 | "slim/php-view": "^2.0", 18 | "monolog/monolog": "^1.17", 19 | "firebase/php-jwt": "^4.0" 20 | }, 21 | "require-dev": { 22 | "phpunit/phpunit": ">=4.8 < 6.0" 23 | }, 24 | "autoload-dev": { 25 | "psr-4": { 26 | "Tests\\": "tests/" 27 | } 28 | }, 29 | "scripts": { 30 | "start": "php -S 0.0.0.0:8080 -t public public/index.php", 31 | "test": "phpunit" 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/dependencies.php: -------------------------------------------------------------------------------- 1 | getContainer(); 5 | 6 | // view renderer 7 | $container['renderer'] = function ($c) { 8 | $settings = $c->get('settings')['renderer']; 9 | return new Slim\Views\PhpRenderer($settings['template_path']); 10 | }; 11 | 12 | // monolog 13 | $container['logger'] = function ($c) { 14 | $settings = $c->get('settings')['logger']; 15 | $logger = new Monolog\Logger($settings['name']); 16 | $logger->pushProcessor(new Monolog\Processor\UidProcessor()); 17 | $logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], $settings['level'])); 18 | return $logger; 19 | }; 20 | 21 | // db instance 22 | $container['db'] = function ($c) { 23 | $db = $c['settings']['db']; 24 | $pdo = new PDO("mysql:host=" . $db['host'] . ";dbname=" . $db['name'], $db['user'], $db['password']); 25 | $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 26 | $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 27 | 28 | return $pdo; 29 | }; 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Tsilavina Razafinirina 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /templates/index.phtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Slim 3 6 | 7 | 27 | 28 | 29 |

Slim

30 |
a microframework for PHP
31 | 32 | 33 |

Hello !

34 | 35 |

Try SlimFramework 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /tests/Functional/RoutesTest.php: -------------------------------------------------------------------------------- 1 | runApp('POST', '/authenticate', ['user_login' => 'neo', 'user_password' => 'neo']); 14 | 15 | $this->assertEquals(200, $response->getStatusCode()); 16 | 17 | // Then assert that we have three string sequence separated by dot returned as a token. 18 | $this->assertRegExp('#[a-zA-Z0-9-_](\.[a-zA-Z0-9-_])*$#', json_decode($response->getBody())->token); 19 | } 20 | 21 | public function testAValidUserShouldHaveAccessToARestrictedEndPoint() 22 | { 23 | // Authenticate first 24 | $response = $this->runApp('POST', '/authenticate', ['user_login' => 'keanu', 'user_password' => 'keanu']); 25 | 26 | $this->assertEquals(200, $response->getStatusCode()); 27 | 28 | // Use the returned token to request the restricted endpoint. 29 | $response = $this->runApp('GET', '/restricted', [], 30 | ["HTTP_AUTHORIZATION" => json_decode($response->getBody())->token]); 31 | 32 | $this->assertEquals(200, $response->getStatusCode()); 33 | $this->assertContains('This is your secure resource !', (string)$response->getBody()); 34 | 35 | } 36 | 37 | public function testANoneRegisteredUserShouldNotBeAuthenticated() 38 | { 39 | $response = $this->runApp('POST', '/authenticate', ['user_login' => 'michael', 'user_password' => '123pass']); 40 | $this->assertEquals(200, $response->getStatusCode()); 41 | $this->assertContains('No user found', (string)$response->getBody()); 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /tests/Functional/BaseTestCase.php: -------------------------------------------------------------------------------- 1 | $requestMethod, 40 | 'REQUEST_URI' => $requestUri 41 | ]; 42 | 43 | if (count($headers) > 0) 44 | $defaultEnv += $headers; 45 | 46 | $environment = Environment::mock($defaultEnv); 47 | 48 | // Set up a request object based on the environment 49 | $request = Request::createFromEnvironment($environment); 50 | 51 | // Add request data, if it exists 52 | if (isset($requestData)) { 53 | $request = $request->withParsedBody($requestData); 54 | } 55 | 56 | // Set up a response object 57 | $response = new Response(); 58 | 59 | // Use the application settings 60 | $settings = require __DIR__ . '/../../src/settings.php'; 61 | 62 | // Instantiate the application 63 | $app = new App($settings); 64 | 65 | // Set up dependencies 66 | require __DIR__ . '/../../src/dependencies.php'; 67 | 68 | // Register middleware 69 | if ($this->withMiddleware) { 70 | require __DIR__ . '/../../src/middleware.php'; 71 | } 72 | 73 | // Register routes 74 | require __DIR__ . '/../../src/routes.php'; 75 | 76 | // Process the application 77 | $response = $app->process($request, $response); 78 | 79 | // Return the response 80 | return $response; 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Slim3 JWT authentication example 2 | 3 | This is an example of implementation of JWT authentication on the server side, using [Slim3](http://www.slimframework.com/). This code can be used in pair with 4 | the [ionic2 jwt sample](https://github.com/letsila/ionic2-jwt-sample) a sample code on JWT via an Ionic2 app. 5 | 6 | ## Running locally 7 | * Clone or download the repository 8 | * You have to create a database named tokens which should contain a single table named tokens with the following structure: 9 | ``` 10 | CREATE TABLE `tokens` ( 11 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 12 | `value` text, 13 | `user_id` int(11) DEFAULT NULL, 14 | `date_created` int(11) DEFAULT NULL, 15 | `date_expiration` int(11) DEFAULT NULL, 16 | PRIMARY KEY (`id`) 17 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 18 | ``` 19 | 20 | * Be sure that your database configuration match the specification under /src/settings.php 21 | * Check that all is ok by entering into the downloaded repository and launching phpunit using the following command 22 | ``` 23 | $ ./vendor/bin/phpunit 24 | ``` 25 | * You should see 26 | ``` 27 | OK (4 tests, 8 assertions) 28 | ``` 29 | * You can now launch the server by typing 30 | ``` 31 | php -S 0.0.0.0:8080 -t public public/index.php 32 | ``` 33 | 34 | * You are ready to send requests to the server. Check /tests/Functional/RoutesTest.php to see what you can do. 35 | 36 | ## Routes 37 | Two routes were created: 38 | 39 | * An authentication route which allows us to get the credentials and the token sent from the client for validation. 40 | ```php 41 | $app->post('/authenticate', function (Request $request, Response $response) { 42 | // ... 43 | }) 44 | ``` 45 | 46 | * A route which handle a get request for requiring restricted resource to test out our JWT implementation. This route expected 47 | that a token is set on the authorisation header of the request. The token will be validated and if it succeed, we return 48 | the requested resource to the client. 49 | ```php 50 | $app->get('/restricted', function (Request $request, Response $response) { 51 | // ... 52 | }) 53 | ``` 54 | 55 | ## Dependencies 56 | We used [firebase/php-jwt] (https://github.com/firebase/php-jwt) for creating and decoding the JSON web token. 57 | 58 | ## Storage 59 | For simplicity sake, users credentials are stored in a JSON file named users.json located at the root of the project. 60 | A database containing a single table named tokens allows us to store each token related information. Database 61 | connexion is configured inside /src/dependencies.php. 62 | 63 | ## Middleware 64 | We created a middleware under the /src/middleware.php file in order to enable CORS. 65 | 66 | ## License 67 | MIT 68 | -------------------------------------------------------------------------------- /src/routes.php: -------------------------------------------------------------------------------- 1 | post('/authenticate', function (Request $request, Response $response) { 11 | $data = $request->getParsedBody(); 12 | 13 | $result = file_get_contents('./users.json'); 14 | $users = json_decode($result, true); 15 | 16 | $login = $data['user_login']; 17 | $password = $data['user_password']; 18 | 19 | foreach ($users as $key => $user) { 20 | if ($user['user_login'] == $login && $user['user_pwd'] == $password) { 21 | $current_user = $user; 22 | } 23 | } 24 | 25 | if (!isset($current_user)) { 26 | echo json_encode("No user found"); 27 | } else { 28 | 29 | // Find a corresponding token. 30 | $sql = "SELECT * FROM tokens 31 | WHERE user_id = :user_id AND date_expiration >" . time(); 32 | 33 | $token_from_db = false; 34 | try { 35 | $db = $this->db; 36 | $stmt = $db->prepare($sql); 37 | $stmt->bindParam("user_id", $current_user['user_id']); 38 | $stmt->execute(); 39 | $token_from_db = $stmt->fetchObject(); 40 | $db = null; 41 | 42 | if ($token_from_db) { 43 | echo json_encode([ 44 | "token" => $token_from_db->value, 45 | "user_login" => $token_from_db->user_id 46 | ]); 47 | } 48 | } catch (PDOException $e) { 49 | echo '{"error":{"text":' . $e->getMessage() . '}}'; 50 | } 51 | 52 | // Create a new token if a user is found but not a token corresponding to whom. 53 | if (count($current_user) != 0 && !$token_from_db) { 54 | 55 | $key = "your_secret_key"; 56 | 57 | $payload = array( 58 | "iss" => "http://your-domain.com", 59 | "iat" => time(), 60 | "exp" => time() + (3600 * 24 * 15), 61 | "context" => [ 62 | "user" => [ 63 | "user_login" => $current_user['user_login'], 64 | "user_id" => $current_user['user_id'] 65 | ] 66 | ] 67 | ); 68 | 69 | try { 70 | $jwt = JWT::encode($payload, $key); 71 | } catch (Exception $e) { 72 | echo json_encode($e); 73 | } 74 | 75 | $sql = "INSERT INTO tokens (user_id, value, date_created, date_expiration) 76 | VALUES (:user_id, :value, :date_created, :date_expiration)"; 77 | try { 78 | $db = $this->db; 79 | $stmt = $db->prepare($sql); 80 | $stmt->bindParam("user_id", $current_user['user_id']); 81 | $stmt->bindParam("value", $jwt); 82 | $stmt->bindParam("date_created", $payload['iat']); 83 | $stmt->bindParam("date_expiration", $payload['exp']); 84 | $stmt->execute(); 85 | $db = null; 86 | 87 | echo json_encode([ 88 | "token" => $jwt, 89 | "user_login" => $current_user['user_id'] 90 | ]); 91 | } catch (PDOException $e) { 92 | echo '{"error":{"text":' . $e->getMessage() . '}}'; 93 | } 94 | } 95 | } 96 | }); 97 | 98 | // The route to get a secured data. 99 | $app->get('/restricted', function (Request $request, Response $response) { 100 | 101 | $jwt = $request->getHeaders(); 102 | 103 | $key = "your_secret_key"; 104 | 105 | try { 106 | $decoded = JWT::decode($jwt['HTTP_AUTHORIZATION'][0], $key, array('HS256')); 107 | } catch (UnexpectedValueException $e) { 108 | echo $e->getMessage(); 109 | } 110 | 111 | if (isset($decoded)) { 112 | $sql = "SELECT * FROM tokens WHERE user_id = :user_id"; 113 | 114 | try { 115 | $db = $this->db; 116 | $stmt = $db->prepare($sql); 117 | $stmt->bindParam("user_id", $decoded->context->user->user_id); 118 | $stmt->execute(); 119 | $user_from_db = $stmt->fetchObject(); 120 | $db = null; 121 | 122 | if (isset($user_from_db->user_id)) { 123 | echo json_encode([ 124 | "response" => "This is your secure resource !" 125 | ]); 126 | } 127 | } catch (PDOException $e) { 128 | echo '{"error":{"text":' . $e->getMessage() . '}}'; 129 | } 130 | } 131 | }); 132 | 133 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "4113395c0461d6df86fdecd38265e9fe", 8 | "content-hash": "a5d71081f133afe3d96d543acb030207", 9 | "packages": [ 10 | { 11 | "name": "container-interop/container-interop", 12 | "version": "1.1.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/container-interop/container-interop.git", 16 | "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", 21 | "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", 22 | "shasum": "" 23 | }, 24 | "type": "library", 25 | "autoload": { 26 | "psr-4": { 27 | "Interop\\Container\\": "src/Interop/Container/" 28 | } 29 | }, 30 | "notification-url": "https://packagist.org/downloads/", 31 | "license": [ 32 | "MIT" 33 | ], 34 | "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", 35 | "time": "2014-12-30 15:22:37" 36 | }, 37 | { 38 | "name": "firebase/php-jwt", 39 | "version": "v4.0.0", 40 | "source": { 41 | "type": "git", 42 | "url": "https://github.com/firebase/php-jwt.git", 43 | "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35" 44 | }, 45 | "dist": { 46 | "type": "zip", 47 | "url": "https://api.github.com/repos/firebase/php-jwt/zipball/dccf163dc8ed7ed6a00afc06c51ee5186a428d35", 48 | "reference": "dccf163dc8ed7ed6a00afc06c51ee5186a428d35", 49 | "shasum": "" 50 | }, 51 | "require": { 52 | "php": ">=5.3.0" 53 | }, 54 | "type": "library", 55 | "autoload": { 56 | "psr-4": { 57 | "Firebase\\JWT\\": "src" 58 | } 59 | }, 60 | "notification-url": "https://packagist.org/downloads/", 61 | "license": [ 62 | "BSD-3-Clause" 63 | ], 64 | "authors": [ 65 | { 66 | "name": "Neuman Vong", 67 | "email": "neuman+pear@twilio.com", 68 | "role": "Developer" 69 | }, 70 | { 71 | "name": "Anant Narayanan", 72 | "email": "anant@php.net", 73 | "role": "Developer" 74 | } 75 | ], 76 | "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", 77 | "homepage": "https://github.com/firebase/php-jwt", 78 | "time": "2016-07-18 04:51:16" 79 | }, 80 | { 81 | "name": "monolog/monolog", 82 | "version": "1.21.0", 83 | "source": { 84 | "type": "git", 85 | "url": "https://github.com/Seldaek/monolog.git", 86 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" 87 | }, 88 | "dist": { 89 | "type": "zip", 90 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", 91 | "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", 92 | "shasum": "" 93 | }, 94 | "require": { 95 | "php": ">=5.3.0", 96 | "psr/log": "~1.0" 97 | }, 98 | "provide": { 99 | "psr/log-implementation": "1.0.0" 100 | }, 101 | "require-dev": { 102 | "aws/aws-sdk-php": "^2.4.9", 103 | "doctrine/couchdb": "~1.0@dev", 104 | "graylog2/gelf-php": "~1.0", 105 | "jakub-onderka/php-parallel-lint": "0.9", 106 | "php-amqplib/php-amqplib": "~2.4", 107 | "php-console/php-console": "^3.1.3", 108 | "phpunit/phpunit": "~4.5", 109 | "phpunit/phpunit-mock-objects": "2.3.0", 110 | "ruflin/elastica": ">=0.90 <3.0", 111 | "sentry/sentry": "^0.13", 112 | "swiftmailer/swiftmailer": "~5.3" 113 | }, 114 | "suggest": { 115 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 116 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 117 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 118 | "ext-mongo": "Allow sending log messages to a MongoDB server", 119 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 120 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 121 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 122 | "php-console/php-console": "Allow sending log messages to Google Chrome", 123 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 124 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 125 | "sentry/sentry": "Allow sending log messages to a Sentry server" 126 | }, 127 | "type": "library", 128 | "extra": { 129 | "branch-alias": { 130 | "dev-master": "2.0.x-dev" 131 | } 132 | }, 133 | "autoload": { 134 | "psr-4": { 135 | "Monolog\\": "src/Monolog" 136 | } 137 | }, 138 | "notification-url": "https://packagist.org/downloads/", 139 | "license": [ 140 | "MIT" 141 | ], 142 | "authors": [ 143 | { 144 | "name": "Jordi Boggiano", 145 | "email": "j.boggiano@seld.be", 146 | "homepage": "http://seld.be" 147 | } 148 | ], 149 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 150 | "homepage": "http://github.com/Seldaek/monolog", 151 | "keywords": [ 152 | "log", 153 | "logging", 154 | "psr-3" 155 | ], 156 | "time": "2016-07-29 03:23:52" 157 | }, 158 | { 159 | "name": "nikic/fast-route", 160 | "version": "v1.0.1", 161 | "source": { 162 | "type": "git", 163 | "url": "https://github.com/nikic/FastRoute.git", 164 | "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af" 165 | }, 166 | "dist": { 167 | "type": "zip", 168 | "url": "https://api.github.com/repos/nikic/FastRoute/zipball/8ea928195fa9b907f0d6e48312d323c1a13cc2af", 169 | "reference": "8ea928195fa9b907f0d6e48312d323c1a13cc2af", 170 | "shasum": "" 171 | }, 172 | "require": { 173 | "php": ">=5.4.0" 174 | }, 175 | "type": "library", 176 | "autoload": { 177 | "psr-4": { 178 | "FastRoute\\": "src/" 179 | }, 180 | "files": [ 181 | "src/functions.php" 182 | ] 183 | }, 184 | "notification-url": "https://packagist.org/downloads/", 185 | "license": [ 186 | "BSD-3-Clause" 187 | ], 188 | "authors": [ 189 | { 190 | "name": "Nikita Popov", 191 | "email": "nikic@php.net" 192 | } 193 | ], 194 | "description": "Fast request router for PHP", 195 | "keywords": [ 196 | "router", 197 | "routing" 198 | ], 199 | "time": "2016-06-12 19:08:51" 200 | }, 201 | { 202 | "name": "pimple/pimple", 203 | "version": "v3.0.2", 204 | "source": { 205 | "type": "git", 206 | "url": "https://github.com/silexphp/Pimple.git", 207 | "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a" 208 | }, 209 | "dist": { 210 | "type": "zip", 211 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a", 212 | "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a", 213 | "shasum": "" 214 | }, 215 | "require": { 216 | "php": ">=5.3.0" 217 | }, 218 | "type": "library", 219 | "extra": { 220 | "branch-alias": { 221 | "dev-master": "3.0.x-dev" 222 | } 223 | }, 224 | "autoload": { 225 | "psr-0": { 226 | "Pimple": "src/" 227 | } 228 | }, 229 | "notification-url": "https://packagist.org/downloads/", 230 | "license": [ 231 | "MIT" 232 | ], 233 | "authors": [ 234 | { 235 | "name": "Fabien Potencier", 236 | "email": "fabien@symfony.com" 237 | } 238 | ], 239 | "description": "Pimple, a simple Dependency Injection Container", 240 | "homepage": "http://pimple.sensiolabs.org", 241 | "keywords": [ 242 | "container", 243 | "dependency injection" 244 | ], 245 | "time": "2015-09-11 15:10:35" 246 | }, 247 | { 248 | "name": "psr/http-message", 249 | "version": "1.0.1", 250 | "source": { 251 | "type": "git", 252 | "url": "https://github.com/php-fig/http-message.git", 253 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 254 | }, 255 | "dist": { 256 | "type": "zip", 257 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 258 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 259 | "shasum": "" 260 | }, 261 | "require": { 262 | "php": ">=5.3.0" 263 | }, 264 | "type": "library", 265 | "extra": { 266 | "branch-alias": { 267 | "dev-master": "1.0.x-dev" 268 | } 269 | }, 270 | "autoload": { 271 | "psr-4": { 272 | "Psr\\Http\\Message\\": "src/" 273 | } 274 | }, 275 | "notification-url": "https://packagist.org/downloads/", 276 | "license": [ 277 | "MIT" 278 | ], 279 | "authors": [ 280 | { 281 | "name": "PHP-FIG", 282 | "homepage": "http://www.php-fig.org/" 283 | } 284 | ], 285 | "description": "Common interface for HTTP messages", 286 | "homepage": "https://github.com/php-fig/http-message", 287 | "keywords": [ 288 | "http", 289 | "http-message", 290 | "psr", 291 | "psr-7", 292 | "request", 293 | "response" 294 | ], 295 | "time": "2016-08-06 14:39:51" 296 | }, 297 | { 298 | "name": "psr/log", 299 | "version": "1.0.2", 300 | "source": { 301 | "type": "git", 302 | "url": "https://github.com/php-fig/log.git", 303 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 304 | }, 305 | "dist": { 306 | "type": "zip", 307 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 308 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 309 | "shasum": "" 310 | }, 311 | "require": { 312 | "php": ">=5.3.0" 313 | }, 314 | "type": "library", 315 | "extra": { 316 | "branch-alias": { 317 | "dev-master": "1.0.x-dev" 318 | } 319 | }, 320 | "autoload": { 321 | "psr-4": { 322 | "Psr\\Log\\": "Psr/Log/" 323 | } 324 | }, 325 | "notification-url": "https://packagist.org/downloads/", 326 | "license": [ 327 | "MIT" 328 | ], 329 | "authors": [ 330 | { 331 | "name": "PHP-FIG", 332 | "homepage": "http://www.php-fig.org/" 333 | } 334 | ], 335 | "description": "Common interface for logging libraries", 336 | "homepage": "https://github.com/php-fig/log", 337 | "keywords": [ 338 | "log", 339 | "psr", 340 | "psr-3" 341 | ], 342 | "time": "2016-10-10 12:19:37" 343 | }, 344 | { 345 | "name": "slim/php-view", 346 | "version": "2.2.0", 347 | "source": { 348 | "type": "git", 349 | "url": "https://github.com/slimphp/PHP-View.git", 350 | "reference": "122ed121a8d9cf91a94020814d2a3ee6c836754f" 351 | }, 352 | "dist": { 353 | "type": "zip", 354 | "url": "https://api.github.com/repos/slimphp/PHP-View/zipball/122ed121a8d9cf91a94020814d2a3ee6c836754f", 355 | "reference": "122ed121a8d9cf91a94020814d2a3ee6c836754f", 356 | "shasum": "" 357 | }, 358 | "require": { 359 | "psr/http-message": "^1.0" 360 | }, 361 | "require-dev": { 362 | "phpunit/phpunit": "^4.8", 363 | "slim/slim": "^3.0" 364 | }, 365 | "type": "library", 366 | "autoload": { 367 | "psr-4": { 368 | "Slim\\Views\\": "src" 369 | } 370 | }, 371 | "notification-url": "https://packagist.org/downloads/", 372 | "license": [ 373 | "MIT" 374 | ], 375 | "authors": [ 376 | { 377 | "name": "Glenn Eggleton", 378 | "email": "geggleto@gmail.com" 379 | } 380 | ], 381 | "description": "Render PHP view scripts into a PSR-7 Response object.", 382 | "keywords": [ 383 | "framework", 384 | "php", 385 | "phtml", 386 | "renderer", 387 | "slim", 388 | "template", 389 | "view" 390 | ], 391 | "time": "2016-10-11 07:43:08" 392 | }, 393 | { 394 | "name": "slim/slim", 395 | "version": "3.5.0", 396 | "source": { 397 | "type": "git", 398 | "url": "https://github.com/slimphp/Slim.git", 399 | "reference": "184352bc1913d7ba552ab4131d62f4730ddb0893" 400 | }, 401 | "dist": { 402 | "type": "zip", 403 | "url": "https://api.github.com/repos/slimphp/Slim/zipball/184352bc1913d7ba552ab4131d62f4730ddb0893", 404 | "reference": "184352bc1913d7ba552ab4131d62f4730ddb0893", 405 | "shasum": "" 406 | }, 407 | "require": { 408 | "container-interop/container-interop": "^1.1", 409 | "nikic/fast-route": "^1.0", 410 | "php": ">=5.5.0", 411 | "pimple/pimple": "^3.0", 412 | "psr/http-message": "^1.0" 413 | }, 414 | "provide": { 415 | "psr/http-message-implementation": "1.0" 416 | }, 417 | "require-dev": { 418 | "phpunit/phpunit": "^4.0", 419 | "squizlabs/php_codesniffer": "^2.5" 420 | }, 421 | "type": "library", 422 | "autoload": { 423 | "psr-4": { 424 | "Slim\\": "Slim" 425 | } 426 | }, 427 | "notification-url": "https://packagist.org/downloads/", 428 | "license": [ 429 | "MIT" 430 | ], 431 | "authors": [ 432 | { 433 | "name": "Rob Allen", 434 | "email": "rob@akrabat.com", 435 | "homepage": "http://akrabat.com" 436 | }, 437 | { 438 | "name": "Josh Lockhart", 439 | "email": "hello@joshlockhart.com", 440 | "homepage": "https://joshlockhart.com" 441 | }, 442 | { 443 | "name": "Gabriel Manricks", 444 | "email": "gmanricks@me.com", 445 | "homepage": "http://gabrielmanricks.com" 446 | }, 447 | { 448 | "name": "Andrew Smith", 449 | "email": "a.smith@silentworks.co.uk", 450 | "homepage": "http://silentworks.co.uk" 451 | } 452 | ], 453 | "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", 454 | "homepage": "http://slimframework.com", 455 | "keywords": [ 456 | "api", 457 | "framework", 458 | "micro", 459 | "router" 460 | ], 461 | "time": "2016-07-26 15:12:13" 462 | } 463 | ], 464 | "packages-dev": [ 465 | { 466 | "name": "doctrine/instantiator", 467 | "version": "1.0.5", 468 | "source": { 469 | "type": "git", 470 | "url": "https://github.com/doctrine/instantiator.git", 471 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 472 | }, 473 | "dist": { 474 | "type": "zip", 475 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 476 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 477 | "shasum": "" 478 | }, 479 | "require": { 480 | "php": ">=5.3,<8.0-DEV" 481 | }, 482 | "require-dev": { 483 | "athletic/athletic": "~0.1.8", 484 | "ext-pdo": "*", 485 | "ext-phar": "*", 486 | "phpunit/phpunit": "~4.0", 487 | "squizlabs/php_codesniffer": "~2.0" 488 | }, 489 | "type": "library", 490 | "extra": { 491 | "branch-alias": { 492 | "dev-master": "1.0.x-dev" 493 | } 494 | }, 495 | "autoload": { 496 | "psr-4": { 497 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 498 | } 499 | }, 500 | "notification-url": "https://packagist.org/downloads/", 501 | "license": [ 502 | "MIT" 503 | ], 504 | "authors": [ 505 | { 506 | "name": "Marco Pivetta", 507 | "email": "ocramius@gmail.com", 508 | "homepage": "http://ocramius.github.com/" 509 | } 510 | ], 511 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 512 | "homepage": "https://github.com/doctrine/instantiator", 513 | "keywords": [ 514 | "constructor", 515 | "instantiate" 516 | ], 517 | "time": "2015-06-14 21:17:01" 518 | }, 519 | { 520 | "name": "myclabs/deep-copy", 521 | "version": "1.5.4", 522 | "source": { 523 | "type": "git", 524 | "url": "https://github.com/myclabs/DeepCopy.git", 525 | "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f" 526 | }, 527 | "dist": { 528 | "type": "zip", 529 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/ea74994a3dc7f8d2f65a06009348f2d63c81e61f", 530 | "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f", 531 | "shasum": "" 532 | }, 533 | "require": { 534 | "php": ">=5.4.0" 535 | }, 536 | "require-dev": { 537 | "doctrine/collections": "1.*", 538 | "phpunit/phpunit": "~4.1" 539 | }, 540 | "type": "library", 541 | "autoload": { 542 | "psr-4": { 543 | "DeepCopy\\": "src/DeepCopy/" 544 | } 545 | }, 546 | "notification-url": "https://packagist.org/downloads/", 547 | "license": [ 548 | "MIT" 549 | ], 550 | "description": "Create deep copies (clones) of your objects", 551 | "homepage": "https://github.com/myclabs/DeepCopy", 552 | "keywords": [ 553 | "clone", 554 | "copy", 555 | "duplicate", 556 | "object", 557 | "object graph" 558 | ], 559 | "time": "2016-09-16 13:37:59" 560 | }, 561 | { 562 | "name": "phpdocumentor/reflection-common", 563 | "version": "1.0", 564 | "source": { 565 | "type": "git", 566 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 567 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 568 | }, 569 | "dist": { 570 | "type": "zip", 571 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 572 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 573 | "shasum": "" 574 | }, 575 | "require": { 576 | "php": ">=5.5" 577 | }, 578 | "require-dev": { 579 | "phpunit/phpunit": "^4.6" 580 | }, 581 | "type": "library", 582 | "extra": { 583 | "branch-alias": { 584 | "dev-master": "1.0.x-dev" 585 | } 586 | }, 587 | "autoload": { 588 | "psr-4": { 589 | "phpDocumentor\\Reflection\\": [ 590 | "src" 591 | ] 592 | } 593 | }, 594 | "notification-url": "https://packagist.org/downloads/", 595 | "license": [ 596 | "MIT" 597 | ], 598 | "authors": [ 599 | { 600 | "name": "Jaap van Otterdijk", 601 | "email": "opensource@ijaap.nl" 602 | } 603 | ], 604 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 605 | "homepage": "http://www.phpdoc.org", 606 | "keywords": [ 607 | "FQSEN", 608 | "phpDocumentor", 609 | "phpdoc", 610 | "reflection", 611 | "static analysis" 612 | ], 613 | "time": "2015-12-27 11:43:31" 614 | }, 615 | { 616 | "name": "phpdocumentor/reflection-docblock", 617 | "version": "3.1.1", 618 | "source": { 619 | "type": "git", 620 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 621 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" 622 | }, 623 | "dist": { 624 | "type": "zip", 625 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", 626 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", 627 | "shasum": "" 628 | }, 629 | "require": { 630 | "php": ">=5.5", 631 | "phpdocumentor/reflection-common": "^1.0@dev", 632 | "phpdocumentor/type-resolver": "^0.2.0", 633 | "webmozart/assert": "^1.0" 634 | }, 635 | "require-dev": { 636 | "mockery/mockery": "^0.9.4", 637 | "phpunit/phpunit": "^4.4" 638 | }, 639 | "type": "library", 640 | "autoload": { 641 | "psr-4": { 642 | "phpDocumentor\\Reflection\\": [ 643 | "src/" 644 | ] 645 | } 646 | }, 647 | "notification-url": "https://packagist.org/downloads/", 648 | "license": [ 649 | "MIT" 650 | ], 651 | "authors": [ 652 | { 653 | "name": "Mike van Riel", 654 | "email": "me@mikevanriel.com" 655 | } 656 | ], 657 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 658 | "time": "2016-09-30 07:12:33" 659 | }, 660 | { 661 | "name": "phpdocumentor/type-resolver", 662 | "version": "0.2", 663 | "source": { 664 | "type": "git", 665 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 666 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" 667 | }, 668 | "dist": { 669 | "type": "zip", 670 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", 671 | "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", 672 | "shasum": "" 673 | }, 674 | "require": { 675 | "php": ">=5.5", 676 | "phpdocumentor/reflection-common": "^1.0" 677 | }, 678 | "require-dev": { 679 | "mockery/mockery": "^0.9.4", 680 | "phpunit/phpunit": "^5.2||^4.8.24" 681 | }, 682 | "type": "library", 683 | "extra": { 684 | "branch-alias": { 685 | "dev-master": "1.0.x-dev" 686 | } 687 | }, 688 | "autoload": { 689 | "psr-4": { 690 | "phpDocumentor\\Reflection\\": [ 691 | "src/" 692 | ] 693 | } 694 | }, 695 | "notification-url": "https://packagist.org/downloads/", 696 | "license": [ 697 | "MIT" 698 | ], 699 | "authors": [ 700 | { 701 | "name": "Mike van Riel", 702 | "email": "me@mikevanriel.com" 703 | } 704 | ], 705 | "time": "2016-06-10 07:14:17" 706 | }, 707 | { 708 | "name": "phpspec/prophecy", 709 | "version": "v1.6.1", 710 | "source": { 711 | "type": "git", 712 | "url": "https://github.com/phpspec/prophecy.git", 713 | "reference": "58a8137754bc24b25740d4281399a4a3596058e0" 714 | }, 715 | "dist": { 716 | "type": "zip", 717 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", 718 | "reference": "58a8137754bc24b25740d4281399a4a3596058e0", 719 | "shasum": "" 720 | }, 721 | "require": { 722 | "doctrine/instantiator": "^1.0.2", 723 | "php": "^5.3|^7.0", 724 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 725 | "sebastian/comparator": "^1.1", 726 | "sebastian/recursion-context": "^1.0" 727 | }, 728 | "require-dev": { 729 | "phpspec/phpspec": "^2.0" 730 | }, 731 | "type": "library", 732 | "extra": { 733 | "branch-alias": { 734 | "dev-master": "1.6.x-dev" 735 | } 736 | }, 737 | "autoload": { 738 | "psr-0": { 739 | "Prophecy\\": "src/" 740 | } 741 | }, 742 | "notification-url": "https://packagist.org/downloads/", 743 | "license": [ 744 | "MIT" 745 | ], 746 | "authors": [ 747 | { 748 | "name": "Konstantin Kudryashov", 749 | "email": "ever.zet@gmail.com", 750 | "homepage": "http://everzet.com" 751 | }, 752 | { 753 | "name": "Marcello Duarte", 754 | "email": "marcello.duarte@gmail.com" 755 | } 756 | ], 757 | "description": "Highly opinionated mocking framework for PHP 5.3+", 758 | "homepage": "https://github.com/phpspec/prophecy", 759 | "keywords": [ 760 | "Double", 761 | "Dummy", 762 | "fake", 763 | "mock", 764 | "spy", 765 | "stub" 766 | ], 767 | "time": "2016-06-07 08:13:47" 768 | }, 769 | { 770 | "name": "phpunit/php-code-coverage", 771 | "version": "4.0.1", 772 | "source": { 773 | "type": "git", 774 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 775 | "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" 776 | }, 777 | "dist": { 778 | "type": "zip", 779 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", 780 | "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", 781 | "shasum": "" 782 | }, 783 | "require": { 784 | "php": "^5.6 || ^7.0", 785 | "phpunit/php-file-iterator": "~1.3", 786 | "phpunit/php-text-template": "~1.2", 787 | "phpunit/php-token-stream": "^1.4.2", 788 | "sebastian/code-unit-reverse-lookup": "~1.0", 789 | "sebastian/environment": "^1.3.2 || ^2.0", 790 | "sebastian/version": "~1.0|~2.0" 791 | }, 792 | "require-dev": { 793 | "ext-xdebug": ">=2.1.4", 794 | "phpunit/phpunit": "^5.4" 795 | }, 796 | "suggest": { 797 | "ext-dom": "*", 798 | "ext-xdebug": ">=2.4.0", 799 | "ext-xmlwriter": "*" 800 | }, 801 | "type": "library", 802 | "extra": { 803 | "branch-alias": { 804 | "dev-master": "4.0.x-dev" 805 | } 806 | }, 807 | "autoload": { 808 | "classmap": [ 809 | "src/" 810 | ] 811 | }, 812 | "notification-url": "https://packagist.org/downloads/", 813 | "license": [ 814 | "BSD-3-Clause" 815 | ], 816 | "authors": [ 817 | { 818 | "name": "Sebastian Bergmann", 819 | "email": "sb@sebastian-bergmann.de", 820 | "role": "lead" 821 | } 822 | ], 823 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 824 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 825 | "keywords": [ 826 | "coverage", 827 | "testing", 828 | "xunit" 829 | ], 830 | "time": "2016-07-26 14:39:29" 831 | }, 832 | { 833 | "name": "phpunit/php-file-iterator", 834 | "version": "1.4.1", 835 | "source": { 836 | "type": "git", 837 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 838 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" 839 | }, 840 | "dist": { 841 | "type": "zip", 842 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 843 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", 844 | "shasum": "" 845 | }, 846 | "require": { 847 | "php": ">=5.3.3" 848 | }, 849 | "type": "library", 850 | "extra": { 851 | "branch-alias": { 852 | "dev-master": "1.4.x-dev" 853 | } 854 | }, 855 | "autoload": { 856 | "classmap": [ 857 | "src/" 858 | ] 859 | }, 860 | "notification-url": "https://packagist.org/downloads/", 861 | "license": [ 862 | "BSD-3-Clause" 863 | ], 864 | "authors": [ 865 | { 866 | "name": "Sebastian Bergmann", 867 | "email": "sb@sebastian-bergmann.de", 868 | "role": "lead" 869 | } 870 | ], 871 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 872 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 873 | "keywords": [ 874 | "filesystem", 875 | "iterator" 876 | ], 877 | "time": "2015-06-21 13:08:43" 878 | }, 879 | { 880 | "name": "phpunit/php-text-template", 881 | "version": "1.2.1", 882 | "source": { 883 | "type": "git", 884 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 885 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 886 | }, 887 | "dist": { 888 | "type": "zip", 889 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 890 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 891 | "shasum": "" 892 | }, 893 | "require": { 894 | "php": ">=5.3.3" 895 | }, 896 | "type": "library", 897 | "autoload": { 898 | "classmap": [ 899 | "src/" 900 | ] 901 | }, 902 | "notification-url": "https://packagist.org/downloads/", 903 | "license": [ 904 | "BSD-3-Clause" 905 | ], 906 | "authors": [ 907 | { 908 | "name": "Sebastian Bergmann", 909 | "email": "sebastian@phpunit.de", 910 | "role": "lead" 911 | } 912 | ], 913 | "description": "Simple template engine.", 914 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 915 | "keywords": [ 916 | "template" 917 | ], 918 | "time": "2015-06-21 13:50:34" 919 | }, 920 | { 921 | "name": "phpunit/php-timer", 922 | "version": "1.0.8", 923 | "source": { 924 | "type": "git", 925 | "url": "https://github.com/sebastianbergmann/php-timer.git", 926 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" 927 | }, 928 | "dist": { 929 | "type": "zip", 930 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", 931 | "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", 932 | "shasum": "" 933 | }, 934 | "require": { 935 | "php": ">=5.3.3" 936 | }, 937 | "require-dev": { 938 | "phpunit/phpunit": "~4|~5" 939 | }, 940 | "type": "library", 941 | "autoload": { 942 | "classmap": [ 943 | "src/" 944 | ] 945 | }, 946 | "notification-url": "https://packagist.org/downloads/", 947 | "license": [ 948 | "BSD-3-Clause" 949 | ], 950 | "authors": [ 951 | { 952 | "name": "Sebastian Bergmann", 953 | "email": "sb@sebastian-bergmann.de", 954 | "role": "lead" 955 | } 956 | ], 957 | "description": "Utility class for timing", 958 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 959 | "keywords": [ 960 | "timer" 961 | ], 962 | "time": "2016-05-12 18:03:57" 963 | }, 964 | { 965 | "name": "phpunit/php-token-stream", 966 | "version": "1.4.8", 967 | "source": { 968 | "type": "git", 969 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 970 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" 971 | }, 972 | "dist": { 973 | "type": "zip", 974 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 975 | "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", 976 | "shasum": "" 977 | }, 978 | "require": { 979 | "ext-tokenizer": "*", 980 | "php": ">=5.3.3" 981 | }, 982 | "require-dev": { 983 | "phpunit/phpunit": "~4.2" 984 | }, 985 | "type": "library", 986 | "extra": { 987 | "branch-alias": { 988 | "dev-master": "1.4-dev" 989 | } 990 | }, 991 | "autoload": { 992 | "classmap": [ 993 | "src/" 994 | ] 995 | }, 996 | "notification-url": "https://packagist.org/downloads/", 997 | "license": [ 998 | "BSD-3-Clause" 999 | ], 1000 | "authors": [ 1001 | { 1002 | "name": "Sebastian Bergmann", 1003 | "email": "sebastian@phpunit.de" 1004 | } 1005 | ], 1006 | "description": "Wrapper around PHP's tokenizer extension.", 1007 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1008 | "keywords": [ 1009 | "tokenizer" 1010 | ], 1011 | "time": "2015-09-15 10:49:45" 1012 | }, 1013 | { 1014 | "name": "phpunit/phpunit", 1015 | "version": "5.6.1", 1016 | "source": { 1017 | "type": "git", 1018 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1019 | "reference": "60c32c5b5e79c2248001efa2560f831da11cc2d7" 1020 | }, 1021 | "dist": { 1022 | "type": "zip", 1023 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/60c32c5b5e79c2248001efa2560f831da11cc2d7", 1024 | "reference": "60c32c5b5e79c2248001efa2560f831da11cc2d7", 1025 | "shasum": "" 1026 | }, 1027 | "require": { 1028 | "ext-dom": "*", 1029 | "ext-json": "*", 1030 | "ext-libxml": "*", 1031 | "ext-mbstring": "*", 1032 | "ext-xml": "*", 1033 | "myclabs/deep-copy": "~1.3", 1034 | "php": "^5.6 || ^7.0", 1035 | "phpspec/prophecy": "^1.3.1", 1036 | "phpunit/php-code-coverage": "^4.0.1", 1037 | "phpunit/php-file-iterator": "~1.4", 1038 | "phpunit/php-text-template": "~1.2", 1039 | "phpunit/php-timer": "^1.0.6", 1040 | "phpunit/phpunit-mock-objects": "^3.2", 1041 | "sebastian/comparator": "~1.1", 1042 | "sebastian/diff": "~1.2", 1043 | "sebastian/environment": "^1.3 || ^2.0", 1044 | "sebastian/exporter": "~1.2", 1045 | "sebastian/global-state": "~1.0", 1046 | "sebastian/object-enumerator": "~1.0", 1047 | "sebastian/resource-operations": "~1.0", 1048 | "sebastian/version": "~1.0|~2.0", 1049 | "symfony/yaml": "~2.1|~3.0" 1050 | }, 1051 | "conflict": { 1052 | "phpdocumentor/reflection-docblock": "3.0.2" 1053 | }, 1054 | "require-dev": { 1055 | "ext-pdo": "*" 1056 | }, 1057 | "suggest": { 1058 | "ext-xdebug": "*", 1059 | "phpunit/php-invoker": "~1.1" 1060 | }, 1061 | "bin": [ 1062 | "phpunit" 1063 | ], 1064 | "type": "library", 1065 | "extra": { 1066 | "branch-alias": { 1067 | "dev-master": "5.6.x-dev" 1068 | } 1069 | }, 1070 | "autoload": { 1071 | "classmap": [ 1072 | "src/" 1073 | ] 1074 | }, 1075 | "notification-url": "https://packagist.org/downloads/", 1076 | "license": [ 1077 | "BSD-3-Clause" 1078 | ], 1079 | "authors": [ 1080 | { 1081 | "name": "Sebastian Bergmann", 1082 | "email": "sebastian@phpunit.de", 1083 | "role": "lead" 1084 | } 1085 | ], 1086 | "description": "The PHP Unit Testing framework.", 1087 | "homepage": "https://phpunit.de/", 1088 | "keywords": [ 1089 | "phpunit", 1090 | "testing", 1091 | "xunit" 1092 | ], 1093 | "time": "2016-10-07 13:03:26" 1094 | }, 1095 | { 1096 | "name": "phpunit/phpunit-mock-objects", 1097 | "version": "3.4.0", 1098 | "source": { 1099 | "type": "git", 1100 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1101 | "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2" 1102 | }, 1103 | "dist": { 1104 | "type": "zip", 1105 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", 1106 | "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", 1107 | "shasum": "" 1108 | }, 1109 | "require": { 1110 | "doctrine/instantiator": "^1.0.2", 1111 | "php": "^5.6 || ^7.0", 1112 | "phpunit/php-text-template": "^1.2", 1113 | "sebastian/exporter": "^1.2" 1114 | }, 1115 | "conflict": { 1116 | "phpunit/phpunit": "<5.4.0" 1117 | }, 1118 | "require-dev": { 1119 | "phpunit/phpunit": "^5.4" 1120 | }, 1121 | "suggest": { 1122 | "ext-soap": "*" 1123 | }, 1124 | "type": "library", 1125 | "extra": { 1126 | "branch-alias": { 1127 | "dev-master": "3.2.x-dev" 1128 | } 1129 | }, 1130 | "autoload": { 1131 | "classmap": [ 1132 | "src/" 1133 | ] 1134 | }, 1135 | "notification-url": "https://packagist.org/downloads/", 1136 | "license": [ 1137 | "BSD-3-Clause" 1138 | ], 1139 | "authors": [ 1140 | { 1141 | "name": "Sebastian Bergmann", 1142 | "email": "sb@sebastian-bergmann.de", 1143 | "role": "lead" 1144 | } 1145 | ], 1146 | "description": "Mock Object library for PHPUnit", 1147 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1148 | "keywords": [ 1149 | "mock", 1150 | "xunit" 1151 | ], 1152 | "time": "2016-10-09 07:01:45" 1153 | }, 1154 | { 1155 | "name": "sebastian/code-unit-reverse-lookup", 1156 | "version": "1.0.0", 1157 | "source": { 1158 | "type": "git", 1159 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1160 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" 1161 | }, 1162 | "dist": { 1163 | "type": "zip", 1164 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1165 | "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", 1166 | "shasum": "" 1167 | }, 1168 | "require": { 1169 | "php": ">=5.6" 1170 | }, 1171 | "require-dev": { 1172 | "phpunit/phpunit": "~5" 1173 | }, 1174 | "type": "library", 1175 | "extra": { 1176 | "branch-alias": { 1177 | "dev-master": "1.0.x-dev" 1178 | } 1179 | }, 1180 | "autoload": { 1181 | "classmap": [ 1182 | "src/" 1183 | ] 1184 | }, 1185 | "notification-url": "https://packagist.org/downloads/", 1186 | "license": [ 1187 | "BSD-3-Clause" 1188 | ], 1189 | "authors": [ 1190 | { 1191 | "name": "Sebastian Bergmann", 1192 | "email": "sebastian@phpunit.de" 1193 | } 1194 | ], 1195 | "description": "Looks up which function or method a line of code belongs to", 1196 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1197 | "time": "2016-02-13 06:45:14" 1198 | }, 1199 | { 1200 | "name": "sebastian/comparator", 1201 | "version": "1.2.0", 1202 | "source": { 1203 | "type": "git", 1204 | "url": "https://github.com/sebastianbergmann/comparator.git", 1205 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" 1206 | }, 1207 | "dist": { 1208 | "type": "zip", 1209 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", 1210 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", 1211 | "shasum": "" 1212 | }, 1213 | "require": { 1214 | "php": ">=5.3.3", 1215 | "sebastian/diff": "~1.2", 1216 | "sebastian/exporter": "~1.2" 1217 | }, 1218 | "require-dev": { 1219 | "phpunit/phpunit": "~4.4" 1220 | }, 1221 | "type": "library", 1222 | "extra": { 1223 | "branch-alias": { 1224 | "dev-master": "1.2.x-dev" 1225 | } 1226 | }, 1227 | "autoload": { 1228 | "classmap": [ 1229 | "src/" 1230 | ] 1231 | }, 1232 | "notification-url": "https://packagist.org/downloads/", 1233 | "license": [ 1234 | "BSD-3-Clause" 1235 | ], 1236 | "authors": [ 1237 | { 1238 | "name": "Jeff Welch", 1239 | "email": "whatthejeff@gmail.com" 1240 | }, 1241 | { 1242 | "name": "Volker Dusch", 1243 | "email": "github@wallbash.com" 1244 | }, 1245 | { 1246 | "name": "Bernhard Schussek", 1247 | "email": "bschussek@2bepublished.at" 1248 | }, 1249 | { 1250 | "name": "Sebastian Bergmann", 1251 | "email": "sebastian@phpunit.de" 1252 | } 1253 | ], 1254 | "description": "Provides the functionality to compare PHP values for equality", 1255 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 1256 | "keywords": [ 1257 | "comparator", 1258 | "compare", 1259 | "equality" 1260 | ], 1261 | "time": "2015-07-26 15:48:44" 1262 | }, 1263 | { 1264 | "name": "sebastian/diff", 1265 | "version": "1.4.1", 1266 | "source": { 1267 | "type": "git", 1268 | "url": "https://github.com/sebastianbergmann/diff.git", 1269 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" 1270 | }, 1271 | "dist": { 1272 | "type": "zip", 1273 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", 1274 | "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", 1275 | "shasum": "" 1276 | }, 1277 | "require": { 1278 | "php": ">=5.3.3" 1279 | }, 1280 | "require-dev": { 1281 | "phpunit/phpunit": "~4.8" 1282 | }, 1283 | "type": "library", 1284 | "extra": { 1285 | "branch-alias": { 1286 | "dev-master": "1.4-dev" 1287 | } 1288 | }, 1289 | "autoload": { 1290 | "classmap": [ 1291 | "src/" 1292 | ] 1293 | }, 1294 | "notification-url": "https://packagist.org/downloads/", 1295 | "license": [ 1296 | "BSD-3-Clause" 1297 | ], 1298 | "authors": [ 1299 | { 1300 | "name": "Kore Nordmann", 1301 | "email": "mail@kore-nordmann.de" 1302 | }, 1303 | { 1304 | "name": "Sebastian Bergmann", 1305 | "email": "sebastian@phpunit.de" 1306 | } 1307 | ], 1308 | "description": "Diff implementation", 1309 | "homepage": "https://github.com/sebastianbergmann/diff", 1310 | "keywords": [ 1311 | "diff" 1312 | ], 1313 | "time": "2015-12-08 07:14:41" 1314 | }, 1315 | { 1316 | "name": "sebastian/environment", 1317 | "version": "1.3.8", 1318 | "source": { 1319 | "type": "git", 1320 | "url": "https://github.com/sebastianbergmann/environment.git", 1321 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" 1322 | }, 1323 | "dist": { 1324 | "type": "zip", 1325 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1326 | "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", 1327 | "shasum": "" 1328 | }, 1329 | "require": { 1330 | "php": "^5.3.3 || ^7.0" 1331 | }, 1332 | "require-dev": { 1333 | "phpunit/phpunit": "^4.8 || ^5.0" 1334 | }, 1335 | "type": "library", 1336 | "extra": { 1337 | "branch-alias": { 1338 | "dev-master": "1.3.x-dev" 1339 | } 1340 | }, 1341 | "autoload": { 1342 | "classmap": [ 1343 | "src/" 1344 | ] 1345 | }, 1346 | "notification-url": "https://packagist.org/downloads/", 1347 | "license": [ 1348 | "BSD-3-Clause" 1349 | ], 1350 | "authors": [ 1351 | { 1352 | "name": "Sebastian Bergmann", 1353 | "email": "sebastian@phpunit.de" 1354 | } 1355 | ], 1356 | "description": "Provides functionality to handle HHVM/PHP environments", 1357 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1358 | "keywords": [ 1359 | "Xdebug", 1360 | "environment", 1361 | "hhvm" 1362 | ], 1363 | "time": "2016-08-18 05:49:44" 1364 | }, 1365 | { 1366 | "name": "sebastian/exporter", 1367 | "version": "1.2.2", 1368 | "source": { 1369 | "type": "git", 1370 | "url": "https://github.com/sebastianbergmann/exporter.git", 1371 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" 1372 | }, 1373 | "dist": { 1374 | "type": "zip", 1375 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", 1376 | "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", 1377 | "shasum": "" 1378 | }, 1379 | "require": { 1380 | "php": ">=5.3.3", 1381 | "sebastian/recursion-context": "~1.0" 1382 | }, 1383 | "require-dev": { 1384 | "ext-mbstring": "*", 1385 | "phpunit/phpunit": "~4.4" 1386 | }, 1387 | "type": "library", 1388 | "extra": { 1389 | "branch-alias": { 1390 | "dev-master": "1.3.x-dev" 1391 | } 1392 | }, 1393 | "autoload": { 1394 | "classmap": [ 1395 | "src/" 1396 | ] 1397 | }, 1398 | "notification-url": "https://packagist.org/downloads/", 1399 | "license": [ 1400 | "BSD-3-Clause" 1401 | ], 1402 | "authors": [ 1403 | { 1404 | "name": "Jeff Welch", 1405 | "email": "whatthejeff@gmail.com" 1406 | }, 1407 | { 1408 | "name": "Volker Dusch", 1409 | "email": "github@wallbash.com" 1410 | }, 1411 | { 1412 | "name": "Bernhard Schussek", 1413 | "email": "bschussek@2bepublished.at" 1414 | }, 1415 | { 1416 | "name": "Sebastian Bergmann", 1417 | "email": "sebastian@phpunit.de" 1418 | }, 1419 | { 1420 | "name": "Adam Harvey", 1421 | "email": "aharvey@php.net" 1422 | } 1423 | ], 1424 | "description": "Provides the functionality to export PHP variables for visualization", 1425 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1426 | "keywords": [ 1427 | "export", 1428 | "exporter" 1429 | ], 1430 | "time": "2016-06-17 09:04:28" 1431 | }, 1432 | { 1433 | "name": "sebastian/global-state", 1434 | "version": "1.1.1", 1435 | "source": { 1436 | "type": "git", 1437 | "url": "https://github.com/sebastianbergmann/global-state.git", 1438 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 1439 | }, 1440 | "dist": { 1441 | "type": "zip", 1442 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 1443 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 1444 | "shasum": "" 1445 | }, 1446 | "require": { 1447 | "php": ">=5.3.3" 1448 | }, 1449 | "require-dev": { 1450 | "phpunit/phpunit": "~4.2" 1451 | }, 1452 | "suggest": { 1453 | "ext-uopz": "*" 1454 | }, 1455 | "type": "library", 1456 | "extra": { 1457 | "branch-alias": { 1458 | "dev-master": "1.0-dev" 1459 | } 1460 | }, 1461 | "autoload": { 1462 | "classmap": [ 1463 | "src/" 1464 | ] 1465 | }, 1466 | "notification-url": "https://packagist.org/downloads/", 1467 | "license": [ 1468 | "BSD-3-Clause" 1469 | ], 1470 | "authors": [ 1471 | { 1472 | "name": "Sebastian Bergmann", 1473 | "email": "sebastian@phpunit.de" 1474 | } 1475 | ], 1476 | "description": "Snapshotting of global state", 1477 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1478 | "keywords": [ 1479 | "global state" 1480 | ], 1481 | "time": "2015-10-12 03:26:01" 1482 | }, 1483 | { 1484 | "name": "sebastian/object-enumerator", 1485 | "version": "1.0.0", 1486 | "source": { 1487 | "type": "git", 1488 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1489 | "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" 1490 | }, 1491 | "dist": { 1492 | "type": "zip", 1493 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", 1494 | "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", 1495 | "shasum": "" 1496 | }, 1497 | "require": { 1498 | "php": ">=5.6", 1499 | "sebastian/recursion-context": "~1.0" 1500 | }, 1501 | "require-dev": { 1502 | "phpunit/phpunit": "~5" 1503 | }, 1504 | "type": "library", 1505 | "extra": { 1506 | "branch-alias": { 1507 | "dev-master": "1.0.x-dev" 1508 | } 1509 | }, 1510 | "autoload": { 1511 | "classmap": [ 1512 | "src/" 1513 | ] 1514 | }, 1515 | "notification-url": "https://packagist.org/downloads/", 1516 | "license": [ 1517 | "BSD-3-Clause" 1518 | ], 1519 | "authors": [ 1520 | { 1521 | "name": "Sebastian Bergmann", 1522 | "email": "sebastian@phpunit.de" 1523 | } 1524 | ], 1525 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1526 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1527 | "time": "2016-01-28 13:25:10" 1528 | }, 1529 | { 1530 | "name": "sebastian/recursion-context", 1531 | "version": "1.0.2", 1532 | "source": { 1533 | "type": "git", 1534 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1535 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791" 1536 | }, 1537 | "dist": { 1538 | "type": "zip", 1539 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", 1540 | "reference": "913401df809e99e4f47b27cdd781f4a258d58791", 1541 | "shasum": "" 1542 | }, 1543 | "require": { 1544 | "php": ">=5.3.3" 1545 | }, 1546 | "require-dev": { 1547 | "phpunit/phpunit": "~4.4" 1548 | }, 1549 | "type": "library", 1550 | "extra": { 1551 | "branch-alias": { 1552 | "dev-master": "1.0.x-dev" 1553 | } 1554 | }, 1555 | "autoload": { 1556 | "classmap": [ 1557 | "src/" 1558 | ] 1559 | }, 1560 | "notification-url": "https://packagist.org/downloads/", 1561 | "license": [ 1562 | "BSD-3-Clause" 1563 | ], 1564 | "authors": [ 1565 | { 1566 | "name": "Jeff Welch", 1567 | "email": "whatthejeff@gmail.com" 1568 | }, 1569 | { 1570 | "name": "Sebastian Bergmann", 1571 | "email": "sebastian@phpunit.de" 1572 | }, 1573 | { 1574 | "name": "Adam Harvey", 1575 | "email": "aharvey@php.net" 1576 | } 1577 | ], 1578 | "description": "Provides functionality to recursively process PHP variables", 1579 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1580 | "time": "2015-11-11 19:50:13" 1581 | }, 1582 | { 1583 | "name": "sebastian/resource-operations", 1584 | "version": "1.0.0", 1585 | "source": { 1586 | "type": "git", 1587 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1588 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1589 | }, 1590 | "dist": { 1591 | "type": "zip", 1592 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1593 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1594 | "shasum": "" 1595 | }, 1596 | "require": { 1597 | "php": ">=5.6.0" 1598 | }, 1599 | "type": "library", 1600 | "extra": { 1601 | "branch-alias": { 1602 | "dev-master": "1.0.x-dev" 1603 | } 1604 | }, 1605 | "autoload": { 1606 | "classmap": [ 1607 | "src/" 1608 | ] 1609 | }, 1610 | "notification-url": "https://packagist.org/downloads/", 1611 | "license": [ 1612 | "BSD-3-Clause" 1613 | ], 1614 | "authors": [ 1615 | { 1616 | "name": "Sebastian Bergmann", 1617 | "email": "sebastian@phpunit.de" 1618 | } 1619 | ], 1620 | "description": "Provides a list of PHP built-in functions that operate on resources", 1621 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1622 | "time": "2015-07-28 20:34:47" 1623 | }, 1624 | { 1625 | "name": "sebastian/version", 1626 | "version": "2.0.0", 1627 | "source": { 1628 | "type": "git", 1629 | "url": "https://github.com/sebastianbergmann/version.git", 1630 | "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" 1631 | }, 1632 | "dist": { 1633 | "type": "zip", 1634 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", 1635 | "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", 1636 | "shasum": "" 1637 | }, 1638 | "require": { 1639 | "php": ">=5.6" 1640 | }, 1641 | "type": "library", 1642 | "extra": { 1643 | "branch-alias": { 1644 | "dev-master": "2.0.x-dev" 1645 | } 1646 | }, 1647 | "autoload": { 1648 | "classmap": [ 1649 | "src/" 1650 | ] 1651 | }, 1652 | "notification-url": "https://packagist.org/downloads/", 1653 | "license": [ 1654 | "BSD-3-Clause" 1655 | ], 1656 | "authors": [ 1657 | { 1658 | "name": "Sebastian Bergmann", 1659 | "email": "sebastian@phpunit.de", 1660 | "role": "lead" 1661 | } 1662 | ], 1663 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1664 | "homepage": "https://github.com/sebastianbergmann/version", 1665 | "time": "2016-02-04 12:56:52" 1666 | }, 1667 | { 1668 | "name": "symfony/yaml", 1669 | "version": "v3.1.5", 1670 | "source": { 1671 | "type": "git", 1672 | "url": "https://github.com/symfony/yaml.git", 1673 | "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3" 1674 | }, 1675 | "dist": { 1676 | "type": "zip", 1677 | "url": "https://api.github.com/repos/symfony/yaml/zipball/368b9738d4033c8b93454cb0dbd45d305135a6d3", 1678 | "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3", 1679 | "shasum": "" 1680 | }, 1681 | "require": { 1682 | "php": ">=5.5.9" 1683 | }, 1684 | "type": "library", 1685 | "extra": { 1686 | "branch-alias": { 1687 | "dev-master": "3.1-dev" 1688 | } 1689 | }, 1690 | "autoload": { 1691 | "psr-4": { 1692 | "Symfony\\Component\\Yaml\\": "" 1693 | }, 1694 | "exclude-from-classmap": [ 1695 | "/Tests/" 1696 | ] 1697 | }, 1698 | "notification-url": "https://packagist.org/downloads/", 1699 | "license": [ 1700 | "MIT" 1701 | ], 1702 | "authors": [ 1703 | { 1704 | "name": "Fabien Potencier", 1705 | "email": "fabien@symfony.com" 1706 | }, 1707 | { 1708 | "name": "Symfony Community", 1709 | "homepage": "https://symfony.com/contributors" 1710 | } 1711 | ], 1712 | "description": "Symfony Yaml Component", 1713 | "homepage": "https://symfony.com", 1714 | "time": "2016-09-25 08:27:07" 1715 | }, 1716 | { 1717 | "name": "webmozart/assert", 1718 | "version": "1.1.0", 1719 | "source": { 1720 | "type": "git", 1721 | "url": "https://github.com/webmozart/assert.git", 1722 | "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" 1723 | }, 1724 | "dist": { 1725 | "type": "zip", 1726 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", 1727 | "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", 1728 | "shasum": "" 1729 | }, 1730 | "require": { 1731 | "php": "^5.3.3|^7.0" 1732 | }, 1733 | "require-dev": { 1734 | "phpunit/phpunit": "^4.6", 1735 | "sebastian/version": "^1.0.1" 1736 | }, 1737 | "type": "library", 1738 | "extra": { 1739 | "branch-alias": { 1740 | "dev-master": "1.2-dev" 1741 | } 1742 | }, 1743 | "autoload": { 1744 | "psr-4": { 1745 | "Webmozart\\Assert\\": "src/" 1746 | } 1747 | }, 1748 | "notification-url": "https://packagist.org/downloads/", 1749 | "license": [ 1750 | "MIT" 1751 | ], 1752 | "authors": [ 1753 | { 1754 | "name": "Bernhard Schussek", 1755 | "email": "bschussek@gmail.com" 1756 | } 1757 | ], 1758 | "description": "Assertions to validate method input/output with nice error messages.", 1759 | "keywords": [ 1760 | "assert", 1761 | "check", 1762 | "validate" 1763 | ], 1764 | "time": "2016-08-09 15:02:57" 1765 | } 1766 | ], 1767 | "aliases": [], 1768 | "minimum-stability": "stable", 1769 | "stability-flags": [], 1770 | "prefer-stable": false, 1771 | "prefer-lowest": false, 1772 | "platform": { 1773 | "php": ">=5.5.0" 1774 | }, 1775 | "platform-dev": [] 1776 | } 1777 | --------------------------------------------------------------------------------