├── .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 | 
3 | * Create a Certifcate Authority that can be use to issue certificate for domains.
4 |
5 | [](https://github.com/madeny/lhttps/actions)
6 | [](https://travis-ci.org/madeny/lhttps)
7 | [](https://circleci.com/gh/madeny/lhttps)
8 | [](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 |
--------------------------------------------------------------------------------