├── .gitignore ├── scripts ├── keygen.sh ├── trust.sh ├── ca.sh ├── domain.sh └── sign.sh ├── lh ├── example.env ├── src ├── TrustTheRootSSLCertificate.php ├── Config.php ├── CreatorCommand.php └── Init.php ├── .travis.yml ├── tests ├── TrustTheRootSSLCertificateTest.php ├── CreatorCommandTest.php ├── ConfigTest.php └── InitTest.php ├── .github └── workflows │ └── php.yml ├── composer.json ├── phpunit.xml ├── LICENSE ├── .circleci └── config.yml ├── README.md ├── lhttps.svg └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /deply/ 3 | /.readme 4 | /.env 5 | /cert/cnf/ 6 | /cert/config/ 7 | /cert/csr/ 8 | /cert/keys/ 9 | /cert/logs/ 10 | /cert/live/ 11 | *./@eaDir 12 | **/@eaDir 13 | .srl 14 | */.srl 15 | **/.srl 16 | -------------------------------------------------------------------------------- /scripts/keygen.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | FILEPATH=$1 3 | # Generate the private key. 4 | keygen () { 5 | openssl genrsa -des3 -passout pass:none -out $FILEPATH/keys/root.key 2048 2>> $FILEPATH/logs/log.key; 6 | } 7 | 8 | keygen $1 -------------------------------------------------------------------------------- /scripts/trust.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | FILEPATH=$1 3 | 4 | trust() { 5 | sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain $FILEPATH/csr/root.pem 2>> $FILEPATH/logs/log.trust 6 | } 7 | 8 | trust $1 9 | -------------------------------------------------------------------------------- /scripts/ca.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | FILEPATH=$1 3 | ca () { 4 | # Create root CA from private key. 5 | openssl req -x509 -new -nodes -passin pass:none -key $FILEPATH/keys/root.key -sha256 -days 1024 -out $FILEPATH/csr/root.pem -config $FILEPATH/cnf/openssl.cnf 2>> $FILEPATH/logs/log.CA; 6 | } 7 | 8 | ca $1 -------------------------------------------------------------------------------- /lh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env php 2 | Local https Version 1.0"); 8 | $app->add(new CreatorCommand); 9 | $app->run(); 10 | 11 | 12 | -------------------------------------------------------------------------------- /scripts/domain.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | FILEPATH=$1 3 | 4 | domain () { 5 | DOMAINNAME=$2 6 | # Create domain certificate 7 | openssl req -new -sha256 -nodes -out $FILEPATH/csr/$DOMAINNAME.csr -newkey rsa:2048 -keyout $FILEPATH/live/$DOMAINNAME.ssl.key -config $FILEPATH/cnf/openssl.cnf 2>> $FILEPATH/logs/log.domain 8 | } 9 | 10 | domain $1 $2 -------------------------------------------------------------------------------- /example.env: -------------------------------------------------------------------------------- 1 | # .env 2 | #Subject information 3 | R="[req]" 4 | D="default_bits = 2048" 5 | P="prompt = no" 6 | DM="default_md = sha256" 7 | DN="distinguished_name = dn" 8 | D2="[dn]" 9 | COUNTRY=C=LH 10 | STATE="ST=LC" 11 | LOCALITY=L="Local Citry" 12 | ORGANIZATION=O=LOCALHTTPS 13 | ORGANIZATION_UNIT=OU="localhttps" 14 | EMAILADDRESS=emailAddress=local@https.local 15 | COMMONNAME=CN=com.local.https 16 | 17 | -------------------------------------------------------------------------------- /scripts/sign.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | FILEPATH=$1 3 | 4 | sign() { 5 | DOMAINNAME=$2 6 | # Certificate sign request 7 | openssl x509 -req -in $FILEPATH/csr/$DOMAINNAME.csr -CA $FILEPATH/csr/root.pem -CAkey $FILEPATH/keys/root.key -CAcreateserial -out $FILEPATH/live/$DOMAINNAME.ssl.crt -days 500 -sha256 -extfile $FILEPATH/cnf/v3.ext -passin pass:none 2>>$FILEPATH/logs/log.sign 8 | } 9 | 10 | sign $1 $2 -------------------------------------------------------------------------------- /src/TrustTheRootSSLCertificate.php: -------------------------------------------------------------------------------- 1 | error = $error; 15 | } 16 | 17 | public function getError() 18 | { 19 | return $this->error; 20 | } 21 | } -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | sudo: required 4 | addons: 5 | apt: 6 | packages: 7 | # - nginx 8 | php: 9 | - 7.1 10 | - 7.2 11 | - 7.3 12 | env: 13 | global: 14 | - COMPOSER_NO_INTERACTION=1 15 | 16 | matrix: 17 | allow_failures: 18 | # - nightly 19 | install: 20 | - composer install --prefer-dist --no-suggest 21 | 22 | before_script: 23 | - cp ./example.env ./.env 24 | 25 | script: 26 | - ./vendor/bin/phpunit 27 | - php lh create madeny.dev --a 28 | - cat ./cert/logs/log.sign -------------------------------------------------------------------------------- /tests/TrustTheRootSSLCertificateTest.php: -------------------------------------------------------------------------------- 1 | assertEquals(1, $trusted->getError()); 19 | } 20 | } -------------------------------------------------------------------------------- /.github/workflows/php.yml: -------------------------------------------------------------------------------- 1 | name: PHP 7.1 7.2 7.3 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v1 12 | 13 | - name: Validate composer.json and composer.lock 14 | run: composer validate 15 | 16 | - name: Install dependencies 17 | run: composer install --prefer-dist --no-progress --no-suggest 18 | 19 | # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" 20 | # Docs: https://getcomposer.org/doc/articles/scripts.md 21 | 22 | # - name: Run test suite 23 | # run: composer run-script test 24 | -------------------------------------------------------------------------------- /tests/CreatorCommandTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf(CreatorCommand::class, (new CreatorCommand())); 12 | } 13 | 14 | 15 | /** @test */ 16 | public function it_can_run_execute_method () { 17 | 18 | $path = Config::path(); 19 | 20 | exec("php lh create madeny.dev", $output, $error); 21 | 22 | $this->assertEquals(0, $error); 23 | 24 | } 25 | 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "madeny/lhttps", 3 | "description": "Create https for local development environment or localhost.", 4 | "keywords": ["https-certificate", "localhost", "root-certificate", "root-ca", "local-development", "local-dev"], 5 | "license": "MIT", 6 | "type": "library", 7 | "authors": [ 8 | { 9 | "name": "Madeny Diawara", 10 | "email": "me@madeny.me" 11 | } 12 | ], 13 | "autoload": { 14 | "psr-4": { 15 | "Madeny\\lhttps\\": "src/" 16 | } 17 | }, 18 | 19 | "autoload-dev": { 20 | "psr-4": { 21 | "Madeny\\lhttps\\Test\\": "tests" 22 | } 23 | }, 24 | "minimum-stability": "dev", 25 | "prefer-stable": true, 26 | 27 | "require-dev": { 28 | "phpunit/phpunit": "^7" 29 | }, 30 | "require": { 31 | "ext-dom": "*", 32 | "ext-mbstring": "*", 33 | "symfony/console": "^4", 34 | "symfony/dotenv": "^4" 35 | }, 36 | "bin": ["lh"] 37 | } 38 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests 14 | 15 | 16 | 17 | 18 | 19 | src/ 20 | 21 | cert/logs/report.html 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /tests/ConfigTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf(Config::class, (new Config("madeny.dev"))); 12 | } 13 | 14 | /** @test */ 15 | public function it_can_generate_v3 () { 16 | 17 | $path = Config::path(); 18 | 19 | $init = new Init("madeny.dev"); 20 | 21 | $v3 = new Config($path, "madeny.test"); 22 | 23 | $this->assertEquals(1, file_exists($path."/cnf/v3.ext")); 24 | 25 | } 26 | 27 | 28 | /** @test */ 29 | function it_can_generate_openssl_config() 30 | { 31 | 32 | $path = Config::path(); 33 | 34 | $init = new Config($path, "madeny.dev"); 35 | 36 | $this->assertEquals(1, file_exists($path."/cnf/openssl.cnf")); 37 | 38 | } 39 | 40 | 41 | /** @test */ 42 | function it_can_return_a_path() 43 | { 44 | 45 | $this->assertEquals(1, file_exists(Config::path())); 46 | 47 | } 48 | 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 @madeny 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 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, 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 THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # PHP CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-php/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | - image: circleci/php:7.1-browsers 10 | - image: circleci/php:7.2-browsers 11 | - image: circleci/php:7.3-browsers 12 | 13 | # Specify service dependencies here if necessary 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/mysql:9.4 16 | 17 | working_directory: ~/repo 18 | 19 | steps: 20 | - checkout 21 | - run: sudo composer self-update 22 | 23 | # Download and cache dependencies 24 | - restore_cache: 25 | keys: 26 | - v1-dependencies-{{ checksum "composer.json" }} 27 | # fallback to using the latest cache if no exact match is found 28 | - v1-dependencies- 29 | 30 | - run: composer install -n --prefer-dist 31 | 32 | 33 | - save_cache: 34 | paths: 35 | - ./vendor 36 | key: v1-dependencies-{{ checksum "composer.json" }} 37 | 38 | # run tests! 39 | - run: cp ./example.env ./.env 40 | - run: composer dump-autoload -o 41 | - run: php lh create madeny.dev --a 42 | - run: ./vendor/bin/phpunit 43 | - run: cat ./cert/logs/log.sign 44 | -------------------------------------------------------------------------------- /src/Config.php: -------------------------------------------------------------------------------- 1 | path(); 10 | $this->v3($path, $domain); 11 | $this->openssl($path); 12 | 13 | } 14 | 15 | private function v3($path, $domain) 16 | { 17 | $v3 = [ 18 | 'authorityKeyIdentifier=keyid,issuer', 19 | 'basicConstraints=CA:FALSE', 20 | 'keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment', 21 | 'subjectAltName = @alt_names', 22 | "[alt_names]", 23 | "DNS.1 = {$domain}" 24 | ]; 25 | 26 | $str = implode("\n", $v3); 27 | file_put_contents($path.'/cnf/v3.ext', $str); 28 | 29 | return $str; 30 | 31 | } 32 | 33 | private function openssl($path) 34 | { 35 | $dotenv = new Dotenv(); 36 | $dotenv->load(realpath(__DIR__.'/../.env')); 37 | 38 | $arr = [ 39 | $_ENV['R'], 40 | $_ENV['D'], 41 | $_ENV['P'], 42 | $_ENV['DM'], 43 | $_ENV['DN'], 44 | $_ENV['D2'], 45 | $_ENV['COUNTRY'], 46 | $_ENV['STATE'], 47 | $_ENV['LOCALITY'], 48 | $_ENV['ORGANIZATION'], 49 | $_ENV['ORGANIZATION_UNIT'], 50 | $_ENV['EMAILADDRESS'], 51 | $_ENV['COMMONNAME']]; 52 | 53 | $str = implode("\n", $arr); 54 | file_put_contents($path.'/cnf/openssl.cnf', $str); 55 | return $str; 56 | } 57 | 58 | public static function path() 59 | { 60 | $dir = __DIR__.'/../cert'; 61 | if (!file_exists($dir)) { 62 | mkdir($dir); 63 | } 64 | return $dir; 65 | } 66 | 67 | } 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/CreatorCommand.php: -------------------------------------------------------------------------------- 1 | setName('create') 19 | ->addArgument("domain", InputArgument::REQUIRED, 'Add a custom domain name defualt domain is localhost') 20 | ->setDescription('Creates a new certificate.') 21 | ->setHelp('This command allows you to create a root certificate...'); 22 | 23 | $this 24 | ->addOption( 25 | 'a', 26 | null, 27 | InputOption::VALUE_NONE, 28 | // 'This will add your root certificate on your OS trusted list?' 29 | 'Config your certificate for trust policy.' 30 | ); 31 | 32 | 33 | } 34 | 35 | protected function execute(InputInterface $input, OutputInterface $output) 36 | { 37 | 38 | $domain = $input->getArgument('domain'); 39 | 40 | $init = new Init($domain); 41 | 42 | $sign = $init->make($domain); 43 | 44 | if ($sign == 0) { 45 | $output->writeln('Domain already exist!'); 46 | } else { 47 | $msg = exec("ls ".__DIR__."/../cert"); 48 | $output->writeln("Certificate created successfully!"); 49 | } 50 | 51 | return 0; 52 | 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/Init.php: -------------------------------------------------------------------------------- 1 | dirs as $value) { 18 | 19 | if (!file_exists($path."/".$value)) { 20 | while ($i < 6) { 21 | mkdir($path."/".$this->dirs[$i]); 22 | $i++; 23 | } 24 | return; 25 | } 26 | 27 | } 28 | } 29 | 30 | 31 | public function keygen($path) : Int 32 | { 33 | exec(__DIR__."/../scripts/keygen.sh $path", $output, $error); 34 | 35 | return $error; 36 | 37 | } 38 | 39 | 40 | public function ca($path) 41 | { 42 | exec(__DIR__."/../scripts/ca.sh $path", $output, $error); 43 | 44 | return $error; 45 | } 46 | 47 | public function domain($path, $domain) 48 | { 49 | exec(__DIR__."/../scripts/domain.sh $path $domain", $output, $error); 50 | 51 | return $error; 52 | } 53 | 54 | public function sign($path, $domain) 55 | { 56 | exec(__DIR__."/../scripts/sign.sh $path $domain", $output, $error); 57 | 58 | return $error; 59 | } 60 | 61 | 62 | public function make($domain) 63 | { 64 | $path = Config::path(); 65 | 66 | $rootkey = $path."/keys/root.key"; 67 | 68 | $ca = $path."/csr/root.pem"; 69 | 70 | $dom = $path."/live/$domain.ssl.key"; 71 | 72 | $sign = $path."/live/$domain.ssl.crt"; 73 | 74 | !file_exists($rootkey) ? $this->keygen($path) : 1; 75 | 76 | !file_exists($ca) ? $this->ca($path) : 1; 77 | 78 | !file_exists($dom) ? $this->domain($path, $domain) : 1; 79 | 80 | return !file_exists($sign) ? $this->sign($path, $domain) : 1; 81 | } 82 | 83 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ![Alt text](https://raw.githubusercontent.com/madeny/lhttps/master/lhttps.svg?sanitize=true) 3 | * Create a Certifcate Authority that can be use to issue certificate for domains. 4 | 5 | [![Actions Status](https://github.com/madeny/lhttps/workflows/PHP%207.1%207.2%207.3/badge.svg)](https://github.com/madeny/lhttps/actions) 6 | [![Build Status](https://travis-ci.org/madeny/lhttps.svg?branch=master)](https://travis-ci.org/madeny/lhttps) 7 | [![CircleCI](https://circleci.com/gh/madeny/lhttps.svg?style=svg)](https://circleci.com/gh/madeny/lhttps) 8 | [![BCH compliance](https://bettercodehub.com/edge/badge/madeny/lhttps?branch=dev)](https://bettercodehub.com/results/madeny/lhttps) 9 | 10 | --- 11 | Sometimes you need https on your local machine to test some functionality of your application, like payment system, but some of them require a valid https. Like stripe. And you can’t use localhost to request a certificate from issuer like Let’s Encrypt, so your option is to create a self signed certificate authority (CA). This tool make it easy. 12 | 13 | --- 14 | 15 | Just clone this repository by run this command: 16 | 17 | ``` 18 | git clone git@github.com:madeny/lhttps.git` 19 | from terminal and do the following: 20 | ``` 21 | 22 | * ```cd lhttps ``` 23 | * ```composer install ``` 24 | * ```php lh create domain.com ``` 25 | 26 | If you wish to add your rootCA.pem to your Mac OS trusted certificate, use the a flag ```--a``` right after domain.com like so: ```php lh create domain.com --a``` 27 | 28 | Your ```domain.com.ssl.key``` and ```domain.com.ssl.crt``` will be in ```cert/live``` directory 29 | 30 | Just update your nginx config with 31 | ``` 32 | ssl_certificate path/to/domain.com.ssl.crt; 33 | ssl_certificate_key path/to/domain.com.ssl.key; 34 | ``` 35 | 36 | 37 | *Right now only OSX and Ubuntu are support to create Certificate* 38 | *But only Mac OSX are support to automatically add your Root Certificate Authority (CA) to the Trusted list* 39 | 40 | ### Todo Next: 41 | 42 | - [ ] Full support for ubuntu 43 | - [ ] Support for Windows 44 | - [ ] Auto deploy certificate for Nginx 45 | - [ ] Auto deploy certificate for Apache 46 | - [ ] Auto deploy certificate for Node.js 47 | -------------------------------------------------------------------------------- /tests/InitTest.php: -------------------------------------------------------------------------------- 1 | assertInstanceOf(Init::class, (new Init("madeny.dev"))); 13 | } 14 | 15 | /** @test */ 16 | public function init_cert_directory () { 17 | 18 | $path = Config::path(); 19 | 20 | $init = new Init("madeny.dev"); 21 | 22 | $dirs = $init->dirs; 23 | 24 | foreach ($dirs as $d) { 25 | 26 | $this->assertEquals(1, file_exists($path."/".$d)); 27 | 28 | } 29 | 30 | } 31 | 32 | 33 | /** @test */ 34 | function it_can_generate_root_key() 35 | { 36 | 37 | $path = Config::path(); 38 | 39 | $init = new Init("madeny.dev"); 40 | 41 | $log = $init->keygen($path); 42 | 43 | $this->assertEquals(1, file_exists($path."/keys/root.key")); 44 | 45 | $this->assertEquals(0, $log); 46 | 47 | } 48 | 49 | /** @test */ 50 | function it_can_create_ca() 51 | { 52 | $path = Config::path(); 53 | 54 | $init = new Init("madeny.dev"); 55 | 56 | $log = $init->ca($path); 57 | 58 | $this->assertEquals(1, file_exists($path."/csr/root.pem")); 59 | 60 | $this->assertEquals(0, $log); 61 | } 62 | 63 | /** @test */ 64 | function it_can_generate_domain_cert_key() 65 | { 66 | $domain = "madeny.dev"; 67 | 68 | $path = Config::path(); 69 | 70 | $init = new Init($domain); 71 | 72 | $log = $init->domain($path, $domain); 73 | 74 | $this->assertEquals(1, file_exists($path."/live/$domain.ssl.key")); 75 | 76 | $this->assertEquals(0, $log); 77 | 78 | } 79 | 80 | /** @test */ 81 | function it_can_sign_domain_ssl_key() 82 | { 83 | $domain = "madeny.dev"; 84 | 85 | $path = Config::path(); 86 | 87 | $init = new Init($domain); 88 | 89 | $log = $init->sign($path, $domain); 90 | 91 | $this->assertEquals(1, file_exists($path."/live/$domain.ssl.crt")); 92 | 93 | $this->assertEquals(0, $log); 94 | 95 | } 96 | 97 | /** @test */ 98 | function it_can_create_and_sign_domain() 99 | { 100 | 101 | $domain = "madeny.dev"; 102 | 103 | $init = new Init($domain); 104 | 105 | $config = new Config($domain); 106 | 107 | $path = $config->path(); 108 | 109 | $log = $init->make($domain); 110 | 111 | $file = ['madeny.dev.ssl.crt', 'madeny.dev.ssl.key']; 112 | 113 | foreach ($file as $f) { 114 | $this->assertEquals(1, file_exists($path."/live/".$f)); 115 | } 116 | 117 | $sign = file_exists($path."/live/$domain.ssl.crt"); 118 | 119 | if ($sign == false) { 120 | $this->assertEquals(0, $log); 121 | } else { 122 | $this->assertEquals(1, $log); 123 | } 124 | 125 | 126 | 127 | } 128 | 129 | } 130 | -------------------------------------------------------------------------------- /lhttps.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "b63e8fb760921abb2b73d4640657e968", 8 | "packages": [ 9 | { 10 | "name": "psr/container", 11 | "version": "1.0.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/php-fig/container.git", 15 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 20 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3.0" 25 | }, 26 | "type": "library", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-master": "1.0.x-dev" 30 | } 31 | }, 32 | "autoload": { 33 | "psr-4": { 34 | "Psr\\Container\\": "src/" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "PHP-FIG", 44 | "homepage": "http://www.php-fig.org/" 45 | } 46 | ], 47 | "description": "Common Container Interface (PHP FIG PSR-11)", 48 | "homepage": "https://github.com/php-fig/container", 49 | "keywords": [ 50 | "PSR-11", 51 | "container", 52 | "container-interface", 53 | "container-interop", 54 | "psr" 55 | ], 56 | "time": "2017-02-14T16:28:37+00:00" 57 | }, 58 | { 59 | "name": "symfony/console", 60 | "version": "v4.3.8", 61 | "source": { 62 | "type": "git", 63 | "url": "https://github.com/symfony/console.git", 64 | "reference": "831424efae0a1fe6642784bd52aae14ece6538e6" 65 | }, 66 | "dist": { 67 | "type": "zip", 68 | "url": "https://api.github.com/repos/symfony/console/zipball/831424efae0a1fe6642784bd52aae14ece6538e6", 69 | "reference": "831424efae0a1fe6642784bd52aae14ece6538e6", 70 | "shasum": "" 71 | }, 72 | "require": { 73 | "php": "^7.1.3", 74 | "symfony/polyfill-mbstring": "~1.0", 75 | "symfony/polyfill-php73": "^1.8", 76 | "symfony/service-contracts": "^1.1" 77 | }, 78 | "conflict": { 79 | "symfony/dependency-injection": "<3.4", 80 | "symfony/event-dispatcher": "<4.3", 81 | "symfony/process": "<3.3" 82 | }, 83 | "provide": { 84 | "psr/log-implementation": "1.0" 85 | }, 86 | "require-dev": { 87 | "psr/log": "~1.0", 88 | "symfony/config": "~3.4|~4.0", 89 | "symfony/dependency-injection": "~3.4|~4.0", 90 | "symfony/event-dispatcher": "^4.3", 91 | "symfony/lock": "~3.4|~4.0", 92 | "symfony/process": "~3.4|~4.0", 93 | "symfony/var-dumper": "^4.3" 94 | }, 95 | "suggest": { 96 | "psr/log": "For using the console logger", 97 | "symfony/event-dispatcher": "", 98 | "symfony/lock": "", 99 | "symfony/process": "" 100 | }, 101 | "type": "library", 102 | "extra": { 103 | "branch-alias": { 104 | "dev-master": "4.3-dev" 105 | } 106 | }, 107 | "autoload": { 108 | "psr-4": { 109 | "Symfony\\Component\\Console\\": "" 110 | }, 111 | "exclude-from-classmap": [ 112 | "/Tests/" 113 | ] 114 | }, 115 | "notification-url": "https://packagist.org/downloads/", 116 | "license": [ 117 | "MIT" 118 | ], 119 | "authors": [ 120 | { 121 | "name": "Fabien Potencier", 122 | "email": "fabien@symfony.com" 123 | }, 124 | { 125 | "name": "Symfony Community", 126 | "homepage": "https://symfony.com/contributors" 127 | } 128 | ], 129 | "description": "Symfony Console Component", 130 | "homepage": "https://symfony.com", 131 | "time": "2019-11-13T07:29:07+00:00" 132 | }, 133 | { 134 | "name": "symfony/dotenv", 135 | "version": "v4.3.8", 136 | "source": { 137 | "type": "git", 138 | "url": "https://github.com/symfony/dotenv.git", 139 | "reference": "62d93bf07edd0d76f033d65a7fd1c1ce50d28b50" 140 | }, 141 | "dist": { 142 | "type": "zip", 143 | "url": "https://api.github.com/repos/symfony/dotenv/zipball/62d93bf07edd0d76f033d65a7fd1c1ce50d28b50", 144 | "reference": "62d93bf07edd0d76f033d65a7fd1c1ce50d28b50", 145 | "shasum": "" 146 | }, 147 | "require": { 148 | "php": "^7.1.3" 149 | }, 150 | "require-dev": { 151 | "symfony/process": "^3.4.2|^4.0" 152 | }, 153 | "type": "library", 154 | "extra": { 155 | "branch-alias": { 156 | "dev-master": "4.3-dev" 157 | } 158 | }, 159 | "autoload": { 160 | "psr-4": { 161 | "Symfony\\Component\\Dotenv\\": "" 162 | }, 163 | "exclude-from-classmap": [ 164 | "/Tests/" 165 | ] 166 | }, 167 | "notification-url": "https://packagist.org/downloads/", 168 | "license": [ 169 | "MIT" 170 | ], 171 | "authors": [ 172 | { 173 | "name": "Fabien Potencier", 174 | "email": "fabien@symfony.com" 175 | }, 176 | { 177 | "name": "Symfony Community", 178 | "homepage": "https://symfony.com/contributors" 179 | } 180 | ], 181 | "description": "Registers environment variables from a .env file", 182 | "homepage": "https://symfony.com", 183 | "keywords": [ 184 | "dotenv", 185 | "env", 186 | "environment" 187 | ], 188 | "time": "2019-10-18T11:23:15+00:00" 189 | }, 190 | { 191 | "name": "symfony/polyfill-mbstring", 192 | "version": "v1.12.0", 193 | "source": { 194 | "type": "git", 195 | "url": "https://github.com/symfony/polyfill-mbstring.git", 196 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17" 197 | }, 198 | "dist": { 199 | "type": "zip", 200 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17", 201 | "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17", 202 | "shasum": "" 203 | }, 204 | "require": { 205 | "php": ">=5.3.3" 206 | }, 207 | "suggest": { 208 | "ext-mbstring": "For best performance" 209 | }, 210 | "type": "library", 211 | "extra": { 212 | "branch-alias": { 213 | "dev-master": "1.12-dev" 214 | } 215 | }, 216 | "autoload": { 217 | "psr-4": { 218 | "Symfony\\Polyfill\\Mbstring\\": "" 219 | }, 220 | "files": [ 221 | "bootstrap.php" 222 | ] 223 | }, 224 | "notification-url": "https://packagist.org/downloads/", 225 | "license": [ 226 | "MIT" 227 | ], 228 | "authors": [ 229 | { 230 | "name": "Nicolas Grekas", 231 | "email": "p@tchwork.com" 232 | }, 233 | { 234 | "name": "Symfony Community", 235 | "homepage": "https://symfony.com/contributors" 236 | } 237 | ], 238 | "description": "Symfony polyfill for the Mbstring extension", 239 | "homepage": "https://symfony.com", 240 | "keywords": [ 241 | "compatibility", 242 | "mbstring", 243 | "polyfill", 244 | "portable", 245 | "shim" 246 | ], 247 | "time": "2019-08-06T08:03:45+00:00" 248 | }, 249 | { 250 | "name": "symfony/polyfill-php73", 251 | "version": "v1.12.0", 252 | "source": { 253 | "type": "git", 254 | "url": "https://github.com/symfony/polyfill-php73.git", 255 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188" 256 | }, 257 | "dist": { 258 | "type": "zip", 259 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/2ceb49eaccb9352bff54d22570276bb75ba4a188", 260 | "reference": "2ceb49eaccb9352bff54d22570276bb75ba4a188", 261 | "shasum": "" 262 | }, 263 | "require": { 264 | "php": ">=5.3.3" 265 | }, 266 | "type": "library", 267 | "extra": { 268 | "branch-alias": { 269 | "dev-master": "1.12-dev" 270 | } 271 | }, 272 | "autoload": { 273 | "psr-4": { 274 | "Symfony\\Polyfill\\Php73\\": "" 275 | }, 276 | "files": [ 277 | "bootstrap.php" 278 | ], 279 | "classmap": [ 280 | "Resources/stubs" 281 | ] 282 | }, 283 | "notification-url": "https://packagist.org/downloads/", 284 | "license": [ 285 | "MIT" 286 | ], 287 | "authors": [ 288 | { 289 | "name": "Nicolas Grekas", 290 | "email": "p@tchwork.com" 291 | }, 292 | { 293 | "name": "Symfony Community", 294 | "homepage": "https://symfony.com/contributors" 295 | } 296 | ], 297 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 298 | "homepage": "https://symfony.com", 299 | "keywords": [ 300 | "compatibility", 301 | "polyfill", 302 | "portable", 303 | "shim" 304 | ], 305 | "time": "2019-08-06T08:03:45+00:00" 306 | }, 307 | { 308 | "name": "symfony/service-contracts", 309 | "version": "v1.1.8", 310 | "source": { 311 | "type": "git", 312 | "url": "https://github.com/symfony/service-contracts.git", 313 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" 314 | }, 315 | "dist": { 316 | "type": "zip", 317 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", 318 | "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", 319 | "shasum": "" 320 | }, 321 | "require": { 322 | "php": "^7.1.3", 323 | "psr/container": "^1.0" 324 | }, 325 | "suggest": { 326 | "symfony/service-implementation": "" 327 | }, 328 | "type": "library", 329 | "extra": { 330 | "branch-alias": { 331 | "dev-master": "1.1-dev" 332 | } 333 | }, 334 | "autoload": { 335 | "psr-4": { 336 | "Symfony\\Contracts\\Service\\": "" 337 | } 338 | }, 339 | "notification-url": "https://packagist.org/downloads/", 340 | "license": [ 341 | "MIT" 342 | ], 343 | "authors": [ 344 | { 345 | "name": "Nicolas Grekas", 346 | "email": "p@tchwork.com" 347 | }, 348 | { 349 | "name": "Symfony Community", 350 | "homepage": "https://symfony.com/contributors" 351 | } 352 | ], 353 | "description": "Generic abstractions related to writing services", 354 | "homepage": "https://symfony.com", 355 | "keywords": [ 356 | "abstractions", 357 | "contracts", 358 | "decoupling", 359 | "interfaces", 360 | "interoperability", 361 | "standards" 362 | ], 363 | "time": "2019-10-14T12:27:06+00:00" 364 | } 365 | ], 366 | "packages-dev": [ 367 | { 368 | "name": "doctrine/instantiator", 369 | "version": "1.3.0", 370 | "source": { 371 | "type": "git", 372 | "url": "https://github.com/doctrine/instantiator.git", 373 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" 374 | }, 375 | "dist": { 376 | "type": "zip", 377 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", 378 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", 379 | "shasum": "" 380 | }, 381 | "require": { 382 | "php": "^7.1" 383 | }, 384 | "require-dev": { 385 | "doctrine/coding-standard": "^6.0", 386 | "ext-pdo": "*", 387 | "ext-phar": "*", 388 | "phpbench/phpbench": "^0.13", 389 | "phpstan/phpstan-phpunit": "^0.11", 390 | "phpstan/phpstan-shim": "^0.11", 391 | "phpunit/phpunit": "^7.0" 392 | }, 393 | "type": "library", 394 | "extra": { 395 | "branch-alias": { 396 | "dev-master": "1.2.x-dev" 397 | } 398 | }, 399 | "autoload": { 400 | "psr-4": { 401 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 402 | } 403 | }, 404 | "notification-url": "https://packagist.org/downloads/", 405 | "license": [ 406 | "MIT" 407 | ], 408 | "authors": [ 409 | { 410 | "name": "Marco Pivetta", 411 | "email": "ocramius@gmail.com", 412 | "homepage": "http://ocramius.github.com/" 413 | } 414 | ], 415 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 416 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 417 | "keywords": [ 418 | "constructor", 419 | "instantiate" 420 | ], 421 | "time": "2019-10-21T16:45:58+00:00" 422 | }, 423 | { 424 | "name": "myclabs/deep-copy", 425 | "version": "1.9.3", 426 | "source": { 427 | "type": "git", 428 | "url": "https://github.com/myclabs/DeepCopy.git", 429 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" 430 | }, 431 | "dist": { 432 | "type": "zip", 433 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", 434 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", 435 | "shasum": "" 436 | }, 437 | "require": { 438 | "php": "^7.1" 439 | }, 440 | "replace": { 441 | "myclabs/deep-copy": "self.version" 442 | }, 443 | "require-dev": { 444 | "doctrine/collections": "^1.0", 445 | "doctrine/common": "^2.6", 446 | "phpunit/phpunit": "^7.1" 447 | }, 448 | "type": "library", 449 | "autoload": { 450 | "psr-4": { 451 | "DeepCopy\\": "src/DeepCopy/" 452 | }, 453 | "files": [ 454 | "src/DeepCopy/deep_copy.php" 455 | ] 456 | }, 457 | "notification-url": "https://packagist.org/downloads/", 458 | "license": [ 459 | "MIT" 460 | ], 461 | "description": "Create deep copies (clones) of your objects", 462 | "keywords": [ 463 | "clone", 464 | "copy", 465 | "duplicate", 466 | "object", 467 | "object graph" 468 | ], 469 | "time": "2019-08-09T12:45:53+00:00" 470 | }, 471 | { 472 | "name": "phar-io/manifest", 473 | "version": "1.0.3", 474 | "source": { 475 | "type": "git", 476 | "url": "https://github.com/phar-io/manifest.git", 477 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 478 | }, 479 | "dist": { 480 | "type": "zip", 481 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 482 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 483 | "shasum": "" 484 | }, 485 | "require": { 486 | "ext-dom": "*", 487 | "ext-phar": "*", 488 | "phar-io/version": "^2.0", 489 | "php": "^5.6 || ^7.0" 490 | }, 491 | "type": "library", 492 | "extra": { 493 | "branch-alias": { 494 | "dev-master": "1.0.x-dev" 495 | } 496 | }, 497 | "autoload": { 498 | "classmap": [ 499 | "src/" 500 | ] 501 | }, 502 | "notification-url": "https://packagist.org/downloads/", 503 | "license": [ 504 | "BSD-3-Clause" 505 | ], 506 | "authors": [ 507 | { 508 | "name": "Arne Blankerts", 509 | "email": "arne@blankerts.de", 510 | "role": "Developer" 511 | }, 512 | { 513 | "name": "Sebastian Heuer", 514 | "email": "sebastian@phpeople.de", 515 | "role": "Developer" 516 | }, 517 | { 518 | "name": "Sebastian Bergmann", 519 | "email": "sebastian@phpunit.de", 520 | "role": "Developer" 521 | } 522 | ], 523 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 524 | "time": "2018-07-08T19:23:20+00:00" 525 | }, 526 | { 527 | "name": "phar-io/version", 528 | "version": "2.0.1", 529 | "source": { 530 | "type": "git", 531 | "url": "https://github.com/phar-io/version.git", 532 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 533 | }, 534 | "dist": { 535 | "type": "zip", 536 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 537 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 538 | "shasum": "" 539 | }, 540 | "require": { 541 | "php": "^5.6 || ^7.0" 542 | }, 543 | "type": "library", 544 | "autoload": { 545 | "classmap": [ 546 | "src/" 547 | ] 548 | }, 549 | "notification-url": "https://packagist.org/downloads/", 550 | "license": [ 551 | "BSD-3-Clause" 552 | ], 553 | "authors": [ 554 | { 555 | "name": "Arne Blankerts", 556 | "email": "arne@blankerts.de", 557 | "role": "Developer" 558 | }, 559 | { 560 | "name": "Sebastian Heuer", 561 | "email": "sebastian@phpeople.de", 562 | "role": "Developer" 563 | }, 564 | { 565 | "name": "Sebastian Bergmann", 566 | "email": "sebastian@phpunit.de", 567 | "role": "Developer" 568 | } 569 | ], 570 | "description": "Library for handling version information and constraints", 571 | "time": "2018-07-08T19:19:57+00:00" 572 | }, 573 | { 574 | "name": "phpdocumentor/reflection-common", 575 | "version": "2.0.0", 576 | "source": { 577 | "type": "git", 578 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 579 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" 580 | }, 581 | "dist": { 582 | "type": "zip", 583 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", 584 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", 585 | "shasum": "" 586 | }, 587 | "require": { 588 | "php": ">=7.1" 589 | }, 590 | "require-dev": { 591 | "phpunit/phpunit": "~6" 592 | }, 593 | "type": "library", 594 | "extra": { 595 | "branch-alias": { 596 | "dev-master": "2.x-dev" 597 | } 598 | }, 599 | "autoload": { 600 | "psr-4": { 601 | "phpDocumentor\\Reflection\\": "src/" 602 | } 603 | }, 604 | "notification-url": "https://packagist.org/downloads/", 605 | "license": [ 606 | "MIT" 607 | ], 608 | "authors": [ 609 | { 610 | "name": "Jaap van Otterdijk", 611 | "email": "opensource@ijaap.nl" 612 | } 613 | ], 614 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 615 | "homepage": "http://www.phpdoc.org", 616 | "keywords": [ 617 | "FQSEN", 618 | "phpDocumentor", 619 | "phpdoc", 620 | "reflection", 621 | "static analysis" 622 | ], 623 | "time": "2018-08-07T13:53:10+00:00" 624 | }, 625 | { 626 | "name": "phpdocumentor/reflection-docblock", 627 | "version": "4.3.2", 628 | "source": { 629 | "type": "git", 630 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 631 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" 632 | }, 633 | "dist": { 634 | "type": "zip", 635 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 636 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 637 | "shasum": "" 638 | }, 639 | "require": { 640 | "php": "^7.0", 641 | "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", 642 | "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", 643 | "webmozart/assert": "^1.0" 644 | }, 645 | "require-dev": { 646 | "doctrine/instantiator": "^1.0.5", 647 | "mockery/mockery": "^1.0", 648 | "phpunit/phpunit": "^6.4" 649 | }, 650 | "type": "library", 651 | "extra": { 652 | "branch-alias": { 653 | "dev-master": "4.x-dev" 654 | } 655 | }, 656 | "autoload": { 657 | "psr-4": { 658 | "phpDocumentor\\Reflection\\": [ 659 | "src/" 660 | ] 661 | } 662 | }, 663 | "notification-url": "https://packagist.org/downloads/", 664 | "license": [ 665 | "MIT" 666 | ], 667 | "authors": [ 668 | { 669 | "name": "Mike van Riel", 670 | "email": "me@mikevanriel.com" 671 | } 672 | ], 673 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 674 | "time": "2019-09-12T14:27:41+00:00" 675 | }, 676 | { 677 | "name": "phpdocumentor/type-resolver", 678 | "version": "1.0.1", 679 | "source": { 680 | "type": "git", 681 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 682 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" 683 | }, 684 | "dist": { 685 | "type": "zip", 686 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 687 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 688 | "shasum": "" 689 | }, 690 | "require": { 691 | "php": "^7.1", 692 | "phpdocumentor/reflection-common": "^2.0" 693 | }, 694 | "require-dev": { 695 | "ext-tokenizer": "^7.1", 696 | "mockery/mockery": "~1", 697 | "phpunit/phpunit": "^7.0" 698 | }, 699 | "type": "library", 700 | "extra": { 701 | "branch-alias": { 702 | "dev-master": "1.x-dev" 703 | } 704 | }, 705 | "autoload": { 706 | "psr-4": { 707 | "phpDocumentor\\Reflection\\": "src" 708 | } 709 | }, 710 | "notification-url": "https://packagist.org/downloads/", 711 | "license": [ 712 | "MIT" 713 | ], 714 | "authors": [ 715 | { 716 | "name": "Mike van Riel", 717 | "email": "me@mikevanriel.com" 718 | } 719 | ], 720 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 721 | "time": "2019-08-22T18:11:29+00:00" 722 | }, 723 | { 724 | "name": "phpspec/prophecy", 725 | "version": "1.9.0", 726 | "source": { 727 | "type": "git", 728 | "url": "https://github.com/phpspec/prophecy.git", 729 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" 730 | }, 731 | "dist": { 732 | "type": "zip", 733 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", 734 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", 735 | "shasum": "" 736 | }, 737 | "require": { 738 | "doctrine/instantiator": "^1.0.2", 739 | "php": "^5.3|^7.0", 740 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", 741 | "sebastian/comparator": "^1.1|^2.0|^3.0", 742 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 743 | }, 744 | "require-dev": { 745 | "phpspec/phpspec": "^2.5|^3.2", 746 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 747 | }, 748 | "type": "library", 749 | "extra": { 750 | "branch-alias": { 751 | "dev-master": "1.8.x-dev" 752 | } 753 | }, 754 | "autoload": { 755 | "psr-4": { 756 | "Prophecy\\": "src/Prophecy" 757 | } 758 | }, 759 | "notification-url": "https://packagist.org/downloads/", 760 | "license": [ 761 | "MIT" 762 | ], 763 | "authors": [ 764 | { 765 | "name": "Konstantin Kudryashov", 766 | "email": "ever.zet@gmail.com", 767 | "homepage": "http://everzet.com" 768 | }, 769 | { 770 | "name": "Marcello Duarte", 771 | "email": "marcello.duarte@gmail.com" 772 | } 773 | ], 774 | "description": "Highly opinionated mocking framework for PHP 5.3+", 775 | "homepage": "https://github.com/phpspec/prophecy", 776 | "keywords": [ 777 | "Double", 778 | "Dummy", 779 | "fake", 780 | "mock", 781 | "spy", 782 | "stub" 783 | ], 784 | "time": "2019-10-03T11:07:50+00:00" 785 | }, 786 | { 787 | "name": "phpunit/php-code-coverage", 788 | "version": "6.1.4", 789 | "source": { 790 | "type": "git", 791 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 792 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" 793 | }, 794 | "dist": { 795 | "type": "zip", 796 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 797 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", 798 | "shasum": "" 799 | }, 800 | "require": { 801 | "ext-dom": "*", 802 | "ext-xmlwriter": "*", 803 | "php": "^7.1", 804 | "phpunit/php-file-iterator": "^2.0", 805 | "phpunit/php-text-template": "^1.2.1", 806 | "phpunit/php-token-stream": "^3.0", 807 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 808 | "sebastian/environment": "^3.1 || ^4.0", 809 | "sebastian/version": "^2.0.1", 810 | "theseer/tokenizer": "^1.1" 811 | }, 812 | "require-dev": { 813 | "phpunit/phpunit": "^7.0" 814 | }, 815 | "suggest": { 816 | "ext-xdebug": "^2.6.0" 817 | }, 818 | "type": "library", 819 | "extra": { 820 | "branch-alias": { 821 | "dev-master": "6.1-dev" 822 | } 823 | }, 824 | "autoload": { 825 | "classmap": [ 826 | "src/" 827 | ] 828 | }, 829 | "notification-url": "https://packagist.org/downloads/", 830 | "license": [ 831 | "BSD-3-Clause" 832 | ], 833 | "authors": [ 834 | { 835 | "name": "Sebastian Bergmann", 836 | "email": "sebastian@phpunit.de", 837 | "role": "lead" 838 | } 839 | ], 840 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 841 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 842 | "keywords": [ 843 | "coverage", 844 | "testing", 845 | "xunit" 846 | ], 847 | "time": "2018-10-31T16:06:48+00:00" 848 | }, 849 | { 850 | "name": "phpunit/php-file-iterator", 851 | "version": "2.0.2", 852 | "source": { 853 | "type": "git", 854 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 855 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 856 | }, 857 | "dist": { 858 | "type": "zip", 859 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 860 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 861 | "shasum": "" 862 | }, 863 | "require": { 864 | "php": "^7.1" 865 | }, 866 | "require-dev": { 867 | "phpunit/phpunit": "^7.1" 868 | }, 869 | "type": "library", 870 | "extra": { 871 | "branch-alias": { 872 | "dev-master": "2.0.x-dev" 873 | } 874 | }, 875 | "autoload": { 876 | "classmap": [ 877 | "src/" 878 | ] 879 | }, 880 | "notification-url": "https://packagist.org/downloads/", 881 | "license": [ 882 | "BSD-3-Clause" 883 | ], 884 | "authors": [ 885 | { 886 | "name": "Sebastian Bergmann", 887 | "email": "sebastian@phpunit.de", 888 | "role": "lead" 889 | } 890 | ], 891 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 892 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 893 | "keywords": [ 894 | "filesystem", 895 | "iterator" 896 | ], 897 | "time": "2018-09-13T20:33:42+00:00" 898 | }, 899 | { 900 | "name": "phpunit/php-text-template", 901 | "version": "1.2.1", 902 | "source": { 903 | "type": "git", 904 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 905 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 906 | }, 907 | "dist": { 908 | "type": "zip", 909 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 910 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 911 | "shasum": "" 912 | }, 913 | "require": { 914 | "php": ">=5.3.3" 915 | }, 916 | "type": "library", 917 | "autoload": { 918 | "classmap": [ 919 | "src/" 920 | ] 921 | }, 922 | "notification-url": "https://packagist.org/downloads/", 923 | "license": [ 924 | "BSD-3-Clause" 925 | ], 926 | "authors": [ 927 | { 928 | "name": "Sebastian Bergmann", 929 | "email": "sebastian@phpunit.de", 930 | "role": "lead" 931 | } 932 | ], 933 | "description": "Simple template engine.", 934 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 935 | "keywords": [ 936 | "template" 937 | ], 938 | "time": "2015-06-21T13:50:34+00:00" 939 | }, 940 | { 941 | "name": "phpunit/php-timer", 942 | "version": "2.1.2", 943 | "source": { 944 | "type": "git", 945 | "url": "https://github.com/sebastianbergmann/php-timer.git", 946 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 947 | }, 948 | "dist": { 949 | "type": "zip", 950 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 951 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 952 | "shasum": "" 953 | }, 954 | "require": { 955 | "php": "^7.1" 956 | }, 957 | "require-dev": { 958 | "phpunit/phpunit": "^7.0" 959 | }, 960 | "type": "library", 961 | "extra": { 962 | "branch-alias": { 963 | "dev-master": "2.1-dev" 964 | } 965 | }, 966 | "autoload": { 967 | "classmap": [ 968 | "src/" 969 | ] 970 | }, 971 | "notification-url": "https://packagist.org/downloads/", 972 | "license": [ 973 | "BSD-3-Clause" 974 | ], 975 | "authors": [ 976 | { 977 | "name": "Sebastian Bergmann", 978 | "email": "sebastian@phpunit.de", 979 | "role": "lead" 980 | } 981 | ], 982 | "description": "Utility class for timing", 983 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 984 | "keywords": [ 985 | "timer" 986 | ], 987 | "time": "2019-06-07T04:22:29+00:00" 988 | }, 989 | { 990 | "name": "phpunit/php-token-stream", 991 | "version": "3.1.1", 992 | "source": { 993 | "type": "git", 994 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 995 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" 996 | }, 997 | "dist": { 998 | "type": "zip", 999 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", 1000 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", 1001 | "shasum": "" 1002 | }, 1003 | "require": { 1004 | "ext-tokenizer": "*", 1005 | "php": "^7.1" 1006 | }, 1007 | "require-dev": { 1008 | "phpunit/phpunit": "^7.0" 1009 | }, 1010 | "type": "library", 1011 | "extra": { 1012 | "branch-alias": { 1013 | "dev-master": "3.1-dev" 1014 | } 1015 | }, 1016 | "autoload": { 1017 | "classmap": [ 1018 | "src/" 1019 | ] 1020 | }, 1021 | "notification-url": "https://packagist.org/downloads/", 1022 | "license": [ 1023 | "BSD-3-Clause" 1024 | ], 1025 | "authors": [ 1026 | { 1027 | "name": "Sebastian Bergmann", 1028 | "email": "sebastian@phpunit.de" 1029 | } 1030 | ], 1031 | "description": "Wrapper around PHP's tokenizer extension.", 1032 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1033 | "keywords": [ 1034 | "tokenizer" 1035 | ], 1036 | "time": "2019-09-17T06:23:10+00:00" 1037 | }, 1038 | { 1039 | "name": "phpunit/phpunit", 1040 | "version": "7.5.17", 1041 | "source": { 1042 | "type": "git", 1043 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1044 | "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a" 1045 | }, 1046 | "dist": { 1047 | "type": "zip", 1048 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4c92a15296e58191a4cd74cff3b34fc8e374174a", 1049 | "reference": "4c92a15296e58191a4cd74cff3b34fc8e374174a", 1050 | "shasum": "" 1051 | }, 1052 | "require": { 1053 | "doctrine/instantiator": "^1.1", 1054 | "ext-dom": "*", 1055 | "ext-json": "*", 1056 | "ext-libxml": "*", 1057 | "ext-mbstring": "*", 1058 | "ext-xml": "*", 1059 | "myclabs/deep-copy": "^1.7", 1060 | "phar-io/manifest": "^1.0.2", 1061 | "phar-io/version": "^2.0", 1062 | "php": "^7.1", 1063 | "phpspec/prophecy": "^1.7", 1064 | "phpunit/php-code-coverage": "^6.0.7", 1065 | "phpunit/php-file-iterator": "^2.0.1", 1066 | "phpunit/php-text-template": "^1.2.1", 1067 | "phpunit/php-timer": "^2.1", 1068 | "sebastian/comparator": "^3.0", 1069 | "sebastian/diff": "^3.0", 1070 | "sebastian/environment": "^4.0", 1071 | "sebastian/exporter": "^3.1", 1072 | "sebastian/global-state": "^2.0", 1073 | "sebastian/object-enumerator": "^3.0.3", 1074 | "sebastian/resource-operations": "^2.0", 1075 | "sebastian/version": "^2.0.1" 1076 | }, 1077 | "conflict": { 1078 | "phpunit/phpunit-mock-objects": "*" 1079 | }, 1080 | "require-dev": { 1081 | "ext-pdo": "*" 1082 | }, 1083 | "suggest": { 1084 | "ext-soap": "*", 1085 | "ext-xdebug": "*", 1086 | "phpunit/php-invoker": "^2.0" 1087 | }, 1088 | "bin": [ 1089 | "phpunit" 1090 | ], 1091 | "type": "library", 1092 | "extra": { 1093 | "branch-alias": { 1094 | "dev-master": "7.5-dev" 1095 | } 1096 | }, 1097 | "autoload": { 1098 | "classmap": [ 1099 | "src/" 1100 | ] 1101 | }, 1102 | "notification-url": "https://packagist.org/downloads/", 1103 | "license": [ 1104 | "BSD-3-Clause" 1105 | ], 1106 | "authors": [ 1107 | { 1108 | "name": "Sebastian Bergmann", 1109 | "email": "sebastian@phpunit.de", 1110 | "role": "lead" 1111 | } 1112 | ], 1113 | "description": "The PHP Unit Testing framework.", 1114 | "homepage": "https://phpunit.de/", 1115 | "keywords": [ 1116 | "phpunit", 1117 | "testing", 1118 | "xunit" 1119 | ], 1120 | "time": "2019-10-28T10:37:36+00:00" 1121 | }, 1122 | { 1123 | "name": "sebastian/code-unit-reverse-lookup", 1124 | "version": "1.0.1", 1125 | "source": { 1126 | "type": "git", 1127 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1128 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1129 | }, 1130 | "dist": { 1131 | "type": "zip", 1132 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1133 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1134 | "shasum": "" 1135 | }, 1136 | "require": { 1137 | "php": "^5.6 || ^7.0" 1138 | }, 1139 | "require-dev": { 1140 | "phpunit/phpunit": "^5.7 || ^6.0" 1141 | }, 1142 | "type": "library", 1143 | "extra": { 1144 | "branch-alias": { 1145 | "dev-master": "1.0.x-dev" 1146 | } 1147 | }, 1148 | "autoload": { 1149 | "classmap": [ 1150 | "src/" 1151 | ] 1152 | }, 1153 | "notification-url": "https://packagist.org/downloads/", 1154 | "license": [ 1155 | "BSD-3-Clause" 1156 | ], 1157 | "authors": [ 1158 | { 1159 | "name": "Sebastian Bergmann", 1160 | "email": "sebastian@phpunit.de" 1161 | } 1162 | ], 1163 | "description": "Looks up which function or method a line of code belongs to", 1164 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1165 | "time": "2017-03-04T06:30:41+00:00" 1166 | }, 1167 | { 1168 | "name": "sebastian/comparator", 1169 | "version": "3.0.2", 1170 | "source": { 1171 | "type": "git", 1172 | "url": "https://github.com/sebastianbergmann/comparator.git", 1173 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1174 | }, 1175 | "dist": { 1176 | "type": "zip", 1177 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1178 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1179 | "shasum": "" 1180 | }, 1181 | "require": { 1182 | "php": "^7.1", 1183 | "sebastian/diff": "^3.0", 1184 | "sebastian/exporter": "^3.1" 1185 | }, 1186 | "require-dev": { 1187 | "phpunit/phpunit": "^7.1" 1188 | }, 1189 | "type": "library", 1190 | "extra": { 1191 | "branch-alias": { 1192 | "dev-master": "3.0-dev" 1193 | } 1194 | }, 1195 | "autoload": { 1196 | "classmap": [ 1197 | "src/" 1198 | ] 1199 | }, 1200 | "notification-url": "https://packagist.org/downloads/", 1201 | "license": [ 1202 | "BSD-3-Clause" 1203 | ], 1204 | "authors": [ 1205 | { 1206 | "name": "Jeff Welch", 1207 | "email": "whatthejeff@gmail.com" 1208 | }, 1209 | { 1210 | "name": "Volker Dusch", 1211 | "email": "github@wallbash.com" 1212 | }, 1213 | { 1214 | "name": "Bernhard Schussek", 1215 | "email": "bschussek@2bepublished.at" 1216 | }, 1217 | { 1218 | "name": "Sebastian Bergmann", 1219 | "email": "sebastian@phpunit.de" 1220 | } 1221 | ], 1222 | "description": "Provides the functionality to compare PHP values for equality", 1223 | "homepage": "https://github.com/sebastianbergmann/comparator", 1224 | "keywords": [ 1225 | "comparator", 1226 | "compare", 1227 | "equality" 1228 | ], 1229 | "time": "2018-07-12T15:12:46+00:00" 1230 | }, 1231 | { 1232 | "name": "sebastian/diff", 1233 | "version": "3.0.2", 1234 | "source": { 1235 | "type": "git", 1236 | "url": "https://github.com/sebastianbergmann/diff.git", 1237 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 1238 | }, 1239 | "dist": { 1240 | "type": "zip", 1241 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1242 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1243 | "shasum": "" 1244 | }, 1245 | "require": { 1246 | "php": "^7.1" 1247 | }, 1248 | "require-dev": { 1249 | "phpunit/phpunit": "^7.5 || ^8.0", 1250 | "symfony/process": "^2 || ^3.3 || ^4" 1251 | }, 1252 | "type": "library", 1253 | "extra": { 1254 | "branch-alias": { 1255 | "dev-master": "3.0-dev" 1256 | } 1257 | }, 1258 | "autoload": { 1259 | "classmap": [ 1260 | "src/" 1261 | ] 1262 | }, 1263 | "notification-url": "https://packagist.org/downloads/", 1264 | "license": [ 1265 | "BSD-3-Clause" 1266 | ], 1267 | "authors": [ 1268 | { 1269 | "name": "Kore Nordmann", 1270 | "email": "mail@kore-nordmann.de" 1271 | }, 1272 | { 1273 | "name": "Sebastian Bergmann", 1274 | "email": "sebastian@phpunit.de" 1275 | } 1276 | ], 1277 | "description": "Diff implementation", 1278 | "homepage": "https://github.com/sebastianbergmann/diff", 1279 | "keywords": [ 1280 | "diff", 1281 | "udiff", 1282 | "unidiff", 1283 | "unified diff" 1284 | ], 1285 | "time": "2019-02-04T06:01:07+00:00" 1286 | }, 1287 | { 1288 | "name": "sebastian/environment", 1289 | "version": "4.2.2", 1290 | "source": { 1291 | "type": "git", 1292 | "url": "https://github.com/sebastianbergmann/environment.git", 1293 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" 1294 | }, 1295 | "dist": { 1296 | "type": "zip", 1297 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 1298 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 1299 | "shasum": "" 1300 | }, 1301 | "require": { 1302 | "php": "^7.1" 1303 | }, 1304 | "require-dev": { 1305 | "phpunit/phpunit": "^7.5" 1306 | }, 1307 | "suggest": { 1308 | "ext-posix": "*" 1309 | }, 1310 | "type": "library", 1311 | "extra": { 1312 | "branch-alias": { 1313 | "dev-master": "4.2-dev" 1314 | } 1315 | }, 1316 | "autoload": { 1317 | "classmap": [ 1318 | "src/" 1319 | ] 1320 | }, 1321 | "notification-url": "https://packagist.org/downloads/", 1322 | "license": [ 1323 | "BSD-3-Clause" 1324 | ], 1325 | "authors": [ 1326 | { 1327 | "name": "Sebastian Bergmann", 1328 | "email": "sebastian@phpunit.de" 1329 | } 1330 | ], 1331 | "description": "Provides functionality to handle HHVM/PHP environments", 1332 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1333 | "keywords": [ 1334 | "Xdebug", 1335 | "environment", 1336 | "hhvm" 1337 | ], 1338 | "time": "2019-05-05T09:05:15+00:00" 1339 | }, 1340 | { 1341 | "name": "sebastian/exporter", 1342 | "version": "3.1.2", 1343 | "source": { 1344 | "type": "git", 1345 | "url": "https://github.com/sebastianbergmann/exporter.git", 1346 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" 1347 | }, 1348 | "dist": { 1349 | "type": "zip", 1350 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", 1351 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", 1352 | "shasum": "" 1353 | }, 1354 | "require": { 1355 | "php": "^7.0", 1356 | "sebastian/recursion-context": "^3.0" 1357 | }, 1358 | "require-dev": { 1359 | "ext-mbstring": "*", 1360 | "phpunit/phpunit": "^6.0" 1361 | }, 1362 | "type": "library", 1363 | "extra": { 1364 | "branch-alias": { 1365 | "dev-master": "3.1.x-dev" 1366 | } 1367 | }, 1368 | "autoload": { 1369 | "classmap": [ 1370 | "src/" 1371 | ] 1372 | }, 1373 | "notification-url": "https://packagist.org/downloads/", 1374 | "license": [ 1375 | "BSD-3-Clause" 1376 | ], 1377 | "authors": [ 1378 | { 1379 | "name": "Sebastian Bergmann", 1380 | "email": "sebastian@phpunit.de" 1381 | }, 1382 | { 1383 | "name": "Jeff Welch", 1384 | "email": "whatthejeff@gmail.com" 1385 | }, 1386 | { 1387 | "name": "Volker Dusch", 1388 | "email": "github@wallbash.com" 1389 | }, 1390 | { 1391 | "name": "Adam Harvey", 1392 | "email": "aharvey@php.net" 1393 | }, 1394 | { 1395 | "name": "Bernhard Schussek", 1396 | "email": "bschussek@gmail.com" 1397 | } 1398 | ], 1399 | "description": "Provides the functionality to export PHP variables for visualization", 1400 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1401 | "keywords": [ 1402 | "export", 1403 | "exporter" 1404 | ], 1405 | "time": "2019-09-14T09:02:43+00:00" 1406 | }, 1407 | { 1408 | "name": "sebastian/global-state", 1409 | "version": "2.0.0", 1410 | "source": { 1411 | "type": "git", 1412 | "url": "https://github.com/sebastianbergmann/global-state.git", 1413 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" 1414 | }, 1415 | "dist": { 1416 | "type": "zip", 1417 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1418 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", 1419 | "shasum": "" 1420 | }, 1421 | "require": { 1422 | "php": "^7.0" 1423 | }, 1424 | "require-dev": { 1425 | "phpunit/phpunit": "^6.0" 1426 | }, 1427 | "suggest": { 1428 | "ext-uopz": "*" 1429 | }, 1430 | "type": "library", 1431 | "extra": { 1432 | "branch-alias": { 1433 | "dev-master": "2.0-dev" 1434 | } 1435 | }, 1436 | "autoload": { 1437 | "classmap": [ 1438 | "src/" 1439 | ] 1440 | }, 1441 | "notification-url": "https://packagist.org/downloads/", 1442 | "license": [ 1443 | "BSD-3-Clause" 1444 | ], 1445 | "authors": [ 1446 | { 1447 | "name": "Sebastian Bergmann", 1448 | "email": "sebastian@phpunit.de" 1449 | } 1450 | ], 1451 | "description": "Snapshotting of global state", 1452 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1453 | "keywords": [ 1454 | "global state" 1455 | ], 1456 | "time": "2017-04-27T15:39:26+00:00" 1457 | }, 1458 | { 1459 | "name": "sebastian/object-enumerator", 1460 | "version": "3.0.3", 1461 | "source": { 1462 | "type": "git", 1463 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1464 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1465 | }, 1466 | "dist": { 1467 | "type": "zip", 1468 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1469 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1470 | "shasum": "" 1471 | }, 1472 | "require": { 1473 | "php": "^7.0", 1474 | "sebastian/object-reflector": "^1.1.1", 1475 | "sebastian/recursion-context": "^3.0" 1476 | }, 1477 | "require-dev": { 1478 | "phpunit/phpunit": "^6.0" 1479 | }, 1480 | "type": "library", 1481 | "extra": { 1482 | "branch-alias": { 1483 | "dev-master": "3.0.x-dev" 1484 | } 1485 | }, 1486 | "autoload": { 1487 | "classmap": [ 1488 | "src/" 1489 | ] 1490 | }, 1491 | "notification-url": "https://packagist.org/downloads/", 1492 | "license": [ 1493 | "BSD-3-Clause" 1494 | ], 1495 | "authors": [ 1496 | { 1497 | "name": "Sebastian Bergmann", 1498 | "email": "sebastian@phpunit.de" 1499 | } 1500 | ], 1501 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1502 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1503 | "time": "2017-08-03T12:35:26+00:00" 1504 | }, 1505 | { 1506 | "name": "sebastian/object-reflector", 1507 | "version": "1.1.1", 1508 | "source": { 1509 | "type": "git", 1510 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1511 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1512 | }, 1513 | "dist": { 1514 | "type": "zip", 1515 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1516 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1517 | "shasum": "" 1518 | }, 1519 | "require": { 1520 | "php": "^7.0" 1521 | }, 1522 | "require-dev": { 1523 | "phpunit/phpunit": "^6.0" 1524 | }, 1525 | "type": "library", 1526 | "extra": { 1527 | "branch-alias": { 1528 | "dev-master": "1.1-dev" 1529 | } 1530 | }, 1531 | "autoload": { 1532 | "classmap": [ 1533 | "src/" 1534 | ] 1535 | }, 1536 | "notification-url": "https://packagist.org/downloads/", 1537 | "license": [ 1538 | "BSD-3-Clause" 1539 | ], 1540 | "authors": [ 1541 | { 1542 | "name": "Sebastian Bergmann", 1543 | "email": "sebastian@phpunit.de" 1544 | } 1545 | ], 1546 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1547 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1548 | "time": "2017-03-29T09:07:27+00:00" 1549 | }, 1550 | { 1551 | "name": "sebastian/recursion-context", 1552 | "version": "3.0.0", 1553 | "source": { 1554 | "type": "git", 1555 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1556 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1557 | }, 1558 | "dist": { 1559 | "type": "zip", 1560 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1561 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1562 | "shasum": "" 1563 | }, 1564 | "require": { 1565 | "php": "^7.0" 1566 | }, 1567 | "require-dev": { 1568 | "phpunit/phpunit": "^6.0" 1569 | }, 1570 | "type": "library", 1571 | "extra": { 1572 | "branch-alias": { 1573 | "dev-master": "3.0.x-dev" 1574 | } 1575 | }, 1576 | "autoload": { 1577 | "classmap": [ 1578 | "src/" 1579 | ] 1580 | }, 1581 | "notification-url": "https://packagist.org/downloads/", 1582 | "license": [ 1583 | "BSD-3-Clause" 1584 | ], 1585 | "authors": [ 1586 | { 1587 | "name": "Jeff Welch", 1588 | "email": "whatthejeff@gmail.com" 1589 | }, 1590 | { 1591 | "name": "Sebastian Bergmann", 1592 | "email": "sebastian@phpunit.de" 1593 | }, 1594 | { 1595 | "name": "Adam Harvey", 1596 | "email": "aharvey@php.net" 1597 | } 1598 | ], 1599 | "description": "Provides functionality to recursively process PHP variables", 1600 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1601 | "time": "2017-03-03T06:23:57+00:00" 1602 | }, 1603 | { 1604 | "name": "sebastian/resource-operations", 1605 | "version": "2.0.1", 1606 | "source": { 1607 | "type": "git", 1608 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1609 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 1610 | }, 1611 | "dist": { 1612 | "type": "zip", 1613 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1614 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1615 | "shasum": "" 1616 | }, 1617 | "require": { 1618 | "php": "^7.1" 1619 | }, 1620 | "type": "library", 1621 | "extra": { 1622 | "branch-alias": { 1623 | "dev-master": "2.0-dev" 1624 | } 1625 | }, 1626 | "autoload": { 1627 | "classmap": [ 1628 | "src/" 1629 | ] 1630 | }, 1631 | "notification-url": "https://packagist.org/downloads/", 1632 | "license": [ 1633 | "BSD-3-Clause" 1634 | ], 1635 | "authors": [ 1636 | { 1637 | "name": "Sebastian Bergmann", 1638 | "email": "sebastian@phpunit.de" 1639 | } 1640 | ], 1641 | "description": "Provides a list of PHP built-in functions that operate on resources", 1642 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1643 | "time": "2018-10-04T04:07:39+00:00" 1644 | }, 1645 | { 1646 | "name": "sebastian/version", 1647 | "version": "2.0.1", 1648 | "source": { 1649 | "type": "git", 1650 | "url": "https://github.com/sebastianbergmann/version.git", 1651 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1652 | }, 1653 | "dist": { 1654 | "type": "zip", 1655 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1656 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1657 | "shasum": "" 1658 | }, 1659 | "require": { 1660 | "php": ">=5.6" 1661 | }, 1662 | "type": "library", 1663 | "extra": { 1664 | "branch-alias": { 1665 | "dev-master": "2.0.x-dev" 1666 | } 1667 | }, 1668 | "autoload": { 1669 | "classmap": [ 1670 | "src/" 1671 | ] 1672 | }, 1673 | "notification-url": "https://packagist.org/downloads/", 1674 | "license": [ 1675 | "BSD-3-Clause" 1676 | ], 1677 | "authors": [ 1678 | { 1679 | "name": "Sebastian Bergmann", 1680 | "email": "sebastian@phpunit.de", 1681 | "role": "lead" 1682 | } 1683 | ], 1684 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1685 | "homepage": "https://github.com/sebastianbergmann/version", 1686 | "time": "2016-10-03T07:35:21+00:00" 1687 | }, 1688 | { 1689 | "name": "symfony/polyfill-ctype", 1690 | "version": "v1.12.0", 1691 | "source": { 1692 | "type": "git", 1693 | "url": "https://github.com/symfony/polyfill-ctype.git", 1694 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4" 1695 | }, 1696 | "dist": { 1697 | "type": "zip", 1698 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", 1699 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4", 1700 | "shasum": "" 1701 | }, 1702 | "require": { 1703 | "php": ">=5.3.3" 1704 | }, 1705 | "suggest": { 1706 | "ext-ctype": "For best performance" 1707 | }, 1708 | "type": "library", 1709 | "extra": { 1710 | "branch-alias": { 1711 | "dev-master": "1.12-dev" 1712 | } 1713 | }, 1714 | "autoload": { 1715 | "psr-4": { 1716 | "Symfony\\Polyfill\\Ctype\\": "" 1717 | }, 1718 | "files": [ 1719 | "bootstrap.php" 1720 | ] 1721 | }, 1722 | "notification-url": "https://packagist.org/downloads/", 1723 | "license": [ 1724 | "MIT" 1725 | ], 1726 | "authors": [ 1727 | { 1728 | "name": "Gert de Pagter", 1729 | "email": "BackEndTea@gmail.com" 1730 | }, 1731 | { 1732 | "name": "Symfony Community", 1733 | "homepage": "https://symfony.com/contributors" 1734 | } 1735 | ], 1736 | "description": "Symfony polyfill for ctype functions", 1737 | "homepage": "https://symfony.com", 1738 | "keywords": [ 1739 | "compatibility", 1740 | "ctype", 1741 | "polyfill", 1742 | "portable" 1743 | ], 1744 | "time": "2019-08-06T08:03:45+00:00" 1745 | }, 1746 | { 1747 | "name": "theseer/tokenizer", 1748 | "version": "1.1.3", 1749 | "source": { 1750 | "type": "git", 1751 | "url": "https://github.com/theseer/tokenizer.git", 1752 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 1753 | }, 1754 | "dist": { 1755 | "type": "zip", 1756 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 1757 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 1758 | "shasum": "" 1759 | }, 1760 | "require": { 1761 | "ext-dom": "*", 1762 | "ext-tokenizer": "*", 1763 | "ext-xmlwriter": "*", 1764 | "php": "^7.0" 1765 | }, 1766 | "type": "library", 1767 | "autoload": { 1768 | "classmap": [ 1769 | "src/" 1770 | ] 1771 | }, 1772 | "notification-url": "https://packagist.org/downloads/", 1773 | "license": [ 1774 | "BSD-3-Clause" 1775 | ], 1776 | "authors": [ 1777 | { 1778 | "name": "Arne Blankerts", 1779 | "email": "arne@blankerts.de", 1780 | "role": "Developer" 1781 | } 1782 | ], 1783 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1784 | "time": "2019-06-13T22:48:21+00:00" 1785 | }, 1786 | { 1787 | "name": "webmozart/assert", 1788 | "version": "1.5.0", 1789 | "source": { 1790 | "type": "git", 1791 | "url": "https://github.com/webmozart/assert.git", 1792 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" 1793 | }, 1794 | "dist": { 1795 | "type": "zip", 1796 | "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", 1797 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", 1798 | "shasum": "" 1799 | }, 1800 | "require": { 1801 | "php": "^5.3.3 || ^7.0", 1802 | "symfony/polyfill-ctype": "^1.8" 1803 | }, 1804 | "require-dev": { 1805 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 1806 | }, 1807 | "type": "library", 1808 | "extra": { 1809 | "branch-alias": { 1810 | "dev-master": "1.3-dev" 1811 | } 1812 | }, 1813 | "autoload": { 1814 | "psr-4": { 1815 | "Webmozart\\Assert\\": "src/" 1816 | } 1817 | }, 1818 | "notification-url": "https://packagist.org/downloads/", 1819 | "license": [ 1820 | "MIT" 1821 | ], 1822 | "authors": [ 1823 | { 1824 | "name": "Bernhard Schussek", 1825 | "email": "bschussek@gmail.com" 1826 | } 1827 | ], 1828 | "description": "Assertions to validate method input/output with nice error messages.", 1829 | "keywords": [ 1830 | "assert", 1831 | "check", 1832 | "validate" 1833 | ], 1834 | "time": "2019-08-24T08:43:50+00:00" 1835 | } 1836 | ], 1837 | "aliases": [], 1838 | "minimum-stability": "dev", 1839 | "stability-flags": [], 1840 | "prefer-stable": true, 1841 | "prefer-lowest": false, 1842 | "platform": { 1843 | "ext-dom": "*", 1844 | "ext-mbstring": "*" 1845 | }, 1846 | "platform-dev": [] 1847 | } 1848 | --------------------------------------------------------------------------------