├── resources └── nodejs │ ├── node_modules │ └── http-string-parser │ │ ├── .npmignore │ │ ├── test │ │ ├── fixtures │ │ │ ├── .npmignore │ │ │ ├── get │ │ │ │ ├── request-string │ │ │ │ ├── response-string-304 │ │ │ │ ├── response-string │ │ │ │ ├── expected-output │ │ │ │ └── tracefile │ │ │ └── post │ │ │ │ ├── response-string │ │ │ │ ├── request-string │ │ │ │ ├── expected-output │ │ │ │ └── tracefile │ │ ├── unit │ │ │ ├── .npmignore │ │ │ └── parser-test.coffee │ │ └── integration │ │ │ ├── .npmignore │ │ │ └── curl-trace-parser-test.coffee │ │ ├── scripts │ │ ├── prepublish │ │ ├── bdd │ │ ├── test │ │ └── build │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ └── lib │ │ └── parser.js │ ├── .gitignore │ ├── event-samples │ └── test-data.js │ ├── package.json │ ├── event.json │ └── gateway.js ├── .gitignore ├── src ├── routes │ └── json.php ├── Exceptions │ └── PackageException.php ├── Http │ └── Controllers │ │ └── TestController.php ├── ServiceProvider.php ├── Console │ ├── Install.php │ └── Package.php ├── helpers.php └── Package │ └── Archive.php ├── README.md ├── phpunit.xml ├── config └── serverless.php ├── LICENSE ├── CONTRIBUTING.md ├── composer.json └── composer.lock /resources/nodejs/node_modules/http-string-parser/.npmignore: -------------------------------------------------------------------------------- 1 | /src -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | .idea/ 3 | .php_cs.cache 4 | .DS_Store 5 | .vscode -------------------------------------------------------------------------------- /resources/nodejs/.gitignore: -------------------------------------------------------------------------------- 1 | .eslintrc 2 | package-lock.json 3 | .vscode -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/fixtures/.npmignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/unit/.npmignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/integration/.npmignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/scripts/prepublish: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ./scripts/test && 3 | ./scripts/build 4 | -------------------------------------------------------------------------------- /src/routes/json.php: -------------------------------------------------------------------------------- 1 | get('/laravel-aws-lambda/info', 'STS\Serverless\Http\Controllers\TestController@info'); 3 | -------------------------------------------------------------------------------- /src/Exceptions/PackageException.php: -------------------------------------------------------------------------------- 1 | GET /shopping-cart HTTP/1.1 2 | > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5 3 | > Host: curltraceparser.apiary.io 4 | > Accept: */* 5 | > 6 | > 7 | 8 | < HTTP/1.1 200 OK 9 | < Content-Type: application/json 10 | < Date: Sun, 21 Jul 2013 13:23:55 GMT 11 | < X-Apiary-Ratelimit-Limit: 120 12 | < X-Apiary-Ratelimit-Remaining: 119 13 | < Content-Length: 119 14 | < Connection: keep-alive 15 | < 16 | < { "items": [ 17 | { "url": "/shopping-cart/1", "product":"2ZY48XPZ", "quantity": 1, "name": "New socks", "price": 1.25 } 18 | ] } 19 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/fixtures/post/expected-output: -------------------------------------------------------------------------------- 1 | > POST /shopping-cart HTTP/1.1 2 | > User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5 3 | > Host: curltraceparser.apiary.io 4 | > Accept: */* 5 | > Content-Type: application/json 6 | > Content-Length: 39 7 | > 8 | > { "product":"1AB23ORM", "quantity": 2 } 9 | 10 | < HTTP/1.1 201 Created 11 | < Content-Type: application/json 12 | < Date: Sun, 21 Jul 2013 14:51:09 GMT 13 | < X-Apiary-Ratelimit-Limit: 120 14 | < X-Apiary-Ratelimit-Remaining: 119 15 | < Content-Length: 50 16 | < Connection: keep-alive 17 | < 18 | < { "status": "created", "url": "/shopping-cart/2" } 19 | -------------------------------------------------------------------------------- /src/Http/Controllers/TestController.php: -------------------------------------------------------------------------------- 1 | php_ini_loaded_file(), 14 | 'parameters' => $request->all(), 15 | 'headers' => $request->headers->all() 16 | ]; 17 | $headers = [ 18 | 'x-uri' => $request->getUri() 19 | ]; 20 | 21 | return \Illuminate\Http\JsonResponse::create($results, 200, $headers); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /resources/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel-aws-lambda", 3 | "version": "0.0.1", 4 | "description": "Allows php to respond to http requests on aws lambda.", 5 | "main": "gateway.js", 6 | "author": "Bubba Hines", 7 | "license": "MIT", 8 | "contributors": [ 9 | "Bubba " 10 | ], 11 | "dependencies": { 12 | "http-string-parser": "0.0.5" 13 | }, 14 | "devDependencies": {}, 15 | "scripts": { 16 | "test": "echo \"Error: no test specified\" && exit 1" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/stechstudio/laravel-aws-lambda.git" 21 | }, 22 | "keywords": [ 23 | "laravel", 24 | "lumen", 25 | "php", 26 | "lambda", 27 | "aws" 28 | ], 29 | "bugs": { 30 | "url": "https://github.com/stechstudio/laravel-aws-lambda/issues" 31 | }, 32 | "homepage": "https://github.com/stechstudio/laravel-aws-lambda" 33 | } 34 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests 15 | 16 | 17 | 18 | 19 | ./src 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /config/serverless.php: -------------------------------------------------------------------------------- 1 | [ 4 | 'ignore' => [ 5 | // Directories & Fully Qualified Paths 6 | base_path('vendor'), 7 | base_path('tests'), 8 | base_path('storage'), 9 | base_path('.idea'), 10 | base_path('.git'), 11 | base_path('resources/lib/php'), 12 | base_path('resources/lib/pkgconfig'), 13 | base_path('resources/dist'), 14 | // Files Names 15 | '.gitignore', 16 | '.env', 17 | '.env.example', 18 | '.gitkeep', 19 | '.htaccess', 20 | 'readme.md', 21 | 'versions.json', 22 | '.php_cs.cache', 23 | 'composer.json', 24 | 'composer.lock' 25 | ], 26 | 'executables' => [ 27 | 'resources/bin/php-cgi' 28 | ] 29 | ], 30 | 'install' => [ 31 | 'php_url' => 'https://github.com/stechstudio/php-lambda/releases/download/1.0.1/php-7.1.6-lambda.tar.gz' 32 | ] 33 | ]; 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright 2017 Signature Tech Studio, Inc. https://stechstudio.com/ 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. -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 apiary.io 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | 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, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /resources/nodejs/event.json: -------------------------------------------------------------------------------- 1 | { 2 | "resource": "/", 3 | "path": "/", 4 | "httpMethod": "GET", 5 | "headers": null, 6 | "queryStringParameters": { 7 | "bar": "foo", 8 | "foo": "bar" 9 | }, 10 | "pathParameters": null, 11 | "stageVariables": null, 12 | "requestContext": { 13 | "path": "/", 14 | "accountId": "965741605173", 15 | "resourceId": "poad4eypc3", 16 | "stage": "test-invoke-stage", 17 | "requestId": "test-invoke-request", 18 | "identity": { 19 | "cognitoIdentityPoolId": null, 20 | "accountId": "965741605173", 21 | "cognitoIdentityId": null, 22 | "caller": "AIDAJTQBRPS6V5GTG3NQ4", 23 | "apiKey": "test-invoke-api-key", 24 | "sourceIp": "test-invoke-source-ip", 25 | "accessKey": "ASIAJLZC3O2MSVAT2P6A", 26 | "cognitoAuthenticationType": null, 27 | "cognitoAuthenticationProvider": null, 28 | "userArn": "arn:aws:iam::965741605173:user/bubba", 29 | "userAgent": "Apache-HttpClient/4.5.x (Java/1.8.0_112)", 30 | "user": "AIDAJTQBRPS6V5GTG3NQ4" 31 | }, 32 | "resourcePath": "/", 33 | "httpMethod": "GET", 34 | "apiId": "l9igjbh4bc" 35 | }, 36 | "body": null, 37 | "isBase64Encoded": false 38 | } -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/README.md: -------------------------------------------------------------------------------- 1 | # http-string-parser 2 | 3 | [![Build Status](https://travis-ci.org/apiaryio/http-string-parser.png)](https://travis-ci.org/apiaryio/http-string-parser) 4 | [![Dependency Status](https://david-dm.org/apiaryio/http-string-parser.png)](https://david-dm.org/apiaryio/http-string-parser) 5 | [![devDependency Status](https://david-dm.org/apiaryio/http-string-parser/dev-status.png)](https://david-dm.org/apiaryio/http-string-parser#info=devDependencies) 6 | 7 | Parse HTTP messages (Request and Response) from raw string in Node.JS 8 | 9 | ##Parse HTTP Messages 10 | ```javascript 11 | var parser = require('http-string-parser'); 12 | 13 | request = parser.parseRequest(requestString); 14 | response = parser.parseResponse(responseString); 15 | 16 | console.log(request); 17 | console.log(response); 18 | ``` 19 | 20 | See more about [Request][request] and [Response][response] data model. 21 | 22 | [request]: https://www.relishapp.com/apiary/gavel/docs/data-model#http-request 23 | [response]: https://www.relishapp.com/apiary/gavel/docs/data-model#http-response 24 | 25 | ## API Reference 26 | 27 | `parseRequest(requestString)` 28 | 29 | `parseRequestLine(requestLine)` 30 | 31 | `parseResponse(responseString)` 32 | 33 | `parseStatusLine(statusLine)` 34 | 35 | `parseHeaders(headersLinesArray)` 36 | 37 | - - - 38 | 39 | NOTE: Proof of concept, naive HTTP parsing, wheel re-inventation. In future it may be replaced with better parser from [Node.JS core's C bindings of NGINX HTTP parser](https://github.com/joyent/http-parser) or [PEG.js HTTP parser](https://npmjs.org/package/http-pegjs) 40 | 41 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Bug Reports 2 | 3 | To encourage active collaboration, we strongly encourages **pull requests**, not just bug reports. *"Bug reports"* may also be sent in the form of a pull request containing a failing test. 4 | 5 | If you open an issue, your issue should contain a title and a clear description of the issue. You should also include as much relevant information as possible and a code sample that demonstrates the issue. The goal of an issue is to make it easy for yourself - and others - to replicate the bug and develop a fix. 6 | 7 | Remember, issues are opened in the hope that others with the same problem will be able to collaborate with you on solving it. Do not expect that the issue will automatically see any activity or that others will jump to fix it. Opening an issue serves to help yourself and others start on the path of fixing the problem. 8 | 9 | # Coding Style 10 | 11 | We follow the [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) coding standard and the [PSR-4](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md) autoloading standard. 12 | 13 | ## PHPDoc 14 | Below is an example of a valid documentation block. Note that the @param attribute is followed by two spaces, the argument type, two more spaces, and finally the variable name: 15 | 16 | ```php 17 | /** 18 | * Register a binding with the container. 19 | * 20 | * @param string|array $abstract 21 | * @param \Closure|string|null $concrete 22 | * @param bool $shared 23 | * @return void 24 | */ 25 | public function bind($abstract, $concrete = null, $shared = false) 26 | { 27 | // 28 | } 29 | ``` -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stechstudio/laravel-aws-lambda", 3 | "version": "0.0.1", 4 | "description": "Allows php to respond to http requests on aws lambda", 5 | "keywords": ["laravel", "lumen", "aws", "php", "lambda"], 6 | "homepage": "https://stechstudio.com/", 7 | "type": "library", 8 | "license": "MIT", 9 | "authors": [ 10 | { 11 | "name": "Bubba", 12 | "email": "bubba@stechstdio.com", 13 | "homepage": "https://github.com/bubba-h57" 14 | } 15 | ], 16 | "support": { 17 | "issues": "https://github.com/stechstudio/laravel-aws-lambda/issues" 18 | }, 19 | "require": { 20 | "php": ">=7.1.0", 21 | "illuminate/support": "^5.4", 22 | "Illuminate/Console": "^5.4", 23 | "illuminate/filesystem": "^5.4", 24 | "illuminate/http": "^5.4", 25 | "symfony/process": "^3.3", 26 | "Illuminate/Pipeline": "^5.4", 27 | "gisostallenberg/file-permission-calculator": "^1.0" 28 | }, 29 | "require-dev": { 30 | "phpunit/phpunit": "^6.2", 31 | "symfony/var-dumper": "^3.3", 32 | "composer/composer": "^1.4" 33 | }, 34 | "config": { 35 | "platform": { 36 | "php": "7.1.6" 37 | } 38 | }, 39 | "suggest": { 40 | "ext-zip": "Enabling the zip extension allows you to unzip archives", 41 | "ext-zlib": "Allow gzip compression of HTTP requests", 42 | "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages" 43 | }, 44 | "autoload": { 45 | "psr-4": { "STS\\Serverless\\": "src/" } 46 | }, 47 | "autoload-dev": { 48 | "psr-4": { "STS\\Test\\": "tests/" } 49 | }, 50 | "scripts": { 51 | "test": "phpunit" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/ServiceProvider.php: -------------------------------------------------------------------------------- 1 | publishes([$this->configPath => $publishPath], 'config'); 43 | 44 | if (is_a($this->app, 'Laravel\Lumen\Application')) { 45 | include __DIR__ . '/routes/json.php'; 46 | } else { 47 | $this->loadRoutesFrom(__DIR__ . '/routes/json.php'); 48 | } 49 | } 50 | /** 51 | * Register the service provider. 52 | */ 53 | public function register() 54 | { 55 | if (is_a($this->app, 'Laravel\Lumen\Application')) { 56 | $this->app->configure('serverless'); 57 | } 58 | $this->mergeConfigFrom($this->configPath, 'serverless'); 59 | $this->commands($this->commandList); 60 | } 61 | 62 | /** 63 | * Get the services provided by the provider. 64 | * 65 | * @return array 66 | */ 67 | public function provides() 68 | { 69 | return []; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_from": "http-string-parser@0.0.5", 3 | "_id": "http-string-parser@0.0.5", 4 | "_inBundle": false, 5 | "_integrity": "sha1-jy2geB/gpuSAND9T0uz5OvhkYcg=", 6 | "_location": "/http-string-parser", 7 | "_phantomChildren": {}, 8 | "_requested": { 9 | "type": "version", 10 | "registry": true, 11 | "raw": "http-string-parser@0.0.5", 12 | "name": "http-string-parser", 13 | "escapedName": "http-string-parser", 14 | "rawSpec": "0.0.5", 15 | "saveSpec": null, 16 | "fetchSpec": "0.0.5" 17 | }, 18 | "_requiredBy": [ 19 | "#USER", 20 | "/" 21 | ], 22 | "_resolved": "https://registry.npmjs.org/http-string-parser/-/http-string-parser-0.0.5.tgz", 23 | "_shasum": "8f2da0781fe0a6e480343f53d2ecf93af86461c8", 24 | "_spec": "http-string-parser@0.0.5", 25 | "_where": "/Users/bubba/dev/stechstudio/laravel-aws-lambda/resources/nodejs", 26 | "author": { 27 | "name": "Adam Kliment", 28 | "email": "adam@apiary.io" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/apiaryio/http-string-parser/issues" 32 | }, 33 | "bundleDependencies": false, 34 | "dependencies": {}, 35 | "deprecated": false, 36 | "description": "Parse HTTP Request and Response from String", 37 | "devDependencies": { 38 | "chai": "1.7.1", 39 | "coffee-script": "1.6.3", 40 | "curl-trace-parser": "", 41 | "mocha": "1.11.0" 42 | }, 43 | "homepage": "https://github.com/apiaryio/http-string-parser#readme", 44 | "keywords": [ 45 | "http", 46 | "message", 47 | "request", 48 | "response", 49 | "parser", 50 | "string", 51 | "raw", 52 | "bare" 53 | ], 54 | "license": "MIT", 55 | "main": "lib/parser.js", 56 | "name": "http-string-parser", 57 | "repository": { 58 | "type": "git", 59 | "url": "git+https://github.com/apiaryio/http-string-parser.git" 60 | }, 61 | "scripts": { 62 | "prepublish": "scripts/prepublish", 63 | "test": "scripts/test" 64 | }, 65 | "version": "0.0.5" 66 | } 67 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/integration/curl-trace-parser-test.coffee: -------------------------------------------------------------------------------- 1 | fs = require 'fs' 2 | 3 | {assert} = require 'chai' 4 | parser = require '../../src/parser' 5 | curl = require 'curl-trace-parser' 6 | 7 | describe "Parse output from curl trace parser", () -> 8 | traceFilePath = "./test/fixtures/post/tracefile" 9 | parsedCurlStrings = {} 10 | 11 | 12 | before (done) -> 13 | fs.readFile traceFilePath, 'utf8', (err, trace) -> 14 | done err if err 15 | parsedCurlStrings = curl.parse trace 16 | done() 17 | 18 | describe "request", () -> 19 | request = {} 20 | 21 | before () -> 22 | request = parser.parseRequest parsedCurlStrings['request'] 23 | 24 | it "should parse string to expected object", () -> 25 | expectedObject = 26 | headers: 27 | 'User-Agent': 'curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5' 28 | 'Host': 'curltraceparser.apiary.io' 29 | 'Accept':'*/*' 30 | 'Content-Type': 'application/json' 31 | 'Content-Length': '39' 32 | body: '{ \"product\":\"1AB23ORM\", \"quantity\": 2 }' 33 | method: 'POST' 34 | uri: '/shopping-cart' 35 | 36 | assert.deepEqual request, expectedObject 37 | 38 | describe "response", () -> 39 | response = {} 40 | 41 | before () -> 42 | response = parser.parseResponse parsedCurlStrings['response'] 43 | 44 | it "should parse string to expected object", () -> 45 | expectedObject = 46 | protocolVersion: "HTTP/1.1" 47 | statusCode: "201" 48 | statusMessage: "Created" 49 | headers: 50 | 'Content-Type': 'application/json' 51 | 'Content-Length': '39' 52 | 'Date': 'Sun, 21 Jul 2013 14:51:09 GMT' 53 | 'X-Apiary-Ratelimit-Limit': '120' 54 | 'X-Apiary-Ratelimit-Remaining': '119' 55 | 'Content-Length': '50' 56 | 'Connection': 'keep-alive' 57 | body: '{ "status": "created", "url": "/shopping-cart/2" }' 58 | 59 | assert.deepEqual response, expectedObject 60 | -------------------------------------------------------------------------------- /src/Console/Install.php: -------------------------------------------------------------------------------- 1 | downloadPhp(); 23 | $this->stageFiles($tmpDir); 24 | $this->reportVersions(); 25 | } 26 | 27 | protected function reportVersions(): void 28 | { 29 | $versionText = str_replace('\n', '', file_get_contents(base_path('resources/lib/versions.json'))); 30 | $versionText = str_replace(',}', '}', $versionText); 31 | $versions = collect(json_decode($versionText, true)); 32 | $this->info('PHP Libraries for Lambda installed to the resources folder'); 33 | $versions->each( 34 | function ($version, $name) { 35 | $this->info(sprintf("\t%s: %s", $name, $version)); 36 | } 37 | ); 38 | } 39 | 40 | /** 41 | * @param $tmpDir 42 | */ 43 | protected function stageFiles($tmpDir): void 44 | { 45 | @mkdir(base_path('resources/bin'), 0777, true); 46 | @mkdir(base_path('resources/lib'), 0777, true); 47 | copy(sprintf('%s/bin/php-cgi', $tmpDir), base_path('resources/bin/php-cgi')); 48 | copyFolder(sprintf('%s/lib', $tmpDir), base_path('resources/lib')); 49 | copyFolder(__DIR__ . '/../../resources/nodejs', base_path('resources/nodejs')); 50 | @unlink(base_path('resources/nodejs/.gitignore')); 51 | @unlink(base_path('resources/nodejs/package.json')); 52 | @unlink(base_path('resources/nodejs/package-lock.json')); 53 | } 54 | 55 | /** 56 | * @return \SplFileInfo 57 | */ 58 | protected function downloadPhp(): \SplFileInfo 59 | { 60 | $tmpDir = \tempDir('serverless', true); 61 | $zipfile = sprintf('%s/php.tar.gz', $tmpDir); 62 | 63 | file_put_contents($zipfile, 64 | fopen(config('serverless.install.php_url'), 'r')); 65 | (new \PharData($zipfile))->decompress()->extractTo($tmpDir); 66 | 67 | return $tmpDir; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/lib/parser.js: -------------------------------------------------------------------------------- 1 | // Generated by CoffeeScript 1.6.3 2 | var parseHeaders, parseRequest, parseRequestLine, parseResponse, parseStatusLine; 3 | 4 | parseRequest = function(requestString) { 5 | var headerLines, line, lines, parsedRequestLine, request; 6 | request = {}; 7 | lines = requestString.split('\r\n'); 8 | parsedRequestLine = parseRequestLine(lines.shift()); 9 | request['method'] = parsedRequestLine['method']; 10 | request['uri'] = parsedRequestLine['uri']; 11 | headerLines = []; 12 | while (lines.length > 0) { 13 | line = lines.shift(); 14 | if (line === "") { 15 | break; 16 | } 17 | headerLines.push(line); 18 | } 19 | request['headers'] = parseHeaders(headerLines); 20 | request['body'] = lines.join('\r\n'); 21 | return request; 22 | }; 23 | 24 | parseResponse = function(responseString) { 25 | var headerLines, line, lines, parsedStatusLine, response; 26 | response = {}; 27 | lines = responseString.split('\r\n'); 28 | parsedStatusLine = parseStatusLine(lines.shift()); 29 | response['protocolVersion'] = parsedStatusLine['protocol']; 30 | response['statusCode'] = parsedStatusLine['statusCode']; 31 | response['statusMessage'] = parsedStatusLine['statusMessage']; 32 | headerLines = []; 33 | while (lines.length > 0) { 34 | line = lines.shift(); 35 | if (line === "") { 36 | break; 37 | } 38 | headerLines.push(line); 39 | } 40 | response['headers'] = parseHeaders(headerLines); 41 | response['body'] = lines.join('\r\n'); 42 | return response; 43 | }; 44 | 45 | parseHeaders = function(headerLines) { 46 | var headers, key, line, parts, _i, _len; 47 | headers = {}; 48 | for (_i = 0, _len = headerLines.length; _i < _len; _i++) { 49 | line = headerLines[_i]; 50 | parts = line.split(":"); 51 | key = parts.shift(); 52 | headers[key] = parts.join(":").trim(); 53 | } 54 | return headers; 55 | }; 56 | 57 | parseStatusLine = function(statusLine) { 58 | var parsed, parts; 59 | parts = statusLine.match(/^(.+) ([0-9]{3}) (.*)$/); 60 | parsed = {}; 61 | if (parts !== null) { 62 | parsed['protocol'] = parts[1]; 63 | parsed['statusCode'] = parts[2]; 64 | parsed['statusMessage'] = parts[3]; 65 | } 66 | return parsed; 67 | }; 68 | 69 | parseRequestLine = function(requestLineString) { 70 | var parsed, parts; 71 | parts = requestLineString.split(' '); 72 | parsed = {}; 73 | parsed['method'] = parts[0]; 74 | parsed['uri'] = parts[1]; 75 | parsed['protocol'] = parts[2]; 76 | return parsed; 77 | }; 78 | 79 | module.exports.parseRequest = parseRequest; 80 | 81 | module.exports.parseResponse = parseResponse; 82 | 83 | module.exports.parseRequestLine = parseRequestLine; 84 | 85 | module.exports.parseStatusLine = parseStatusLine; 86 | 87 | module.exports.parseHeaders = parseHeaders; 88 | -------------------------------------------------------------------------------- /resources/nodejs/gateway.js: -------------------------------------------------------------------------------- 1 | /*jslint node: true */ 2 | 3 | const spawn = require("child_process").spawnSync; 4 | const parser = require("http-string-parser"); 5 | var path = require("path"); 6 | 7 | exports.handler = function(event, context) { 8 | // Sets some sane defaults here so that this function doesn't fail 9 | // when it's not handling a HTTP request from API Gateway. 10 | var requestMethod = event.httpMethod || 'GET'; 11 | var requestBody = event.body || ''; 12 | var serverName = event.headers ? event.headers.Host : 'lambda_test.dev'; 13 | var requestUri = event.path || ''; 14 | var headers = {}; 15 | var queryParams = ''; 16 | 17 | // Convert all headers passed by API Gateway into the correct format for PHP CGI. 18 | // This means converting a header such as "X-Test" into "HTTP_X-TEST". 19 | if (event.headers) { 20 | Object.keys(event.headers).map(function (key) { 21 | headers['HTTP_' + key.toUpperCase().replace(/-/g, '_')] = event.headers[key]; 22 | headers[key.toUpperCase().replace(/-/g, '_')] = event.headers[key]; 23 | }); 24 | } 25 | 26 | // Convert query parameters passed by API Gateway into the correct format for PHP CGI. 27 | if (event.queryStringParameters) { 28 | var parameters = Object.keys(event.queryStringParameters).map(function(key) { 29 | var obj = key + "=" + event.queryStringParameters[key]; 30 | return obj; 31 | }); 32 | queryParams = parameters.join("&"); 33 | } 34 | 35 | // Spawn the PHP CGI process with a bunch of environment variables that describe the request. 36 | var scriptPath = path.resolve(__dirname + '/../../public/index.php') 37 | 38 | var php = spawn('php-cgi', ['-f', scriptPath], { 39 | env: Object.assign({ 40 | REDIRECT_STATUS: 200, 41 | REQUEST_METHOD: requestMethod, 42 | SCRIPT_FILENAME: scriptPath, 43 | SCRIPT_NAME: '/index.php', 44 | PATH_INFO: '/', 45 | SERVER_NAME: serverName, 46 | SERVER_PROTOCOL: 'HTTP/1.1', 47 | REQUEST_URI: requestUri, 48 | QUERY_STRING: queryParams, 49 | AWS_LAMBDA: true, 50 | CONTENT_LENGTH: Buffer.byteLength(requestBody, 'utf-8') 51 | }, headers, process.env), 52 | input: requestBody 53 | }); 54 | 55 | // When the process exists, we should have a compvare HTTP response to send back to API Gateway. 56 | var parsedResponse = parser.parseResponse(php.stdout.toString('utf-8')); 57 | 58 | // Signals the end of the Lambda function, and passes the provided object back to API Gateway. 59 | context.succeed({ 60 | statusCode: parsedResponse.statusCode || 200, 61 | headers: parsedResponse.headers, 62 | body: parsedResponse.body 63 | }); 64 | }; -------------------------------------------------------------------------------- /src/helpers.php: -------------------------------------------------------------------------------- 1 | isReadable()) { 47 | throw new RuntimeException("{$file->getFilename()} is not readable."); 48 | } 49 | switch ($file->getType()) { 50 | case 'dir': 51 | rmFolder($file->getRealPath()); 52 | break; 53 | case 'link': 54 | unlink($file->getPathname()); 55 | break; 56 | default: 57 | unlink($file->getRealPath()); 58 | } 59 | } 60 | return rmdir($location); 61 | } 62 | } 63 | 64 | if (! function_exists('copyFolder')) { 65 | /** 66 | * Recursively Copy a Directory 67 | * @param string $location 68 | * 69 | * @return bool 70 | */ 71 | function copyFolder(string $source, string $destination): bool 72 | { 73 | if (! is_dir($destination)) { 74 | mkdir($destination, 0777, true); 75 | } 76 | 77 | $contents = new RecursiveIteratorIterator( 78 | new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), 79 | RecursiveIteratorIterator::SELF_FIRST); 80 | 81 | foreach ($contents as $item) { 82 | if ($item->isDir()) { 83 | $destDir = $destination . DIRECTORY_SEPARATOR . $contents->getSubPathName(); 84 | if (! is_dir($destDir)) { 85 | @mkdir($destDir); 86 | } 87 | } else { 88 | copy($item, $destination . DIRECTORY_SEPARATOR . $contents->getSubPathName()); 89 | } 90 | } 91 | 92 | return true; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/fixtures/get/tracefile: -------------------------------------------------------------------------------- 1 | == Info: About to connect() to curltraceparser.apiary.io port 80 (#0) 2 | == Info: Trying 54.235.100.115... 3 | == Info: connected 4 | == Info: Connected to curltraceparser.apiary.io (54.235.100.115) port 80 (#0) 5 | => Send header, 169 bytes (0xa9) 6 | 0000: 47 45 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 61 GET /shopping-ca 7 | 0010: 72 74 20 48 54 54 50 2f 31 2e 31 0d 0a 55 73 65 rt HTTP/1.1..Use 8 | 0020: 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c 2f 37 2e r-Agent: curl/7. 9 | 0030: 32 34 2e 30 20 28 78 38 36 5f 36 34 2d 61 70 70 24.0 (x86_64-app 10 | 0040: 6c 65 2d 64 61 72 77 69 6e 31 32 2e 30 29 20 6c le-darwin12.0) l 11 | 0050: 69 62 63 75 72 6c 2f 37 2e 32 34 2e 30 20 4f 70 ibcurl/7.24.0 Op 12 | 0060: 65 6e 53 53 4c 2f 30 2e 39 2e 38 78 20 7a 6c 69 enSSL/0.9.8x zli 13 | 0070: 62 2f 31 2e 32 2e 35 0d 0a 48 6f 73 74 3a 20 63 b/1.2.5..Host: c 14 | 0080: 75 72 6c 74 72 61 63 65 70 61 72 73 65 72 2e 61 urltraceparser.a 15 | 0090: 70 69 61 72 79 2e 69 6f 0d 0a 41 63 63 65 70 74 piary.io..Accept 16 | 00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a : */*.... 17 | <= Recv header, 17 bytes (0x11) 18 | 0000: 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK. 19 | 0010: 0a . 20 | <= Recv header, 32 bytes (0x20) 21 | 0000: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 Content-Type: ap 22 | 0010: 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a plication/json.. 23 | <= Recv header, 37 bytes (0x25) 24 | 0000: 44 61 74 65 3a 20 53 75 6e 2c 20 32 31 20 4a 75 Date: Sun, 21 Ju 25 | 0010: 6c 20 32 30 31 33 20 31 33 3a 32 33 3a 35 35 20 l 2013 13:23:55 26 | 0020: 47 4d 54 0d 0a GMT.. 27 | <= Recv header, 31 bytes (0x1f) 28 | 0000: 58 2d 41 70 69 61 72 79 2d 52 61 74 65 6c 69 6d X-Apiary-Ratelim 29 | 0010: 69 74 2d 4c 69 6d 69 74 3a 20 31 32 30 0d 0a it-Limit: 120.. 30 | <= Recv header, 35 bytes (0x23) 31 | 0000: 58 2d 41 70 69 61 72 79 2d 52 61 74 65 6c 69 6d X-Apiary-Ratelim 32 | 0010: 69 74 2d 52 65 6d 61 69 6e 69 6e 67 3a 20 31 31 it-Remaining: 11 33 | 0020: 39 0d 0a 9.. 34 | <= Recv header, 21 bytes (0x15) 35 | 0000: 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 Content-Length: 36 | 0010: 31 31 39 0d 0a 119.. 37 | <= Recv header, 24 bytes (0x18) 38 | 0000: 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 Connection: keep 39 | 0010: 2d 61 6c 69 76 65 0d 0a -alive.. 40 | <= Recv header, 2 bytes (0x2) 41 | 0000: 0d 0a .. 42 | <= Recv data, 119 bytes (0x77) 43 | 0000: 7b 20 22 69 74 65 6d 73 22 3a 20 5b 0a 7b 20 22 { "items": [.{ " 44 | 0010: 75 72 6c 22 3a 20 22 2f 73 68 6f 70 70 69 6e 67 url": "/shopping 45 | 0020: 2d 63 61 72 74 2f 31 22 2c 20 22 70 72 6f 64 75 -cart/1", "produ 46 | 0030: 63 74 22 3a 22 32 5a 59 34 38 58 50 5a 22 2c 20 ct":"2ZY48XPZ", 47 | 0040: 22 71 75 61 6e 74 69 74 79 22 3a 20 31 2c 20 22 "quantity": 1, " 48 | 0050: 6e 61 6d 65 22 3a 20 22 4e 65 77 20 73 6f 63 6b name": "New sock 49 | 0060: 73 22 2c 20 22 70 72 69 63 65 22 3a 20 31 2e 32 s", "price": 1.2 50 | 0070: 35 20 7d 0a 5d 20 7d 5 }.] } 51 | == Info: Connection #0 to host curltraceparser.apiary.io left intact 52 | == Info: Closing connection #0 53 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/fixtures/post/tracefile: -------------------------------------------------------------------------------- 1 | == Info: About to connect() to curltraceparser.apiary.io port 80 (#0) 2 | == Info: Trying 54.235.90.239... 3 | == Info: connected 4 | == Info: Connected to curltraceparser.apiary.io (54.235.90.239) port 80 (#0) 5 | => Send header, 222 bytes (0xde) 6 | 0000: 50 4f 53 54 20 2f 73 68 6f 70 70 69 6e 67 2d 63 POST /shopping-c 7 | 0010: 61 72 74 20 48 54 54 50 2f 31 2e 31 0d 0a 55 73 art HTTP/1.1..Us 8 | 0020: 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c 2f 37 er-Agent: curl/7 9 | 0030: 2e 32 34 2e 30 20 28 78 38 36 5f 36 34 2d 61 70 .24.0 (x86_64-ap 10 | 0040: 70 6c 65 2d 64 61 72 77 69 6e 31 32 2e 30 29 20 ple-darwin12.0) 11 | 0050: 6c 69 62 63 75 72 6c 2f 37 2e 32 34 2e 30 20 4f libcurl/7.24.0 O 12 | 0060: 70 65 6e 53 53 4c 2f 30 2e 39 2e 38 78 20 7a 6c penSSL/0.9.8x zl 13 | 0070: 69 62 2f 31 2e 32 2e 35 0d 0a 48 6f 73 74 3a 20 ib/1.2.5..Host: 14 | 0080: 63 75 72 6c 74 72 61 63 65 70 61 72 73 65 72 2e curltraceparser. 15 | 0090: 61 70 69 61 72 79 2e 69 6f 0d 0a 41 63 63 65 70 apiary.io..Accep 16 | 00a0: 74 3a 20 2a 2f 2a 0d 0a 43 6f 6e 74 65 6e 74 2d t: */*..Content- 17 | 00b0: 54 79 70 65 3a 20 61 70 70 6c 69 63 61 74 69 6f Type: applicatio 18 | 00c0: 6e 2f 6a 73 6f 6e 0d 0a 43 6f 6e 74 65 6e 74 2d n/json..Content- 19 | 00d0: 4c 65 6e 67 74 68 3a 20 33 39 0d 0a 0d 0a Length: 39.... 20 | => Send data, 39 bytes (0x27) 21 | 0000: 7b 20 22 70 72 6f 64 75 63 74 22 3a 22 31 41 42 { "product":"1AB 22 | 0010: 32 33 4f 52 4d 22 2c 20 22 71 75 61 6e 74 69 74 23ORM", "quantit 23 | 0020: 79 22 3a 20 32 20 7d y": 2 } 24 | == Info: upload completely sent off: 39 out of 39 bytes 25 | <= Recv header, 22 bytes (0x16) 26 | 0000: 48 54 54 50 2f 31 2e 31 20 32 30 31 20 43 72 65 HTTP/1.1 201 Cre 27 | 0010: 61 74 65 64 0d 0a ated.. 28 | <= Recv header, 32 bytes (0x20) 29 | 0000: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 Content-Type: ap 30 | 0010: 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a plication/json.. 31 | <= Recv header, 37 bytes (0x25) 32 | 0000: 44 61 74 65 3a 20 53 75 6e 2c 20 32 31 20 4a 75 Date: Sun, 21 Ju 33 | 0010: 6c 20 32 30 31 33 20 31 34 3a 35 31 3a 30 39 20 l 2013 14:51:09 34 | 0020: 47 4d 54 0d 0a GMT.. 35 | <= Recv header, 31 bytes (0x1f) 36 | 0000: 58 2d 41 70 69 61 72 79 2d 52 61 74 65 6c 69 6d X-Apiary-Ratelim 37 | 0010: 69 74 2d 4c 69 6d 69 74 3a 20 31 32 30 0d 0a it-Limit: 120.. 38 | <= Recv header, 35 bytes (0x23) 39 | 0000: 58 2d 41 70 69 61 72 79 2d 52 61 74 65 6c 69 6d X-Apiary-Ratelim 40 | 0010: 69 74 2d 52 65 6d 61 69 6e 69 6e 67 3a 20 31 31 it-Remaining: 11 41 | 0020: 39 0d 0a 9.. 42 | <= Recv header, 20 bytes (0x14) 43 | 0000: 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 Content-Length: 44 | 0010: 35 30 0d 0a 50.. 45 | <= Recv header, 24 bytes (0x18) 46 | 0000: 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 Connection: keep 47 | 0010: 2d 61 6c 69 76 65 0d 0a -alive.. 48 | <= Recv header, 2 bytes (0x2) 49 | 0000: 0d 0a .. 50 | <= Recv data, 50 bytes (0x32) 51 | 0000: 7b 20 22 73 74 61 74 75 73 22 3a 20 22 63 72 65 { "status": "cre 52 | 0010: 61 74 65 64 22 2c 20 22 75 72 6c 22 3a 20 22 2f ated", "url": "/ 53 | 0020: 73 68 6f 70 70 69 6e 67 2d 63 61 72 74 2f 32 22 shopping-cart/2" 54 | 0030: 20 7d } 55 | == Info: Connection #0 to host curltraceparser.apiary.io left intact 56 | == Info: Closing connection #0 57 | -------------------------------------------------------------------------------- /src/Console/Package.php: -------------------------------------------------------------------------------- 1 | info('Creating Archive'); 33 | $archiveName = $this->generateArchiveName(); 34 | $package = new Archive(base_path($archiveName)); 35 | 36 | $this->info("\tGenerating Project Files List"); 37 | $projectFileList = $this->getFileCollection(base_path()); 38 | $this->info("\tGenerating Vendor Files List"); 39 | $vendorFileList = $this->collectComposerLibraries(); 40 | 41 | $this->info("\tAdding Files to Archive"); 42 | $package->addCollection($projectFileList)->addCollection($vendorFileList)->close(); 43 | 44 | $this->info("\tCreated Distribution Package:"); 45 | $this->warn("\tresources/dist/".$archiveName); 46 | return (0); 47 | } 48 | 49 | /** 50 | * Works from a base directory and add all files that are not blacklisted. 51 | * @return Collection 52 | */ 53 | protected function getFileCollection(string $basePath) : Collection 54 | { 55 | $fileList = new \RecursiveIteratorIterator( 56 | new \RecursiveDirectoryIterator($basePath, \FilesystemIterator::SKIP_DOTS), 57 | \RecursiveIteratorIterator::CHILD_FIRST 58 | ); 59 | 60 | return collect(iterator_to_array($fileList))->reject( 61 | function (\SplFileInfo $fileInfo, string $path) { 62 | return $this->ignore($fileInfo, $path); 63 | } 64 | )->mapWithKeys( 65 | function (\SplFileInfo $fileInfo, string $path) use ($basePath) { 66 | return $this->transform($fileInfo, $path, $basePath); 67 | } 68 | ); 69 | } 70 | 71 | /** 72 | * Transforms the iterator list into something usable for Archiving 73 | * @param \SplFileInfo $fileInfo 74 | * @param string $path 75 | * 76 | * @return array 77 | */ 78 | protected function transform(\SplFileInfo $fileInfo, string $path, string $basePath): array 79 | { 80 | $key = ltrim(substr($path, strlen($basePath)), '/'); 81 | 82 | /** The $key will be path inside the archive from the archive root. */ 83 | return [ $key => 84 | collect([ 85 | 'path' => $fileInfo->getRealPath(), 86 | 'permissions' => $this->getPermissions($fileInfo, $key) 87 | ]) 88 | ]; 89 | } 90 | 91 | /** 92 | * Determins whether to ignore the file or path 93 | * 94 | * @param \SplFileInfo $fileInfo 95 | * @param string $path 96 | * 97 | * @return bool 98 | */ 99 | protected function ignore(\SplFileInfo $fileInfo, string $path): bool 100 | { 101 | foreach (config('serverless.packaging.ignore') as $pattern) { 102 | if (strpos($fileInfo->getPathInfo(), $pattern) !== false || 103 | $fileInfo->getBasename() === basename($pattern)) { 104 | return true; 105 | } 106 | } 107 | return false; 108 | } 109 | 110 | /** 111 | * @param \SplFileInfo $fileInfo 112 | * @param $key 113 | * 114 | * @return int 115 | */ 116 | protected function getPermissions(\SplFileInfo $fileInfo, $key): int 117 | { 118 | $perms = $fileInfo->isDir() ? 119 | /** Directories get read/execute */ 120 | FilePermissionCalculator::fromStringRepresentation('-r-xr-xr-x')->getDecimal() : 121 | /** Every file defaults to read only (you can't write to the lambda package dir structure) */ 122 | FilePermissionCalculator::fromStringRepresentation('-r--r--r--')->getDecimal(); 123 | 124 | /** If it is a configured Executable though, let us make it 555 as well. */ 125 | if (in_array($key, config('serverless.packaging.executables'))) { 126 | $perms = FilePermissionCalculator::fromStringRepresentation('-r-xr-xr-x')->getDecimal(); 127 | } 128 | 129 | return $perms; 130 | } 131 | 132 | 133 | /** 134 | * We create a temporary directory to deploy composer vendor libraries too w/out and development libraries 135 | * We will deploy that. 136 | * @return array 137 | */ 138 | protected function collectComposerLibraries(): Collection 139 | { 140 | $tmpDir = \tempDir('serverlessVendor', true); 141 | copy(base_path('composer.json'), sprintf('%s/composer.json', $tmpDir)); 142 | 143 | $process = new Process(sprintf('%s install --no-dev', 'composer')); 144 | $process->setWorkingDirectory($tmpDir); 145 | $process->run(); 146 | 147 | return $this->getFileCollection($tmpDir); 148 | } 149 | 150 | /** 151 | * Standardize the generation of the archive name. 152 | * @return string 153 | */ 154 | protected function generateArchiveName(): string 155 | { 156 | $archiveName = sprintf( 157 | 'resources/dist/%s_%s_%s.zip', 158 | strtoupper(env('APP_NAME', 'default')), 159 | env('APP_VERSION', '0.0.1'), 160 | Carbon::now(env('APP_TIMEZONE', 'UTC'))->format('Y-m-d-H-i-s-u') 161 | ); 162 | 163 | return $archiveName; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /src/Package/Archive.php: -------------------------------------------------------------------------------- 1 | zipArchive = new ZipArchive(); 25 | $this->path = $path; 26 | $this->init(); 27 | } 28 | 29 | /** 30 | * Initialize the Archive. Overwrite and create whatever was there. 31 | */ 32 | public function init() 33 | { 34 | $res = $this->zipArchive->open($this->path, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE); 35 | if ($res !== true) { 36 | throw new PackageException($this->message($res), $res); 37 | } 38 | } 39 | 40 | /** 41 | * Adds all the entries in the collection to the Archive. 42 | * @param Collection $collection 43 | */ 44 | public function addCollection(Collection $collection) 45 | { 46 | $collection->each( 47 | function ($data, $entryName) { 48 | if (is_file($data->get('path'))) { 49 | $this->addFile($data->get('path'), $entryName); 50 | } else { 51 | $this->addEmptyDir($entryName); 52 | } 53 | $this->setPermissions($entryName, $data->get('permissions')); 54 | } 55 | ); 56 | $this->reset(); 57 | return $this; 58 | } 59 | 60 | /** 61 | * Close and reopen archive to ensure we release file descriptors 62 | * @return Archive 63 | */ 64 | public function reset(): Archive 65 | { 66 | $this->close(); 67 | $this->open(); 68 | return $this; 69 | } 70 | 71 | /** 72 | * Set the permissions on the item. 73 | * @param int $permissions 74 | */ 75 | public function setPermissions(string $entryName, int $permissions) 76 | { 77 | $permissions = ($permissions & 0xffff) << 16; 78 | $this->zipArchive->setExternalAttributesName($entryName, \ZipArchive::OPSYS_UNIX, $permissions); 79 | return $this; 80 | } 81 | 82 | 83 | /** 84 | * Add a directory to the archive 85 | * @param $entryName 86 | * 87 | * @return $this 88 | */ 89 | public function addEmptyDir($entryName): Archive 90 | { 91 | $res = $this->zipArchive->addEmptyDir($entryName); 92 | if ($res !== true) { 93 | throw new PackageException($this->message($res), $res); 94 | } 95 | return $this; 96 | } 97 | 98 | /** 99 | * Add a file to the archive 100 | * @param $path 101 | * @param $entryName 102 | * 103 | * @return $this 104 | */ 105 | public function addFile($path, $entryName): Archive 106 | { 107 | $res = $this->zipArchive->addFile($path, $entryName); 108 | if ($res !== true) { 109 | throw new PackageException($this->message($res), $res); 110 | } 111 | return $this; 112 | } 113 | 114 | /** 115 | * Opens the archive. 116 | * @return $this 117 | */ 118 | public function open(): Archive 119 | { 120 | $res = $this->zipArchive->open($this->path); 121 | if ($res !== true) { 122 | throw new PackageException($this->message($res), $res); 123 | } 124 | return $this; 125 | } 126 | 127 | /** 128 | * Close the archive and release files. 129 | * @return $this 130 | */ 131 | public function close(): Archive 132 | { 133 | $res = $this->zipArchive->close(); 134 | if ($res !== true) { 135 | throw new PackageException($this->message($res), $res); 136 | } 137 | return $this; 138 | } 139 | 140 | /** 141 | * Convert ZipArchive Codes to Human Readable Messages 142 | * @param $code 143 | * @return string 144 | */ 145 | protected function message($code): string 146 | { 147 | switch ($code) { 148 | case 0: 149 | return 'No error'; 150 | 151 | case 1: 152 | return 'Multi-disk zip archives not supported'; 153 | 154 | case 2: 155 | return 'Renaming temporary file failed'; 156 | 157 | case 3: 158 | return 'Closing zip archive failed'; 159 | 160 | case 4: 161 | return 'Seek error'; 162 | 163 | case 5: 164 | return 'Read error'; 165 | 166 | case 6: 167 | return 'Write error'; 168 | 169 | case 7: 170 | return 'CRC error'; 171 | 172 | case 8: 173 | return 'Containing zip archive was closed'; 174 | 175 | case 9: 176 | return 'No such file'; 177 | 178 | case 10: 179 | return 'File already exists'; 180 | 181 | case 11: 182 | return 'Can\'t open file'; 183 | 184 | case 12: 185 | return 'Failure to create temporary file'; 186 | 187 | case 13: 188 | return 'Zlib error'; 189 | 190 | case 14: 191 | return 'Malloc failure'; 192 | 193 | case 15: 194 | return 'Entry has been changed'; 195 | 196 | case 16: 197 | return 'Compression method not supported'; 198 | 199 | case 17: 200 | return 'Premature EOF'; 201 | 202 | case 18: 203 | return 'Invalid argument'; 204 | 205 | case 19: 206 | return 'Not a zip archive'; 207 | 208 | case 20: 209 | return 'Internal error'; 210 | 211 | case 21: 212 | return 'Zip archive inconsistent'; 213 | 214 | case 22: 215 | return 'Can\'t remove file'; 216 | 217 | case 23: 218 | return 'Entry has been deleted'; 219 | 220 | default: 221 | return 'An unknown error has occurred('.intval($code).')'; 222 | } 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /resources/nodejs/node_modules/http-string-parser/test/unit/parser-test.coffee: -------------------------------------------------------------------------------- 1 | fs = require 'fs' 2 | 3 | {assert} = require 'chai' 4 | parser = require '../../src/parser' 5 | 6 | describe "parser module", () -> 7 | 8 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 9 | describe "parseHeaders(headersLines)", () -> 10 | it "should be a function", () -> 11 | assert.isFunction parser.parseHeaders 12 | 13 | describe "its return", () -> 14 | output = "" 15 | headerLines = [ 16 | "User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5", 17 | "Host: curltraceparser.apiary.io", 18 | "Accept: */*", 19 | "Content-Type: application/json", 20 | "Content-Length: 39", 21 | ] 22 | 23 | before () -> 24 | output = parser.parseHeaders headerLines 25 | 26 | describe "its retrun", () -> 27 | it "should be object", () -> 28 | assert.isObject output 29 | 30 | ['User-Agent', 'Host', "Accept", "Content-Type", "Content-Length"].forEach (key) -> 31 | it "should contain key '" + key + "'", () -> 32 | assert.include Object.keys(output), key 33 | 34 | it "should have proper User-Agent string", () -> 35 | agentString = "curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5" 36 | assert.equal output['User-Agent'], agentString 37 | 38 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1 39 | describe "parseRequestLine(requestLineString)", () -> 40 | it "should be a function", () -> 41 | assert.isFunction parser.parseRequestLine 42 | 43 | lineStrings = 44 | POST: "POST /shopping-cart HTTP/1.1" 45 | GET: "GET /shopping-cart HTTP/1.1" 46 | 47 | for method, line of lineStrings 48 | describe "return for " + method + " line", () -> 49 | output = "" 50 | before () -> 51 | output = parser.parseRequestLine line 52 | 53 | it "should be object", () -> 54 | assert.isObject output 55 | 56 | ['method','uri','protocol'].forEach (key) -> 57 | it "should contain not empty string on key: " + key, () -> 58 | assert.isString output[key] 59 | 60 | it "should have parsed method " + method, () -> 61 | assert.equal output['method'], method 62 | 63 | it "should have parsed uri " + method, () -> 64 | assert.equal output['uri'], "/shopping-cart" 65 | 66 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1 67 | describe "parseStatusLine", () -> 68 | it "is a function", () -> 69 | assert.isFunction parser.parseStatusLine 70 | 71 | describe "its return", () -> 72 | output = {} 73 | statusLine = "HTTP/1.1 201 Created" 74 | 75 | before () -> 76 | output = parser.parseStatusLine statusLine 77 | 78 | ['protocol','statusCode','statusMessage'].forEach (key) -> 79 | it "should contain not empty string on key: " + key, () -> 80 | assert.isString output[key] 81 | 82 | it 'should contain statusCode "201"', () -> 83 | assert output['statusCode'], "201" 84 | 85 | it 'should contain statusMessage "Created"', () -> 86 | assert output['statusCode'], "Created" 87 | 88 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html 89 | describe "parseRequest(requestString)", () -> 90 | requestPath = "/../fixtures/post/request-string" 91 | requestString = "" 92 | 93 | before (done) -> 94 | #load fixture 95 | fs.readFile __dirname + requestPath, (err, data) -> 96 | done err if err 97 | requestString = data.toString() 98 | done() 99 | 100 | it "is a function", () -> 101 | assert.isFunction parser.parseRequest 102 | 103 | describe 'its return', () -> 104 | output = "" 105 | 106 | before () -> 107 | output = parser.parseRequest(requestString) 108 | 109 | ['method', 'uri', 'headers', 'body'].forEach (key) -> 110 | it 'should have key "'+ key + '"', () -> 111 | assert.include Object.keys(output), key 112 | 113 | describe "method", () -> 114 | subject = "" 115 | 116 | before () -> 117 | subject = output['method'] 118 | 119 | it 'should contain "POST"', () -> 120 | assert.equal subject, "POST" 121 | 122 | describe "uri", () -> 123 | subject = "" 124 | 125 | before () -> 126 | subject = output['uri'] 127 | 128 | it 'should contain "/shopping-cart"', () -> 129 | assert.equal subject, "/shopping-cart" 130 | 131 | describe "headers", () -> 132 | subject = "" 133 | 134 | before () -> 135 | subject = output['headers'] 136 | 137 | it 'should be object', () -> 138 | assert.isObject subject 139 | 140 | it 'should have "User-Agent" key', () -> 141 | assert.include Object.keys(subject), "User-Agent" 142 | 143 | it 'should have proper User-Agent value', () -> 144 | agentString = "curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8x zlib/1.2.5" 145 | assert.equal agentString, subject['User-Agent'] 146 | 147 | describe "body", () -> 148 | subject = "" 149 | 150 | before () -> 151 | subject = output['body'] 152 | 153 | it 'should contain proper body string', () -> 154 | expectedBody = '{ "product":"1AB23ORM", "quantity": 2 }' 155 | assert.equal expectedBody, subject 156 | 157 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6 158 | describe "parseResponse(responseString)", () -> 159 | responsePath = "/../fixtures/post/response-string" 160 | responseString = "" 161 | 162 | before (done) -> 163 | #load fixture 164 | fs.readFile __dirname + responsePath, (err, data) -> 165 | done err if err 166 | responseString = data.toString() 167 | done() 168 | 169 | it "is a function", () -> 170 | assert.isFunction parser.parseResponse 171 | 172 | describe 'its return', () -> 173 | output = "" 174 | 175 | before () -> 176 | output = parser.parseResponse(responseString) 177 | 178 | ['protocolVersion', 'statusCode', 'statusMessage', 'headers', 'body'].forEach (key) -> 179 | it 'should have key "'+ key + '"', () -> 180 | assert.include Object.keys(output), key 181 | 182 | describe "protocolVersion", () -> 183 | subject = "" 184 | 185 | before () -> 186 | subject = output['protocolVersion'] 187 | 188 | it 'should contain "HTTP/1.1"', () -> 189 | assert.equal subject, "HTTP/1.1" 190 | 191 | describe "statusCode", () -> 192 | subject = "" 193 | 194 | before () -> 195 | subject = output['statusCode'] 196 | 197 | it 'should contain "201"', () -> 198 | assert.equal subject, "201" 199 | 200 | describe "statusMessage", () -> 201 | subject = "" 202 | 203 | before () -> 204 | subject = output['statusMessage'] 205 | 206 | it 'should contain "Created"', () -> 207 | assert.equal subject, "Created" 208 | 209 | describe "headers", () -> 210 | subject = "" 211 | 212 | before () -> 213 | subject = output['headers'] 214 | 215 | it 'should be object', () -> 216 | assert.isObject subject 217 | 218 | it 'should have "Content-Type" key', () -> 219 | assert.include Object.keys(subject), "Content-Type" 220 | 221 | it 'should have proper Content-Type value', () -> 222 | agentString = "application/json" 223 | assert.equal agentString, subject['Content-Type'] 224 | 225 | describe "body", () -> 226 | subject = "" 227 | 228 | before () -> 229 | subject = output['body'] 230 | 231 | it 'should contain proper body string', () -> 232 | expectedBody = '{ "status": "created", "url": "/shopping-cart/2" }' 233 | assert.equal expectedBody, subject 234 | 235 | # http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6 236 | describe "parseResponse(responseString) (w/ multi word status message)", () -> 237 | responsePath = "/../fixtures/get/response-string-304" 238 | responseString = "" 239 | 240 | before (done) -> 241 | #load fixture 242 | fs.readFile __dirname + responsePath, (err, data) -> 243 | done err if err 244 | responseString = data.toString() 245 | done() 246 | 247 | it "is a function", () -> 248 | assert.isFunction parser.parseResponse 249 | 250 | describe 'its return', () -> 251 | output = "" 252 | 253 | before () -> 254 | output = parser.parseResponse(responseString) 255 | 256 | ['statusCode', 'statusMessage', 'headers', 'body'].forEach (key) -> 257 | it 'should have key "'+ key + '"', () -> 258 | assert.include Object.keys(output), key 259 | 260 | describe "statusCode", () -> 261 | subject = "" 262 | 263 | before () -> 264 | subject = output['statusCode'] 265 | 266 | it 'should contain "304"', () -> 267 | assert.equal subject, "304" 268 | 269 | describe "statusMessage", () -> 270 | subject = "" 271 | 272 | before () -> 273 | subject = output['statusMessage'] 274 | 275 | it 'should contain "Not Modified"', () -> 276 | assert.equal subject, "Not Modified" 277 | 278 | describe "headers", () -> 279 | subject = "" 280 | 281 | before () -> 282 | subject = output['headers'] 283 | 284 | it 'should be object', () -> 285 | assert.isObject subject 286 | 287 | it 'should have "Content-Type" key', () -> 288 | assert.include Object.keys(subject), "Content-Type" 289 | 290 | it 'should have proper Content-Type value', () -> 291 | agentString = "application/json" 292 | assert.equal agentString, subject['Content-Type'] 293 | 294 | describe "body", () -> 295 | subject = "" 296 | 297 | before () -> 298 | subject = output['body'] 299 | 300 | it 'should contain proper body string', () -> 301 | expectedBody = '{ "message": "hello world" }' 302 | assert.equal expectedBody, subject 303 | -------------------------------------------------------------------------------- /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 | "content-hash": "231ff51a0b16b1f6c9003ab3ae6e3cd0", 8 | "packages": [ 9 | { 10 | "name": "doctrine/inflector", 11 | "version": "v1.1.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/inflector.git", 15 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 20 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3.2" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "4.*" 28 | }, 29 | "type": "library", 30 | "extra": { 31 | "branch-alias": { 32 | "dev-master": "1.1.x-dev" 33 | } 34 | }, 35 | "autoload": { 36 | "psr-0": { 37 | "Doctrine\\Common\\Inflector\\": "lib/" 38 | } 39 | }, 40 | "notification-url": "https://packagist.org/downloads/", 41 | "license": [ 42 | "MIT" 43 | ], 44 | "authors": [ 45 | { 46 | "name": "Roman Borschel", 47 | "email": "roman@code-factory.org" 48 | }, 49 | { 50 | "name": "Benjamin Eberlei", 51 | "email": "kontakt@beberlei.de" 52 | }, 53 | { 54 | "name": "Guilherme Blanco", 55 | "email": "guilhermeblanco@gmail.com" 56 | }, 57 | { 58 | "name": "Jonathan Wage", 59 | "email": "jonwage@gmail.com" 60 | }, 61 | { 62 | "name": "Johannes Schmitt", 63 | "email": "schmittjoh@gmail.com" 64 | } 65 | ], 66 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 67 | "homepage": "http://www.doctrine-project.org", 68 | "keywords": [ 69 | "inflection", 70 | "pluralize", 71 | "singularize", 72 | "string" 73 | ], 74 | "time": "2015-11-06T14:35:42+00:00" 75 | }, 76 | { 77 | "name": "gisostallenberg/file-permission-calculator", 78 | "version": "1.0.3", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/gisostallenberg/file-permission-calculator.git", 82 | "reference": "cc8051b683f3f0a7244d533d0956c3224eff7094" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://api.github.com/repos/gisostallenberg/file-permission-calculator/zipball/cc8051b683f3f0a7244d533d0956c3224eff7094", 87 | "reference": "cc8051b683f3f0a7244d533d0956c3224eff7094", 88 | "shasum": "" 89 | }, 90 | "require-dev": { 91 | "phpunit/phpunit": "^4.8 || ^5.4" 92 | }, 93 | "type": "library", 94 | "autoload": { 95 | "psr-4": { 96 | "GisoStallenberg\\FilePermissionCalculator\\": "src/" 97 | } 98 | }, 99 | "notification-url": "https://packagist.org/downloads/", 100 | "license": [ 101 | "MIT" 102 | ], 103 | "authors": [ 104 | { 105 | "name": "Giso Stallenberg", 106 | "email": "gisostallenberg@gmail.com" 107 | } 108 | ], 109 | "description": "Library to convert file permissions from various formats to another", 110 | "keywords": [ 111 | "chmod", 112 | "file permissions", 113 | "fileperms", 114 | "permissions" 115 | ], 116 | "time": "2016-07-05T08:25:30+00:00" 117 | }, 118 | { 119 | "name": "illuminate/console", 120 | "version": "v5.4.27", 121 | "source": { 122 | "type": "git", 123 | "url": "https://github.com/illuminate/console.git", 124 | "reference": "bdc5c6f53cb474e2aeec46b6a9999fcedfb62a4e" 125 | }, 126 | "dist": { 127 | "type": "zip", 128 | "url": "https://api.github.com/repos/illuminate/console/zipball/bdc5c6f53cb474e2aeec46b6a9999fcedfb62a4e", 129 | "reference": "bdc5c6f53cb474e2aeec46b6a9999fcedfb62a4e", 130 | "shasum": "" 131 | }, 132 | "require": { 133 | "illuminate/contracts": "5.4.*", 134 | "illuminate/support": "5.4.*", 135 | "nesbot/carbon": "~1.20", 136 | "php": ">=5.6.4", 137 | "symfony/console": "~3.2" 138 | }, 139 | "suggest": { 140 | "guzzlehttp/guzzle": "Required to use the ping methods on schedules (~6.0).", 141 | "mtdowling/cron-expression": "Required to use scheduling component (~1.0).", 142 | "symfony/process": "Required to use scheduling component (~3.2)." 143 | }, 144 | "type": "library", 145 | "extra": { 146 | "branch-alias": { 147 | "dev-master": "5.4-dev" 148 | } 149 | }, 150 | "autoload": { 151 | "psr-4": { 152 | "Illuminate\\Console\\": "" 153 | } 154 | }, 155 | "notification-url": "https://packagist.org/downloads/", 156 | "license": [ 157 | "MIT" 158 | ], 159 | "authors": [ 160 | { 161 | "name": "Taylor Otwell", 162 | "email": "taylor@laravel.com" 163 | } 164 | ], 165 | "description": "The Illuminate Console package.", 166 | "homepage": "https://laravel.com", 167 | "time": "2017-06-10T13:11:18+00:00" 168 | }, 169 | { 170 | "name": "illuminate/contracts", 171 | "version": "v5.4.27", 172 | "source": { 173 | "type": "git", 174 | "url": "https://github.com/illuminate/contracts.git", 175 | "reference": "31f0193eb14aa3ee07841dc254081425616e79f0" 176 | }, 177 | "dist": { 178 | "type": "zip", 179 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/31f0193eb14aa3ee07841dc254081425616e79f0", 180 | "reference": "31f0193eb14aa3ee07841dc254081425616e79f0", 181 | "shasum": "" 182 | }, 183 | "require": { 184 | "php": ">=5.6.4" 185 | }, 186 | "type": "library", 187 | "extra": { 188 | "branch-alias": { 189 | "dev-master": "5.4-dev" 190 | } 191 | }, 192 | "autoload": { 193 | "psr-4": { 194 | "Illuminate\\Contracts\\": "" 195 | } 196 | }, 197 | "notification-url": "https://packagist.org/downloads/", 198 | "license": [ 199 | "MIT" 200 | ], 201 | "authors": [ 202 | { 203 | "name": "Taylor Otwell", 204 | "email": "taylor@laravel.com" 205 | } 206 | ], 207 | "description": "The Illuminate Contracts package.", 208 | "homepage": "https://laravel.com", 209 | "time": "2017-04-19T20:17:43+00:00" 210 | }, 211 | { 212 | "name": "illuminate/filesystem", 213 | "version": "v5.4.27", 214 | "source": { 215 | "type": "git", 216 | "url": "https://github.com/illuminate/filesystem.git", 217 | "reference": "e0ee832f625fbfadb816a972655b1a66af1a5bda" 218 | }, 219 | "dist": { 220 | "type": "zip", 221 | "url": "https://api.github.com/repos/illuminate/filesystem/zipball/e0ee832f625fbfadb816a972655b1a66af1a5bda", 222 | "reference": "e0ee832f625fbfadb816a972655b1a66af1a5bda", 223 | "shasum": "" 224 | }, 225 | "require": { 226 | "illuminate/contracts": "5.4.*", 227 | "illuminate/support": "5.4.*", 228 | "php": ">=5.6.4", 229 | "symfony/finder": "~3.2" 230 | }, 231 | "suggest": { 232 | "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", 233 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 234 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)." 235 | }, 236 | "type": "library", 237 | "extra": { 238 | "branch-alias": { 239 | "dev-master": "5.4-dev" 240 | } 241 | }, 242 | "autoload": { 243 | "psr-4": { 244 | "Illuminate\\Filesystem\\": "" 245 | } 246 | }, 247 | "notification-url": "https://packagist.org/downloads/", 248 | "license": [ 249 | "MIT" 250 | ], 251 | "authors": [ 252 | { 253 | "name": "Taylor Otwell", 254 | "email": "taylor@laravel.com" 255 | } 256 | ], 257 | "description": "The Illuminate Filesystem package.", 258 | "homepage": "https://laravel.com", 259 | "time": "2017-05-18T14:37:58+00:00" 260 | }, 261 | { 262 | "name": "illuminate/http", 263 | "version": "v5.4.27", 264 | "source": { 265 | "type": "git", 266 | "url": "https://github.com/illuminate/http.git", 267 | "reference": "04eec9120a5ac25705a16003f7e89fbb43b4582e" 268 | }, 269 | "dist": { 270 | "type": "zip", 271 | "url": "https://api.github.com/repos/illuminate/http/zipball/04eec9120a5ac25705a16003f7e89fbb43b4582e", 272 | "reference": "04eec9120a5ac25705a16003f7e89fbb43b4582e", 273 | "shasum": "" 274 | }, 275 | "require": { 276 | "illuminate/session": "5.4.*", 277 | "illuminate/support": "5.4.*", 278 | "php": ">=5.6.4", 279 | "symfony/http-foundation": "~3.2", 280 | "symfony/http-kernel": "~3.2" 281 | }, 282 | "type": "library", 283 | "extra": { 284 | "branch-alias": { 285 | "dev-master": "5.4-dev" 286 | } 287 | }, 288 | "autoload": { 289 | "psr-4": { 290 | "Illuminate\\Http\\": "" 291 | } 292 | }, 293 | "notification-url": "https://packagist.org/downloads/", 294 | "license": [ 295 | "MIT" 296 | ], 297 | "authors": [ 298 | { 299 | "name": "Taylor Otwell", 300 | "email": "taylor@laravel.com" 301 | } 302 | ], 303 | "description": "The Illuminate Http package.", 304 | "homepage": "https://laravel.com", 305 | "time": "2017-06-01T02:07:44+00:00" 306 | }, 307 | { 308 | "name": "illuminate/pipeline", 309 | "version": "v5.4.27", 310 | "source": { 311 | "type": "git", 312 | "url": "https://github.com/illuminate/pipeline.git", 313 | "reference": "ada6dc2435afa57a74e3dcd4570c31a1a1244e65" 314 | }, 315 | "dist": { 316 | "type": "zip", 317 | "url": "https://api.github.com/repos/illuminate/pipeline/zipball/ada6dc2435afa57a74e3dcd4570c31a1a1244e65", 318 | "reference": "ada6dc2435afa57a74e3dcd4570c31a1a1244e65", 319 | "shasum": "" 320 | }, 321 | "require": { 322 | "illuminate/contracts": "5.4.*", 323 | "illuminate/support": "5.4.*", 324 | "php": ">=5.6.4" 325 | }, 326 | "type": "library", 327 | "extra": { 328 | "branch-alias": { 329 | "dev-master": "5.4-dev" 330 | } 331 | }, 332 | "autoload": { 333 | "psr-4": { 334 | "Illuminate\\Pipeline\\": "" 335 | } 336 | }, 337 | "notification-url": "https://packagist.org/downloads/", 338 | "license": [ 339 | "MIT" 340 | ], 341 | "authors": [ 342 | { 343 | "name": "Taylor Otwell", 344 | "email": "taylor@laravel.com" 345 | } 346 | ], 347 | "description": "The Illuminate Pipeline package.", 348 | "homepage": "https://laravel.com", 349 | "time": "2017-01-17T14:21:32+00:00" 350 | }, 351 | { 352 | "name": "illuminate/session", 353 | "version": "v5.4.27", 354 | "source": { 355 | "type": "git", 356 | "url": "https://github.com/illuminate/session.git", 357 | "reference": "59f994b299318ba5a91b390fe482e24fdaa08ec5" 358 | }, 359 | "dist": { 360 | "type": "zip", 361 | "url": "https://api.github.com/repos/illuminate/session/zipball/59f994b299318ba5a91b390fe482e24fdaa08ec5", 362 | "reference": "59f994b299318ba5a91b390fe482e24fdaa08ec5", 363 | "shasum": "" 364 | }, 365 | "require": { 366 | "illuminate/contracts": "5.4.*", 367 | "illuminate/filesystem": "5.4.*", 368 | "illuminate/support": "5.4.*", 369 | "nesbot/carbon": "~1.20", 370 | "php": ">=5.6.4", 371 | "symfony/finder": "~3.2", 372 | "symfony/http-foundation": "~3.2" 373 | }, 374 | "suggest": { 375 | "illuminate/console": "Required to use the session:table command (5.4.*)." 376 | }, 377 | "type": "library", 378 | "extra": { 379 | "branch-alias": { 380 | "dev-master": "5.4-dev" 381 | } 382 | }, 383 | "autoload": { 384 | "psr-4": { 385 | "Illuminate\\Session\\": "" 386 | } 387 | }, 388 | "notification-url": "https://packagist.org/downloads/", 389 | "license": [ 390 | "MIT" 391 | ], 392 | "authors": [ 393 | { 394 | "name": "Taylor Otwell", 395 | "email": "taylor@laravel.com" 396 | } 397 | ], 398 | "description": "The Illuminate Session package.", 399 | "homepage": "https://laravel.com", 400 | "time": "2017-03-30T14:26:45+00:00" 401 | }, 402 | { 403 | "name": "illuminate/support", 404 | "version": "v5.4.27", 405 | "source": { 406 | "type": "git", 407 | "url": "https://github.com/illuminate/support.git", 408 | "reference": "a42393b56d0ec75f55e760f2a47bcf85a17a278d" 409 | }, 410 | "dist": { 411 | "type": "zip", 412 | "url": "https://api.github.com/repos/illuminate/support/zipball/a42393b56d0ec75f55e760f2a47bcf85a17a278d", 413 | "reference": "a42393b56d0ec75f55e760f2a47bcf85a17a278d", 414 | "shasum": "" 415 | }, 416 | "require": { 417 | "doctrine/inflector": "~1.0", 418 | "ext-mbstring": "*", 419 | "illuminate/contracts": "5.4.*", 420 | "paragonie/random_compat": "~1.4|~2.0", 421 | "php": ">=5.6.4" 422 | }, 423 | "replace": { 424 | "tightenco/collect": "self.version" 425 | }, 426 | "suggest": { 427 | "illuminate/filesystem": "Required to use the composer class (5.2.*).", 428 | "symfony/process": "Required to use the composer class (~3.2).", 429 | "symfony/var-dumper": "Required to use the dd function (~3.2)." 430 | }, 431 | "type": "library", 432 | "extra": { 433 | "branch-alias": { 434 | "dev-master": "5.4-dev" 435 | } 436 | }, 437 | "autoload": { 438 | "psr-4": { 439 | "Illuminate\\Support\\": "" 440 | }, 441 | "files": [ 442 | "helpers.php" 443 | ] 444 | }, 445 | "notification-url": "https://packagist.org/downloads/", 446 | "license": [ 447 | "MIT" 448 | ], 449 | "authors": [ 450 | { 451 | "name": "Taylor Otwell", 452 | "email": "taylor@laravel.com" 453 | } 454 | ], 455 | "description": "The Illuminate Support package.", 456 | "homepage": "https://laravel.com", 457 | "time": "2017-06-15T12:35:32+00:00" 458 | }, 459 | { 460 | "name": "nesbot/carbon", 461 | "version": "1.22.1", 462 | "source": { 463 | "type": "git", 464 | "url": "https://github.com/briannesbitt/Carbon.git", 465 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc" 466 | }, 467 | "dist": { 468 | "type": "zip", 469 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", 470 | "reference": "7cdf42c0b1cc763ab7e4c33c47a24e27c66bfccc", 471 | "shasum": "" 472 | }, 473 | "require": { 474 | "php": ">=5.3.0", 475 | "symfony/translation": "~2.6 || ~3.0" 476 | }, 477 | "require-dev": { 478 | "friendsofphp/php-cs-fixer": "~2", 479 | "phpunit/phpunit": "~4.0 || ~5.0" 480 | }, 481 | "type": "library", 482 | "extra": { 483 | "branch-alias": { 484 | "dev-master": "1.23-dev" 485 | } 486 | }, 487 | "autoload": { 488 | "psr-4": { 489 | "Carbon\\": "src/Carbon/" 490 | } 491 | }, 492 | "notification-url": "https://packagist.org/downloads/", 493 | "license": [ 494 | "MIT" 495 | ], 496 | "authors": [ 497 | { 498 | "name": "Brian Nesbitt", 499 | "email": "brian@nesbot.com", 500 | "homepage": "http://nesbot.com" 501 | } 502 | ], 503 | "description": "A simple API extension for DateTime.", 504 | "homepage": "http://carbon.nesbot.com", 505 | "keywords": [ 506 | "date", 507 | "datetime", 508 | "time" 509 | ], 510 | "time": "2017-01-16T07:55:07+00:00" 511 | }, 512 | { 513 | "name": "paragonie/random_compat", 514 | "version": "v2.0.10", 515 | "source": { 516 | "type": "git", 517 | "url": "https://github.com/paragonie/random_compat.git", 518 | "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d" 519 | }, 520 | "dist": { 521 | "type": "zip", 522 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/634bae8e911eefa89c1abfbf1b66da679ac8f54d", 523 | "reference": "634bae8e911eefa89c1abfbf1b66da679ac8f54d", 524 | "shasum": "" 525 | }, 526 | "require": { 527 | "php": ">=5.2.0" 528 | }, 529 | "require-dev": { 530 | "phpunit/phpunit": "4.*|5.*" 531 | }, 532 | "suggest": { 533 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 534 | }, 535 | "type": "library", 536 | "autoload": { 537 | "files": [ 538 | "lib/random.php" 539 | ] 540 | }, 541 | "notification-url": "https://packagist.org/downloads/", 542 | "license": [ 543 | "MIT" 544 | ], 545 | "authors": [ 546 | { 547 | "name": "Paragon Initiative Enterprises", 548 | "email": "security@paragonie.com", 549 | "homepage": "https://paragonie.com" 550 | } 551 | ], 552 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 553 | "keywords": [ 554 | "csprng", 555 | "pseudorandom", 556 | "random" 557 | ], 558 | "time": "2017-03-13T16:27:32+00:00" 559 | }, 560 | { 561 | "name": "psr/log", 562 | "version": "1.0.2", 563 | "source": { 564 | "type": "git", 565 | "url": "https://github.com/php-fig/log.git", 566 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 567 | }, 568 | "dist": { 569 | "type": "zip", 570 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 571 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 572 | "shasum": "" 573 | }, 574 | "require": { 575 | "php": ">=5.3.0" 576 | }, 577 | "type": "library", 578 | "extra": { 579 | "branch-alias": { 580 | "dev-master": "1.0.x-dev" 581 | } 582 | }, 583 | "autoload": { 584 | "psr-4": { 585 | "Psr\\Log\\": "Psr/Log/" 586 | } 587 | }, 588 | "notification-url": "https://packagist.org/downloads/", 589 | "license": [ 590 | "MIT" 591 | ], 592 | "authors": [ 593 | { 594 | "name": "PHP-FIG", 595 | "homepage": "http://www.php-fig.org/" 596 | } 597 | ], 598 | "description": "Common interface for logging libraries", 599 | "homepage": "https://github.com/php-fig/log", 600 | "keywords": [ 601 | "log", 602 | "psr", 603 | "psr-3" 604 | ], 605 | "time": "2016-10-10T12:19:37+00:00" 606 | }, 607 | { 608 | "name": "symfony/console", 609 | "version": "v3.3.3", 610 | "source": { 611 | "type": "git", 612 | "url": "https://github.com/symfony/console.git", 613 | "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546" 614 | }, 615 | "dist": { 616 | "type": "zip", 617 | "url": "https://api.github.com/repos/symfony/console/zipball/a97e45d98c59510f085fa05225a1acb74dfe0546", 618 | "reference": "a97e45d98c59510f085fa05225a1acb74dfe0546", 619 | "shasum": "" 620 | }, 621 | "require": { 622 | "php": ">=5.5.9", 623 | "symfony/debug": "~2.8|~3.0", 624 | "symfony/polyfill-mbstring": "~1.0" 625 | }, 626 | "conflict": { 627 | "symfony/dependency-injection": "<3.3" 628 | }, 629 | "require-dev": { 630 | "psr/log": "~1.0", 631 | "symfony/config": "~3.3", 632 | "symfony/dependency-injection": "~3.3", 633 | "symfony/event-dispatcher": "~2.8|~3.0", 634 | "symfony/filesystem": "~2.8|~3.0", 635 | "symfony/http-kernel": "~2.8|~3.0", 636 | "symfony/process": "~2.8|~3.0" 637 | }, 638 | "suggest": { 639 | "psr/log": "For using the console logger", 640 | "symfony/event-dispatcher": "", 641 | "symfony/filesystem": "", 642 | "symfony/process": "" 643 | }, 644 | "type": "library", 645 | "extra": { 646 | "branch-alias": { 647 | "dev-master": "3.3-dev" 648 | } 649 | }, 650 | "autoload": { 651 | "psr-4": { 652 | "Symfony\\Component\\Console\\": "" 653 | }, 654 | "exclude-from-classmap": [ 655 | "/Tests/" 656 | ] 657 | }, 658 | "notification-url": "https://packagist.org/downloads/", 659 | "license": [ 660 | "MIT" 661 | ], 662 | "authors": [ 663 | { 664 | "name": "Fabien Potencier", 665 | "email": "fabien@symfony.com" 666 | }, 667 | { 668 | "name": "Symfony Community", 669 | "homepage": "https://symfony.com/contributors" 670 | } 671 | ], 672 | "description": "Symfony Console Component", 673 | "homepage": "https://symfony.com", 674 | "time": "2017-07-03T13:19:36+00:00" 675 | }, 676 | { 677 | "name": "symfony/debug", 678 | "version": "v3.3.3", 679 | "source": { 680 | "type": "git", 681 | "url": "https://github.com/symfony/debug.git", 682 | "reference": "bcfd02728d9b776e5c2195a4750c813fe440402f" 683 | }, 684 | "dist": { 685 | "type": "zip", 686 | "url": "https://api.github.com/repos/symfony/debug/zipball/bcfd02728d9b776e5c2195a4750c813fe440402f", 687 | "reference": "bcfd02728d9b776e5c2195a4750c813fe440402f", 688 | "shasum": "" 689 | }, 690 | "require": { 691 | "php": ">=5.5.9", 692 | "psr/log": "~1.0" 693 | }, 694 | "conflict": { 695 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 696 | }, 697 | "require-dev": { 698 | "symfony/http-kernel": "~2.8|~3.0" 699 | }, 700 | "type": "library", 701 | "extra": { 702 | "branch-alias": { 703 | "dev-master": "3.3-dev" 704 | } 705 | }, 706 | "autoload": { 707 | "psr-4": { 708 | "Symfony\\Component\\Debug\\": "" 709 | }, 710 | "exclude-from-classmap": [ 711 | "/Tests/" 712 | ] 713 | }, 714 | "notification-url": "https://packagist.org/downloads/", 715 | "license": [ 716 | "MIT" 717 | ], 718 | "authors": [ 719 | { 720 | "name": "Fabien Potencier", 721 | "email": "fabien@symfony.com" 722 | }, 723 | { 724 | "name": "Symfony Community", 725 | "homepage": "https://symfony.com/contributors" 726 | } 727 | ], 728 | "description": "Symfony Debug Component", 729 | "homepage": "https://symfony.com", 730 | "time": "2017-06-06T14:51:55+00:00" 731 | }, 732 | { 733 | "name": "symfony/event-dispatcher", 734 | "version": "v3.3.3", 735 | "source": { 736 | "type": "git", 737 | "url": "https://github.com/symfony/event-dispatcher.git", 738 | "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e" 739 | }, 740 | "dist": { 741 | "type": "zip", 742 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e", 743 | "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e", 744 | "shasum": "" 745 | }, 746 | "require": { 747 | "php": ">=5.5.9" 748 | }, 749 | "conflict": { 750 | "symfony/dependency-injection": "<3.3" 751 | }, 752 | "require-dev": { 753 | "psr/log": "~1.0", 754 | "symfony/config": "~2.8|~3.0", 755 | "symfony/dependency-injection": "~3.3", 756 | "symfony/expression-language": "~2.8|~3.0", 757 | "symfony/stopwatch": "~2.8|~3.0" 758 | }, 759 | "suggest": { 760 | "symfony/dependency-injection": "", 761 | "symfony/http-kernel": "" 762 | }, 763 | "type": "library", 764 | "extra": { 765 | "branch-alias": { 766 | "dev-master": "3.3-dev" 767 | } 768 | }, 769 | "autoload": { 770 | "psr-4": { 771 | "Symfony\\Component\\EventDispatcher\\": "" 772 | }, 773 | "exclude-from-classmap": [ 774 | "/Tests/" 775 | ] 776 | }, 777 | "notification-url": "https://packagist.org/downloads/", 778 | "license": [ 779 | "MIT" 780 | ], 781 | "authors": [ 782 | { 783 | "name": "Fabien Potencier", 784 | "email": "fabien@symfony.com" 785 | }, 786 | { 787 | "name": "Symfony Community", 788 | "homepage": "https://symfony.com/contributors" 789 | } 790 | ], 791 | "description": "Symfony EventDispatcher Component", 792 | "homepage": "https://symfony.com", 793 | "time": "2017-06-09T14:53:08+00:00" 794 | }, 795 | { 796 | "name": "symfony/finder", 797 | "version": "v3.3.3", 798 | "source": { 799 | "type": "git", 800 | "url": "https://github.com/symfony/finder.git", 801 | "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" 802 | }, 803 | "dist": { 804 | "type": "zip", 805 | "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", 806 | "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", 807 | "shasum": "" 808 | }, 809 | "require": { 810 | "php": ">=5.5.9" 811 | }, 812 | "type": "library", 813 | "extra": { 814 | "branch-alias": { 815 | "dev-master": "3.3-dev" 816 | } 817 | }, 818 | "autoload": { 819 | "psr-4": { 820 | "Symfony\\Component\\Finder\\": "" 821 | }, 822 | "exclude-from-classmap": [ 823 | "/Tests/" 824 | ] 825 | }, 826 | "notification-url": "https://packagist.org/downloads/", 827 | "license": [ 828 | "MIT" 829 | ], 830 | "authors": [ 831 | { 832 | "name": "Fabien Potencier", 833 | "email": "fabien@symfony.com" 834 | }, 835 | { 836 | "name": "Symfony Community", 837 | "homepage": "https://symfony.com/contributors" 838 | } 839 | ], 840 | "description": "Symfony Finder Component", 841 | "homepage": "https://symfony.com", 842 | "time": "2017-06-01T21:01:25+00:00" 843 | }, 844 | { 845 | "name": "symfony/http-foundation", 846 | "version": "v3.3.3", 847 | "source": { 848 | "type": "git", 849 | "url": "https://github.com/symfony/http-foundation.git", 850 | "reference": "f347a5f561b03db95ed666959db42bbbf429b7e5" 851 | }, 852 | "dist": { 853 | "type": "zip", 854 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f347a5f561b03db95ed666959db42bbbf429b7e5", 855 | "reference": "f347a5f561b03db95ed666959db42bbbf429b7e5", 856 | "shasum": "" 857 | }, 858 | "require": { 859 | "php": ">=5.5.9", 860 | "symfony/polyfill-mbstring": "~1.1" 861 | }, 862 | "require-dev": { 863 | "symfony/expression-language": "~2.8|~3.0" 864 | }, 865 | "type": "library", 866 | "extra": { 867 | "branch-alias": { 868 | "dev-master": "3.3-dev" 869 | } 870 | }, 871 | "autoload": { 872 | "psr-4": { 873 | "Symfony\\Component\\HttpFoundation\\": "" 874 | }, 875 | "exclude-from-classmap": [ 876 | "/Tests/" 877 | ] 878 | }, 879 | "notification-url": "https://packagist.org/downloads/", 880 | "license": [ 881 | "MIT" 882 | ], 883 | "authors": [ 884 | { 885 | "name": "Fabien Potencier", 886 | "email": "fabien@symfony.com" 887 | }, 888 | { 889 | "name": "Symfony Community", 890 | "homepage": "https://symfony.com/contributors" 891 | } 892 | ], 893 | "description": "Symfony HttpFoundation Component", 894 | "homepage": "https://symfony.com", 895 | "time": "2017-06-24T09:29:48+00:00" 896 | }, 897 | { 898 | "name": "symfony/http-kernel", 899 | "version": "v3.3.3", 900 | "source": { 901 | "type": "git", 902 | "url": "https://github.com/symfony/http-kernel.git", 903 | "reference": "98e6c9197e2d4eb42a059eb69ef4168a6b3c4891" 904 | }, 905 | "dist": { 906 | "type": "zip", 907 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/98e6c9197e2d4eb42a059eb69ef4168a6b3c4891", 908 | "reference": "98e6c9197e2d4eb42a059eb69ef4168a6b3c4891", 909 | "shasum": "" 910 | }, 911 | "require": { 912 | "php": ">=5.5.9", 913 | "psr/log": "~1.0", 914 | "symfony/debug": "~2.8|~3.0", 915 | "symfony/event-dispatcher": "~2.8|~3.0", 916 | "symfony/http-foundation": "~3.3" 917 | }, 918 | "conflict": { 919 | "symfony/config": "<2.8", 920 | "symfony/dependency-injection": "<3.3", 921 | "symfony/var-dumper": "<3.3", 922 | "twig/twig": "<1.34|<2.4,>=2" 923 | }, 924 | "require-dev": { 925 | "psr/cache": "~1.0", 926 | "symfony/browser-kit": "~2.8|~3.0", 927 | "symfony/class-loader": "~2.8|~3.0", 928 | "symfony/config": "~2.8|~3.0", 929 | "symfony/console": "~2.8|~3.0", 930 | "symfony/css-selector": "~2.8|~3.0", 931 | "symfony/dependency-injection": "~3.3", 932 | "symfony/dom-crawler": "~2.8|~3.0", 933 | "symfony/expression-language": "~2.8|~3.0", 934 | "symfony/finder": "~2.8|~3.0", 935 | "symfony/process": "~2.8|~3.0", 936 | "symfony/routing": "~2.8|~3.0", 937 | "symfony/stopwatch": "~2.8|~3.0", 938 | "symfony/templating": "~2.8|~3.0", 939 | "symfony/translation": "~2.8|~3.0", 940 | "symfony/var-dumper": "~3.3" 941 | }, 942 | "suggest": { 943 | "symfony/browser-kit": "", 944 | "symfony/class-loader": "", 945 | "symfony/config": "", 946 | "symfony/console": "", 947 | "symfony/dependency-injection": "", 948 | "symfony/finder": "", 949 | "symfony/var-dumper": "" 950 | }, 951 | "type": "library", 952 | "extra": { 953 | "branch-alias": { 954 | "dev-master": "3.3-dev" 955 | } 956 | }, 957 | "autoload": { 958 | "psr-4": { 959 | "Symfony\\Component\\HttpKernel\\": "" 960 | }, 961 | "exclude-from-classmap": [ 962 | "/Tests/" 963 | ] 964 | }, 965 | "notification-url": "https://packagist.org/downloads/", 966 | "license": [ 967 | "MIT" 968 | ], 969 | "authors": [ 970 | { 971 | "name": "Fabien Potencier", 972 | "email": "fabien@symfony.com" 973 | }, 974 | { 975 | "name": "Symfony Community", 976 | "homepage": "https://symfony.com/contributors" 977 | } 978 | ], 979 | "description": "Symfony HttpKernel Component", 980 | "homepage": "https://symfony.com", 981 | "time": "2017-07-04T06:02:59+00:00" 982 | }, 983 | { 984 | "name": "symfony/polyfill-mbstring", 985 | "version": "v1.4.0", 986 | "source": { 987 | "type": "git", 988 | "url": "https://github.com/symfony/polyfill-mbstring.git", 989 | "reference": "f29dca382a6485c3cbe6379f0c61230167681937" 990 | }, 991 | "dist": { 992 | "type": "zip", 993 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f29dca382a6485c3cbe6379f0c61230167681937", 994 | "reference": "f29dca382a6485c3cbe6379f0c61230167681937", 995 | "shasum": "" 996 | }, 997 | "require": { 998 | "php": ">=5.3.3" 999 | }, 1000 | "suggest": { 1001 | "ext-mbstring": "For best performance" 1002 | }, 1003 | "type": "library", 1004 | "extra": { 1005 | "branch-alias": { 1006 | "dev-master": "1.4-dev" 1007 | } 1008 | }, 1009 | "autoload": { 1010 | "psr-4": { 1011 | "Symfony\\Polyfill\\Mbstring\\": "" 1012 | }, 1013 | "files": [ 1014 | "bootstrap.php" 1015 | ] 1016 | }, 1017 | "notification-url": "https://packagist.org/downloads/", 1018 | "license": [ 1019 | "MIT" 1020 | ], 1021 | "authors": [ 1022 | { 1023 | "name": "Nicolas Grekas", 1024 | "email": "p@tchwork.com" 1025 | }, 1026 | { 1027 | "name": "Symfony Community", 1028 | "homepage": "https://symfony.com/contributors" 1029 | } 1030 | ], 1031 | "description": "Symfony polyfill for the Mbstring extension", 1032 | "homepage": "https://symfony.com", 1033 | "keywords": [ 1034 | "compatibility", 1035 | "mbstring", 1036 | "polyfill", 1037 | "portable", 1038 | "shim" 1039 | ], 1040 | "time": "2017-06-09T14:24:12+00:00" 1041 | }, 1042 | { 1043 | "name": "symfony/process", 1044 | "version": "v3.3.3", 1045 | "source": { 1046 | "type": "git", 1047 | "url": "https://github.com/symfony/process.git", 1048 | "reference": "5ab8949b682b1bf9d4511a228b5e045c96758c30" 1049 | }, 1050 | "dist": { 1051 | "type": "zip", 1052 | "url": "https://api.github.com/repos/symfony/process/zipball/5ab8949b682b1bf9d4511a228b5e045c96758c30", 1053 | "reference": "5ab8949b682b1bf9d4511a228b5e045c96758c30", 1054 | "shasum": "" 1055 | }, 1056 | "require": { 1057 | "php": ">=5.5.9" 1058 | }, 1059 | "type": "library", 1060 | "extra": { 1061 | "branch-alias": { 1062 | "dev-master": "3.3-dev" 1063 | } 1064 | }, 1065 | "autoload": { 1066 | "psr-4": { 1067 | "Symfony\\Component\\Process\\": "" 1068 | }, 1069 | "exclude-from-classmap": [ 1070 | "/Tests/" 1071 | ] 1072 | }, 1073 | "notification-url": "https://packagist.org/downloads/", 1074 | "license": [ 1075 | "MIT" 1076 | ], 1077 | "authors": [ 1078 | { 1079 | "name": "Fabien Potencier", 1080 | "email": "fabien@symfony.com" 1081 | }, 1082 | { 1083 | "name": "Symfony Community", 1084 | "homepage": "https://symfony.com/contributors" 1085 | } 1086 | ], 1087 | "description": "Symfony Process Component", 1088 | "homepage": "https://symfony.com", 1089 | "time": "2017-07-03T08:12:02+00:00" 1090 | }, 1091 | { 1092 | "name": "symfony/translation", 1093 | "version": "v3.3.3", 1094 | "source": { 1095 | "type": "git", 1096 | "url": "https://github.com/symfony/translation.git", 1097 | "reference": "35dd5fb003c90e8bd4d8cabdf94bf9c96d06fdc3" 1098 | }, 1099 | "dist": { 1100 | "type": "zip", 1101 | "url": "https://api.github.com/repos/symfony/translation/zipball/35dd5fb003c90e8bd4d8cabdf94bf9c96d06fdc3", 1102 | "reference": "35dd5fb003c90e8bd4d8cabdf94bf9c96d06fdc3", 1103 | "shasum": "" 1104 | }, 1105 | "require": { 1106 | "php": ">=5.5.9", 1107 | "symfony/polyfill-mbstring": "~1.0" 1108 | }, 1109 | "conflict": { 1110 | "symfony/config": "<2.8", 1111 | "symfony/yaml": "<3.3" 1112 | }, 1113 | "require-dev": { 1114 | "psr/log": "~1.0", 1115 | "symfony/config": "~2.8|~3.0", 1116 | "symfony/intl": "^2.8.18|^3.2.5", 1117 | "symfony/yaml": "~3.3" 1118 | }, 1119 | "suggest": { 1120 | "psr/log": "To use logging capability in translator", 1121 | "symfony/config": "", 1122 | "symfony/yaml": "" 1123 | }, 1124 | "type": "library", 1125 | "extra": { 1126 | "branch-alias": { 1127 | "dev-master": "3.3-dev" 1128 | } 1129 | }, 1130 | "autoload": { 1131 | "psr-4": { 1132 | "Symfony\\Component\\Translation\\": "" 1133 | }, 1134 | "exclude-from-classmap": [ 1135 | "/Tests/" 1136 | ] 1137 | }, 1138 | "notification-url": "https://packagist.org/downloads/", 1139 | "license": [ 1140 | "MIT" 1141 | ], 1142 | "authors": [ 1143 | { 1144 | "name": "Fabien Potencier", 1145 | "email": "fabien@symfony.com" 1146 | }, 1147 | { 1148 | "name": "Symfony Community", 1149 | "homepage": "https://symfony.com/contributors" 1150 | } 1151 | ], 1152 | "description": "Symfony Translation Component", 1153 | "homepage": "https://symfony.com", 1154 | "time": "2017-06-24T16:45:30+00:00" 1155 | } 1156 | ], 1157 | "packages-dev": [ 1158 | { 1159 | "name": "composer/ca-bundle", 1160 | "version": "1.0.7", 1161 | "source": { 1162 | "type": "git", 1163 | "url": "https://github.com/composer/ca-bundle.git", 1164 | "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12" 1165 | }, 1166 | "dist": { 1167 | "type": "zip", 1168 | "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b17e6153cb7f33c7e44eb59578dc12eee5dc8e12", 1169 | "reference": "b17e6153cb7f33c7e44eb59578dc12eee5dc8e12", 1170 | "shasum": "" 1171 | }, 1172 | "require": { 1173 | "ext-openssl": "*", 1174 | "ext-pcre": "*", 1175 | "php": "^5.3.2 || ^7.0" 1176 | }, 1177 | "require-dev": { 1178 | "phpunit/phpunit": "^4.5", 1179 | "psr/log": "^1.0", 1180 | "symfony/process": "^2.5 || ^3.0" 1181 | }, 1182 | "suggest": { 1183 | "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+" 1184 | }, 1185 | "type": "library", 1186 | "extra": { 1187 | "branch-alias": { 1188 | "dev-master": "1.x-dev" 1189 | } 1190 | }, 1191 | "autoload": { 1192 | "psr-4": { 1193 | "Composer\\CaBundle\\": "src" 1194 | } 1195 | }, 1196 | "notification-url": "https://packagist.org/downloads/", 1197 | "license": [ 1198 | "MIT" 1199 | ], 1200 | "authors": [ 1201 | { 1202 | "name": "Jordi Boggiano", 1203 | "email": "j.boggiano@seld.be", 1204 | "homepage": "http://seld.be" 1205 | } 1206 | ], 1207 | "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", 1208 | "keywords": [ 1209 | "cabundle", 1210 | "cacert", 1211 | "certificate", 1212 | "ssl", 1213 | "tls" 1214 | ], 1215 | "time": "2017-03-06T11:59:08+00:00" 1216 | }, 1217 | { 1218 | "name": "composer/composer", 1219 | "version": "1.4.2", 1220 | "source": { 1221 | "type": "git", 1222 | "url": "https://github.com/composer/composer.git", 1223 | "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647" 1224 | }, 1225 | "dist": { 1226 | "type": "zip", 1227 | "url": "https://api.github.com/repos/composer/composer/zipball/489e09ee6c3ba431fbeeef9147afdaeb6f91b647", 1228 | "reference": "489e09ee6c3ba431fbeeef9147afdaeb6f91b647", 1229 | "shasum": "" 1230 | }, 1231 | "require": { 1232 | "composer/ca-bundle": "^1.0", 1233 | "composer/semver": "^1.0", 1234 | "composer/spdx-licenses": "^1.0", 1235 | "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", 1236 | "php": "^5.3.2 || ^7.0", 1237 | "psr/log": "^1.0", 1238 | "seld/cli-prompt": "^1.0", 1239 | "seld/jsonlint": "^1.4", 1240 | "seld/phar-utils": "^1.0", 1241 | "symfony/console": "^2.7 || ^3.0", 1242 | "symfony/filesystem": "^2.7 || ^3.0", 1243 | "symfony/finder": "^2.7 || ^3.0", 1244 | "symfony/process": "^2.7 || ^3.0" 1245 | }, 1246 | "require-dev": { 1247 | "phpunit/phpunit": "^4.5 || ^5.0.5", 1248 | "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" 1249 | }, 1250 | "suggest": { 1251 | "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", 1252 | "ext-zip": "Enabling the zip extension allows you to unzip archives", 1253 | "ext-zlib": "Allow gzip compression of HTTP requests" 1254 | }, 1255 | "bin": [ 1256 | "bin/composer" 1257 | ], 1258 | "type": "library", 1259 | "extra": { 1260 | "branch-alias": { 1261 | "dev-master": "1.4-dev" 1262 | } 1263 | }, 1264 | "autoload": { 1265 | "psr-4": { 1266 | "Composer\\": "src/Composer" 1267 | } 1268 | }, 1269 | "notification-url": "https://packagist.org/downloads/", 1270 | "license": [ 1271 | "MIT" 1272 | ], 1273 | "authors": [ 1274 | { 1275 | "name": "Nils Adermann", 1276 | "email": "naderman@naderman.de", 1277 | "homepage": "http://www.naderman.de" 1278 | }, 1279 | { 1280 | "name": "Jordi Boggiano", 1281 | "email": "j.boggiano@seld.be", 1282 | "homepage": "http://seld.be" 1283 | } 1284 | ], 1285 | "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", 1286 | "homepage": "https://getcomposer.org/", 1287 | "keywords": [ 1288 | "autoload", 1289 | "dependency", 1290 | "package" 1291 | ], 1292 | "time": "2017-05-17T06:17:53+00:00" 1293 | }, 1294 | { 1295 | "name": "composer/semver", 1296 | "version": "1.4.2", 1297 | "source": { 1298 | "type": "git", 1299 | "url": "https://github.com/composer/semver.git", 1300 | "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" 1301 | }, 1302 | "dist": { 1303 | "type": "zip", 1304 | "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", 1305 | "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", 1306 | "shasum": "" 1307 | }, 1308 | "require": { 1309 | "php": "^5.3.2 || ^7.0" 1310 | }, 1311 | "require-dev": { 1312 | "phpunit/phpunit": "^4.5 || ^5.0.5", 1313 | "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" 1314 | }, 1315 | "type": "library", 1316 | "extra": { 1317 | "branch-alias": { 1318 | "dev-master": "1.x-dev" 1319 | } 1320 | }, 1321 | "autoload": { 1322 | "psr-4": { 1323 | "Composer\\Semver\\": "src" 1324 | } 1325 | }, 1326 | "notification-url": "https://packagist.org/downloads/", 1327 | "license": [ 1328 | "MIT" 1329 | ], 1330 | "authors": [ 1331 | { 1332 | "name": "Nils Adermann", 1333 | "email": "naderman@naderman.de", 1334 | "homepage": "http://www.naderman.de" 1335 | }, 1336 | { 1337 | "name": "Jordi Boggiano", 1338 | "email": "j.boggiano@seld.be", 1339 | "homepage": "http://seld.be" 1340 | }, 1341 | { 1342 | "name": "Rob Bast", 1343 | "email": "rob.bast@gmail.com", 1344 | "homepage": "http://robbast.nl" 1345 | } 1346 | ], 1347 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 1348 | "keywords": [ 1349 | "semantic", 1350 | "semver", 1351 | "validation", 1352 | "versioning" 1353 | ], 1354 | "time": "2016-08-30T16:08:34+00:00" 1355 | }, 1356 | { 1357 | "name": "composer/spdx-licenses", 1358 | "version": "1.1.6", 1359 | "source": { 1360 | "type": "git", 1361 | "url": "https://github.com/composer/spdx-licenses.git", 1362 | "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c" 1363 | }, 1364 | "dist": { 1365 | "type": "zip", 1366 | "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/2603a0d7ddc00a015deb576fa5297ca43dee6b1c", 1367 | "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c", 1368 | "shasum": "" 1369 | }, 1370 | "require": { 1371 | "php": "^5.3.2 || ^7.0" 1372 | }, 1373 | "require-dev": { 1374 | "phpunit/phpunit": "^4.5 || ^5.0.5", 1375 | "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" 1376 | }, 1377 | "type": "library", 1378 | "extra": { 1379 | "branch-alias": { 1380 | "dev-master": "1.x-dev" 1381 | } 1382 | }, 1383 | "autoload": { 1384 | "psr-4": { 1385 | "Composer\\Spdx\\": "src" 1386 | } 1387 | }, 1388 | "notification-url": "https://packagist.org/downloads/", 1389 | "license": [ 1390 | "MIT" 1391 | ], 1392 | "authors": [ 1393 | { 1394 | "name": "Nils Adermann", 1395 | "email": "naderman@naderman.de", 1396 | "homepage": "http://www.naderman.de" 1397 | }, 1398 | { 1399 | "name": "Jordi Boggiano", 1400 | "email": "j.boggiano@seld.be", 1401 | "homepage": "http://seld.be" 1402 | }, 1403 | { 1404 | "name": "Rob Bast", 1405 | "email": "rob.bast@gmail.com", 1406 | "homepage": "http://robbast.nl" 1407 | } 1408 | ], 1409 | "description": "SPDX licenses list and validation library.", 1410 | "keywords": [ 1411 | "license", 1412 | "spdx", 1413 | "validator" 1414 | ], 1415 | "time": "2017-04-03T19:08:52+00:00" 1416 | }, 1417 | { 1418 | "name": "doctrine/instantiator", 1419 | "version": "1.0.5", 1420 | "source": { 1421 | "type": "git", 1422 | "url": "https://github.com/doctrine/instantiator.git", 1423 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" 1424 | }, 1425 | "dist": { 1426 | "type": "zip", 1427 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", 1428 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", 1429 | "shasum": "" 1430 | }, 1431 | "require": { 1432 | "php": ">=5.3,<8.0-DEV" 1433 | }, 1434 | "require-dev": { 1435 | "athletic/athletic": "~0.1.8", 1436 | "ext-pdo": "*", 1437 | "ext-phar": "*", 1438 | "phpunit/phpunit": "~4.0", 1439 | "squizlabs/php_codesniffer": "~2.0" 1440 | }, 1441 | "type": "library", 1442 | "extra": { 1443 | "branch-alias": { 1444 | "dev-master": "1.0.x-dev" 1445 | } 1446 | }, 1447 | "autoload": { 1448 | "psr-4": { 1449 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1450 | } 1451 | }, 1452 | "notification-url": "https://packagist.org/downloads/", 1453 | "license": [ 1454 | "MIT" 1455 | ], 1456 | "authors": [ 1457 | { 1458 | "name": "Marco Pivetta", 1459 | "email": "ocramius@gmail.com", 1460 | "homepage": "http://ocramius.github.com/" 1461 | } 1462 | ], 1463 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1464 | "homepage": "https://github.com/doctrine/instantiator", 1465 | "keywords": [ 1466 | "constructor", 1467 | "instantiate" 1468 | ], 1469 | "time": "2015-06-14T21:17:01+00:00" 1470 | }, 1471 | { 1472 | "name": "justinrainbow/json-schema", 1473 | "version": "5.2.1", 1474 | "source": { 1475 | "type": "git", 1476 | "url": "https://github.com/justinrainbow/json-schema.git", 1477 | "reference": "429be236f296ca249d61c65649cdf2652f4a5e80" 1478 | }, 1479 | "dist": { 1480 | "type": "zip", 1481 | "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/429be236f296ca249d61c65649cdf2652f4a5e80", 1482 | "reference": "429be236f296ca249d61c65649cdf2652f4a5e80", 1483 | "shasum": "" 1484 | }, 1485 | "require": { 1486 | "php": ">=5.3.3" 1487 | }, 1488 | "require-dev": { 1489 | "friendsofphp/php-cs-fixer": "^2.1", 1490 | "json-schema/json-schema-test-suite": "1.2.0", 1491 | "phpdocumentor/phpdocumentor": "^2.7", 1492 | "phpunit/phpunit": "^4.8.22" 1493 | }, 1494 | "bin": [ 1495 | "bin/validate-json" 1496 | ], 1497 | "type": "library", 1498 | "extra": { 1499 | "branch-alias": { 1500 | "dev-master": "5.0.x-dev" 1501 | } 1502 | }, 1503 | "autoload": { 1504 | "psr-4": { 1505 | "JsonSchema\\": "src/JsonSchema/" 1506 | } 1507 | }, 1508 | "notification-url": "https://packagist.org/downloads/", 1509 | "license": [ 1510 | "MIT" 1511 | ], 1512 | "authors": [ 1513 | { 1514 | "name": "Bruno Prieto Reis", 1515 | "email": "bruno.p.reis@gmail.com" 1516 | }, 1517 | { 1518 | "name": "Justin Rainbow", 1519 | "email": "justin.rainbow@gmail.com" 1520 | }, 1521 | { 1522 | "name": "Igor Wiedler", 1523 | "email": "igor@wiedler.ch" 1524 | }, 1525 | { 1526 | "name": "Robert Schönthal", 1527 | "email": "seroscho@googlemail.com" 1528 | } 1529 | ], 1530 | "description": "A library to validate a json schema.", 1531 | "homepage": "https://github.com/justinrainbow/json-schema", 1532 | "keywords": [ 1533 | "json", 1534 | "schema" 1535 | ], 1536 | "time": "2017-05-16T21:06:09+00:00" 1537 | }, 1538 | { 1539 | "name": "myclabs/deep-copy", 1540 | "version": "1.6.1", 1541 | "source": { 1542 | "type": "git", 1543 | "url": "https://github.com/myclabs/DeepCopy.git", 1544 | "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" 1545 | }, 1546 | "dist": { 1547 | "type": "zip", 1548 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", 1549 | "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", 1550 | "shasum": "" 1551 | }, 1552 | "require": { 1553 | "php": ">=5.4.0" 1554 | }, 1555 | "require-dev": { 1556 | "doctrine/collections": "1.*", 1557 | "phpunit/phpunit": "~4.1" 1558 | }, 1559 | "type": "library", 1560 | "autoload": { 1561 | "psr-4": { 1562 | "DeepCopy\\": "src/DeepCopy/" 1563 | } 1564 | }, 1565 | "notification-url": "https://packagist.org/downloads/", 1566 | "license": [ 1567 | "MIT" 1568 | ], 1569 | "description": "Create deep copies (clones) of your objects", 1570 | "homepage": "https://github.com/myclabs/DeepCopy", 1571 | "keywords": [ 1572 | "clone", 1573 | "copy", 1574 | "duplicate", 1575 | "object", 1576 | "object graph" 1577 | ], 1578 | "time": "2017-04-12T18:52:22+00:00" 1579 | }, 1580 | { 1581 | "name": "phar-io/manifest", 1582 | "version": "1.0.1", 1583 | "source": { 1584 | "type": "git", 1585 | "url": "https://github.com/phar-io/manifest.git", 1586 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" 1587 | }, 1588 | "dist": { 1589 | "type": "zip", 1590 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", 1591 | "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", 1592 | "shasum": "" 1593 | }, 1594 | "require": { 1595 | "ext-dom": "*", 1596 | "ext-phar": "*", 1597 | "phar-io/version": "^1.0.1", 1598 | "php": "^5.6 || ^7.0" 1599 | }, 1600 | "type": "library", 1601 | "extra": { 1602 | "branch-alias": { 1603 | "dev-master": "1.0.x-dev" 1604 | } 1605 | }, 1606 | "autoload": { 1607 | "classmap": [ 1608 | "src/" 1609 | ] 1610 | }, 1611 | "notification-url": "https://packagist.org/downloads/", 1612 | "license": [ 1613 | "BSD-3-Clause" 1614 | ], 1615 | "authors": [ 1616 | { 1617 | "name": "Arne Blankerts", 1618 | "email": "arne@blankerts.de", 1619 | "role": "Developer" 1620 | }, 1621 | { 1622 | "name": "Sebastian Heuer", 1623 | "email": "sebastian@phpeople.de", 1624 | "role": "Developer" 1625 | }, 1626 | { 1627 | "name": "Sebastian Bergmann", 1628 | "email": "sebastian@phpunit.de", 1629 | "role": "Developer" 1630 | } 1631 | ], 1632 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1633 | "time": "2017-03-05T18:14:27+00:00" 1634 | }, 1635 | { 1636 | "name": "phar-io/version", 1637 | "version": "1.0.1", 1638 | "source": { 1639 | "type": "git", 1640 | "url": "https://github.com/phar-io/version.git", 1641 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" 1642 | }, 1643 | "dist": { 1644 | "type": "zip", 1645 | "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", 1646 | "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", 1647 | "shasum": "" 1648 | }, 1649 | "require": { 1650 | "php": "^5.6 || ^7.0" 1651 | }, 1652 | "type": "library", 1653 | "autoload": { 1654 | "classmap": [ 1655 | "src/" 1656 | ] 1657 | }, 1658 | "notification-url": "https://packagist.org/downloads/", 1659 | "license": [ 1660 | "BSD-3-Clause" 1661 | ], 1662 | "authors": [ 1663 | { 1664 | "name": "Arne Blankerts", 1665 | "email": "arne@blankerts.de", 1666 | "role": "Developer" 1667 | }, 1668 | { 1669 | "name": "Sebastian Heuer", 1670 | "email": "sebastian@phpeople.de", 1671 | "role": "Developer" 1672 | }, 1673 | { 1674 | "name": "Sebastian Bergmann", 1675 | "email": "sebastian@phpunit.de", 1676 | "role": "Developer" 1677 | } 1678 | ], 1679 | "description": "Library for handling version information and constraints", 1680 | "time": "2017-03-05T17:38:23+00:00" 1681 | }, 1682 | { 1683 | "name": "phpdocumentor/reflection-common", 1684 | "version": "1.0", 1685 | "source": { 1686 | "type": "git", 1687 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 1688 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" 1689 | }, 1690 | "dist": { 1691 | "type": "zip", 1692 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1693 | "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", 1694 | "shasum": "" 1695 | }, 1696 | "require": { 1697 | "php": ">=5.5" 1698 | }, 1699 | "require-dev": { 1700 | "phpunit/phpunit": "^4.6" 1701 | }, 1702 | "type": "library", 1703 | "extra": { 1704 | "branch-alias": { 1705 | "dev-master": "1.0.x-dev" 1706 | } 1707 | }, 1708 | "autoload": { 1709 | "psr-4": { 1710 | "phpDocumentor\\Reflection\\": [ 1711 | "src" 1712 | ] 1713 | } 1714 | }, 1715 | "notification-url": "https://packagist.org/downloads/", 1716 | "license": [ 1717 | "MIT" 1718 | ], 1719 | "authors": [ 1720 | { 1721 | "name": "Jaap van Otterdijk", 1722 | "email": "opensource@ijaap.nl" 1723 | } 1724 | ], 1725 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 1726 | "homepage": "http://www.phpdoc.org", 1727 | "keywords": [ 1728 | "FQSEN", 1729 | "phpDocumentor", 1730 | "phpdoc", 1731 | "reflection", 1732 | "static analysis" 1733 | ], 1734 | "time": "2015-12-27T11:43:31+00:00" 1735 | }, 1736 | { 1737 | "name": "phpdocumentor/reflection-docblock", 1738 | "version": "3.1.1", 1739 | "source": { 1740 | "type": "git", 1741 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 1742 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" 1743 | }, 1744 | "dist": { 1745 | "type": "zip", 1746 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", 1747 | "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", 1748 | "shasum": "" 1749 | }, 1750 | "require": { 1751 | "php": ">=5.5", 1752 | "phpdocumentor/reflection-common": "^1.0@dev", 1753 | "phpdocumentor/type-resolver": "^0.2.0", 1754 | "webmozart/assert": "^1.0" 1755 | }, 1756 | "require-dev": { 1757 | "mockery/mockery": "^0.9.4", 1758 | "phpunit/phpunit": "^4.4" 1759 | }, 1760 | "type": "library", 1761 | "autoload": { 1762 | "psr-4": { 1763 | "phpDocumentor\\Reflection\\": [ 1764 | "src/" 1765 | ] 1766 | } 1767 | }, 1768 | "notification-url": "https://packagist.org/downloads/", 1769 | "license": [ 1770 | "MIT" 1771 | ], 1772 | "authors": [ 1773 | { 1774 | "name": "Mike van Riel", 1775 | "email": "me@mikevanriel.com" 1776 | } 1777 | ], 1778 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 1779 | "time": "2016-09-30T07:12:33+00:00" 1780 | }, 1781 | { 1782 | "name": "phpdocumentor/type-resolver", 1783 | "version": "0.2.1", 1784 | "source": { 1785 | "type": "git", 1786 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 1787 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" 1788 | }, 1789 | "dist": { 1790 | "type": "zip", 1791 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 1792 | "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", 1793 | "shasum": "" 1794 | }, 1795 | "require": { 1796 | "php": ">=5.5", 1797 | "phpdocumentor/reflection-common": "^1.0" 1798 | }, 1799 | "require-dev": { 1800 | "mockery/mockery": "^0.9.4", 1801 | "phpunit/phpunit": "^5.2||^4.8.24" 1802 | }, 1803 | "type": "library", 1804 | "extra": { 1805 | "branch-alias": { 1806 | "dev-master": "1.0.x-dev" 1807 | } 1808 | }, 1809 | "autoload": { 1810 | "psr-4": { 1811 | "phpDocumentor\\Reflection\\": [ 1812 | "src/" 1813 | ] 1814 | } 1815 | }, 1816 | "notification-url": "https://packagist.org/downloads/", 1817 | "license": [ 1818 | "MIT" 1819 | ], 1820 | "authors": [ 1821 | { 1822 | "name": "Mike van Riel", 1823 | "email": "me@mikevanriel.com" 1824 | } 1825 | ], 1826 | "time": "2016-11-25T06:54:22+00:00" 1827 | }, 1828 | { 1829 | "name": "phpspec/prophecy", 1830 | "version": "v1.7.0", 1831 | "source": { 1832 | "type": "git", 1833 | "url": "https://github.com/phpspec/prophecy.git", 1834 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073" 1835 | }, 1836 | "dist": { 1837 | "type": "zip", 1838 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073", 1839 | "reference": "93d39f1f7f9326d746203c7c056f300f7f126073", 1840 | "shasum": "" 1841 | }, 1842 | "require": { 1843 | "doctrine/instantiator": "^1.0.2", 1844 | "php": "^5.3|^7.0", 1845 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", 1846 | "sebastian/comparator": "^1.1|^2.0", 1847 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 1848 | }, 1849 | "require-dev": { 1850 | "phpspec/phpspec": "^2.5|^3.2", 1851 | "phpunit/phpunit": "^4.8 || ^5.6.5" 1852 | }, 1853 | "type": "library", 1854 | "extra": { 1855 | "branch-alias": { 1856 | "dev-master": "1.6.x-dev" 1857 | } 1858 | }, 1859 | "autoload": { 1860 | "psr-0": { 1861 | "Prophecy\\": "src/" 1862 | } 1863 | }, 1864 | "notification-url": "https://packagist.org/downloads/", 1865 | "license": [ 1866 | "MIT" 1867 | ], 1868 | "authors": [ 1869 | { 1870 | "name": "Konstantin Kudryashov", 1871 | "email": "ever.zet@gmail.com", 1872 | "homepage": "http://everzet.com" 1873 | }, 1874 | { 1875 | "name": "Marcello Duarte", 1876 | "email": "marcello.duarte@gmail.com" 1877 | } 1878 | ], 1879 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1880 | "homepage": "https://github.com/phpspec/prophecy", 1881 | "keywords": [ 1882 | "Double", 1883 | "Dummy", 1884 | "fake", 1885 | "mock", 1886 | "spy", 1887 | "stub" 1888 | ], 1889 | "time": "2017-03-02T20:05:34+00:00" 1890 | }, 1891 | { 1892 | "name": "phpunit/php-code-coverage", 1893 | "version": "5.2.1", 1894 | "source": { 1895 | "type": "git", 1896 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1897 | "reference": "dc421f9ca5082a0c0cb04afb171c765f79add85b" 1898 | }, 1899 | "dist": { 1900 | "type": "zip", 1901 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/dc421f9ca5082a0c0cb04afb171c765f79add85b", 1902 | "reference": "dc421f9ca5082a0c0cb04afb171c765f79add85b", 1903 | "shasum": "" 1904 | }, 1905 | "require": { 1906 | "ext-dom": "*", 1907 | "ext-xmlwriter": "*", 1908 | "php": "^7.0", 1909 | "phpunit/php-file-iterator": "^1.3", 1910 | "phpunit/php-text-template": "^1.2", 1911 | "phpunit/php-token-stream": "^1.4.11 || ^2.0", 1912 | "sebastian/code-unit-reverse-lookup": "^1.0", 1913 | "sebastian/environment": "^3.0", 1914 | "sebastian/version": "^2.0", 1915 | "theseer/tokenizer": "^1.1" 1916 | }, 1917 | "require-dev": { 1918 | "ext-xdebug": "^2.5", 1919 | "phpunit/phpunit": "^6.0" 1920 | }, 1921 | "suggest": { 1922 | "ext-xdebug": "^2.5.3" 1923 | }, 1924 | "type": "library", 1925 | "extra": { 1926 | "branch-alias": { 1927 | "dev-master": "5.2.x-dev" 1928 | } 1929 | }, 1930 | "autoload": { 1931 | "classmap": [ 1932 | "src/" 1933 | ] 1934 | }, 1935 | "notification-url": "https://packagist.org/downloads/", 1936 | "license": [ 1937 | "BSD-3-Clause" 1938 | ], 1939 | "authors": [ 1940 | { 1941 | "name": "Sebastian Bergmann", 1942 | "email": "sb@sebastian-bergmann.de", 1943 | "role": "lead" 1944 | } 1945 | ], 1946 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1947 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1948 | "keywords": [ 1949 | "coverage", 1950 | "testing", 1951 | "xunit" 1952 | ], 1953 | "time": "2017-04-21T08:03:57+00:00" 1954 | }, 1955 | { 1956 | "name": "phpunit/php-file-iterator", 1957 | "version": "1.4.2", 1958 | "source": { 1959 | "type": "git", 1960 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1961 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" 1962 | }, 1963 | "dist": { 1964 | "type": "zip", 1965 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 1966 | "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", 1967 | "shasum": "" 1968 | }, 1969 | "require": { 1970 | "php": ">=5.3.3" 1971 | }, 1972 | "type": "library", 1973 | "extra": { 1974 | "branch-alias": { 1975 | "dev-master": "1.4.x-dev" 1976 | } 1977 | }, 1978 | "autoload": { 1979 | "classmap": [ 1980 | "src/" 1981 | ] 1982 | }, 1983 | "notification-url": "https://packagist.org/downloads/", 1984 | "license": [ 1985 | "BSD-3-Clause" 1986 | ], 1987 | "authors": [ 1988 | { 1989 | "name": "Sebastian Bergmann", 1990 | "email": "sb@sebastian-bergmann.de", 1991 | "role": "lead" 1992 | } 1993 | ], 1994 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1995 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1996 | "keywords": [ 1997 | "filesystem", 1998 | "iterator" 1999 | ], 2000 | "time": "2016-10-03T07:40:28+00:00" 2001 | }, 2002 | { 2003 | "name": "phpunit/php-text-template", 2004 | "version": "1.2.1", 2005 | "source": { 2006 | "type": "git", 2007 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 2008 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 2009 | }, 2010 | "dist": { 2011 | "type": "zip", 2012 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2013 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 2014 | "shasum": "" 2015 | }, 2016 | "require": { 2017 | "php": ">=5.3.3" 2018 | }, 2019 | "type": "library", 2020 | "autoload": { 2021 | "classmap": [ 2022 | "src/" 2023 | ] 2024 | }, 2025 | "notification-url": "https://packagist.org/downloads/", 2026 | "license": [ 2027 | "BSD-3-Clause" 2028 | ], 2029 | "authors": [ 2030 | { 2031 | "name": "Sebastian Bergmann", 2032 | "email": "sebastian@phpunit.de", 2033 | "role": "lead" 2034 | } 2035 | ], 2036 | "description": "Simple template engine.", 2037 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 2038 | "keywords": [ 2039 | "template" 2040 | ], 2041 | "time": "2015-06-21T13:50:34+00:00" 2042 | }, 2043 | { 2044 | "name": "phpunit/php-timer", 2045 | "version": "1.0.9", 2046 | "source": { 2047 | "type": "git", 2048 | "url": "https://github.com/sebastianbergmann/php-timer.git", 2049 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 2050 | }, 2051 | "dist": { 2052 | "type": "zip", 2053 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 2054 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 2055 | "shasum": "" 2056 | }, 2057 | "require": { 2058 | "php": "^5.3.3 || ^7.0" 2059 | }, 2060 | "require-dev": { 2061 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 2062 | }, 2063 | "type": "library", 2064 | "extra": { 2065 | "branch-alias": { 2066 | "dev-master": "1.0-dev" 2067 | } 2068 | }, 2069 | "autoload": { 2070 | "classmap": [ 2071 | "src/" 2072 | ] 2073 | }, 2074 | "notification-url": "https://packagist.org/downloads/", 2075 | "license": [ 2076 | "BSD-3-Clause" 2077 | ], 2078 | "authors": [ 2079 | { 2080 | "name": "Sebastian Bergmann", 2081 | "email": "sb@sebastian-bergmann.de", 2082 | "role": "lead" 2083 | } 2084 | ], 2085 | "description": "Utility class for timing", 2086 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2087 | "keywords": [ 2088 | "timer" 2089 | ], 2090 | "time": "2017-02-26T11:10:40+00:00" 2091 | }, 2092 | { 2093 | "name": "phpunit/php-token-stream", 2094 | "version": "1.4.11", 2095 | "source": { 2096 | "type": "git", 2097 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 2098 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" 2099 | }, 2100 | "dist": { 2101 | "type": "zip", 2102 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", 2103 | "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", 2104 | "shasum": "" 2105 | }, 2106 | "require": { 2107 | "ext-tokenizer": "*", 2108 | "php": ">=5.3.3" 2109 | }, 2110 | "require-dev": { 2111 | "phpunit/phpunit": "~4.2" 2112 | }, 2113 | "type": "library", 2114 | "extra": { 2115 | "branch-alias": { 2116 | "dev-master": "1.4-dev" 2117 | } 2118 | }, 2119 | "autoload": { 2120 | "classmap": [ 2121 | "src/" 2122 | ] 2123 | }, 2124 | "notification-url": "https://packagist.org/downloads/", 2125 | "license": [ 2126 | "BSD-3-Clause" 2127 | ], 2128 | "authors": [ 2129 | { 2130 | "name": "Sebastian Bergmann", 2131 | "email": "sebastian@phpunit.de" 2132 | } 2133 | ], 2134 | "description": "Wrapper around PHP's tokenizer extension.", 2135 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 2136 | "keywords": [ 2137 | "tokenizer" 2138 | ], 2139 | "time": "2017-02-27T10:12:30+00:00" 2140 | }, 2141 | { 2142 | "name": "phpunit/phpunit", 2143 | "version": "6.2.3", 2144 | "source": { 2145 | "type": "git", 2146 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2147 | "reference": "fa5711d0559fc4b64deba0702be52d41434cbcb7" 2148 | }, 2149 | "dist": { 2150 | "type": "zip", 2151 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fa5711d0559fc4b64deba0702be52d41434cbcb7", 2152 | "reference": "fa5711d0559fc4b64deba0702be52d41434cbcb7", 2153 | "shasum": "" 2154 | }, 2155 | "require": { 2156 | "ext-dom": "*", 2157 | "ext-json": "*", 2158 | "ext-libxml": "*", 2159 | "ext-mbstring": "*", 2160 | "ext-xml": "*", 2161 | "myclabs/deep-copy": "^1.3", 2162 | "phar-io/manifest": "^1.0.1", 2163 | "phar-io/version": "^1.0", 2164 | "php": "^7.0", 2165 | "phpspec/prophecy": "^1.7", 2166 | "phpunit/php-code-coverage": "^5.2", 2167 | "phpunit/php-file-iterator": "^1.4", 2168 | "phpunit/php-text-template": "^1.2", 2169 | "phpunit/php-timer": "^1.0.6", 2170 | "phpunit/phpunit-mock-objects": "^4.0", 2171 | "sebastian/comparator": "^2.0", 2172 | "sebastian/diff": "^1.4.3 || ^2.0", 2173 | "sebastian/environment": "^3.0.2", 2174 | "sebastian/exporter": "^3.1", 2175 | "sebastian/global-state": "^1.1 || ^2.0", 2176 | "sebastian/object-enumerator": "^3.0.2", 2177 | "sebastian/resource-operations": "^1.0", 2178 | "sebastian/version": "^2.0" 2179 | }, 2180 | "conflict": { 2181 | "phpdocumentor/reflection-docblock": "3.0.2", 2182 | "phpunit/dbunit": "<3.0" 2183 | }, 2184 | "require-dev": { 2185 | "ext-pdo": "*" 2186 | }, 2187 | "suggest": { 2188 | "ext-xdebug": "*", 2189 | "phpunit/php-invoker": "^1.1" 2190 | }, 2191 | "bin": [ 2192 | "phpunit" 2193 | ], 2194 | "type": "library", 2195 | "extra": { 2196 | "branch-alias": { 2197 | "dev-master": "6.2.x-dev" 2198 | } 2199 | }, 2200 | "autoload": { 2201 | "classmap": [ 2202 | "src/" 2203 | ] 2204 | }, 2205 | "notification-url": "https://packagist.org/downloads/", 2206 | "license": [ 2207 | "BSD-3-Clause" 2208 | ], 2209 | "authors": [ 2210 | { 2211 | "name": "Sebastian Bergmann", 2212 | "email": "sebastian@phpunit.de", 2213 | "role": "lead" 2214 | } 2215 | ], 2216 | "description": "The PHP Unit Testing framework.", 2217 | "homepage": "https://phpunit.de/", 2218 | "keywords": [ 2219 | "phpunit", 2220 | "testing", 2221 | "xunit" 2222 | ], 2223 | "time": "2017-07-03T15:54:24+00:00" 2224 | }, 2225 | { 2226 | "name": "phpunit/phpunit-mock-objects", 2227 | "version": "4.0.2", 2228 | "source": { 2229 | "type": "git", 2230 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 2231 | "reference": "d8833b396dce9162bb2eb5d59aee5a3ab3cfa5b4" 2232 | }, 2233 | "dist": { 2234 | "type": "zip", 2235 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/d8833b396dce9162bb2eb5d59aee5a3ab3cfa5b4", 2236 | "reference": "d8833b396dce9162bb2eb5d59aee5a3ab3cfa5b4", 2237 | "shasum": "" 2238 | }, 2239 | "require": { 2240 | "doctrine/instantiator": "^1.0.2", 2241 | "php": "^7.0", 2242 | "phpunit/php-text-template": "^1.2", 2243 | "sebastian/exporter": "^3.0" 2244 | }, 2245 | "conflict": { 2246 | "phpunit/phpunit": "<6.0" 2247 | }, 2248 | "require-dev": { 2249 | "phpunit/phpunit": "^6.0" 2250 | }, 2251 | "suggest": { 2252 | "ext-soap": "*" 2253 | }, 2254 | "type": "library", 2255 | "extra": { 2256 | "branch-alias": { 2257 | "dev-master": "4.0.x-dev" 2258 | } 2259 | }, 2260 | "autoload": { 2261 | "classmap": [ 2262 | "src/" 2263 | ] 2264 | }, 2265 | "notification-url": "https://packagist.org/downloads/", 2266 | "license": [ 2267 | "BSD-3-Clause" 2268 | ], 2269 | "authors": [ 2270 | { 2271 | "name": "Sebastian Bergmann", 2272 | "email": "sb@sebastian-bergmann.de", 2273 | "role": "lead" 2274 | } 2275 | ], 2276 | "description": "Mock Object library for PHPUnit", 2277 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 2278 | "keywords": [ 2279 | "mock", 2280 | "xunit" 2281 | ], 2282 | "time": "2017-06-30T08:15:21+00:00" 2283 | }, 2284 | { 2285 | "name": "sebastian/code-unit-reverse-lookup", 2286 | "version": "1.0.1", 2287 | "source": { 2288 | "type": "git", 2289 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2290 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 2291 | }, 2292 | "dist": { 2293 | "type": "zip", 2294 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2295 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 2296 | "shasum": "" 2297 | }, 2298 | "require": { 2299 | "php": "^5.6 || ^7.0" 2300 | }, 2301 | "require-dev": { 2302 | "phpunit/phpunit": "^5.7 || ^6.0" 2303 | }, 2304 | "type": "library", 2305 | "extra": { 2306 | "branch-alias": { 2307 | "dev-master": "1.0.x-dev" 2308 | } 2309 | }, 2310 | "autoload": { 2311 | "classmap": [ 2312 | "src/" 2313 | ] 2314 | }, 2315 | "notification-url": "https://packagist.org/downloads/", 2316 | "license": [ 2317 | "BSD-3-Clause" 2318 | ], 2319 | "authors": [ 2320 | { 2321 | "name": "Sebastian Bergmann", 2322 | "email": "sebastian@phpunit.de" 2323 | } 2324 | ], 2325 | "description": "Looks up which function or method a line of code belongs to", 2326 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2327 | "time": "2017-03-04T06:30:41+00:00" 2328 | }, 2329 | { 2330 | "name": "sebastian/comparator", 2331 | "version": "2.0.0", 2332 | "source": { 2333 | "type": "git", 2334 | "url": "https://github.com/sebastianbergmann/comparator.git", 2335 | "reference": "20f84f468cb67efee293246e6a09619b891f55f0" 2336 | }, 2337 | "dist": { 2338 | "type": "zip", 2339 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/20f84f468cb67efee293246e6a09619b891f55f0", 2340 | "reference": "20f84f468cb67efee293246e6a09619b891f55f0", 2341 | "shasum": "" 2342 | }, 2343 | "require": { 2344 | "php": "^7.0", 2345 | "sebastian/diff": "^1.2", 2346 | "sebastian/exporter": "^3.0" 2347 | }, 2348 | "require-dev": { 2349 | "phpunit/phpunit": "^6.0" 2350 | }, 2351 | "type": "library", 2352 | "extra": { 2353 | "branch-alias": { 2354 | "dev-master": "2.0.x-dev" 2355 | } 2356 | }, 2357 | "autoload": { 2358 | "classmap": [ 2359 | "src/" 2360 | ] 2361 | }, 2362 | "notification-url": "https://packagist.org/downloads/", 2363 | "license": [ 2364 | "BSD-3-Clause" 2365 | ], 2366 | "authors": [ 2367 | { 2368 | "name": "Jeff Welch", 2369 | "email": "whatthejeff@gmail.com" 2370 | }, 2371 | { 2372 | "name": "Volker Dusch", 2373 | "email": "github@wallbash.com" 2374 | }, 2375 | { 2376 | "name": "Bernhard Schussek", 2377 | "email": "bschussek@2bepublished.at" 2378 | }, 2379 | { 2380 | "name": "Sebastian Bergmann", 2381 | "email": "sebastian@phpunit.de" 2382 | } 2383 | ], 2384 | "description": "Provides the functionality to compare PHP values for equality", 2385 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 2386 | "keywords": [ 2387 | "comparator", 2388 | "compare", 2389 | "equality" 2390 | ], 2391 | "time": "2017-03-03T06:26:08+00:00" 2392 | }, 2393 | { 2394 | "name": "sebastian/diff", 2395 | "version": "1.4.3", 2396 | "source": { 2397 | "type": "git", 2398 | "url": "https://github.com/sebastianbergmann/diff.git", 2399 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" 2400 | }, 2401 | "dist": { 2402 | "type": "zip", 2403 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", 2404 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", 2405 | "shasum": "" 2406 | }, 2407 | "require": { 2408 | "php": "^5.3.3 || ^7.0" 2409 | }, 2410 | "require-dev": { 2411 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 2412 | }, 2413 | "type": "library", 2414 | "extra": { 2415 | "branch-alias": { 2416 | "dev-master": "1.4-dev" 2417 | } 2418 | }, 2419 | "autoload": { 2420 | "classmap": [ 2421 | "src/" 2422 | ] 2423 | }, 2424 | "notification-url": "https://packagist.org/downloads/", 2425 | "license": [ 2426 | "BSD-3-Clause" 2427 | ], 2428 | "authors": [ 2429 | { 2430 | "name": "Kore Nordmann", 2431 | "email": "mail@kore-nordmann.de" 2432 | }, 2433 | { 2434 | "name": "Sebastian Bergmann", 2435 | "email": "sebastian@phpunit.de" 2436 | } 2437 | ], 2438 | "description": "Diff implementation", 2439 | "homepage": "https://github.com/sebastianbergmann/diff", 2440 | "keywords": [ 2441 | "diff" 2442 | ], 2443 | "time": "2017-05-22T07:24:03+00:00" 2444 | }, 2445 | { 2446 | "name": "sebastian/environment", 2447 | "version": "3.1.0", 2448 | "source": { 2449 | "type": "git", 2450 | "url": "https://github.com/sebastianbergmann/environment.git", 2451 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" 2452 | }, 2453 | "dist": { 2454 | "type": "zip", 2455 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 2456 | "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", 2457 | "shasum": "" 2458 | }, 2459 | "require": { 2460 | "php": "^7.0" 2461 | }, 2462 | "require-dev": { 2463 | "phpunit/phpunit": "^6.1" 2464 | }, 2465 | "type": "library", 2466 | "extra": { 2467 | "branch-alias": { 2468 | "dev-master": "3.1.x-dev" 2469 | } 2470 | }, 2471 | "autoload": { 2472 | "classmap": [ 2473 | "src/" 2474 | ] 2475 | }, 2476 | "notification-url": "https://packagist.org/downloads/", 2477 | "license": [ 2478 | "BSD-3-Clause" 2479 | ], 2480 | "authors": [ 2481 | { 2482 | "name": "Sebastian Bergmann", 2483 | "email": "sebastian@phpunit.de" 2484 | } 2485 | ], 2486 | "description": "Provides functionality to handle HHVM/PHP environments", 2487 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2488 | "keywords": [ 2489 | "Xdebug", 2490 | "environment", 2491 | "hhvm" 2492 | ], 2493 | "time": "2017-07-01T08:51:00+00:00" 2494 | }, 2495 | { 2496 | "name": "sebastian/exporter", 2497 | "version": "3.1.0", 2498 | "source": { 2499 | "type": "git", 2500 | "url": "https://github.com/sebastianbergmann/exporter.git", 2501 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" 2502 | }, 2503 | "dist": { 2504 | "type": "zip", 2505 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", 2506 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", 2507 | "shasum": "" 2508 | }, 2509 | "require": { 2510 | "php": "^7.0", 2511 | "sebastian/recursion-context": "^3.0" 2512 | }, 2513 | "require-dev": { 2514 | "ext-mbstring": "*", 2515 | "phpunit/phpunit": "^6.0" 2516 | }, 2517 | "type": "library", 2518 | "extra": { 2519 | "branch-alias": { 2520 | "dev-master": "3.1.x-dev" 2521 | } 2522 | }, 2523 | "autoload": { 2524 | "classmap": [ 2525 | "src/" 2526 | ] 2527 | }, 2528 | "notification-url": "https://packagist.org/downloads/", 2529 | "license": [ 2530 | "BSD-3-Clause" 2531 | ], 2532 | "authors": [ 2533 | { 2534 | "name": "Jeff Welch", 2535 | "email": "whatthejeff@gmail.com" 2536 | }, 2537 | { 2538 | "name": "Volker Dusch", 2539 | "email": "github@wallbash.com" 2540 | }, 2541 | { 2542 | "name": "Bernhard Schussek", 2543 | "email": "bschussek@2bepublished.at" 2544 | }, 2545 | { 2546 | "name": "Sebastian Bergmann", 2547 | "email": "sebastian@phpunit.de" 2548 | }, 2549 | { 2550 | "name": "Adam Harvey", 2551 | "email": "aharvey@php.net" 2552 | } 2553 | ], 2554 | "description": "Provides the functionality to export PHP variables for visualization", 2555 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 2556 | "keywords": [ 2557 | "export", 2558 | "exporter" 2559 | ], 2560 | "time": "2017-04-03T13:19:02+00:00" 2561 | }, 2562 | { 2563 | "name": "sebastian/global-state", 2564 | "version": "2.0.0", 2565 | "source": { 2566 | "type": "git", 2567 | "url": "https://github.com/sebastianbergmann/global-state.git", 2568 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 2569 | }, 2570 | "dist": { 2571 | "type": "zip", 2572 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2573 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 2574 | "shasum": "" 2575 | }, 2576 | "require": { 2577 | "php": "^7.0" 2578 | }, 2579 | "require-dev": { 2580 | "phpunit/phpunit": "^6.0" 2581 | }, 2582 | "suggest": { 2583 | "ext-uopz": "*" 2584 | }, 2585 | "type": "library", 2586 | "extra": { 2587 | "branch-alias": { 2588 | "dev-master": "2.0-dev" 2589 | } 2590 | }, 2591 | "autoload": { 2592 | "classmap": [ 2593 | "src/" 2594 | ] 2595 | }, 2596 | "notification-url": "https://packagist.org/downloads/", 2597 | "license": [ 2598 | "BSD-3-Clause" 2599 | ], 2600 | "authors": [ 2601 | { 2602 | "name": "Sebastian Bergmann", 2603 | "email": "sebastian@phpunit.de" 2604 | } 2605 | ], 2606 | "description": "Snapshotting of global state", 2607 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2608 | "keywords": [ 2609 | "global state" 2610 | ], 2611 | "time": "2017-04-27T15:39:26+00:00" 2612 | }, 2613 | { 2614 | "name": "sebastian/object-enumerator", 2615 | "version": "3.0.2", 2616 | "source": { 2617 | "type": "git", 2618 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2619 | "reference": "31dd3379d16446c5d86dec32ab1ad1f378581ad8" 2620 | }, 2621 | "dist": { 2622 | "type": "zip", 2623 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/31dd3379d16446c5d86dec32ab1ad1f378581ad8", 2624 | "reference": "31dd3379d16446c5d86dec32ab1ad1f378581ad8", 2625 | "shasum": "" 2626 | }, 2627 | "require": { 2628 | "php": "^7.0", 2629 | "sebastian/object-reflector": "^1.0", 2630 | "sebastian/recursion-context": "^3.0" 2631 | }, 2632 | "require-dev": { 2633 | "phpunit/phpunit": "^6.0" 2634 | }, 2635 | "type": "library", 2636 | "extra": { 2637 | "branch-alias": { 2638 | "dev-master": "3.0.x-dev" 2639 | } 2640 | }, 2641 | "autoload": { 2642 | "classmap": [ 2643 | "src/" 2644 | ] 2645 | }, 2646 | "notification-url": "https://packagist.org/downloads/", 2647 | "license": [ 2648 | "BSD-3-Clause" 2649 | ], 2650 | "authors": [ 2651 | { 2652 | "name": "Sebastian Bergmann", 2653 | "email": "sebastian@phpunit.de" 2654 | } 2655 | ], 2656 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2657 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2658 | "time": "2017-03-12T15:17:29+00:00" 2659 | }, 2660 | { 2661 | "name": "sebastian/object-reflector", 2662 | "version": "1.1.1", 2663 | "source": { 2664 | "type": "git", 2665 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2666 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 2667 | }, 2668 | "dist": { 2669 | "type": "zip", 2670 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 2671 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 2672 | "shasum": "" 2673 | }, 2674 | "require": { 2675 | "php": "^7.0" 2676 | }, 2677 | "require-dev": { 2678 | "phpunit/phpunit": "^6.0" 2679 | }, 2680 | "type": "library", 2681 | "extra": { 2682 | "branch-alias": { 2683 | "dev-master": "1.1-dev" 2684 | } 2685 | }, 2686 | "autoload": { 2687 | "classmap": [ 2688 | "src/" 2689 | ] 2690 | }, 2691 | "notification-url": "https://packagist.org/downloads/", 2692 | "license": [ 2693 | "BSD-3-Clause" 2694 | ], 2695 | "authors": [ 2696 | { 2697 | "name": "Sebastian Bergmann", 2698 | "email": "sebastian@phpunit.de" 2699 | } 2700 | ], 2701 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2702 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2703 | "time": "2017-03-29T09:07:27+00:00" 2704 | }, 2705 | { 2706 | "name": "sebastian/recursion-context", 2707 | "version": "3.0.0", 2708 | "source": { 2709 | "type": "git", 2710 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2711 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 2712 | }, 2713 | "dist": { 2714 | "type": "zip", 2715 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2716 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 2717 | "shasum": "" 2718 | }, 2719 | "require": { 2720 | "php": "^7.0" 2721 | }, 2722 | "require-dev": { 2723 | "phpunit/phpunit": "^6.0" 2724 | }, 2725 | "type": "library", 2726 | "extra": { 2727 | "branch-alias": { 2728 | "dev-master": "3.0.x-dev" 2729 | } 2730 | }, 2731 | "autoload": { 2732 | "classmap": [ 2733 | "src/" 2734 | ] 2735 | }, 2736 | "notification-url": "https://packagist.org/downloads/", 2737 | "license": [ 2738 | "BSD-3-Clause" 2739 | ], 2740 | "authors": [ 2741 | { 2742 | "name": "Jeff Welch", 2743 | "email": "whatthejeff@gmail.com" 2744 | }, 2745 | { 2746 | "name": "Sebastian Bergmann", 2747 | "email": "sebastian@phpunit.de" 2748 | }, 2749 | { 2750 | "name": "Adam Harvey", 2751 | "email": "aharvey@php.net" 2752 | } 2753 | ], 2754 | "description": "Provides functionality to recursively process PHP variables", 2755 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2756 | "time": "2017-03-03T06:23:57+00:00" 2757 | }, 2758 | { 2759 | "name": "sebastian/resource-operations", 2760 | "version": "1.0.0", 2761 | "source": { 2762 | "type": "git", 2763 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2764 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 2765 | }, 2766 | "dist": { 2767 | "type": "zip", 2768 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2769 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 2770 | "shasum": "" 2771 | }, 2772 | "require": { 2773 | "php": ">=5.6.0" 2774 | }, 2775 | "type": "library", 2776 | "extra": { 2777 | "branch-alias": { 2778 | "dev-master": "1.0.x-dev" 2779 | } 2780 | }, 2781 | "autoload": { 2782 | "classmap": [ 2783 | "src/" 2784 | ] 2785 | }, 2786 | "notification-url": "https://packagist.org/downloads/", 2787 | "license": [ 2788 | "BSD-3-Clause" 2789 | ], 2790 | "authors": [ 2791 | { 2792 | "name": "Sebastian Bergmann", 2793 | "email": "sebastian@phpunit.de" 2794 | } 2795 | ], 2796 | "description": "Provides a list of PHP built-in functions that operate on resources", 2797 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2798 | "time": "2015-07-28T20:34:47+00:00" 2799 | }, 2800 | { 2801 | "name": "sebastian/version", 2802 | "version": "2.0.1", 2803 | "source": { 2804 | "type": "git", 2805 | "url": "https://github.com/sebastianbergmann/version.git", 2806 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2807 | }, 2808 | "dist": { 2809 | "type": "zip", 2810 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2811 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2812 | "shasum": "" 2813 | }, 2814 | "require": { 2815 | "php": ">=5.6" 2816 | }, 2817 | "type": "library", 2818 | "extra": { 2819 | "branch-alias": { 2820 | "dev-master": "2.0.x-dev" 2821 | } 2822 | }, 2823 | "autoload": { 2824 | "classmap": [ 2825 | "src/" 2826 | ] 2827 | }, 2828 | "notification-url": "https://packagist.org/downloads/", 2829 | "license": [ 2830 | "BSD-3-Clause" 2831 | ], 2832 | "authors": [ 2833 | { 2834 | "name": "Sebastian Bergmann", 2835 | "email": "sebastian@phpunit.de", 2836 | "role": "lead" 2837 | } 2838 | ], 2839 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2840 | "homepage": "https://github.com/sebastianbergmann/version", 2841 | "time": "2016-10-03T07:35:21+00:00" 2842 | }, 2843 | { 2844 | "name": "seld/cli-prompt", 2845 | "version": "1.0.3", 2846 | "source": { 2847 | "type": "git", 2848 | "url": "https://github.com/Seldaek/cli-prompt.git", 2849 | "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd" 2850 | }, 2851 | "dist": { 2852 | "type": "zip", 2853 | "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd", 2854 | "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd", 2855 | "shasum": "" 2856 | }, 2857 | "require": { 2858 | "php": ">=5.3" 2859 | }, 2860 | "type": "library", 2861 | "extra": { 2862 | "branch-alias": { 2863 | "dev-master": "1.x-dev" 2864 | } 2865 | }, 2866 | "autoload": { 2867 | "psr-4": { 2868 | "Seld\\CliPrompt\\": "src/" 2869 | } 2870 | }, 2871 | "notification-url": "https://packagist.org/downloads/", 2872 | "license": [ 2873 | "MIT" 2874 | ], 2875 | "authors": [ 2876 | { 2877 | "name": "Jordi Boggiano", 2878 | "email": "j.boggiano@seld.be" 2879 | } 2880 | ], 2881 | "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", 2882 | "keywords": [ 2883 | "cli", 2884 | "console", 2885 | "hidden", 2886 | "input", 2887 | "prompt" 2888 | ], 2889 | "time": "2017-03-18T11:32:45+00:00" 2890 | }, 2891 | { 2892 | "name": "seld/jsonlint", 2893 | "version": "1.6.1", 2894 | "source": { 2895 | "type": "git", 2896 | "url": "https://github.com/Seldaek/jsonlint.git", 2897 | "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77" 2898 | }, 2899 | "dist": { 2900 | "type": "zip", 2901 | "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", 2902 | "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77", 2903 | "shasum": "" 2904 | }, 2905 | "require": { 2906 | "php": "^5.3 || ^7.0" 2907 | }, 2908 | "require-dev": { 2909 | "phpunit/phpunit": "^4.5" 2910 | }, 2911 | "bin": [ 2912 | "bin/jsonlint" 2913 | ], 2914 | "type": "library", 2915 | "autoload": { 2916 | "psr-4": { 2917 | "Seld\\JsonLint\\": "src/Seld/JsonLint/" 2918 | } 2919 | }, 2920 | "notification-url": "https://packagist.org/downloads/", 2921 | "license": [ 2922 | "MIT" 2923 | ], 2924 | "authors": [ 2925 | { 2926 | "name": "Jordi Boggiano", 2927 | "email": "j.boggiano@seld.be", 2928 | "homepage": "http://seld.be" 2929 | } 2930 | ], 2931 | "description": "JSON Linter", 2932 | "keywords": [ 2933 | "json", 2934 | "linter", 2935 | "parser", 2936 | "validator" 2937 | ], 2938 | "time": "2017-06-18T15:11:04+00:00" 2939 | }, 2940 | { 2941 | "name": "seld/phar-utils", 2942 | "version": "1.0.1", 2943 | "source": { 2944 | "type": "git", 2945 | "url": "https://github.com/Seldaek/phar-utils.git", 2946 | "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" 2947 | }, 2948 | "dist": { 2949 | "type": "zip", 2950 | "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", 2951 | "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", 2952 | "shasum": "" 2953 | }, 2954 | "require": { 2955 | "php": ">=5.3" 2956 | }, 2957 | "type": "library", 2958 | "extra": { 2959 | "branch-alias": { 2960 | "dev-master": "1.x-dev" 2961 | } 2962 | }, 2963 | "autoload": { 2964 | "psr-4": { 2965 | "Seld\\PharUtils\\": "src/" 2966 | } 2967 | }, 2968 | "notification-url": "https://packagist.org/downloads/", 2969 | "license": [ 2970 | "MIT" 2971 | ], 2972 | "authors": [ 2973 | { 2974 | "name": "Jordi Boggiano", 2975 | "email": "j.boggiano@seld.be" 2976 | } 2977 | ], 2978 | "description": "PHAR file format utilities, for when PHP phars you up", 2979 | "keywords": [ 2980 | "phra" 2981 | ], 2982 | "time": "2015-10-13T18:44:15+00:00" 2983 | }, 2984 | { 2985 | "name": "symfony/filesystem", 2986 | "version": "v3.3.3", 2987 | "source": { 2988 | "type": "git", 2989 | "url": "https://github.com/symfony/filesystem.git", 2990 | "reference": "311fa718389efbd8b627c272b9324a62437018cc" 2991 | }, 2992 | "dist": { 2993 | "type": "zip", 2994 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/311fa718389efbd8b627c272b9324a62437018cc", 2995 | "reference": "311fa718389efbd8b627c272b9324a62437018cc", 2996 | "shasum": "" 2997 | }, 2998 | "require": { 2999 | "php": ">=5.5.9" 3000 | }, 3001 | "type": "library", 3002 | "extra": { 3003 | "branch-alias": { 3004 | "dev-master": "3.3-dev" 3005 | } 3006 | }, 3007 | "autoload": { 3008 | "psr-4": { 3009 | "Symfony\\Component\\Filesystem\\": "" 3010 | }, 3011 | "exclude-from-classmap": [ 3012 | "/Tests/" 3013 | ] 3014 | }, 3015 | "notification-url": "https://packagist.org/downloads/", 3016 | "license": [ 3017 | "MIT" 3018 | ], 3019 | "authors": [ 3020 | { 3021 | "name": "Fabien Potencier", 3022 | "email": "fabien@symfony.com" 3023 | }, 3024 | { 3025 | "name": "Symfony Community", 3026 | "homepage": "https://symfony.com/contributors" 3027 | } 3028 | ], 3029 | "description": "Symfony Filesystem Component", 3030 | "homepage": "https://symfony.com", 3031 | "time": "2017-06-24T09:29:48+00:00" 3032 | }, 3033 | { 3034 | "name": "symfony/var-dumper", 3035 | "version": "v3.3.3", 3036 | "source": { 3037 | "type": "git", 3038 | "url": "https://github.com/symfony/var-dumper.git", 3039 | "reference": "05b5b7f1e26fe2f83827e7daae16191e6f742b8f" 3040 | }, 3041 | "dist": { 3042 | "type": "zip", 3043 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/05b5b7f1e26fe2f83827e7daae16191e6f742b8f", 3044 | "reference": "05b5b7f1e26fe2f83827e7daae16191e6f742b8f", 3045 | "shasum": "" 3046 | }, 3047 | "require": { 3048 | "php": ">=5.5.9", 3049 | "symfony/polyfill-mbstring": "~1.0" 3050 | }, 3051 | "conflict": { 3052 | "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0" 3053 | }, 3054 | "require-dev": { 3055 | "ext-iconv": "*", 3056 | "twig/twig": "~1.34|~2.4" 3057 | }, 3058 | "suggest": { 3059 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 3060 | "ext-symfony_debug": "" 3061 | }, 3062 | "type": "library", 3063 | "extra": { 3064 | "branch-alias": { 3065 | "dev-master": "3.3-dev" 3066 | } 3067 | }, 3068 | "autoload": { 3069 | "files": [ 3070 | "Resources/functions/dump.php" 3071 | ], 3072 | "psr-4": { 3073 | "Symfony\\Component\\VarDumper\\": "" 3074 | }, 3075 | "exclude-from-classmap": [ 3076 | "/Tests/" 3077 | ] 3078 | }, 3079 | "notification-url": "https://packagist.org/downloads/", 3080 | "license": [ 3081 | "MIT" 3082 | ], 3083 | "authors": [ 3084 | { 3085 | "name": "Nicolas Grekas", 3086 | "email": "p@tchwork.com" 3087 | }, 3088 | { 3089 | "name": "Symfony Community", 3090 | "homepage": "https://symfony.com/contributors" 3091 | } 3092 | ], 3093 | "description": "Symfony mechanism for exploring and dumping PHP variables", 3094 | "homepage": "https://symfony.com", 3095 | "keywords": [ 3096 | "debug", 3097 | "dump" 3098 | ], 3099 | "time": "2017-06-24T09:29:48+00:00" 3100 | }, 3101 | { 3102 | "name": "theseer/tokenizer", 3103 | "version": "1.1.0", 3104 | "source": { 3105 | "type": "git", 3106 | "url": "https://github.com/theseer/tokenizer.git", 3107 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" 3108 | }, 3109 | "dist": { 3110 | "type": "zip", 3111 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", 3112 | "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", 3113 | "shasum": "" 3114 | }, 3115 | "require": { 3116 | "ext-dom": "*", 3117 | "ext-tokenizer": "*", 3118 | "ext-xmlwriter": "*", 3119 | "php": "^7.0" 3120 | }, 3121 | "type": "library", 3122 | "autoload": { 3123 | "classmap": [ 3124 | "src/" 3125 | ] 3126 | }, 3127 | "notification-url": "https://packagist.org/downloads/", 3128 | "license": [ 3129 | "BSD-3-Clause" 3130 | ], 3131 | "authors": [ 3132 | { 3133 | "name": "Arne Blankerts", 3134 | "email": "arne@blankerts.de", 3135 | "role": "Developer" 3136 | } 3137 | ], 3138 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3139 | "time": "2017-04-07T12:08:54+00:00" 3140 | }, 3141 | { 3142 | "name": "webmozart/assert", 3143 | "version": "1.2.0", 3144 | "source": { 3145 | "type": "git", 3146 | "url": "https://github.com/webmozart/assert.git", 3147 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" 3148 | }, 3149 | "dist": { 3150 | "type": "zip", 3151 | "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", 3152 | "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", 3153 | "shasum": "" 3154 | }, 3155 | "require": { 3156 | "php": "^5.3.3 || ^7.0" 3157 | }, 3158 | "require-dev": { 3159 | "phpunit/phpunit": "^4.6", 3160 | "sebastian/version": "^1.0.1" 3161 | }, 3162 | "type": "library", 3163 | "extra": { 3164 | "branch-alias": { 3165 | "dev-master": "1.3-dev" 3166 | } 3167 | }, 3168 | "autoload": { 3169 | "psr-4": { 3170 | "Webmozart\\Assert\\": "src/" 3171 | } 3172 | }, 3173 | "notification-url": "https://packagist.org/downloads/", 3174 | "license": [ 3175 | "MIT" 3176 | ], 3177 | "authors": [ 3178 | { 3179 | "name": "Bernhard Schussek", 3180 | "email": "bschussek@gmail.com" 3181 | } 3182 | ], 3183 | "description": "Assertions to validate method input/output with nice error messages.", 3184 | "keywords": [ 3185 | "assert", 3186 | "check", 3187 | "validate" 3188 | ], 3189 | "time": "2016-11-23T20:04:58+00:00" 3190 | } 3191 | ], 3192 | "aliases": [], 3193 | "minimum-stability": "stable", 3194 | "stability-flags": [], 3195 | "prefer-stable": false, 3196 | "prefer-lowest": false, 3197 | "platform": { 3198 | "php": ">=7.1.0" 3199 | }, 3200 | "platform-dev": [], 3201 | "platform-overrides": { 3202 | "php": "7.1.6" 3203 | } 3204 | } 3205 | --------------------------------------------------------------------------------