├── response_temp
├── resources
│ ├── js
│ │ └── .gitignore
│ ├── sass
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── storage
│ └── app
│ ├── public
│ └── .gitignore
│ └── .gitignore
├── run
├── app
├── Base
│ ├── Css.php
│ ├── Js.php
│ ├── Url.php
│ └── Image.php
└── Main.php
├── index.php
├── .env
├── .gitignore
├── config
└── app.php
├── .github
└── workflows
│ └── php.yml
├── links.php
├── composer.json
├── README.md
├── index1.php
├── LICENSE
└── composer.lock
/response_temp/resources/js/.gitignore:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/response_temp/resources/sass/.gitignore:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/response_temp/resources/views/.gitignore:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/run:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | run();
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | RESPONSE_RESOURCES="response/resources/"
2 | STORAGE_APP="response/storage/app/public/"
3 | RESPONSE_RESOURCES_VIEWS="response/resources/views/"
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | .env
7 | .phpunit.result.cache
8 | Homestead.json
9 | Homestead.yaml
10 | npm-debug.log
11 | yarn-error.log
12 | /response
13 | .idea
14 |
--------------------------------------------------------------------------------
/config/app.php:
--------------------------------------------------------------------------------
1 | 'https://www.bilibili.com',
4 | 'wait_capture_urls' => [
5 | 'index' => 'https://www.bilibili.com',
6 | //'list' => 'https://www.bilibili.com/v/dance/',
7 | //'detail' => 'https://www.bilibili.com/video/av50530804/'
8 | ],
9 | 'is_impersonate_rank' => false,
10 | 'is_deep_clone' => true,
11 | 'is_laravel_resource' => true,
12 | 'deep_clone_resource_type' => [
13 | 'images',
14 | 'js',
15 | 'css',
16 | ]
17 | ];
--------------------------------------------------------------------------------
/.github/workflows/php.yml:
--------------------------------------------------------------------------------
1 | name: PHP Composer
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 |
--------------------------------------------------------------------------------
/links.php:
--------------------------------------------------------------------------------
1 | filter('a')->links();
14 | foreach ($links as $link) {
15 | $temp_links[] = ['url' => $link->getUri(), 'text' => $link->getNode()->textContent];
16 | }
17 | file_put_contents('links.txt', json_encode($temp_links, JSON_UNESCAPED_UNICODE));
18 | echo 'success
';
19 | $t2 = microtime(true);
20 | echo 'time consuming ' . round($t2 - $t1, 3) . ' s' . PHP_EOL;
21 | } catch (Exception $exception) {
22 | echo $exception->getCode() . ', message:' . $exception->getMessage();
23 | }
24 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "master-cloner/cornerstone",
3 | "type": "project",
4 | "description": "The Panther Framework.",
5 | "keywords": [
6 | "panther",
7 | "MasterCloner/Cornerstone"
8 | ],
9 | "license": "MIT",
10 | "require": {
11 | "php": "^7.2.5",
12 | "guzzlehttp/guzzle": "^6.3",
13 | "monolog/monolog": "^1.24",
14 | "symfony/css-selector": "^4.2",
15 | "symfony/dom-crawler": "^4.2",
16 | "symfony/panther": "^0.3.0",
17 | "vlucas/phpdotenv": "^3.4"
18 | },
19 | "require-dev": {
20 | "phpunit/phpunit": "^7.5"
21 | },
22 | "config": {
23 | "optimize-autoloader": true,
24 | "preferred-install": "dist",
25 | "sort-packages": true
26 | },
27 | "extra": {
28 | "laravel": {
29 | "dont-discover": []
30 | }
31 | },
32 | "autoload": {
33 | "psr-4": {
34 | "App\\": "app/",
35 | "Config\\": "config/"
36 | }
37 | },
38 | "autoload-dev": {
39 | },
40 | "minimum-stability": "dev",
41 | "prefer-stable": true,
42 | "scripts": {
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Cornerstone
2 |
3 | 克隆大师基类, 基于 symfony/panther(https://github.com/symfony/panther)
4 |
5 | #### Action
6 | 用于 MasterCloner clone 项目页面资源的基础类库
7 |
8 | ##### 推荐使用于 Ubuntu 或 Mac 环境下且以安装 Chrome 浏览器
9 |
10 | ##### PHP 版本 7.1 以上
11 |
12 | #### 效果如下
13 |
14 |
15 | 1.配置待克隆项目
16 |
17 | ```php
18 | // 配置基础 Uri (必须)
19 | $base_uri = 'https://www.bilibili.com'
20 |
21 | // 待克隆 urls
22 | $config['wait_capture_urls'] => [
23 | 'index' => 'https://www.bilibili.com', // (必须)
24 | //'list' => 'https://www.bilibili.com/v/dance/',
25 | //'detail' => 'https://www.bilibili.com/video/av50530804/'
26 | ]
27 | // 启用深克隆,进行本地化资源
28 | $config['is_deep_clone'] = true
29 | // 启用 CDN 克隆,进行 CDN 资源本地化(TODO)
30 | $config['is_cdn_clone'] = true
31 | // 本地化资源类型(图片,js,css)
32 | $config['deep_clone_resource_type'] = [
33 | 'images',
34 | 'js',
35 | 'css',
36 | ],
37 |
38 | // 声明资源类型为 laravel,进行模版内容替换(TODO)
39 | $config['is_laravel_resource'] = true
40 | ```
41 |
42 |
43 |
44 | 2.运行
45 |
46 | cli 运行方式
47 | ```
48 | php index.php
49 |
50 | // 超链接 - 运行后根目录生成 links.txt 文件
51 | php links.php
52 | ```
53 |
54 | fpm 运行方式
55 | ```
56 | php -S localhost:8000
57 | chrome open localhost:8000
58 | ```
59 |
60 | 3.在运行结束后,复制 response 至 Laravel 或其它项目中即可
61 |
62 |
63 |
64 | Tips:
65 |
66 | 如果进程卡死,请释放端口 9515
67 | ```
68 | lsof -i:9515
69 | kill PID
70 | ```
71 |
72 |
73 | #### Todo
74 | 拆分爬取类型
75 | - 模版类型
76 | - 资源类型
77 | - 存储类型
78 |
79 | 提取配置抽象成类
80 |
81 | CDN 等资源本地化
82 |
--------------------------------------------------------------------------------
/index1.php:
--------------------------------------------------------------------------------
1 | [
13 | 'index' => 'http://www.yihonyiqi.com',
14 | //'list' => 'https://www.bilibili.com/v/dance/',
15 | //'detail' => 'https://www.bilibili.com/video/av50530804/'
16 | ],
17 | 'is_impersonate_rank' => false,
18 | 'is_deep_clone' => true,
19 | 'is_laravel_resource' => true,
20 | 'deep_clone_resource_type' => [
21 | 'images',
22 | 'js',
23 | 'css',
24 | ],
25 | 'log_enable' => false,
26 | ];
27 | $wait_replace_imgs = [];
28 |
29 | function initializeResponsePath(): void
30 | {
31 | exec('rm -rf response');
32 | exec('cp -a response_temp response');
33 | }
34 |
35 | function createDir($path, $i = 0)
36 | {
37 | if (50 > $i && $path && ! file_exists($path)) {
38 | $i++;
39 | createDir(dirname($path), $i);
40 | if (! is_dir($path) && ! mkdir($path, 0777) && ! is_dir($path)) {
41 | echo $path . PHP_EOL;
42 | }
43 | }
44 | }
45 |
46 | function createResourcePath($file_path, $type)
47 | {
48 | $parse_url = parse_url($file_path);
49 | switch ($type) {
50 | case 'img':
51 | case 'image':
52 | $type = 'images';
53 | $file_path = STORAGE_APP . "{$type}" . $parse_url['path'];
54 | break;
55 | case 'js':
56 | case 'css':
57 | $file_path = RESPONSE_RESOURCES . "{$type}" . $parse_url['path'];
58 | break;
59 | }
60 | createDir(dirname($file_path));
61 | return $file_path;
62 | }
63 |
64 | function copyResource($url_paths)
65 | {
66 | $Client = new GuzzleHttp\Client();
67 | $replace_resources = $promises = [];
68 | foreach ($url_paths as $url_path) {
69 | foreach ($url_path as $url => $file_path) {
70 | $promises[$file_path] = $Client->getAsync($url, ['save_to' => $file_path]);
71 | $replace_resources[$url] = $file_path;
72 | }
73 | }
74 | GuzzleHttp\Promise\unwrap($promises);
75 | return $replace_resources;
76 | }
77 |
78 | function deepCloneResource($is_laravel_resource)
79 | {
80 | global $base_uri, $wait_replace_imgs;
81 | $file_names = scandir(RESPONSE_RESOURCES_VIEWS);
82 | foreach ($file_names as $file_name) {
83 | if (! in_array($file_name, ['.', '..'])) {
84 | $blade_file = RESPONSE_RESOURCES_VIEWS . $file_name;
85 | $html_node = file_get_contents($blade_file);
86 | $Crawler = new \Symfony\Component\DomCrawler\Crawler($html_node, $base_uri);
87 | preg_match_all('/\s*?<\/script>/i', $html_node, $js);
88 | preg_match_all('//i', $html_node, $css);
89 | foreach ($css[0] as $key => $value) {
90 | if (false === strstr($value, 'stylesheet')) {
91 | unset($css[1][$key]);
92 | }
93 | }
94 | $wait_replace_imgs = getImages($Crawler, $base_uri, $wait_replace_imgs);
95 | $wait_replace_js = getScriptOrCss($js[1], 'js');
96 | $wait_replace_css = getScriptOrCss(array_values($css[1]), 'css');
97 |
98 | $replace_resources = copyResource([$wait_replace_imgs, $wait_replace_js, $wait_replace_css]);
99 | $html_node = str_replace(['="https:', '="http:',], '="', $html_node);
100 | foreach ($replace_resources as $url => $file_path) {
101 | $url = str_replace(['https:', 'http:',], '', $url);
102 | $file_path = str_replace(
103 | ['response/resources/', 'response/storage/app/public/'],
104 | '',
105 | $file_path);
106 | if ($is_laravel_resource) {
107 | $file_path = "{{ asset('" . $file_path . "') }}";
108 | }
109 | $html_node = str_replace($url, $file_path, $html_node);
110 | }
111 | file_put_contents($blade_file, $html_node);
112 | }
113 | }
114 | }
115 |
116 | /**
117 | * @param \Symfony\Component\DomCrawler\Crawler $Crawler
118 | * @param string $base_uri
119 | * @param array $wait_replace_imgs
120 | *
121 | * @return array
122 | */
123 | function getImages(\Symfony\Component\DomCrawler\Crawler $Crawler, string $base_uri, array $wait_replace_imgs): array
124 | {
125 | $images = $Crawler->filter('img')->images();
126 | foreach ($images as $image) {
127 | $img_uri = $image->getUri();
128 | if ($img_uri && $base_uri !== $img_uri) {
129 | $wait_replace_imgs[$img_uri] = createResourcePath($img_uri, 'img');
130 | }
131 | }
132 | return $wait_replace_imgs;
133 | }
134 |
135 | function getScriptOrCss($data, $type)
136 | {
137 | $wait_replace_arr = [];
138 | foreach ($data as $j) {
139 | $wait_replace_arr[$j] = createResourcePath($j, $type);
140 | }
141 | return $wait_replace_arr;
142 | }
143 |
144 | $t1 = microtime(true);
145 |
146 | function function_test()
147 | {
148 | deepCloneResource(true);
149 | die();
150 | }
151 |
152 | function isCli()
153 | {
154 | return preg_match("/cli/i", php_sapi_name()) ? true : false;
155 | }
156 |
157 | function addLog($msg, $path = 'logs/run.log')
158 | {
159 | file_put_contents($path, $msg . PHP_EOL);
160 | }
161 |
162 | //function_test();
163 |
164 | try {
165 | if (isCli()) {
166 | echo 'action' . PHP_EOL;
167 | }
168 | set_time_limit(1800);
169 | ini_set("max_execution_time", 1800);
170 | ini_set('memory_limit', '512M');
171 | initializeResponsePath();
172 | $client = \Symfony\Component\Panther\Client::createChromeClient();
173 | foreach ($config['wait_capture_urls'] as $capture_name => $capture_url) {
174 | $crawler_response = $client->request('GET', $capture_url);
175 | $file_name = RESPONSE_RESOURCES_VIEWS . $capture_name . '.blade.php';
176 | file_put_contents($file_name, $crawler_response->html());
177 | if (true === $config['is_impersonate_rank']) {
178 | sleep(random_int(0, 2));
179 | }
180 | }
181 | if (true === $config['is_deep_clone']) {
182 | deepCloneResource($config['is_laravel_resource']);
183 | }
184 | echo '成功,资源存储在 response 中,
';
185 | $t2 = microtime(true);
186 | echo '耗时' . round($t2 - $t1, 3) . '秒';
187 | } catch (Exception $exception) {
188 | echo $exception->getCode() . ', message:' . $exception->getMessage();
189 | }
190 |
191 |
--------------------------------------------------------------------------------
/app/Main.php:
--------------------------------------------------------------------------------
1 | config = Config::load(__DIR__ . '/../config/app.php');
34 | }
35 |
36 | /**
37 | * @return null
38 | */
39 | public function run()
40 | {
41 | try {
42 | if ($this->isCli()) {
43 | echo 'action' . PHP_EOL;
44 | }
45 | set_time_limit(1800);
46 | ini_set("max_execution_time", -1);
47 | ini_set('memory_limit', '512M');
48 | $this->initializeResponsePath();
49 | $client = Client::createChromeClient();
50 | foreach ($this->config['wait_capture_urls'] as $capture_name => $capture_url) {
51 | $crawler_response = $client->request('GET', $capture_url);
52 | $file_name = RESPONSE_RESOURCES_VIEWS . $capture_name . '.blade.php';
53 | file_put_contents($file_name, $crawler_response->html());
54 | if (true === $this->config['is_impersonate_rank']) {
55 | sleep(random_int(0, 2));
56 | }
57 | }
58 | if (true === $this->config['is_deep_clone']) {
59 | $this->deepCloneResource($this->config['is_laravel_resource']);
60 | }
61 | echo '成功,资源存储在 response 中,
';
62 | $t2 = microtime(true);
63 | echo '耗时' . round($t2 - $t1, 3) . '秒';
64 | } catch (Exception $exception) {
65 | echo $exception->getCode() . ', message:' . $exception->getMessage();
66 | }
67 | }
68 |
69 | public function initializeResponsePath(): void
70 | {
71 | exec('rm -rf response');
72 | exec('cp -a response_temp response');
73 | }
74 |
75 | public function deepCloneResource($is_laravel_resource)
76 | {
77 | $file_names = scandir(RESPONSE_RESOURCES_VIEWS);
78 | foreach ($file_names as $file_name) {
79 | if (! in_array($file_name, ['.', '..'])) {
80 | $blade_file = RESPONSE_RESOURCES_VIEWS . $file_name;
81 | $html_node = file_get_contents($blade_file);
82 | $Crawler = new Crawler($html_node, $this->base_uri);
83 | preg_match_all('/\s*?<\/script>/i', $html_node, $js);
84 | preg_match_all('//i', $html_node, $css);
85 | foreach ($css[0] as $key => $value) {
86 | if (false === strstr($value, 'stylesheet')) {
87 | unset($css[1][$key]);
88 | }
89 | }
90 | $this->wait_replace_imgs = $this->getImages($Crawler, $this->base_uri, $this->wait_replace_imgs);
91 | $wait_replace_js = $this->getScriptOrCss($js[1], 'js');
92 | $wait_replace_css = $this->getScriptOrCss(array_values($css[1]), 'css');
93 |
94 | $replace_resources = $this->copyResource([$this->wait_replace_imgs, $wait_replace_js, $wait_replace_css]);
95 | $html_node = str_replace(['="https:', '="http:',], '="', $html_node);
96 | foreach ($replace_resources as $url => $file_path) {
97 | $url = str_replace(['https:', 'http:',], '', $url);
98 | $file_path = str_replace(
99 | ['response/resources/', 'response/storage/app/public/'],
100 | '',
101 | $file_path);
102 | if ($is_laravel_resource) {
103 | $file_path = "{{ asset('" . $file_path . "') }}";
104 | }
105 | $html_node = str_replace($url, $file_path, $html_node);
106 | }
107 | file_put_contents($blade_file, $html_node);
108 | }
109 | }
110 | }
111 |
112 | public function getScriptOrCss($data, $type)
113 | {
114 | $wait_replace_arr = [];
115 | foreach ($data as $j) {
116 | $wait_replace_arr[$j] = $this->createResourcePath($j, $type);
117 | }
118 | return $wait_replace_arr;
119 | }
120 |
121 | public function copyResource($url_paths)
122 | {
123 | $Client = new \GuzzleHttp\Client();
124 | $replace_resources = $promises = [];
125 | foreach ($url_paths as $url_path) {
126 | foreach ($url_path as $url => $file_path) {
127 | $promises[$file_path] = $Client->getAsync($url, ['save_to' => $file_path]);
128 | $replace_resources[$url] = $file_path;
129 | }
130 | }
131 | GuzzleHttp\Promise\unwrap($promises);
132 | return $replace_resources;
133 | }
134 |
135 | public function createDir($path, $i = 0)
136 | {
137 | if (50 > $i && $path && ! file_exists($path)) {
138 | $i++;
139 | $this->createDir(dirname($path), $i);
140 | if (! is_dir($path) && ! mkdir($path, 0777) && ! is_dir($path)) {
141 | echo $path . PHP_EOL;
142 | }
143 | }
144 | }
145 |
146 | public function createResourcePath($file_path, $type)
147 | {
148 | $parse_url = parse_url($file_path);
149 | switch ($type) {
150 | case 'img':
151 | case 'image':
152 | $type = 'images';
153 | $file_path = STORAGE_APP . "{$type}" . $parse_url['path'];
154 | break;
155 | case 'js':
156 | case 'css':
157 | $file_path = RESPONSE_RESOURCES . "{$type}" . $parse_url['path'];
158 | break;
159 | }
160 | $this->createDir(dirname($file_path));
161 | return $file_path;
162 | }
163 |
164 | public function getImages(\Symfony\Component\DomCrawler\Crawler $Crawler, string $base_uri, array $wait_replace_imgs): array
165 | {
166 | $images = $Crawler->filter('img')->images();
167 | foreach ($images as $image) {
168 | $img_uri = $image->getUri();
169 | if ($img_uri && $base_uri !== $img_uri) {
170 | $wait_replace_imgs[$img_uri] = $this->createResourcePath($img_uri, 'img');
171 | }
172 | }
173 | return $wait_replace_imgs;
174 | }
175 |
176 | public function isCli()
177 | {
178 | return preg_match("/cli/i", php_sapi_name()) ? true : false;
179 | }
180 |
181 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/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": "be8cce7d6348d40affd77145866ecd74",
8 | "packages": [
9 | {
10 | "name": "facebook/webdriver",
11 | "version": "1.7.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/facebook/php-webdriver.git",
15 | "reference": "e43de70f3c7166169d0f14a374505392734160e5"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/e43de70f3c7166169d0f14a374505392734160e5",
20 | "reference": "e43de70f3c7166169d0f14a374505392734160e5",
21 | "shasum": "",
22 | "mirrors": [
23 | {
24 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
25 | "preferred": true
26 | }
27 | ]
28 | },
29 | "require": {
30 | "ext-curl": "*",
31 | "ext-json": "*",
32 | "ext-mbstring": "*",
33 | "ext-zip": "*",
34 | "php": "^5.6 || ~7.0",
35 | "symfony/process": "^2.8 || ^3.1 || ^4.0"
36 | },
37 | "require-dev": {
38 | "friendsofphp/php-cs-fixer": "^2.0",
39 | "jakub-onderka/php-parallel-lint": "^0.9.2",
40 | "php-coveralls/php-coveralls": "^2.0",
41 | "php-mock/php-mock-phpunit": "^1.1",
42 | "phpunit/phpunit": "^5.7",
43 | "sebastian/environment": "^1.3.4 || ^2.0 || ^3.0",
44 | "squizlabs/php_codesniffer": "^2.6",
45 | "symfony/var-dumper": "^3.3 || ^4.0"
46 | },
47 | "suggest": {
48 | "ext-SimpleXML": "For Firefox profile creation"
49 | },
50 | "type": "library",
51 | "extra": {
52 | "branch-alias": {
53 | "dev-community": "1.5-dev"
54 | }
55 | },
56 | "autoload": {
57 | "psr-4": {
58 | "Facebook\\WebDriver\\": "lib/"
59 | }
60 | },
61 | "notification-url": "https://packagist.org/downloads/",
62 | "license": [
63 | "Apache-2.0"
64 | ],
65 | "description": "A PHP client for Selenium WebDriver",
66 | "homepage": "https://github.com/facebook/php-webdriver",
67 | "keywords": [
68 | "facebook",
69 | "php",
70 | "selenium",
71 | "webdriver"
72 | ],
73 | "time": "2019-06-13T08:02:18+00:00"
74 | },
75 | {
76 | "name": "guzzlehttp/guzzle",
77 | "version": "6.3.3",
78 | "source": {
79 | "type": "git",
80 | "url": "https://github.com/guzzle/guzzle.git",
81 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
82 | },
83 | "dist": {
84 | "type": "zip",
85 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
86 | "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
87 | "shasum": "",
88 | "mirrors": [
89 | {
90 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
91 | "preferred": true
92 | }
93 | ]
94 | },
95 | "require": {
96 | "guzzlehttp/promises": "^1.0",
97 | "guzzlehttp/psr7": "^1.4",
98 | "php": ">=5.5"
99 | },
100 | "require-dev": {
101 | "ext-curl": "*",
102 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
103 | "psr/log": "^1.0"
104 | },
105 | "suggest": {
106 | "psr/log": "Required for using the Log middleware"
107 | },
108 | "type": "library",
109 | "extra": {
110 | "branch-alias": {
111 | "dev-master": "6.3-dev"
112 | }
113 | },
114 | "autoload": {
115 | "files": [
116 | "src/functions_include.php"
117 | ],
118 | "psr-4": {
119 | "GuzzleHttp\\": "src/"
120 | }
121 | },
122 | "notification-url": "https://packagist.org/downloads/",
123 | "license": [
124 | "MIT"
125 | ],
126 | "authors": [
127 | {
128 | "name": "Michael Dowling",
129 | "email": "mtdowling@gmail.com",
130 | "homepage": "https://github.com/mtdowling"
131 | }
132 | ],
133 | "description": "Guzzle is a PHP HTTP client library",
134 | "homepage": "http://guzzlephp.org/",
135 | "keywords": [
136 | "client",
137 | "curl",
138 | "framework",
139 | "http",
140 | "http client",
141 | "rest",
142 | "web service"
143 | ],
144 | "time": "2018-04-22T15:46:56+00:00"
145 | },
146 | {
147 | "name": "guzzlehttp/promises",
148 | "version": "v1.3.1",
149 | "source": {
150 | "type": "git",
151 | "url": "https://github.com/guzzle/promises.git",
152 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
153 | },
154 | "dist": {
155 | "type": "zip",
156 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
157 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
158 | "shasum": "",
159 | "mirrors": [
160 | {
161 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
162 | "preferred": true
163 | }
164 | ]
165 | },
166 | "require": {
167 | "php": ">=5.5.0"
168 | },
169 | "require-dev": {
170 | "phpunit/phpunit": "^4.0"
171 | },
172 | "type": "library",
173 | "extra": {
174 | "branch-alias": {
175 | "dev-master": "1.4-dev"
176 | }
177 | },
178 | "autoload": {
179 | "psr-4": {
180 | "GuzzleHttp\\Promise\\": "src/"
181 | },
182 | "files": [
183 | "src/functions_include.php"
184 | ]
185 | },
186 | "notification-url": "https://packagist.org/downloads/",
187 | "license": [
188 | "MIT"
189 | ],
190 | "authors": [
191 | {
192 | "name": "Michael Dowling",
193 | "email": "mtdowling@gmail.com",
194 | "homepage": "https://github.com/mtdowling"
195 | }
196 | ],
197 | "description": "Guzzle promises library",
198 | "keywords": [
199 | "promise"
200 | ],
201 | "time": "2016-12-20T10:07:11+00:00"
202 | },
203 | {
204 | "name": "guzzlehttp/psr7",
205 | "version": "1.6.1",
206 | "source": {
207 | "type": "git",
208 | "url": "https://github.com/guzzle/psr7.git",
209 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
210 | },
211 | "dist": {
212 | "type": "zip",
213 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
214 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
215 | "shasum": "",
216 | "mirrors": [
217 | {
218 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
219 | "preferred": true
220 | }
221 | ]
222 | },
223 | "require": {
224 | "php": ">=5.4.0",
225 | "psr/http-message": "~1.0",
226 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
227 | },
228 | "provide": {
229 | "psr/http-message-implementation": "1.0"
230 | },
231 | "require-dev": {
232 | "ext-zlib": "*",
233 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
234 | },
235 | "suggest": {
236 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
237 | },
238 | "type": "library",
239 | "extra": {
240 | "branch-alias": {
241 | "dev-master": "1.6-dev"
242 | }
243 | },
244 | "autoload": {
245 | "psr-4": {
246 | "GuzzleHttp\\Psr7\\": "src/"
247 | },
248 | "files": [
249 | "src/functions_include.php"
250 | ]
251 | },
252 | "notification-url": "https://packagist.org/downloads/",
253 | "license": [
254 | "MIT"
255 | ],
256 | "authors": [
257 | {
258 | "name": "Michael Dowling",
259 | "email": "mtdowling@gmail.com",
260 | "homepage": "https://github.com/mtdowling"
261 | },
262 | {
263 | "name": "Tobias Schultze",
264 | "homepage": "https://github.com/Tobion"
265 | }
266 | ],
267 | "description": "PSR-7 message implementation that also provides common utility methods",
268 | "keywords": [
269 | "http",
270 | "message",
271 | "psr-7",
272 | "request",
273 | "response",
274 | "stream",
275 | "uri",
276 | "url"
277 | ],
278 | "time": "2019-07-01T23:21:34+00:00"
279 | },
280 | {
281 | "name": "monolog/monolog",
282 | "version": "1.24.0",
283 | "source": {
284 | "type": "git",
285 | "url": "https://github.com/Seldaek/monolog.git",
286 | "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
287 | },
288 | "dist": {
289 | "type": "zip",
290 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
291 | "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
292 | "shasum": "",
293 | "mirrors": [
294 | {
295 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
296 | "preferred": true
297 | }
298 | ]
299 | },
300 | "require": {
301 | "php": ">=5.3.0",
302 | "psr/log": "~1.0"
303 | },
304 | "provide": {
305 | "psr/log-implementation": "1.0.0"
306 | },
307 | "require-dev": {
308 | "aws/aws-sdk-php": "^2.4.9 || ^3.0",
309 | "doctrine/couchdb": "~1.0@dev",
310 | "graylog2/gelf-php": "~1.0",
311 | "jakub-onderka/php-parallel-lint": "0.9",
312 | "php-amqplib/php-amqplib": "~2.4",
313 | "php-console/php-console": "^3.1.3",
314 | "phpunit/phpunit": "~4.5",
315 | "phpunit/phpunit-mock-objects": "2.3.0",
316 | "ruflin/elastica": ">=0.90 <3.0",
317 | "sentry/sentry": "^0.13",
318 | "swiftmailer/swiftmailer": "^5.3|^6.0"
319 | },
320 | "suggest": {
321 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
322 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
323 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
324 | "ext-mongo": "Allow sending log messages to a MongoDB server",
325 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
326 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
327 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
328 | "php-console/php-console": "Allow sending log messages to Google Chrome",
329 | "rollbar/rollbar": "Allow sending log messages to Rollbar",
330 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
331 | "sentry/sentry": "Allow sending log messages to a Sentry server"
332 | },
333 | "type": "library",
334 | "extra": {
335 | "branch-alias": {
336 | "dev-master": "2.0.x-dev"
337 | }
338 | },
339 | "autoload": {
340 | "psr-4": {
341 | "Monolog\\": "src/Monolog"
342 | }
343 | },
344 | "notification-url": "https://packagist.org/downloads/",
345 | "license": [
346 | "MIT"
347 | ],
348 | "authors": [
349 | {
350 | "name": "Jordi Boggiano",
351 | "email": "j.boggiano@seld.be",
352 | "homepage": "http://seld.be"
353 | }
354 | ],
355 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
356 | "homepage": "http://github.com/Seldaek/monolog",
357 | "keywords": [
358 | "log",
359 | "logging",
360 | "psr-3"
361 | ],
362 | "time": "2018-11-05T09:00:11+00:00"
363 | },
364 | {
365 | "name": "php-amqplib/php-amqplib",
366 | "version": "v2.9.2",
367 | "source": {
368 | "type": "git",
369 | "url": "https://github.com/php-amqplib/php-amqplib.git",
370 | "reference": "76faddcd668dabb8d4f7c00e86b8a9decd781a59"
371 | },
372 | "dist": {
373 | "type": "zip",
374 | "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/76faddcd668dabb8d4f7c00e86b8a9decd781a59",
375 | "reference": "76faddcd668dabb8d4f7c00e86b8a9decd781a59",
376 | "shasum": "",
377 | "mirrors": [
378 | {
379 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
380 | "preferred": true
381 | }
382 | ]
383 | },
384 | "require": {
385 | "ext-bcmath": "*",
386 | "ext-sockets": "*",
387 | "php": ">=5.4.0"
388 | },
389 | "replace": {
390 | "videlalvaro/php-amqplib": "self.version"
391 | },
392 | "require-dev": {
393 | "ext-curl": "*",
394 | "nategood/httpful": "^0.2.20",
395 | "phpdocumentor/phpdocumentor": "^2.9",
396 | "phpunit/phpunit": "^4.8",
397 | "squizlabs/php_codesniffer": "^2.5"
398 | },
399 | "type": "library",
400 | "extra": {
401 | "branch-alias": {
402 | "dev-master": "2.8-dev"
403 | }
404 | },
405 | "autoload": {
406 | "psr-4": {
407 | "PhpAmqpLib\\": "PhpAmqpLib/"
408 | }
409 | },
410 | "notification-url": "https://packagist.org/downloads/",
411 | "license": [
412 | "LGPL-2.1-or-later"
413 | ],
414 | "authors": [
415 | {
416 | "name": "Alvaro Videla",
417 | "role": "Original Maintainer"
418 | },
419 | {
420 | "name": "John Kelly",
421 | "role": "Maintainer",
422 | "email": "johnmkelly86@gmail.com"
423 | },
424 | {
425 | "name": "Raúl Araya",
426 | "role": "Maintainer",
427 | "email": "nubeiro@gmail.com"
428 | },
429 | {
430 | "name": "Luke Bakken",
431 | "role": "Maintainer",
432 | "email": "luke@bakken.io"
433 | }
434 | ],
435 | "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
436 | "homepage": "https://github.com/php-amqplib/php-amqplib/",
437 | "keywords": [
438 | "message",
439 | "queue",
440 | "rabbitmq"
441 | ],
442 | "time": "2019-04-24T15:36:21+00:00"
443 | },
444 | {
445 | "name": "phpoption/phpoption",
446 | "version": "1.5.0",
447 | "source": {
448 | "type": "git",
449 | "url": "https://github.com/schmittjoh/php-option.git",
450 | "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed"
451 | },
452 | "dist": {
453 | "type": "zip",
454 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed",
455 | "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed",
456 | "shasum": "",
457 | "mirrors": [
458 | {
459 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
460 | "preferred": true
461 | }
462 | ]
463 | },
464 | "require": {
465 | "php": ">=5.3.0"
466 | },
467 | "require-dev": {
468 | "phpunit/phpunit": "4.7.*"
469 | },
470 | "type": "library",
471 | "extra": {
472 | "branch-alias": {
473 | "dev-master": "1.3-dev"
474 | }
475 | },
476 | "autoload": {
477 | "psr-0": {
478 | "PhpOption\\": "src/"
479 | }
480 | },
481 | "notification-url": "https://packagist.org/downloads/",
482 | "license": [
483 | "Apache2"
484 | ],
485 | "authors": [
486 | {
487 | "name": "Johannes M. Schmitt",
488 | "email": "schmittjoh@gmail.com"
489 | }
490 | ],
491 | "description": "Option Type for PHP",
492 | "keywords": [
493 | "language",
494 | "option",
495 | "php",
496 | "type"
497 | ],
498 | "time": "2015-07-25T16:39:46+00:00"
499 | },
500 | {
501 | "name": "psr/http-message",
502 | "version": "1.0.1",
503 | "source": {
504 | "type": "git",
505 | "url": "https://github.com/php-fig/http-message.git",
506 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
507 | },
508 | "dist": {
509 | "type": "zip",
510 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
511 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
512 | "shasum": "",
513 | "mirrors": [
514 | {
515 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
516 | "preferred": true
517 | }
518 | ]
519 | },
520 | "require": {
521 | "php": ">=5.3.0"
522 | },
523 | "type": "library",
524 | "extra": {
525 | "branch-alias": {
526 | "dev-master": "1.0.x-dev"
527 | }
528 | },
529 | "autoload": {
530 | "psr-4": {
531 | "Psr\\Http\\Message\\": "src/"
532 | }
533 | },
534 | "notification-url": "https://packagist.org/downloads/",
535 | "license": [
536 | "MIT"
537 | ],
538 | "authors": [
539 | {
540 | "name": "PHP-FIG",
541 | "homepage": "http://www.php-fig.org/"
542 | }
543 | ],
544 | "description": "Common interface for HTTP messages",
545 | "homepage": "https://github.com/php-fig/http-message",
546 | "keywords": [
547 | "http",
548 | "http-message",
549 | "psr",
550 | "psr-7",
551 | "request",
552 | "response"
553 | ],
554 | "time": "2016-08-06T14:39:51+00:00"
555 | },
556 | {
557 | "name": "psr/log",
558 | "version": "1.1.0",
559 | "source": {
560 | "type": "git",
561 | "url": "https://github.com/php-fig/log.git",
562 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
563 | },
564 | "dist": {
565 | "type": "zip",
566 | "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
567 | "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
568 | "shasum": "",
569 | "mirrors": [
570 | {
571 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
572 | "preferred": true
573 | }
574 | ]
575 | },
576 | "require": {
577 | "php": ">=5.3.0"
578 | },
579 | "type": "library",
580 | "extra": {
581 | "branch-alias": {
582 | "dev-master": "1.0.x-dev"
583 | }
584 | },
585 | "autoload": {
586 | "psr-4": {
587 | "Psr\\Log\\": "Psr/Log/"
588 | }
589 | },
590 | "notification-url": "https://packagist.org/downloads/",
591 | "license": [
592 | "MIT"
593 | ],
594 | "authors": [
595 | {
596 | "name": "PHP-FIG",
597 | "homepage": "http://www.php-fig.org/"
598 | }
599 | ],
600 | "description": "Common interface for logging libraries",
601 | "homepage": "https://github.com/php-fig/log",
602 | "keywords": [
603 | "log",
604 | "psr",
605 | "psr-3"
606 | ],
607 | "time": "2018-11-20T15:27:04+00:00"
608 | },
609 | {
610 | "name": "ralouphie/getallheaders",
611 | "version": "3.0.3",
612 | "source": {
613 | "type": "git",
614 | "url": "https://github.com/ralouphie/getallheaders.git",
615 | "reference": "120b605dfeb996808c31b6477290a714d356e822"
616 | },
617 | "dist": {
618 | "type": "zip",
619 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
620 | "reference": "120b605dfeb996808c31b6477290a714d356e822",
621 | "shasum": "",
622 | "mirrors": [
623 | {
624 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
625 | "preferred": true
626 | }
627 | ]
628 | },
629 | "require": {
630 | "php": ">=5.6"
631 | },
632 | "require-dev": {
633 | "php-coveralls/php-coveralls": "^2.1",
634 | "phpunit/phpunit": "^5 || ^6.5"
635 | },
636 | "type": "library",
637 | "autoload": {
638 | "files": [
639 | "src/getallheaders.php"
640 | ]
641 | },
642 | "notification-url": "https://packagist.org/downloads/",
643 | "license": [
644 | "MIT"
645 | ],
646 | "authors": [
647 | {
648 | "name": "Ralph Khattar",
649 | "email": "ralph.khattar@gmail.com"
650 | }
651 | ],
652 | "description": "A polyfill for getallheaders.",
653 | "time": "2019-03-08T08:55:37+00:00"
654 | },
655 | {
656 | "name": "symfony/browser-kit",
657 | "version": "v4.3.3",
658 | "source": {
659 | "type": "git",
660 | "url": "https://github.com/symfony/browser-kit.git",
661 | "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca"
662 | },
663 | "dist": {
664 | "type": "zip",
665 | "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
666 | "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
667 | "shasum": "",
668 | "mirrors": [
669 | {
670 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
671 | "preferred": true
672 | }
673 | ]
674 | },
675 | "require": {
676 | "php": "^7.1.3",
677 | "symfony/dom-crawler": "~3.4|~4.0"
678 | },
679 | "require-dev": {
680 | "symfony/css-selector": "~3.4|~4.0",
681 | "symfony/http-client": "^4.3",
682 | "symfony/mime": "^4.3",
683 | "symfony/process": "~3.4|~4.0"
684 | },
685 | "suggest": {
686 | "symfony/process": ""
687 | },
688 | "type": "library",
689 | "extra": {
690 | "branch-alias": {
691 | "dev-master": "4.3-dev"
692 | }
693 | },
694 | "autoload": {
695 | "psr-4": {
696 | "Symfony\\Component\\BrowserKit\\": ""
697 | },
698 | "exclude-from-classmap": [
699 | "/Tests/"
700 | ]
701 | },
702 | "notification-url": "https://packagist.org/downloads/",
703 | "license": [
704 | "MIT"
705 | ],
706 | "authors": [
707 | {
708 | "name": "Fabien Potencier",
709 | "email": "fabien@symfony.com"
710 | },
711 | {
712 | "name": "Symfony Community",
713 | "homepage": "https://symfony.com/contributors"
714 | }
715 | ],
716 | "description": "Symfony BrowserKit Component",
717 | "homepage": "https://symfony.com",
718 | "time": "2019-06-11T15:41:59+00:00"
719 | },
720 | {
721 | "name": "symfony/css-selector",
722 | "version": "v4.3.3",
723 | "source": {
724 | "type": "git",
725 | "url": "https://github.com/symfony/css-selector.git",
726 | "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d"
727 | },
728 | "dist": {
729 | "type": "zip",
730 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d",
731 | "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d",
732 | "shasum": "",
733 | "mirrors": [
734 | {
735 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
736 | "preferred": true
737 | }
738 | ]
739 | },
740 | "require": {
741 | "php": "^7.1.3"
742 | },
743 | "type": "library",
744 | "extra": {
745 | "branch-alias": {
746 | "dev-master": "4.3-dev"
747 | }
748 | },
749 | "autoload": {
750 | "psr-4": {
751 | "Symfony\\Component\\CssSelector\\": ""
752 | },
753 | "exclude-from-classmap": [
754 | "/Tests/"
755 | ]
756 | },
757 | "notification-url": "https://packagist.org/downloads/",
758 | "license": [
759 | "MIT"
760 | ],
761 | "authors": [
762 | {
763 | "name": "Fabien Potencier",
764 | "email": "fabien@symfony.com"
765 | },
766 | {
767 | "name": "Jean-François Simon",
768 | "email": "jeanfrancois.simon@sensiolabs.com"
769 | },
770 | {
771 | "name": "Symfony Community",
772 | "homepage": "https://symfony.com/contributors"
773 | }
774 | ],
775 | "description": "Symfony CssSelector Component",
776 | "homepage": "https://symfony.com",
777 | "time": "2019-01-16T21:53:39+00:00"
778 | },
779 | {
780 | "name": "symfony/dom-crawler",
781 | "version": "v4.3.3",
782 | "source": {
783 | "type": "git",
784 | "url": "https://github.com/symfony/dom-crawler.git",
785 | "reference": "291397232a2eefb3347eaab9170409981eaad0e2"
786 | },
787 | "dist": {
788 | "type": "zip",
789 | "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2",
790 | "reference": "291397232a2eefb3347eaab9170409981eaad0e2",
791 | "shasum": "",
792 | "mirrors": [
793 | {
794 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
795 | "preferred": true
796 | }
797 | ]
798 | },
799 | "require": {
800 | "php": "^7.1.3",
801 | "symfony/polyfill-ctype": "~1.8",
802 | "symfony/polyfill-mbstring": "~1.0"
803 | },
804 | "conflict": {
805 | "masterminds/html5": "<2.6"
806 | },
807 | "require-dev": {
808 | "masterminds/html5": "^2.6",
809 | "symfony/css-selector": "~3.4|~4.0"
810 | },
811 | "suggest": {
812 | "symfony/css-selector": ""
813 | },
814 | "type": "library",
815 | "extra": {
816 | "branch-alias": {
817 | "dev-master": "4.3-dev"
818 | }
819 | },
820 | "autoload": {
821 | "psr-4": {
822 | "Symfony\\Component\\DomCrawler\\": ""
823 | },
824 | "exclude-from-classmap": [
825 | "/Tests/"
826 | ]
827 | },
828 | "notification-url": "https://packagist.org/downloads/",
829 | "license": [
830 | "MIT"
831 | ],
832 | "authors": [
833 | {
834 | "name": "Fabien Potencier",
835 | "email": "fabien@symfony.com"
836 | },
837 | {
838 | "name": "Symfony Community",
839 | "homepage": "https://symfony.com/contributors"
840 | }
841 | ],
842 | "description": "Symfony DomCrawler Component",
843 | "homepage": "https://symfony.com",
844 | "time": "2019-06-13T11:03:18+00:00"
845 | },
846 | {
847 | "name": "symfony/panther",
848 | "version": "v0.3.0",
849 | "source": {
850 | "type": "git",
851 | "url": "https://github.com/symfony/panther.git",
852 | "reference": "5e41bc856eded5f546c71173a1e8e260c5e3a07a"
853 | },
854 | "dist": {
855 | "type": "zip",
856 | "url": "https://api.github.com/repos/symfony/panther/zipball/5e41bc856eded5f546c71173a1e8e260c5e3a07a",
857 | "reference": "5e41bc856eded5f546c71173a1e8e260c5e3a07a",
858 | "shasum": "",
859 | "mirrors": [
860 | {
861 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
862 | "preferred": true
863 | }
864 | ]
865 | },
866 | "require": {
867 | "facebook/webdriver": "^1.5",
868 | "php": ">=7.1",
869 | "symfony/browser-kit": "^4.0",
870 | "symfony/polyfill-php72": "^1.9",
871 | "symfony/process": "^3.4 || ^4.0"
872 | },
873 | "conflict": {
874 | "symfony/browser-kit": "4.1.0"
875 | },
876 | "require-dev": {
877 | "fabpot/goutte": "^3.2.3",
878 | "guzzlehttp/guzzle": "^6.3",
879 | "phpunit/phpunit": "^7.3",
880 | "symfony/css-selector": "^3.4 || ^4.0",
881 | "symfony/framework-bundle": "^3.4 || ^4.0"
882 | },
883 | "type": "library",
884 | "extra": {
885 | "branch-alias": {
886 | "dev-master": "1.0.x-dev"
887 | }
888 | },
889 | "autoload": {
890 | "psr-4": {
891 | "Symfony\\Component\\Panther\\": "src/"
892 | }
893 | },
894 | "notification-url": "https://packagist.org/downloads/",
895 | "license": [
896 | "MIT"
897 | ],
898 | "authors": [
899 | {
900 | "name": "Symfony Community",
901 | "homepage": "https://symfony.com/contributors"
902 | },
903 | {
904 | "name": "Kévin Dunglas",
905 | "email": "dunglas@gmail.com",
906 | "homepage": "https://dunglas.fr"
907 | }
908 | ],
909 | "description": "A browser testing and web scraping library for PHP and Symfony.",
910 | "homepage": "https://dunglas.fr",
911 | "keywords": [
912 | "e2e",
913 | "scraping",
914 | "selenium",
915 | "symfony",
916 | "testing",
917 | "webdriver"
918 | ],
919 | "time": "2019-02-27T12:48:28+00:00"
920 | },
921 | {
922 | "name": "symfony/polyfill-ctype",
923 | "version": "v1.11.0",
924 | "source": {
925 | "type": "git",
926 | "url": "https://github.com/symfony/polyfill-ctype.git",
927 | "reference": "82ebae02209c21113908c229e9883c419720738a"
928 | },
929 | "dist": {
930 | "type": "zip",
931 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
932 | "reference": "82ebae02209c21113908c229e9883c419720738a",
933 | "shasum": "",
934 | "mirrors": [
935 | {
936 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
937 | "preferred": true
938 | }
939 | ]
940 | },
941 | "require": {
942 | "php": ">=5.3.3"
943 | },
944 | "suggest": {
945 | "ext-ctype": "For best performance"
946 | },
947 | "type": "library",
948 | "extra": {
949 | "branch-alias": {
950 | "dev-master": "1.11-dev"
951 | }
952 | },
953 | "autoload": {
954 | "psr-4": {
955 | "Symfony\\Polyfill\\Ctype\\": ""
956 | },
957 | "files": [
958 | "bootstrap.php"
959 | ]
960 | },
961 | "notification-url": "https://packagist.org/downloads/",
962 | "license": [
963 | "MIT"
964 | ],
965 | "authors": [
966 | {
967 | "name": "Symfony Community",
968 | "homepage": "https://symfony.com/contributors"
969 | },
970 | {
971 | "name": "Gert de Pagter",
972 | "email": "BackEndTea@gmail.com"
973 | }
974 | ],
975 | "description": "Symfony polyfill for ctype functions",
976 | "homepage": "https://symfony.com",
977 | "keywords": [
978 | "compatibility",
979 | "ctype",
980 | "polyfill",
981 | "portable"
982 | ],
983 | "time": "2019-02-06T07:57:58+00:00"
984 | },
985 | {
986 | "name": "symfony/polyfill-mbstring",
987 | "version": "v1.11.0",
988 | "source": {
989 | "type": "git",
990 | "url": "https://github.com/symfony/polyfill-mbstring.git",
991 | "reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
992 | },
993 | "dist": {
994 | "type": "zip",
995 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
996 | "reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
997 | "shasum": "",
998 | "mirrors": [
999 | {
1000 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1001 | "preferred": true
1002 | }
1003 | ]
1004 | },
1005 | "require": {
1006 | "php": ">=5.3.3"
1007 | },
1008 | "suggest": {
1009 | "ext-mbstring": "For best performance"
1010 | },
1011 | "type": "library",
1012 | "extra": {
1013 | "branch-alias": {
1014 | "dev-master": "1.11-dev"
1015 | }
1016 | },
1017 | "autoload": {
1018 | "psr-4": {
1019 | "Symfony\\Polyfill\\Mbstring\\": ""
1020 | },
1021 | "files": [
1022 | "bootstrap.php"
1023 | ]
1024 | },
1025 | "notification-url": "https://packagist.org/downloads/",
1026 | "license": [
1027 | "MIT"
1028 | ],
1029 | "authors": [
1030 | {
1031 | "name": "Nicolas Grekas",
1032 | "email": "p@tchwork.com"
1033 | },
1034 | {
1035 | "name": "Symfony Community",
1036 | "homepage": "https://symfony.com/contributors"
1037 | }
1038 | ],
1039 | "description": "Symfony polyfill for the Mbstring extension",
1040 | "homepage": "https://symfony.com",
1041 | "keywords": [
1042 | "compatibility",
1043 | "mbstring",
1044 | "polyfill",
1045 | "portable",
1046 | "shim"
1047 | ],
1048 | "time": "2019-02-06T07:57:58+00:00"
1049 | },
1050 | {
1051 | "name": "symfony/polyfill-php72",
1052 | "version": "v1.11.0",
1053 | "source": {
1054 | "type": "git",
1055 | "url": "https://github.com/symfony/polyfill-php72.git",
1056 | "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c"
1057 | },
1058 | "dist": {
1059 | "type": "zip",
1060 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c",
1061 | "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c",
1062 | "shasum": "",
1063 | "mirrors": [
1064 | {
1065 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1066 | "preferred": true
1067 | }
1068 | ]
1069 | },
1070 | "require": {
1071 | "php": ">=5.3.3"
1072 | },
1073 | "type": "library",
1074 | "extra": {
1075 | "branch-alias": {
1076 | "dev-master": "1.11-dev"
1077 | }
1078 | },
1079 | "autoload": {
1080 | "psr-4": {
1081 | "Symfony\\Polyfill\\Php72\\": ""
1082 | },
1083 | "files": [
1084 | "bootstrap.php"
1085 | ]
1086 | },
1087 | "notification-url": "https://packagist.org/downloads/",
1088 | "license": [
1089 | "MIT"
1090 | ],
1091 | "authors": [
1092 | {
1093 | "name": "Nicolas Grekas",
1094 | "email": "p@tchwork.com"
1095 | },
1096 | {
1097 | "name": "Symfony Community",
1098 | "homepage": "https://symfony.com/contributors"
1099 | }
1100 | ],
1101 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
1102 | "homepage": "https://symfony.com",
1103 | "keywords": [
1104 | "compatibility",
1105 | "polyfill",
1106 | "portable",
1107 | "shim"
1108 | ],
1109 | "time": "2019-02-06T07:57:58+00:00"
1110 | },
1111 | {
1112 | "name": "symfony/process",
1113 | "version": "v4.3.3",
1114 | "source": {
1115 | "type": "git",
1116 | "url": "https://github.com/symfony/process.git",
1117 | "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c"
1118 | },
1119 | "dist": {
1120 | "type": "zip",
1121 | "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c",
1122 | "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c",
1123 | "shasum": "",
1124 | "mirrors": [
1125 | {
1126 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1127 | "preferred": true
1128 | }
1129 | ]
1130 | },
1131 | "require": {
1132 | "php": "^7.1.3"
1133 | },
1134 | "type": "library",
1135 | "extra": {
1136 | "branch-alias": {
1137 | "dev-master": "4.3-dev"
1138 | }
1139 | },
1140 | "autoload": {
1141 | "psr-4": {
1142 | "Symfony\\Component\\Process\\": ""
1143 | },
1144 | "exclude-from-classmap": [
1145 | "/Tests/"
1146 | ]
1147 | },
1148 | "notification-url": "https://packagist.org/downloads/",
1149 | "license": [
1150 | "MIT"
1151 | ],
1152 | "authors": [
1153 | {
1154 | "name": "Fabien Potencier",
1155 | "email": "fabien@symfony.com"
1156 | },
1157 | {
1158 | "name": "Symfony Community",
1159 | "homepage": "https://symfony.com/contributors"
1160 | }
1161 | ],
1162 | "description": "Symfony Process Component",
1163 | "homepage": "https://symfony.com",
1164 | "time": "2019-05-30T16:10:05+00:00"
1165 | },
1166 | {
1167 | "name": "vlucas/phpdotenv",
1168 | "version": "v3.4.0",
1169 | "source": {
1170 | "type": "git",
1171 | "url": "https://github.com/vlucas/phpdotenv.git",
1172 | "reference": "5084b23845c24dbff8ac6c204290c341e4776c92"
1173 | },
1174 | "dist": {
1175 | "type": "zip",
1176 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/5084b23845c24dbff8ac6c204290c341e4776c92",
1177 | "reference": "5084b23845c24dbff8ac6c204290c341e4776c92",
1178 | "shasum": "",
1179 | "mirrors": [
1180 | {
1181 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1182 | "preferred": true
1183 | }
1184 | ]
1185 | },
1186 | "require": {
1187 | "php": "^5.4 || ^7.0",
1188 | "phpoption/phpoption": "^1.5",
1189 | "symfony/polyfill-ctype": "^1.9"
1190 | },
1191 | "require-dev": {
1192 | "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0"
1193 | },
1194 | "type": "library",
1195 | "extra": {
1196 | "branch-alias": {
1197 | "dev-master": "3.4-dev"
1198 | }
1199 | },
1200 | "autoload": {
1201 | "psr-4": {
1202 | "Dotenv\\": "src/"
1203 | }
1204 | },
1205 | "notification-url": "https://packagist.org/downloads/",
1206 | "license": [
1207 | "BSD-3-Clause"
1208 | ],
1209 | "authors": [
1210 | {
1211 | "name": "Vance Lucas",
1212 | "email": "vance@vancelucas.com",
1213 | "homepage": "http://www.vancelucas.com"
1214 | }
1215 | ],
1216 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
1217 | "keywords": [
1218 | "dotenv",
1219 | "env",
1220 | "environment"
1221 | ],
1222 | "time": "2019-06-15T22:40:20+00:00"
1223 | }
1224 | ],
1225 | "packages-dev": [
1226 | {
1227 | "name": "doctrine/instantiator",
1228 | "version": "1.2.0",
1229 | "source": {
1230 | "type": "git",
1231 | "url": "https://github.com/doctrine/instantiator.git",
1232 | "reference": "a2c590166b2133a4633738648b6b064edae0814a"
1233 | },
1234 | "dist": {
1235 | "type": "zip",
1236 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a",
1237 | "reference": "a2c590166b2133a4633738648b6b064edae0814a",
1238 | "shasum": "",
1239 | "mirrors": [
1240 | {
1241 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1242 | "preferred": true
1243 | }
1244 | ]
1245 | },
1246 | "require": {
1247 | "php": "^7.1"
1248 | },
1249 | "require-dev": {
1250 | "doctrine/coding-standard": "^6.0",
1251 | "ext-pdo": "*",
1252 | "ext-phar": "*",
1253 | "phpbench/phpbench": "^0.13",
1254 | "phpstan/phpstan-phpunit": "^0.11",
1255 | "phpstan/phpstan-shim": "^0.11",
1256 | "phpunit/phpunit": "^7.0"
1257 | },
1258 | "type": "library",
1259 | "extra": {
1260 | "branch-alias": {
1261 | "dev-master": "1.2.x-dev"
1262 | }
1263 | },
1264 | "autoload": {
1265 | "psr-4": {
1266 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
1267 | }
1268 | },
1269 | "notification-url": "https://packagist.org/downloads/",
1270 | "license": [
1271 | "MIT"
1272 | ],
1273 | "authors": [
1274 | {
1275 | "name": "Marco Pivetta",
1276 | "email": "ocramius@gmail.com",
1277 | "homepage": "http://ocramius.github.com/"
1278 | }
1279 | ],
1280 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
1281 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
1282 | "keywords": [
1283 | "constructor",
1284 | "instantiate"
1285 | ],
1286 | "time": "2019-03-17T17:37:11+00:00"
1287 | },
1288 | {
1289 | "name": "myclabs/deep-copy",
1290 | "version": "1.9.1",
1291 | "source": {
1292 | "type": "git",
1293 | "url": "https://github.com/myclabs/DeepCopy.git",
1294 | "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72"
1295 | },
1296 | "dist": {
1297 | "type": "zip",
1298 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72",
1299 | "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72",
1300 | "shasum": "",
1301 | "mirrors": [
1302 | {
1303 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1304 | "preferred": true
1305 | }
1306 | ]
1307 | },
1308 | "require": {
1309 | "php": "^7.1"
1310 | },
1311 | "replace": {
1312 | "myclabs/deep-copy": "self.version"
1313 | },
1314 | "require-dev": {
1315 | "doctrine/collections": "^1.0",
1316 | "doctrine/common": "^2.6",
1317 | "phpunit/phpunit": "^7.1"
1318 | },
1319 | "type": "library",
1320 | "autoload": {
1321 | "psr-4": {
1322 | "DeepCopy\\": "src/DeepCopy/"
1323 | },
1324 | "files": [
1325 | "src/DeepCopy/deep_copy.php"
1326 | ]
1327 | },
1328 | "notification-url": "https://packagist.org/downloads/",
1329 | "license": [
1330 | "MIT"
1331 | ],
1332 | "description": "Create deep copies (clones) of your objects",
1333 | "keywords": [
1334 | "clone",
1335 | "copy",
1336 | "duplicate",
1337 | "object",
1338 | "object graph"
1339 | ],
1340 | "time": "2019-04-07T13:18:21+00:00"
1341 | },
1342 | {
1343 | "name": "phar-io/manifest",
1344 | "version": "1.0.3",
1345 | "source": {
1346 | "type": "git",
1347 | "url": "https://github.com/phar-io/manifest.git",
1348 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
1349 | },
1350 | "dist": {
1351 | "type": "zip",
1352 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
1353 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
1354 | "shasum": "",
1355 | "mirrors": [
1356 | {
1357 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1358 | "preferred": true
1359 | }
1360 | ]
1361 | },
1362 | "require": {
1363 | "ext-dom": "*",
1364 | "ext-phar": "*",
1365 | "phar-io/version": "^2.0",
1366 | "php": "^5.6 || ^7.0"
1367 | },
1368 | "type": "library",
1369 | "extra": {
1370 | "branch-alias": {
1371 | "dev-master": "1.0.x-dev"
1372 | }
1373 | },
1374 | "autoload": {
1375 | "classmap": [
1376 | "src/"
1377 | ]
1378 | },
1379 | "notification-url": "https://packagist.org/downloads/",
1380 | "license": [
1381 | "BSD-3-Clause"
1382 | ],
1383 | "authors": [
1384 | {
1385 | "name": "Arne Blankerts",
1386 | "email": "arne@blankerts.de",
1387 | "role": "Developer"
1388 | },
1389 | {
1390 | "name": "Sebastian Heuer",
1391 | "email": "sebastian@phpeople.de",
1392 | "role": "Developer"
1393 | },
1394 | {
1395 | "name": "Sebastian Bergmann",
1396 | "email": "sebastian@phpunit.de",
1397 | "role": "Developer"
1398 | }
1399 | ],
1400 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
1401 | "time": "2018-07-08T19:23:20+00:00"
1402 | },
1403 | {
1404 | "name": "phar-io/version",
1405 | "version": "2.0.1",
1406 | "source": {
1407 | "type": "git",
1408 | "url": "https://github.com/phar-io/version.git",
1409 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
1410 | },
1411 | "dist": {
1412 | "type": "zip",
1413 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
1414 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
1415 | "shasum": "",
1416 | "mirrors": [
1417 | {
1418 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1419 | "preferred": true
1420 | }
1421 | ]
1422 | },
1423 | "require": {
1424 | "php": "^5.6 || ^7.0"
1425 | },
1426 | "type": "library",
1427 | "autoload": {
1428 | "classmap": [
1429 | "src/"
1430 | ]
1431 | },
1432 | "notification-url": "https://packagist.org/downloads/",
1433 | "license": [
1434 | "BSD-3-Clause"
1435 | ],
1436 | "authors": [
1437 | {
1438 | "name": "Arne Blankerts",
1439 | "email": "arne@blankerts.de",
1440 | "role": "Developer"
1441 | },
1442 | {
1443 | "name": "Sebastian Heuer",
1444 | "email": "sebastian@phpeople.de",
1445 | "role": "Developer"
1446 | },
1447 | {
1448 | "name": "Sebastian Bergmann",
1449 | "email": "sebastian@phpunit.de",
1450 | "role": "Developer"
1451 | }
1452 | ],
1453 | "description": "Library for handling version information and constraints",
1454 | "time": "2018-07-08T19:19:57+00:00"
1455 | },
1456 | {
1457 | "name": "phpdocumentor/reflection-common",
1458 | "version": "1.0.1",
1459 | "source": {
1460 | "type": "git",
1461 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
1462 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
1463 | },
1464 | "dist": {
1465 | "type": "zip",
1466 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
1467 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
1468 | "shasum": "",
1469 | "mirrors": [
1470 | {
1471 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1472 | "preferred": true
1473 | }
1474 | ]
1475 | },
1476 | "require": {
1477 | "php": ">=5.5"
1478 | },
1479 | "require-dev": {
1480 | "phpunit/phpunit": "^4.6"
1481 | },
1482 | "type": "library",
1483 | "extra": {
1484 | "branch-alias": {
1485 | "dev-master": "1.0.x-dev"
1486 | }
1487 | },
1488 | "autoload": {
1489 | "psr-4": {
1490 | "phpDocumentor\\Reflection\\": [
1491 | "src"
1492 | ]
1493 | }
1494 | },
1495 | "notification-url": "https://packagist.org/downloads/",
1496 | "license": [
1497 | "MIT"
1498 | ],
1499 | "authors": [
1500 | {
1501 | "name": "Jaap van Otterdijk",
1502 | "email": "opensource@ijaap.nl"
1503 | }
1504 | ],
1505 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
1506 | "homepage": "http://www.phpdoc.org",
1507 | "keywords": [
1508 | "FQSEN",
1509 | "phpDocumentor",
1510 | "phpdoc",
1511 | "reflection",
1512 | "static analysis"
1513 | ],
1514 | "time": "2017-09-11T18:02:19+00:00"
1515 | },
1516 | {
1517 | "name": "phpdocumentor/reflection-docblock",
1518 | "version": "4.3.1",
1519 | "source": {
1520 | "type": "git",
1521 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
1522 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c"
1523 | },
1524 | "dist": {
1525 | "type": "zip",
1526 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
1527 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
1528 | "shasum": "",
1529 | "mirrors": [
1530 | {
1531 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1532 | "preferred": true
1533 | }
1534 | ]
1535 | },
1536 | "require": {
1537 | "php": "^7.0",
1538 | "phpdocumentor/reflection-common": "^1.0.0",
1539 | "phpdocumentor/type-resolver": "^0.4.0",
1540 | "webmozart/assert": "^1.0"
1541 | },
1542 | "require-dev": {
1543 | "doctrine/instantiator": "~1.0.5",
1544 | "mockery/mockery": "^1.0",
1545 | "phpunit/phpunit": "^6.4"
1546 | },
1547 | "type": "library",
1548 | "extra": {
1549 | "branch-alias": {
1550 | "dev-master": "4.x-dev"
1551 | }
1552 | },
1553 | "autoload": {
1554 | "psr-4": {
1555 | "phpDocumentor\\Reflection\\": [
1556 | "src/"
1557 | ]
1558 | }
1559 | },
1560 | "notification-url": "https://packagist.org/downloads/",
1561 | "license": [
1562 | "MIT"
1563 | ],
1564 | "authors": [
1565 | {
1566 | "name": "Mike van Riel",
1567 | "email": "me@mikevanriel.com"
1568 | }
1569 | ],
1570 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1571 | "time": "2019-04-30T17:48:53+00:00"
1572 | },
1573 | {
1574 | "name": "phpdocumentor/type-resolver",
1575 | "version": "0.4.0",
1576 | "source": {
1577 | "type": "git",
1578 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
1579 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
1580 | },
1581 | "dist": {
1582 | "type": "zip",
1583 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
1584 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
1585 | "shasum": "",
1586 | "mirrors": [
1587 | {
1588 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1589 | "preferred": true
1590 | }
1591 | ]
1592 | },
1593 | "require": {
1594 | "php": "^5.5 || ^7.0",
1595 | "phpdocumentor/reflection-common": "^1.0"
1596 | },
1597 | "require-dev": {
1598 | "mockery/mockery": "^0.9.4",
1599 | "phpunit/phpunit": "^5.2||^4.8.24"
1600 | },
1601 | "type": "library",
1602 | "extra": {
1603 | "branch-alias": {
1604 | "dev-master": "1.0.x-dev"
1605 | }
1606 | },
1607 | "autoload": {
1608 | "psr-4": {
1609 | "phpDocumentor\\Reflection\\": [
1610 | "src/"
1611 | ]
1612 | }
1613 | },
1614 | "notification-url": "https://packagist.org/downloads/",
1615 | "license": [
1616 | "MIT"
1617 | ],
1618 | "authors": [
1619 | {
1620 | "name": "Mike van Riel",
1621 | "email": "me@mikevanriel.com"
1622 | }
1623 | ],
1624 | "time": "2017-07-14T14:27:02+00:00"
1625 | },
1626 | {
1627 | "name": "phpspec/prophecy",
1628 | "version": "1.8.1",
1629 | "source": {
1630 | "type": "git",
1631 | "url": "https://github.com/phpspec/prophecy.git",
1632 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76"
1633 | },
1634 | "dist": {
1635 | "type": "zip",
1636 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
1637 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
1638 | "shasum": "",
1639 | "mirrors": [
1640 | {
1641 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1642 | "preferred": true
1643 | }
1644 | ]
1645 | },
1646 | "require": {
1647 | "doctrine/instantiator": "^1.0.2",
1648 | "php": "^5.3|^7.0",
1649 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
1650 | "sebastian/comparator": "^1.1|^2.0|^3.0",
1651 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
1652 | },
1653 | "require-dev": {
1654 | "phpspec/phpspec": "^2.5|^3.2",
1655 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
1656 | },
1657 | "type": "library",
1658 | "extra": {
1659 | "branch-alias": {
1660 | "dev-master": "1.8.x-dev"
1661 | }
1662 | },
1663 | "autoload": {
1664 | "psr-4": {
1665 | "Prophecy\\": "src/Prophecy"
1666 | }
1667 | },
1668 | "notification-url": "https://packagist.org/downloads/",
1669 | "license": [
1670 | "MIT"
1671 | ],
1672 | "authors": [
1673 | {
1674 | "name": "Konstantin Kudryashov",
1675 | "email": "ever.zet@gmail.com",
1676 | "homepage": "http://everzet.com"
1677 | },
1678 | {
1679 | "name": "Marcello Duarte",
1680 | "email": "marcello.duarte@gmail.com"
1681 | }
1682 | ],
1683 | "description": "Highly opinionated mocking framework for PHP 5.3+",
1684 | "homepage": "https://github.com/phpspec/prophecy",
1685 | "keywords": [
1686 | "Double",
1687 | "Dummy",
1688 | "fake",
1689 | "mock",
1690 | "spy",
1691 | "stub"
1692 | ],
1693 | "time": "2019-06-13T12:50:23+00:00"
1694 | },
1695 | {
1696 | "name": "phpunit/php-code-coverage",
1697 | "version": "6.1.4",
1698 | "source": {
1699 | "type": "git",
1700 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
1701 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
1702 | },
1703 | "dist": {
1704 | "type": "zip",
1705 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
1706 | "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
1707 | "shasum": "",
1708 | "mirrors": [
1709 | {
1710 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1711 | "preferred": true
1712 | }
1713 | ]
1714 | },
1715 | "require": {
1716 | "ext-dom": "*",
1717 | "ext-xmlwriter": "*",
1718 | "php": "^7.1",
1719 | "phpunit/php-file-iterator": "^2.0",
1720 | "phpunit/php-text-template": "^1.2.1",
1721 | "phpunit/php-token-stream": "^3.0",
1722 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
1723 | "sebastian/environment": "^3.1 || ^4.0",
1724 | "sebastian/version": "^2.0.1",
1725 | "theseer/tokenizer": "^1.1"
1726 | },
1727 | "require-dev": {
1728 | "phpunit/phpunit": "^7.0"
1729 | },
1730 | "suggest": {
1731 | "ext-xdebug": "^2.6.0"
1732 | },
1733 | "type": "library",
1734 | "extra": {
1735 | "branch-alias": {
1736 | "dev-master": "6.1-dev"
1737 | }
1738 | },
1739 | "autoload": {
1740 | "classmap": [
1741 | "src/"
1742 | ]
1743 | },
1744 | "notification-url": "https://packagist.org/downloads/",
1745 | "license": [
1746 | "BSD-3-Clause"
1747 | ],
1748 | "authors": [
1749 | {
1750 | "name": "Sebastian Bergmann",
1751 | "email": "sebastian@phpunit.de",
1752 | "role": "lead"
1753 | }
1754 | ],
1755 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
1756 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
1757 | "keywords": [
1758 | "coverage",
1759 | "testing",
1760 | "xunit"
1761 | ],
1762 | "time": "2018-10-31T16:06:48+00:00"
1763 | },
1764 | {
1765 | "name": "phpunit/php-file-iterator",
1766 | "version": "2.0.2",
1767 | "source": {
1768 | "type": "git",
1769 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
1770 | "reference": "050bedf145a257b1ff02746c31894800e5122946"
1771 | },
1772 | "dist": {
1773 | "type": "zip",
1774 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
1775 | "reference": "050bedf145a257b1ff02746c31894800e5122946",
1776 | "shasum": "",
1777 | "mirrors": [
1778 | {
1779 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1780 | "preferred": true
1781 | }
1782 | ]
1783 | },
1784 | "require": {
1785 | "php": "^7.1"
1786 | },
1787 | "require-dev": {
1788 | "phpunit/phpunit": "^7.1"
1789 | },
1790 | "type": "library",
1791 | "extra": {
1792 | "branch-alias": {
1793 | "dev-master": "2.0.x-dev"
1794 | }
1795 | },
1796 | "autoload": {
1797 | "classmap": [
1798 | "src/"
1799 | ]
1800 | },
1801 | "notification-url": "https://packagist.org/downloads/",
1802 | "license": [
1803 | "BSD-3-Clause"
1804 | ],
1805 | "authors": [
1806 | {
1807 | "name": "Sebastian Bergmann",
1808 | "email": "sebastian@phpunit.de",
1809 | "role": "lead"
1810 | }
1811 | ],
1812 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1813 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1814 | "keywords": [
1815 | "filesystem",
1816 | "iterator"
1817 | ],
1818 | "time": "2018-09-13T20:33:42+00:00"
1819 | },
1820 | {
1821 | "name": "phpunit/php-text-template",
1822 | "version": "1.2.1",
1823 | "source": {
1824 | "type": "git",
1825 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1826 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
1827 | },
1828 | "dist": {
1829 | "type": "zip",
1830 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1831 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1832 | "shasum": "",
1833 | "mirrors": [
1834 | {
1835 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1836 | "preferred": true
1837 | }
1838 | ]
1839 | },
1840 | "require": {
1841 | "php": ">=5.3.3"
1842 | },
1843 | "type": "library",
1844 | "autoload": {
1845 | "classmap": [
1846 | "src/"
1847 | ]
1848 | },
1849 | "notification-url": "https://packagist.org/downloads/",
1850 | "license": [
1851 | "BSD-3-Clause"
1852 | ],
1853 | "authors": [
1854 | {
1855 | "name": "Sebastian Bergmann",
1856 | "email": "sebastian@phpunit.de",
1857 | "role": "lead"
1858 | }
1859 | ],
1860 | "description": "Simple template engine.",
1861 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1862 | "keywords": [
1863 | "template"
1864 | ],
1865 | "time": "2015-06-21T13:50:34+00:00"
1866 | },
1867 | {
1868 | "name": "phpunit/php-timer",
1869 | "version": "2.1.2",
1870 | "source": {
1871 | "type": "git",
1872 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1873 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
1874 | },
1875 | "dist": {
1876 | "type": "zip",
1877 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
1878 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
1879 | "shasum": "",
1880 | "mirrors": [
1881 | {
1882 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1883 | "preferred": true
1884 | }
1885 | ]
1886 | },
1887 | "require": {
1888 | "php": "^7.1"
1889 | },
1890 | "require-dev": {
1891 | "phpunit/phpunit": "^7.0"
1892 | },
1893 | "type": "library",
1894 | "extra": {
1895 | "branch-alias": {
1896 | "dev-master": "2.1-dev"
1897 | }
1898 | },
1899 | "autoload": {
1900 | "classmap": [
1901 | "src/"
1902 | ]
1903 | },
1904 | "notification-url": "https://packagist.org/downloads/",
1905 | "license": [
1906 | "BSD-3-Clause"
1907 | ],
1908 | "authors": [
1909 | {
1910 | "name": "Sebastian Bergmann",
1911 | "role": "lead",
1912 | "email": "sebastian@phpunit.de"
1913 | }
1914 | ],
1915 | "description": "Utility class for timing",
1916 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1917 | "keywords": [
1918 | "timer"
1919 | ],
1920 | "time": "2019-06-07T04:22:29+00:00"
1921 | },
1922 | {
1923 | "name": "phpunit/php-token-stream",
1924 | "version": "3.1.0",
1925 | "source": {
1926 | "type": "git",
1927 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1928 | "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a"
1929 | },
1930 | "dist": {
1931 | "type": "zip",
1932 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a",
1933 | "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a",
1934 | "shasum": "",
1935 | "mirrors": [
1936 | {
1937 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1938 | "preferred": true
1939 | }
1940 | ]
1941 | },
1942 | "require": {
1943 | "ext-tokenizer": "*",
1944 | "php": "^7.1"
1945 | },
1946 | "require-dev": {
1947 | "phpunit/phpunit": "^7.0"
1948 | },
1949 | "type": "library",
1950 | "extra": {
1951 | "branch-alias": {
1952 | "dev-master": "3.1-dev"
1953 | }
1954 | },
1955 | "autoload": {
1956 | "classmap": [
1957 | "src/"
1958 | ]
1959 | },
1960 | "notification-url": "https://packagist.org/downloads/",
1961 | "license": [
1962 | "BSD-3-Clause"
1963 | ],
1964 | "authors": [
1965 | {
1966 | "name": "Sebastian Bergmann",
1967 | "email": "sebastian@phpunit.de"
1968 | }
1969 | ],
1970 | "description": "Wrapper around PHP's tokenizer extension.",
1971 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1972 | "keywords": [
1973 | "tokenizer"
1974 | ],
1975 | "time": "2019-07-25T05:29:42+00:00"
1976 | },
1977 | {
1978 | "name": "phpunit/phpunit",
1979 | "version": "7.5.14",
1980 | "source": {
1981 | "type": "git",
1982 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1983 | "reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff"
1984 | },
1985 | "dist": {
1986 | "type": "zip",
1987 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2834789aeb9ac182ad69bfdf9ae91856a59945ff",
1988 | "reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff",
1989 | "shasum": "",
1990 | "mirrors": [
1991 | {
1992 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
1993 | "preferred": true
1994 | }
1995 | ]
1996 | },
1997 | "require": {
1998 | "doctrine/instantiator": "^1.1",
1999 | "ext-dom": "*",
2000 | "ext-json": "*",
2001 | "ext-libxml": "*",
2002 | "ext-mbstring": "*",
2003 | "ext-xml": "*",
2004 | "myclabs/deep-copy": "^1.7",
2005 | "phar-io/manifest": "^1.0.2",
2006 | "phar-io/version": "^2.0",
2007 | "php": "^7.1",
2008 | "phpspec/prophecy": "^1.7",
2009 | "phpunit/php-code-coverage": "^6.0.7",
2010 | "phpunit/php-file-iterator": "^2.0.1",
2011 | "phpunit/php-text-template": "^1.2.1",
2012 | "phpunit/php-timer": "^2.1",
2013 | "sebastian/comparator": "^3.0",
2014 | "sebastian/diff": "^3.0",
2015 | "sebastian/environment": "^4.0",
2016 | "sebastian/exporter": "^3.1",
2017 | "sebastian/global-state": "^2.0",
2018 | "sebastian/object-enumerator": "^3.0.3",
2019 | "sebastian/resource-operations": "^2.0",
2020 | "sebastian/version": "^2.0.1"
2021 | },
2022 | "conflict": {
2023 | "phpunit/phpunit-mock-objects": "*"
2024 | },
2025 | "require-dev": {
2026 | "ext-pdo": "*"
2027 | },
2028 | "suggest": {
2029 | "ext-soap": "*",
2030 | "ext-xdebug": "*",
2031 | "phpunit/php-invoker": "^2.0"
2032 | },
2033 | "bin": [
2034 | "phpunit"
2035 | ],
2036 | "type": "library",
2037 | "extra": {
2038 | "branch-alias": {
2039 | "dev-master": "7.5-dev"
2040 | }
2041 | },
2042 | "autoload": {
2043 | "classmap": [
2044 | "src/"
2045 | ]
2046 | },
2047 | "notification-url": "https://packagist.org/downloads/",
2048 | "license": [
2049 | "BSD-3-Clause"
2050 | ],
2051 | "authors": [
2052 | {
2053 | "name": "Sebastian Bergmann",
2054 | "role": "lead",
2055 | "email": "sebastian@phpunit.de"
2056 | }
2057 | ],
2058 | "description": "The PHP Unit Testing framework.",
2059 | "homepage": "https://phpunit.de/",
2060 | "keywords": [
2061 | "phpunit",
2062 | "testing",
2063 | "xunit"
2064 | ],
2065 | "time": "2019-07-15T06:24:08+00:00"
2066 | },
2067 | {
2068 | "name": "sebastian/code-unit-reverse-lookup",
2069 | "version": "1.0.1",
2070 | "source": {
2071 | "type": "git",
2072 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
2073 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
2074 | },
2075 | "dist": {
2076 | "type": "zip",
2077 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2078 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2079 | "shasum": "",
2080 | "mirrors": [
2081 | {
2082 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2083 | "preferred": true
2084 | }
2085 | ]
2086 | },
2087 | "require": {
2088 | "php": "^5.6 || ^7.0"
2089 | },
2090 | "require-dev": {
2091 | "phpunit/phpunit": "^5.7 || ^6.0"
2092 | },
2093 | "type": "library",
2094 | "extra": {
2095 | "branch-alias": {
2096 | "dev-master": "1.0.x-dev"
2097 | }
2098 | },
2099 | "autoload": {
2100 | "classmap": [
2101 | "src/"
2102 | ]
2103 | },
2104 | "notification-url": "https://packagist.org/downloads/",
2105 | "license": [
2106 | "BSD-3-Clause"
2107 | ],
2108 | "authors": [
2109 | {
2110 | "name": "Sebastian Bergmann",
2111 | "email": "sebastian@phpunit.de"
2112 | }
2113 | ],
2114 | "description": "Looks up which function or method a line of code belongs to",
2115 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
2116 | "time": "2017-03-04T06:30:41+00:00"
2117 | },
2118 | {
2119 | "name": "sebastian/comparator",
2120 | "version": "3.0.2",
2121 | "source": {
2122 | "type": "git",
2123 | "url": "https://github.com/sebastianbergmann/comparator.git",
2124 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
2125 | },
2126 | "dist": {
2127 | "type": "zip",
2128 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
2129 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
2130 | "shasum": "",
2131 | "mirrors": [
2132 | {
2133 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2134 | "preferred": true
2135 | }
2136 | ]
2137 | },
2138 | "require": {
2139 | "php": "^7.1",
2140 | "sebastian/diff": "^3.0",
2141 | "sebastian/exporter": "^3.1"
2142 | },
2143 | "require-dev": {
2144 | "phpunit/phpunit": "^7.1"
2145 | },
2146 | "type": "library",
2147 | "extra": {
2148 | "branch-alias": {
2149 | "dev-master": "3.0-dev"
2150 | }
2151 | },
2152 | "autoload": {
2153 | "classmap": [
2154 | "src/"
2155 | ]
2156 | },
2157 | "notification-url": "https://packagist.org/downloads/",
2158 | "license": [
2159 | "BSD-3-Clause"
2160 | ],
2161 | "authors": [
2162 | {
2163 | "name": "Jeff Welch",
2164 | "email": "whatthejeff@gmail.com"
2165 | },
2166 | {
2167 | "name": "Volker Dusch",
2168 | "email": "github@wallbash.com"
2169 | },
2170 | {
2171 | "name": "Bernhard Schussek",
2172 | "email": "bschussek@2bepublished.at"
2173 | },
2174 | {
2175 | "name": "Sebastian Bergmann",
2176 | "email": "sebastian@phpunit.de"
2177 | }
2178 | ],
2179 | "description": "Provides the functionality to compare PHP values for equality",
2180 | "homepage": "https://github.com/sebastianbergmann/comparator",
2181 | "keywords": [
2182 | "comparator",
2183 | "compare",
2184 | "equality"
2185 | ],
2186 | "time": "2018-07-12T15:12:46+00:00"
2187 | },
2188 | {
2189 | "name": "sebastian/diff",
2190 | "version": "3.0.2",
2191 | "source": {
2192 | "type": "git",
2193 | "url": "https://github.com/sebastianbergmann/diff.git",
2194 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
2195 | },
2196 | "dist": {
2197 | "type": "zip",
2198 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
2199 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
2200 | "shasum": "",
2201 | "mirrors": [
2202 | {
2203 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2204 | "preferred": true
2205 | }
2206 | ]
2207 | },
2208 | "require": {
2209 | "php": "^7.1"
2210 | },
2211 | "require-dev": {
2212 | "phpunit/phpunit": "^7.5 || ^8.0",
2213 | "symfony/process": "^2 || ^3.3 || ^4"
2214 | },
2215 | "type": "library",
2216 | "extra": {
2217 | "branch-alias": {
2218 | "dev-master": "3.0-dev"
2219 | }
2220 | },
2221 | "autoload": {
2222 | "classmap": [
2223 | "src/"
2224 | ]
2225 | },
2226 | "notification-url": "https://packagist.org/downloads/",
2227 | "license": [
2228 | "BSD-3-Clause"
2229 | ],
2230 | "authors": [
2231 | {
2232 | "name": "Kore Nordmann",
2233 | "email": "mail@kore-nordmann.de"
2234 | },
2235 | {
2236 | "name": "Sebastian Bergmann",
2237 | "email": "sebastian@phpunit.de"
2238 | }
2239 | ],
2240 | "description": "Diff implementation",
2241 | "homepage": "https://github.com/sebastianbergmann/diff",
2242 | "keywords": [
2243 | "diff",
2244 | "udiff",
2245 | "unidiff",
2246 | "unified diff"
2247 | ],
2248 | "time": "2019-02-04T06:01:07+00:00"
2249 | },
2250 | {
2251 | "name": "sebastian/environment",
2252 | "version": "4.2.2",
2253 | "source": {
2254 | "type": "git",
2255 | "url": "https://github.com/sebastianbergmann/environment.git",
2256 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404"
2257 | },
2258 | "dist": {
2259 | "type": "zip",
2260 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
2261 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404",
2262 | "shasum": "",
2263 | "mirrors": [
2264 | {
2265 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2266 | "preferred": true
2267 | }
2268 | ]
2269 | },
2270 | "require": {
2271 | "php": "^7.1"
2272 | },
2273 | "require-dev": {
2274 | "phpunit/phpunit": "^7.5"
2275 | },
2276 | "suggest": {
2277 | "ext-posix": "*"
2278 | },
2279 | "type": "library",
2280 | "extra": {
2281 | "branch-alias": {
2282 | "dev-master": "4.2-dev"
2283 | }
2284 | },
2285 | "autoload": {
2286 | "classmap": [
2287 | "src/"
2288 | ]
2289 | },
2290 | "notification-url": "https://packagist.org/downloads/",
2291 | "license": [
2292 | "BSD-3-Clause"
2293 | ],
2294 | "authors": [
2295 | {
2296 | "name": "Sebastian Bergmann",
2297 | "email": "sebastian@phpunit.de"
2298 | }
2299 | ],
2300 | "description": "Provides functionality to handle HHVM/PHP environments",
2301 | "homepage": "http://www.github.com/sebastianbergmann/environment",
2302 | "keywords": [
2303 | "Xdebug",
2304 | "environment",
2305 | "hhvm"
2306 | ],
2307 | "time": "2019-05-05T09:05:15+00:00"
2308 | },
2309 | {
2310 | "name": "sebastian/exporter",
2311 | "version": "3.1.0",
2312 | "source": {
2313 | "type": "git",
2314 | "url": "https://github.com/sebastianbergmann/exporter.git",
2315 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
2316 | },
2317 | "dist": {
2318 | "type": "zip",
2319 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
2320 | "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
2321 | "shasum": "",
2322 | "mirrors": [
2323 | {
2324 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2325 | "preferred": true
2326 | }
2327 | ]
2328 | },
2329 | "require": {
2330 | "php": "^7.0",
2331 | "sebastian/recursion-context": "^3.0"
2332 | },
2333 | "require-dev": {
2334 | "ext-mbstring": "*",
2335 | "phpunit/phpunit": "^6.0"
2336 | },
2337 | "type": "library",
2338 | "extra": {
2339 | "branch-alias": {
2340 | "dev-master": "3.1.x-dev"
2341 | }
2342 | },
2343 | "autoload": {
2344 | "classmap": [
2345 | "src/"
2346 | ]
2347 | },
2348 | "notification-url": "https://packagist.org/downloads/",
2349 | "license": [
2350 | "BSD-3-Clause"
2351 | ],
2352 | "authors": [
2353 | {
2354 | "name": "Jeff Welch",
2355 | "email": "whatthejeff@gmail.com"
2356 | },
2357 | {
2358 | "name": "Volker Dusch",
2359 | "email": "github@wallbash.com"
2360 | },
2361 | {
2362 | "name": "Bernhard Schussek",
2363 | "email": "bschussek@2bepublished.at"
2364 | },
2365 | {
2366 | "name": "Sebastian Bergmann",
2367 | "email": "sebastian@phpunit.de"
2368 | },
2369 | {
2370 | "name": "Adam Harvey",
2371 | "email": "aharvey@php.net"
2372 | }
2373 | ],
2374 | "description": "Provides the functionality to export PHP variables for visualization",
2375 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
2376 | "keywords": [
2377 | "export",
2378 | "exporter"
2379 | ],
2380 | "time": "2017-04-03T13:19:02+00:00"
2381 | },
2382 | {
2383 | "name": "sebastian/global-state",
2384 | "version": "2.0.0",
2385 | "source": {
2386 | "type": "git",
2387 | "url": "https://github.com/sebastianbergmann/global-state.git",
2388 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
2389 | },
2390 | "dist": {
2391 | "type": "zip",
2392 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
2393 | "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
2394 | "shasum": "",
2395 | "mirrors": [
2396 | {
2397 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2398 | "preferred": true
2399 | }
2400 | ]
2401 | },
2402 | "require": {
2403 | "php": "^7.0"
2404 | },
2405 | "require-dev": {
2406 | "phpunit/phpunit": "^6.0"
2407 | },
2408 | "suggest": {
2409 | "ext-uopz": "*"
2410 | },
2411 | "type": "library",
2412 | "extra": {
2413 | "branch-alias": {
2414 | "dev-master": "2.0-dev"
2415 | }
2416 | },
2417 | "autoload": {
2418 | "classmap": [
2419 | "src/"
2420 | ]
2421 | },
2422 | "notification-url": "https://packagist.org/downloads/",
2423 | "license": [
2424 | "BSD-3-Clause"
2425 | ],
2426 | "authors": [
2427 | {
2428 | "name": "Sebastian Bergmann",
2429 | "email": "sebastian@phpunit.de"
2430 | }
2431 | ],
2432 | "description": "Snapshotting of global state",
2433 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2434 | "keywords": [
2435 | "global state"
2436 | ],
2437 | "time": "2017-04-27T15:39:26+00:00"
2438 | },
2439 | {
2440 | "name": "sebastian/object-enumerator",
2441 | "version": "3.0.3",
2442 | "source": {
2443 | "type": "git",
2444 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2445 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
2446 | },
2447 | "dist": {
2448 | "type": "zip",
2449 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2450 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2451 | "shasum": "",
2452 | "mirrors": [
2453 | {
2454 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2455 | "preferred": true
2456 | }
2457 | ]
2458 | },
2459 | "require": {
2460 | "php": "^7.0",
2461 | "sebastian/object-reflector": "^1.1.1",
2462 | "sebastian/recursion-context": "^3.0"
2463 | },
2464 | "require-dev": {
2465 | "phpunit/phpunit": "^6.0"
2466 | },
2467 | "type": "library",
2468 | "extra": {
2469 | "branch-alias": {
2470 | "dev-master": "3.0.x-dev"
2471 | }
2472 | },
2473 | "autoload": {
2474 | "classmap": [
2475 | "src/"
2476 | ]
2477 | },
2478 | "notification-url": "https://packagist.org/downloads/",
2479 | "license": [
2480 | "BSD-3-Clause"
2481 | ],
2482 | "authors": [
2483 | {
2484 | "name": "Sebastian Bergmann",
2485 | "email": "sebastian@phpunit.de"
2486 | }
2487 | ],
2488 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2489 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2490 | "time": "2017-08-03T12:35:26+00:00"
2491 | },
2492 | {
2493 | "name": "sebastian/object-reflector",
2494 | "version": "1.1.1",
2495 | "source": {
2496 | "type": "git",
2497 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2498 | "reference": "773f97c67f28de00d397be301821b06708fca0be"
2499 | },
2500 | "dist": {
2501 | "type": "zip",
2502 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
2503 | "reference": "773f97c67f28de00d397be301821b06708fca0be",
2504 | "shasum": "",
2505 | "mirrors": [
2506 | {
2507 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2508 | "preferred": true
2509 | }
2510 | ]
2511 | },
2512 | "require": {
2513 | "php": "^7.0"
2514 | },
2515 | "require-dev": {
2516 | "phpunit/phpunit": "^6.0"
2517 | },
2518 | "type": "library",
2519 | "extra": {
2520 | "branch-alias": {
2521 | "dev-master": "1.1-dev"
2522 | }
2523 | },
2524 | "autoload": {
2525 | "classmap": [
2526 | "src/"
2527 | ]
2528 | },
2529 | "notification-url": "https://packagist.org/downloads/",
2530 | "license": [
2531 | "BSD-3-Clause"
2532 | ],
2533 | "authors": [
2534 | {
2535 | "name": "Sebastian Bergmann",
2536 | "email": "sebastian@phpunit.de"
2537 | }
2538 | ],
2539 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2540 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2541 | "time": "2017-03-29T09:07:27+00:00"
2542 | },
2543 | {
2544 | "name": "sebastian/recursion-context",
2545 | "version": "3.0.0",
2546 | "source": {
2547 | "type": "git",
2548 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2549 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
2550 | },
2551 | "dist": {
2552 | "type": "zip",
2553 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
2554 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
2555 | "shasum": "",
2556 | "mirrors": [
2557 | {
2558 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2559 | "preferred": true
2560 | }
2561 | ]
2562 | },
2563 | "require": {
2564 | "php": "^7.0"
2565 | },
2566 | "require-dev": {
2567 | "phpunit/phpunit": "^6.0"
2568 | },
2569 | "type": "library",
2570 | "extra": {
2571 | "branch-alias": {
2572 | "dev-master": "3.0.x-dev"
2573 | }
2574 | },
2575 | "autoload": {
2576 | "classmap": [
2577 | "src/"
2578 | ]
2579 | },
2580 | "notification-url": "https://packagist.org/downloads/",
2581 | "license": [
2582 | "BSD-3-Clause"
2583 | ],
2584 | "authors": [
2585 | {
2586 | "name": "Jeff Welch",
2587 | "email": "whatthejeff@gmail.com"
2588 | },
2589 | {
2590 | "name": "Sebastian Bergmann",
2591 | "email": "sebastian@phpunit.de"
2592 | },
2593 | {
2594 | "name": "Adam Harvey",
2595 | "email": "aharvey@php.net"
2596 | }
2597 | ],
2598 | "description": "Provides functionality to recursively process PHP variables",
2599 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2600 | "time": "2017-03-03T06:23:57+00:00"
2601 | },
2602 | {
2603 | "name": "sebastian/resource-operations",
2604 | "version": "2.0.1",
2605 | "source": {
2606 | "type": "git",
2607 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
2608 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
2609 | },
2610 | "dist": {
2611 | "type": "zip",
2612 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
2613 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
2614 | "shasum": "",
2615 | "mirrors": [
2616 | {
2617 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2618 | "preferred": true
2619 | }
2620 | ]
2621 | },
2622 | "require": {
2623 | "php": "^7.1"
2624 | },
2625 | "type": "library",
2626 | "extra": {
2627 | "branch-alias": {
2628 | "dev-master": "2.0-dev"
2629 | }
2630 | },
2631 | "autoload": {
2632 | "classmap": [
2633 | "src/"
2634 | ]
2635 | },
2636 | "notification-url": "https://packagist.org/downloads/",
2637 | "license": [
2638 | "BSD-3-Clause"
2639 | ],
2640 | "authors": [
2641 | {
2642 | "name": "Sebastian Bergmann",
2643 | "email": "sebastian@phpunit.de"
2644 | }
2645 | ],
2646 | "description": "Provides a list of PHP built-in functions that operate on resources",
2647 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
2648 | "time": "2018-10-04T04:07:39+00:00"
2649 | },
2650 | {
2651 | "name": "sebastian/version",
2652 | "version": "2.0.1",
2653 | "source": {
2654 | "type": "git",
2655 | "url": "https://github.com/sebastianbergmann/version.git",
2656 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
2657 | },
2658 | "dist": {
2659 | "type": "zip",
2660 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
2661 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
2662 | "shasum": "",
2663 | "mirrors": [
2664 | {
2665 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2666 | "preferred": true
2667 | }
2668 | ]
2669 | },
2670 | "require": {
2671 | "php": ">=5.6"
2672 | },
2673 | "type": "library",
2674 | "extra": {
2675 | "branch-alias": {
2676 | "dev-master": "2.0.x-dev"
2677 | }
2678 | },
2679 | "autoload": {
2680 | "classmap": [
2681 | "src/"
2682 | ]
2683 | },
2684 | "notification-url": "https://packagist.org/downloads/",
2685 | "license": [
2686 | "BSD-3-Clause"
2687 | ],
2688 | "authors": [
2689 | {
2690 | "name": "Sebastian Bergmann",
2691 | "email": "sebastian@phpunit.de",
2692 | "role": "lead"
2693 | }
2694 | ],
2695 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2696 | "homepage": "https://github.com/sebastianbergmann/version",
2697 | "time": "2016-10-03T07:35:21+00:00"
2698 | },
2699 | {
2700 | "name": "theseer/tokenizer",
2701 | "version": "1.1.3",
2702 | "source": {
2703 | "type": "git",
2704 | "url": "https://github.com/theseer/tokenizer.git",
2705 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
2706 | },
2707 | "dist": {
2708 | "type": "zip",
2709 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2710 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2711 | "shasum": "",
2712 | "mirrors": [
2713 | {
2714 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2715 | "preferred": true
2716 | }
2717 | ]
2718 | },
2719 | "require": {
2720 | "ext-dom": "*",
2721 | "ext-tokenizer": "*",
2722 | "ext-xmlwriter": "*",
2723 | "php": "^7.0"
2724 | },
2725 | "type": "library",
2726 | "autoload": {
2727 | "classmap": [
2728 | "src/"
2729 | ]
2730 | },
2731 | "notification-url": "https://packagist.org/downloads/",
2732 | "license": [
2733 | "BSD-3-Clause"
2734 | ],
2735 | "authors": [
2736 | {
2737 | "name": "Arne Blankerts",
2738 | "email": "arne@blankerts.de",
2739 | "role": "Developer"
2740 | }
2741 | ],
2742 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2743 | "time": "2019-06-13T22:48:21+00:00"
2744 | },
2745 | {
2746 | "name": "webmozart/assert",
2747 | "version": "1.4.0",
2748 | "source": {
2749 | "type": "git",
2750 | "url": "https://github.com/webmozart/assert.git",
2751 | "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
2752 | },
2753 | "dist": {
2754 | "type": "zip",
2755 | "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
2756 | "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
2757 | "shasum": "",
2758 | "mirrors": [
2759 | {
2760 | "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
2761 | "preferred": true
2762 | }
2763 | ]
2764 | },
2765 | "require": {
2766 | "php": "^5.3.3 || ^7.0",
2767 | "symfony/polyfill-ctype": "^1.8"
2768 | },
2769 | "require-dev": {
2770 | "phpunit/phpunit": "^4.6",
2771 | "sebastian/version": "^1.0.1"
2772 | },
2773 | "type": "library",
2774 | "extra": {
2775 | "branch-alias": {
2776 | "dev-master": "1.3-dev"
2777 | }
2778 | },
2779 | "autoload": {
2780 | "psr-4": {
2781 | "Webmozart\\Assert\\": "src/"
2782 | }
2783 | },
2784 | "notification-url": "https://packagist.org/downloads/",
2785 | "license": [
2786 | "MIT"
2787 | ],
2788 | "authors": [
2789 | {
2790 | "name": "Bernhard Schussek",
2791 | "email": "bschussek@gmail.com"
2792 | }
2793 | ],
2794 | "description": "Assertions to validate method input/output with nice error messages.",
2795 | "keywords": [
2796 | "assert",
2797 | "check",
2798 | "validate"
2799 | ],
2800 | "time": "2018-12-25T11:19:39+00:00"
2801 | }
2802 | ],
2803 | "aliases": [],
2804 | "minimum-stability": "dev",
2805 | "stability-flags": [],
2806 | "prefer-stable": true,
2807 | "prefer-lowest": false,
2808 | "platform": {
2809 | "php": "^7.2.5"
2810 | },
2811 | "platform-dev": []
2812 | }
2813 |
--------------------------------------------------------------------------------