├── .github
└── workflows
│ └── Build.yml
├── .gitignore
├── .releaserc
├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── coverage.xml
├── phpcs.xml
├── phpunit.xml
├── src
├── Client.php
├── Request.php
└── Response.php
└── tests
├── ClientTest.php
├── RequestTest.php
└── ResponseTest.php
/.github/workflows/Build.yml:
--------------------------------------------------------------------------------
1 | name: Build
2 | on: [push]
3 | jobs:
4 | test:
5 | name: Test
6 | runs-on: ubuntu-18.04
7 | steps:
8 | - uses: actions/checkout@master
9 | - name: Checkout
10 | run: git checkout "${GITHUB_REF:11}"
11 | - name: Setup PHP
12 | uses: shivammathur/setup-php@v2
13 | with:
14 | php-version: '7.3'
15 | coverage: xdebug
16 | - name: Composer Install
17 | run: composer install
18 | - name: PHPCS
19 | run: ./vendor/bin/phpcs src tests
20 | - name: Run Tests
21 | run: ./vendor/bin/phpunit --coverage-clover build/coverage.xml
22 | - name: Coveralls
23 | run: ./vendor/bin/php-coveralls -v --coverage_clover build/coverage.xml --json_path build/coveralls-upload.json
24 | env:
25 | COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
26 | release:
27 | name: Release
28 | if: github.ref == 'refs/heads/master'
29 | needs: test
30 | runs-on: ubuntu-18.04
31 | steps:
32 | - uses: actions/checkout@master
33 | - name: Checkout
34 | run: git checkout "${GITHUB_REF:11}"
35 | - name: Setup Node.js
36 | uses: actions/setup-node@v1
37 | with:
38 | node-version: 12
39 | - name: Install dependencies
40 | run: yarn install
41 | - name: Release
42 | env:
43 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44 | run: npx semantic-release@15
45 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor/
2 | /build/
3 | .phpunit.result.cache
4 | .coveralls.yml
--------------------------------------------------------------------------------
/.releaserc:
--------------------------------------------------------------------------------
1 | plugins:
2 | - "@semantic-release/commit-analyzer"
3 | - "@semantic-release/release-notes-generator"
4 | - "@semantic-release/github"
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Oh See Software
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Caddy Config PHP
2 | Caddy v2 API helper for PHP.
3 |
4 | [](https://github.com/ohseesoftware/caddy-config-php/releases)
5 | 
6 | [](https://coveralls.io/github/ohseesoftware/caddy-config-php?branch=master)
7 | [](https://codeclimate.com/github/ohseesoftware/caddy-config-php)
8 | [](https://packagist.org/packages/ohseesoftware/caddy-config-php)
9 | [](https://github.com/ohseesoftware/caddy-config-php/blob/master/LICENSE)
10 |
11 | ---
12 |
13 | Caddy v2 allows you to update your Caddy configuration via a JSON API. This package is a simple helper library to update parts of your configuration.
14 |
15 | Functionality for updating all aspects of the configuration will be added over time.
16 |
17 | ## Usage
18 |
19 | To get started, create an instance of `OhSeeSoftware\CaddyConfig\Client`, ensuring to pass your Caddy network address as the first argument:
20 |
21 | ```php
22 | $client = new OhSeeSoftware\CaddyConfig\Client('localhost:2019');
23 | ```
24 |
25 | From there, you can use the `$client` instance to make API requests to your Caddy instance.
26 |
27 | The idea behind the wrapper is that you can have a `Client` singleton class, and then use the `$client->request()` method to create new `Request` instances. You should create a new `Request` instance per HTTP request you send to your Caddy server.
28 |
29 | ## API Methods
30 |
31 | ### Client
32 |
33 | **__constructor()**
34 |
35 | Creates a new instance of the `Client` class.
36 |
37 | Arguments:
38 |
39 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening.
40 |
41 | **setCaddyHost()**
42 |
43 | Allows you to change the Caddy host after creating the Client instance.
44 |
45 | Arguments:
46 |
47 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening.
48 |
49 | **request()**
50 |
51 | Returns a new `Request` instance which you use to make configuration requests.
52 |
53 | No arguments.
54 |
55 | ### Request
56 |
57 | Use the `Request` class to compose your request to send to Caddy. Here's an example of how you can add a new host to a server:
58 |
59 | ```php
60 | $client = new OhSeeSoftware\CaddyConfig\Client('localhost:2019');
61 | $client->request()
62 | ->http()
63 | ->server('srv0')
64 | ->route(0)
65 | ->match(0)
66 | ->addHost('example.com');
67 | ```
68 |
69 | **__constructor()**
70 |
71 | Creates a new instance of the `Request` class.
72 |
73 | Arguments:
74 |
75 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening.
76 |
77 | **addHost()**
78 |
79 | Sends a request to Caddy to add the given host.
80 |
81 | Arguments:
82 |
83 | * `$host` - _string_: The host to add.
84 |
85 | Returns:
86 |
87 | * `Response` - The response from Caddy wrapped in a `Response` instance.
88 |
89 | **http()**
90 |
91 | Adds the http path, "/apps/http", to the request URI.
92 |
93 | No arguments.
94 |
95 | Returns:
96 |
97 | * `Request` - The request instance (allows chaining).
98 |
99 | **server()**
100 |
101 | Adds the server path, "/servers/{server}", to the request URI.
102 |
103 | Arguments:
104 |
105 | * `$server` - _string_: The name of the server to target.
106 |
107 | Returns:
108 |
109 | * `Request` - The request instance (allows chaining).
110 |
111 | **route()**
112 |
113 | Adds the route path, "/routes/{routeIndex}", to the request URI.
114 |
115 | Arguments:
116 |
117 | * `$routeIndex` - _int_: The route to target.
118 |
119 | Returns:
120 |
121 | * `Request` - The request instance (allows chaining).
122 |
123 | **match()**
124 |
125 | Adds the match path, "/match/{matchIndex}", to the request URI.
126 |
127 | Arguments:
128 |
129 | * `$matchIndex` - _int_: The match to target.
130 |
131 | Returns:
132 |
133 | * `Request` - The request instance (allows chaining).
134 |
135 | **sendRequest()**
136 |
137 | Sends the built request to the Caddy server.
138 |
139 | Arguments:
140 |
141 | * `$method` - _string_: The method for the request.
142 | * `$body` - _array|nuullable_: The request body to send to Caddy.
143 |
144 | Returns:
145 |
146 | * `Response` - A new instance of a `Response` instance.
147 |
148 | ### Response
149 |
150 | **__constructor()**
151 |
152 | Creates a new instance of the `Response` class.
153 |
154 | Arguments:
155 |
156 | * `$response` - _ResponseInterface_: Instance of a `ResponseInterface` (created by Guzzle).
157 |
158 | **getBody()**
159 |
160 | Returns the response body as a string.
161 |
162 | No arguments.
163 |
164 | **isSuccessful()**
165 |
166 | Returns a boolean indicating if the request was successful. Status codes of 200 or 201 are considered successful, everything else is not.
167 |
168 | No arguments.
169 |
170 | ## License
171 |
172 | The MIT License (MIT). Please see [License File](https://github.com/ohseesoftware/caddy-config-php/blob/master/LICENSE) for more information.
173 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ohseesoftware/caddy-config-php",
3 | "description": "Caddy v2 API helper library.",
4 | "type": "library",
5 | "require": {
6 | "guzzlehttp/guzzle": "^6.4"
7 | },
8 | "require-dev": {
9 | "squizlabs/php_codesniffer": "*",
10 | "phpunit/phpunit": "^8.4",
11 | "php-coveralls/php-coveralls": "^2.2"
12 | },
13 | "license": "MIT",
14 | "authors": [
15 | {
16 | "name": "Owen Conti",
17 | "email": "owen@ohseemedia.com"
18 | }
19 | ],
20 | "autoload": {
21 | "psr-4": {
22 | "OhSeeSoftware\\CaddyConfig\\": "src/"
23 | }
24 | },
25 | "autoload-dev": {
26 | "psr-4": {
27 | "Tests\\": "tests/"
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/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": "57d2643217d6bc98a2358af32b41851a",
8 | "packages": [
9 | {
10 | "name": "guzzlehttp/guzzle",
11 | "version": "6.4.1",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/guzzle/guzzle.git",
15 | "reference": "0895c932405407fd3a7368b6910c09a24d26db11"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11",
20 | "reference": "0895c932405407fd3a7368b6910c09a24d26db11",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "ext-json": "*",
25 | "guzzlehttp/promises": "^1.0",
26 | "guzzlehttp/psr7": "^1.6.1",
27 | "php": ">=5.5"
28 | },
29 | "require-dev": {
30 | "ext-curl": "*",
31 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
32 | "psr/log": "^1.1"
33 | },
34 | "suggest": {
35 | "psr/log": "Required for using the Log middleware"
36 | },
37 | "type": "library",
38 | "extra": {
39 | "branch-alias": {
40 | "dev-master": "6.3-dev"
41 | }
42 | },
43 | "autoload": {
44 | "psr-4": {
45 | "GuzzleHttp\\": "src/"
46 | },
47 | "files": [
48 | "src/functions_include.php"
49 | ]
50 | },
51 | "notification-url": "https://packagist.org/downloads/",
52 | "license": [
53 | "MIT"
54 | ],
55 | "authors": [
56 | {
57 | "name": "Michael Dowling",
58 | "email": "mtdowling@gmail.com",
59 | "homepage": "https://github.com/mtdowling"
60 | }
61 | ],
62 | "description": "Guzzle is a PHP HTTP client library",
63 | "homepage": "http://guzzlephp.org/",
64 | "keywords": [
65 | "client",
66 | "curl",
67 | "framework",
68 | "http",
69 | "http client",
70 | "rest",
71 | "web service"
72 | ],
73 | "time": "2019-10-23T15:58:00+00:00"
74 | },
75 | {
76 | "name": "guzzlehttp/promises",
77 | "version": "v1.3.1",
78 | "source": {
79 | "type": "git",
80 | "url": "https://github.com/guzzle/promises.git",
81 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646"
82 | },
83 | "dist": {
84 | "type": "zip",
85 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646",
86 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646",
87 | "shasum": ""
88 | },
89 | "require": {
90 | "php": ">=5.5.0"
91 | },
92 | "require-dev": {
93 | "phpunit/phpunit": "^4.0"
94 | },
95 | "type": "library",
96 | "extra": {
97 | "branch-alias": {
98 | "dev-master": "1.4-dev"
99 | }
100 | },
101 | "autoload": {
102 | "psr-4": {
103 | "GuzzleHttp\\Promise\\": "src/"
104 | },
105 | "files": [
106 | "src/functions_include.php"
107 | ]
108 | },
109 | "notification-url": "https://packagist.org/downloads/",
110 | "license": [
111 | "MIT"
112 | ],
113 | "authors": [
114 | {
115 | "name": "Michael Dowling",
116 | "email": "mtdowling@gmail.com",
117 | "homepage": "https://github.com/mtdowling"
118 | }
119 | ],
120 | "description": "Guzzle promises library",
121 | "keywords": [
122 | "promise"
123 | ],
124 | "time": "2016-12-20T10:07:11+00:00"
125 | },
126 | {
127 | "name": "guzzlehttp/psr7",
128 | "version": "1.6.1",
129 | "source": {
130 | "type": "git",
131 | "url": "https://github.com/guzzle/psr7.git",
132 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a"
133 | },
134 | "dist": {
135 | "type": "zip",
136 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a",
137 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a",
138 | "shasum": ""
139 | },
140 | "require": {
141 | "php": ">=5.4.0",
142 | "psr/http-message": "~1.0",
143 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
144 | },
145 | "provide": {
146 | "psr/http-message-implementation": "1.0"
147 | },
148 | "require-dev": {
149 | "ext-zlib": "*",
150 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8"
151 | },
152 | "suggest": {
153 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses"
154 | },
155 | "type": "library",
156 | "extra": {
157 | "branch-alias": {
158 | "dev-master": "1.6-dev"
159 | }
160 | },
161 | "autoload": {
162 | "psr-4": {
163 | "GuzzleHttp\\Psr7\\": "src/"
164 | },
165 | "files": [
166 | "src/functions_include.php"
167 | ]
168 | },
169 | "notification-url": "https://packagist.org/downloads/",
170 | "license": [
171 | "MIT"
172 | ],
173 | "authors": [
174 | {
175 | "name": "Michael Dowling",
176 | "email": "mtdowling@gmail.com",
177 | "homepage": "https://github.com/mtdowling"
178 | },
179 | {
180 | "name": "Tobias Schultze",
181 | "homepage": "https://github.com/Tobion"
182 | }
183 | ],
184 | "description": "PSR-7 message implementation that also provides common utility methods",
185 | "keywords": [
186 | "http",
187 | "message",
188 | "psr-7",
189 | "request",
190 | "response",
191 | "stream",
192 | "uri",
193 | "url"
194 | ],
195 | "time": "2019-07-01T23:21:34+00:00"
196 | },
197 | {
198 | "name": "psr/http-message",
199 | "version": "1.0.1",
200 | "source": {
201 | "type": "git",
202 | "url": "https://github.com/php-fig/http-message.git",
203 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
204 | },
205 | "dist": {
206 | "type": "zip",
207 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
208 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
209 | "shasum": ""
210 | },
211 | "require": {
212 | "php": ">=5.3.0"
213 | },
214 | "type": "library",
215 | "extra": {
216 | "branch-alias": {
217 | "dev-master": "1.0.x-dev"
218 | }
219 | },
220 | "autoload": {
221 | "psr-4": {
222 | "Psr\\Http\\Message\\": "src/"
223 | }
224 | },
225 | "notification-url": "https://packagist.org/downloads/",
226 | "license": [
227 | "MIT"
228 | ],
229 | "authors": [
230 | {
231 | "name": "PHP-FIG",
232 | "homepage": "http://www.php-fig.org/"
233 | }
234 | ],
235 | "description": "Common interface for HTTP messages",
236 | "homepage": "https://github.com/php-fig/http-message",
237 | "keywords": [
238 | "http",
239 | "http-message",
240 | "psr",
241 | "psr-7",
242 | "request",
243 | "response"
244 | ],
245 | "time": "2016-08-06T14:39:51+00:00"
246 | },
247 | {
248 | "name": "ralouphie/getallheaders",
249 | "version": "3.0.3",
250 | "source": {
251 | "type": "git",
252 | "url": "https://github.com/ralouphie/getallheaders.git",
253 | "reference": "120b605dfeb996808c31b6477290a714d356e822"
254 | },
255 | "dist": {
256 | "type": "zip",
257 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
258 | "reference": "120b605dfeb996808c31b6477290a714d356e822",
259 | "shasum": ""
260 | },
261 | "require": {
262 | "php": ">=5.6"
263 | },
264 | "require-dev": {
265 | "php-coveralls/php-coveralls": "^2.1",
266 | "phpunit/phpunit": "^5 || ^6.5"
267 | },
268 | "type": "library",
269 | "autoload": {
270 | "files": [
271 | "src/getallheaders.php"
272 | ]
273 | },
274 | "notification-url": "https://packagist.org/downloads/",
275 | "license": [
276 | "MIT"
277 | ],
278 | "authors": [
279 | {
280 | "name": "Ralph Khattar",
281 | "email": "ralph.khattar@gmail.com"
282 | }
283 | ],
284 | "description": "A polyfill for getallheaders.",
285 | "time": "2019-03-08T08:55:37+00:00"
286 | }
287 | ],
288 | "packages-dev": [
289 | {
290 | "name": "doctrine/instantiator",
291 | "version": "1.3.0",
292 | "source": {
293 | "type": "git",
294 | "url": "https://github.com/doctrine/instantiator.git",
295 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
296 | },
297 | "dist": {
298 | "type": "zip",
299 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
300 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
301 | "shasum": ""
302 | },
303 | "require": {
304 | "php": "^7.1"
305 | },
306 | "require-dev": {
307 | "doctrine/coding-standard": "^6.0",
308 | "ext-pdo": "*",
309 | "ext-phar": "*",
310 | "phpbench/phpbench": "^0.13",
311 | "phpstan/phpstan-phpunit": "^0.11",
312 | "phpstan/phpstan-shim": "^0.11",
313 | "phpunit/phpunit": "^7.0"
314 | },
315 | "type": "library",
316 | "extra": {
317 | "branch-alias": {
318 | "dev-master": "1.2.x-dev"
319 | }
320 | },
321 | "autoload": {
322 | "psr-4": {
323 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
324 | }
325 | },
326 | "notification-url": "https://packagist.org/downloads/",
327 | "license": [
328 | "MIT"
329 | ],
330 | "authors": [
331 | {
332 | "name": "Marco Pivetta",
333 | "email": "ocramius@gmail.com",
334 | "homepage": "http://ocramius.github.com/"
335 | }
336 | ],
337 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
338 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
339 | "keywords": [
340 | "constructor",
341 | "instantiate"
342 | ],
343 | "time": "2019-10-21T16:45:58+00:00"
344 | },
345 | {
346 | "name": "myclabs/deep-copy",
347 | "version": "1.9.3",
348 | "source": {
349 | "type": "git",
350 | "url": "https://github.com/myclabs/DeepCopy.git",
351 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
352 | },
353 | "dist": {
354 | "type": "zip",
355 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
356 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
357 | "shasum": ""
358 | },
359 | "require": {
360 | "php": "^7.1"
361 | },
362 | "replace": {
363 | "myclabs/deep-copy": "self.version"
364 | },
365 | "require-dev": {
366 | "doctrine/collections": "^1.0",
367 | "doctrine/common": "^2.6",
368 | "phpunit/phpunit": "^7.1"
369 | },
370 | "type": "library",
371 | "autoload": {
372 | "psr-4": {
373 | "DeepCopy\\": "src/DeepCopy/"
374 | },
375 | "files": [
376 | "src/DeepCopy/deep_copy.php"
377 | ]
378 | },
379 | "notification-url": "https://packagist.org/downloads/",
380 | "license": [
381 | "MIT"
382 | ],
383 | "description": "Create deep copies (clones) of your objects",
384 | "keywords": [
385 | "clone",
386 | "copy",
387 | "duplicate",
388 | "object",
389 | "object graph"
390 | ],
391 | "time": "2019-08-09T12:45:53+00:00"
392 | },
393 | {
394 | "name": "phar-io/manifest",
395 | "version": "1.0.3",
396 | "source": {
397 | "type": "git",
398 | "url": "https://github.com/phar-io/manifest.git",
399 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
400 | },
401 | "dist": {
402 | "type": "zip",
403 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
404 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
405 | "shasum": ""
406 | },
407 | "require": {
408 | "ext-dom": "*",
409 | "ext-phar": "*",
410 | "phar-io/version": "^2.0",
411 | "php": "^5.6 || ^7.0"
412 | },
413 | "type": "library",
414 | "extra": {
415 | "branch-alias": {
416 | "dev-master": "1.0.x-dev"
417 | }
418 | },
419 | "autoload": {
420 | "classmap": [
421 | "src/"
422 | ]
423 | },
424 | "notification-url": "https://packagist.org/downloads/",
425 | "license": [
426 | "BSD-3-Clause"
427 | ],
428 | "authors": [
429 | {
430 | "name": "Arne Blankerts",
431 | "email": "arne@blankerts.de",
432 | "role": "Developer"
433 | },
434 | {
435 | "name": "Sebastian Heuer",
436 | "email": "sebastian@phpeople.de",
437 | "role": "Developer"
438 | },
439 | {
440 | "name": "Sebastian Bergmann",
441 | "email": "sebastian@phpunit.de",
442 | "role": "Developer"
443 | }
444 | ],
445 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
446 | "time": "2018-07-08T19:23:20+00:00"
447 | },
448 | {
449 | "name": "phar-io/version",
450 | "version": "2.0.1",
451 | "source": {
452 | "type": "git",
453 | "url": "https://github.com/phar-io/version.git",
454 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
455 | },
456 | "dist": {
457 | "type": "zip",
458 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
459 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
460 | "shasum": ""
461 | },
462 | "require": {
463 | "php": "^5.6 || ^7.0"
464 | },
465 | "type": "library",
466 | "autoload": {
467 | "classmap": [
468 | "src/"
469 | ]
470 | },
471 | "notification-url": "https://packagist.org/downloads/",
472 | "license": [
473 | "BSD-3-Clause"
474 | ],
475 | "authors": [
476 | {
477 | "name": "Arne Blankerts",
478 | "email": "arne@blankerts.de",
479 | "role": "Developer"
480 | },
481 | {
482 | "name": "Sebastian Heuer",
483 | "email": "sebastian@phpeople.de",
484 | "role": "Developer"
485 | },
486 | {
487 | "name": "Sebastian Bergmann",
488 | "email": "sebastian@phpunit.de",
489 | "role": "Developer"
490 | }
491 | ],
492 | "description": "Library for handling version information and constraints",
493 | "time": "2018-07-08T19:19:57+00:00"
494 | },
495 | {
496 | "name": "php-coveralls/php-coveralls",
497 | "version": "v2.2.0",
498 | "source": {
499 | "type": "git",
500 | "url": "https://github.com/php-coveralls/php-coveralls.git",
501 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae"
502 | },
503 | "dist": {
504 | "type": "zip",
505 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae",
506 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae",
507 | "shasum": ""
508 | },
509 | "require": {
510 | "ext-json": "*",
511 | "ext-simplexml": "*",
512 | "guzzlehttp/guzzle": "^6.0",
513 | "php": "^5.5 || ^7.0",
514 | "psr/log": "^1.0",
515 | "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
516 | "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
517 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
518 | "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
519 | },
520 | "require-dev": {
521 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
522 | },
523 | "suggest": {
524 | "symfony/http-kernel": "Allows Symfony integration"
525 | },
526 | "bin": [
527 | "bin/php-coveralls"
528 | ],
529 | "type": "library",
530 | "extra": {
531 | "branch-alias": {
532 | "dev-master": "2.2-dev"
533 | }
534 | },
535 | "autoload": {
536 | "psr-4": {
537 | "PhpCoveralls\\": "src/"
538 | }
539 | },
540 | "notification-url": "https://packagist.org/downloads/",
541 | "license": [
542 | "MIT"
543 | ],
544 | "authors": [
545 | {
546 | "name": "Kitamura Satoshi",
547 | "email": "with.no.parachute@gmail.com",
548 | "homepage": "https://www.facebook.com/satooshi.jp",
549 | "role": "Original creator"
550 | },
551 | {
552 | "name": "Takashi Matsuo",
553 | "email": "tmatsuo@google.com"
554 | },
555 | {
556 | "name": "Google Inc"
557 | },
558 | {
559 | "name": "Dariusz Ruminski",
560 | "email": "dariusz.ruminski@gmail.com",
561 | "homepage": "https://github.com/keradus"
562 | },
563 | {
564 | "name": "Contributors",
565 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
566 | }
567 | ],
568 | "description": "PHP client library for Coveralls API",
569 | "homepage": "https://github.com/php-coveralls/php-coveralls",
570 | "keywords": [
571 | "ci",
572 | "coverage",
573 | "github",
574 | "test"
575 | ],
576 | "time": "2019-11-20T16:29:20+00:00"
577 | },
578 | {
579 | "name": "phpdocumentor/reflection-common",
580 | "version": "2.0.0",
581 | "source": {
582 | "type": "git",
583 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
584 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
585 | },
586 | "dist": {
587 | "type": "zip",
588 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
589 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
590 | "shasum": ""
591 | },
592 | "require": {
593 | "php": ">=7.1"
594 | },
595 | "require-dev": {
596 | "phpunit/phpunit": "~6"
597 | },
598 | "type": "library",
599 | "extra": {
600 | "branch-alias": {
601 | "dev-master": "2.x-dev"
602 | }
603 | },
604 | "autoload": {
605 | "psr-4": {
606 | "phpDocumentor\\Reflection\\": "src/"
607 | }
608 | },
609 | "notification-url": "https://packagist.org/downloads/",
610 | "license": [
611 | "MIT"
612 | ],
613 | "authors": [
614 | {
615 | "name": "Jaap van Otterdijk",
616 | "email": "opensource@ijaap.nl"
617 | }
618 | ],
619 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
620 | "homepage": "http://www.phpdoc.org",
621 | "keywords": [
622 | "FQSEN",
623 | "phpDocumentor",
624 | "phpdoc",
625 | "reflection",
626 | "static analysis"
627 | ],
628 | "time": "2018-08-07T13:53:10+00:00"
629 | },
630 | {
631 | "name": "phpdocumentor/reflection-docblock",
632 | "version": "4.3.2",
633 | "source": {
634 | "type": "git",
635 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
636 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e"
637 | },
638 | "dist": {
639 | "type": "zip",
640 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
641 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e",
642 | "shasum": ""
643 | },
644 | "require": {
645 | "php": "^7.0",
646 | "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0",
647 | "phpdocumentor/type-resolver": "~0.4 || ^1.0.0",
648 | "webmozart/assert": "^1.0"
649 | },
650 | "require-dev": {
651 | "doctrine/instantiator": "^1.0.5",
652 | "mockery/mockery": "^1.0",
653 | "phpunit/phpunit": "^6.4"
654 | },
655 | "type": "library",
656 | "extra": {
657 | "branch-alias": {
658 | "dev-master": "4.x-dev"
659 | }
660 | },
661 | "autoload": {
662 | "psr-4": {
663 | "phpDocumentor\\Reflection\\": [
664 | "src/"
665 | ]
666 | }
667 | },
668 | "notification-url": "https://packagist.org/downloads/",
669 | "license": [
670 | "MIT"
671 | ],
672 | "authors": [
673 | {
674 | "name": "Mike van Riel",
675 | "email": "me@mikevanriel.com"
676 | }
677 | ],
678 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
679 | "time": "2019-09-12T14:27:41+00:00"
680 | },
681 | {
682 | "name": "phpdocumentor/type-resolver",
683 | "version": "1.0.1",
684 | "source": {
685 | "type": "git",
686 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
687 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
688 | },
689 | "dist": {
690 | "type": "zip",
691 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
692 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
693 | "shasum": ""
694 | },
695 | "require": {
696 | "php": "^7.1",
697 | "phpdocumentor/reflection-common": "^2.0"
698 | },
699 | "require-dev": {
700 | "ext-tokenizer": "^7.1",
701 | "mockery/mockery": "~1",
702 | "phpunit/phpunit": "^7.0"
703 | },
704 | "type": "library",
705 | "extra": {
706 | "branch-alias": {
707 | "dev-master": "1.x-dev"
708 | }
709 | },
710 | "autoload": {
711 | "psr-4": {
712 | "phpDocumentor\\Reflection\\": "src"
713 | }
714 | },
715 | "notification-url": "https://packagist.org/downloads/",
716 | "license": [
717 | "MIT"
718 | ],
719 | "authors": [
720 | {
721 | "name": "Mike van Riel",
722 | "email": "me@mikevanriel.com"
723 | }
724 | ],
725 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
726 | "time": "2019-08-22T18:11:29+00:00"
727 | },
728 | {
729 | "name": "phpspec/prophecy",
730 | "version": "1.9.0",
731 | "source": {
732 | "type": "git",
733 | "url": "https://github.com/phpspec/prophecy.git",
734 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203"
735 | },
736 | "dist": {
737 | "type": "zip",
738 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203",
739 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203",
740 | "shasum": ""
741 | },
742 | "require": {
743 | "doctrine/instantiator": "^1.0.2",
744 | "php": "^5.3|^7.0",
745 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
746 | "sebastian/comparator": "^1.1|^2.0|^3.0",
747 | "sebastian/recursion-context": "^1.0|^2.0|^3.0"
748 | },
749 | "require-dev": {
750 | "phpspec/phpspec": "^2.5|^3.2",
751 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
752 | },
753 | "type": "library",
754 | "extra": {
755 | "branch-alias": {
756 | "dev-master": "1.8.x-dev"
757 | }
758 | },
759 | "autoload": {
760 | "psr-4": {
761 | "Prophecy\\": "src/Prophecy"
762 | }
763 | },
764 | "notification-url": "https://packagist.org/downloads/",
765 | "license": [
766 | "MIT"
767 | ],
768 | "authors": [
769 | {
770 | "name": "Konstantin Kudryashov",
771 | "email": "ever.zet@gmail.com",
772 | "homepage": "http://everzet.com"
773 | },
774 | {
775 | "name": "Marcello Duarte",
776 | "email": "marcello.duarte@gmail.com"
777 | }
778 | ],
779 | "description": "Highly opinionated mocking framework for PHP 5.3+",
780 | "homepage": "https://github.com/phpspec/prophecy",
781 | "keywords": [
782 | "Double",
783 | "Dummy",
784 | "fake",
785 | "mock",
786 | "spy",
787 | "stub"
788 | ],
789 | "time": "2019-10-03T11:07:50+00:00"
790 | },
791 | {
792 | "name": "phpunit/php-code-coverage",
793 | "version": "7.0.10",
794 | "source": {
795 | "type": "git",
796 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
797 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf"
798 | },
799 | "dist": {
800 | "type": "zip",
801 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf",
802 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf",
803 | "shasum": ""
804 | },
805 | "require": {
806 | "ext-dom": "*",
807 | "ext-xmlwriter": "*",
808 | "php": "^7.2",
809 | "phpunit/php-file-iterator": "^2.0.2",
810 | "phpunit/php-text-template": "^1.2.1",
811 | "phpunit/php-token-stream": "^3.1.1",
812 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
813 | "sebastian/environment": "^4.2.2",
814 | "sebastian/version": "^2.0.1",
815 | "theseer/tokenizer": "^1.1.3"
816 | },
817 | "require-dev": {
818 | "phpunit/phpunit": "^8.2.2"
819 | },
820 | "suggest": {
821 | "ext-xdebug": "^2.7.2"
822 | },
823 | "type": "library",
824 | "extra": {
825 | "branch-alias": {
826 | "dev-master": "7.0-dev"
827 | }
828 | },
829 | "autoload": {
830 | "classmap": [
831 | "src/"
832 | ]
833 | },
834 | "notification-url": "https://packagist.org/downloads/",
835 | "license": [
836 | "BSD-3-Clause"
837 | ],
838 | "authors": [
839 | {
840 | "name": "Sebastian Bergmann",
841 | "email": "sebastian@phpunit.de",
842 | "role": "lead"
843 | }
844 | ],
845 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
846 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
847 | "keywords": [
848 | "coverage",
849 | "testing",
850 | "xunit"
851 | ],
852 | "time": "2019-11-20T13:55:58+00:00"
853 | },
854 | {
855 | "name": "phpunit/php-file-iterator",
856 | "version": "2.0.2",
857 | "source": {
858 | "type": "git",
859 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
860 | "reference": "050bedf145a257b1ff02746c31894800e5122946"
861 | },
862 | "dist": {
863 | "type": "zip",
864 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
865 | "reference": "050bedf145a257b1ff02746c31894800e5122946",
866 | "shasum": ""
867 | },
868 | "require": {
869 | "php": "^7.1"
870 | },
871 | "require-dev": {
872 | "phpunit/phpunit": "^7.1"
873 | },
874 | "type": "library",
875 | "extra": {
876 | "branch-alias": {
877 | "dev-master": "2.0.x-dev"
878 | }
879 | },
880 | "autoload": {
881 | "classmap": [
882 | "src/"
883 | ]
884 | },
885 | "notification-url": "https://packagist.org/downloads/",
886 | "license": [
887 | "BSD-3-Clause"
888 | ],
889 | "authors": [
890 | {
891 | "name": "Sebastian Bergmann",
892 | "email": "sebastian@phpunit.de",
893 | "role": "lead"
894 | }
895 | ],
896 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
897 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
898 | "keywords": [
899 | "filesystem",
900 | "iterator"
901 | ],
902 | "time": "2018-09-13T20:33:42+00:00"
903 | },
904 | {
905 | "name": "phpunit/php-text-template",
906 | "version": "1.2.1",
907 | "source": {
908 | "type": "git",
909 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
910 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
911 | },
912 | "dist": {
913 | "type": "zip",
914 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
915 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
916 | "shasum": ""
917 | },
918 | "require": {
919 | "php": ">=5.3.3"
920 | },
921 | "type": "library",
922 | "autoload": {
923 | "classmap": [
924 | "src/"
925 | ]
926 | },
927 | "notification-url": "https://packagist.org/downloads/",
928 | "license": [
929 | "BSD-3-Clause"
930 | ],
931 | "authors": [
932 | {
933 | "name": "Sebastian Bergmann",
934 | "email": "sebastian@phpunit.de",
935 | "role": "lead"
936 | }
937 | ],
938 | "description": "Simple template engine.",
939 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
940 | "keywords": [
941 | "template"
942 | ],
943 | "time": "2015-06-21T13:50:34+00:00"
944 | },
945 | {
946 | "name": "phpunit/php-timer",
947 | "version": "2.1.2",
948 | "source": {
949 | "type": "git",
950 | "url": "https://github.com/sebastianbergmann/php-timer.git",
951 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
952 | },
953 | "dist": {
954 | "type": "zip",
955 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
956 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
957 | "shasum": ""
958 | },
959 | "require": {
960 | "php": "^7.1"
961 | },
962 | "require-dev": {
963 | "phpunit/phpunit": "^7.0"
964 | },
965 | "type": "library",
966 | "extra": {
967 | "branch-alias": {
968 | "dev-master": "2.1-dev"
969 | }
970 | },
971 | "autoload": {
972 | "classmap": [
973 | "src/"
974 | ]
975 | },
976 | "notification-url": "https://packagist.org/downloads/",
977 | "license": [
978 | "BSD-3-Clause"
979 | ],
980 | "authors": [
981 | {
982 | "name": "Sebastian Bergmann",
983 | "email": "sebastian@phpunit.de",
984 | "role": "lead"
985 | }
986 | ],
987 | "description": "Utility class for timing",
988 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
989 | "keywords": [
990 | "timer"
991 | ],
992 | "time": "2019-06-07T04:22:29+00:00"
993 | },
994 | {
995 | "name": "phpunit/php-token-stream",
996 | "version": "3.1.1",
997 | "source": {
998 | "type": "git",
999 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1000 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
1001 | },
1002 | "dist": {
1003 | "type": "zip",
1004 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
1005 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
1006 | "shasum": ""
1007 | },
1008 | "require": {
1009 | "ext-tokenizer": "*",
1010 | "php": "^7.1"
1011 | },
1012 | "require-dev": {
1013 | "phpunit/phpunit": "^7.0"
1014 | },
1015 | "type": "library",
1016 | "extra": {
1017 | "branch-alias": {
1018 | "dev-master": "3.1-dev"
1019 | }
1020 | },
1021 | "autoload": {
1022 | "classmap": [
1023 | "src/"
1024 | ]
1025 | },
1026 | "notification-url": "https://packagist.org/downloads/",
1027 | "license": [
1028 | "BSD-3-Clause"
1029 | ],
1030 | "authors": [
1031 | {
1032 | "name": "Sebastian Bergmann",
1033 | "email": "sebastian@phpunit.de"
1034 | }
1035 | ],
1036 | "description": "Wrapper around PHP's tokenizer extension.",
1037 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1038 | "keywords": [
1039 | "tokenizer"
1040 | ],
1041 | "time": "2019-09-17T06:23:10+00:00"
1042 | },
1043 | {
1044 | "name": "phpunit/phpunit",
1045 | "version": "8.4.3",
1046 | "source": {
1047 | "type": "git",
1048 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1049 | "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e"
1050 | },
1051 | "dist": {
1052 | "type": "zip",
1053 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67f9e35bffc0dd52d55d565ddbe4230454fd6a4e",
1054 | "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e",
1055 | "shasum": ""
1056 | },
1057 | "require": {
1058 | "doctrine/instantiator": "^1.2.0",
1059 | "ext-dom": "*",
1060 | "ext-json": "*",
1061 | "ext-libxml": "*",
1062 | "ext-mbstring": "*",
1063 | "ext-xml": "*",
1064 | "ext-xmlwriter": "*",
1065 | "myclabs/deep-copy": "^1.9.1",
1066 | "phar-io/manifest": "^1.0.3",
1067 | "phar-io/version": "^2.0.1",
1068 | "php": "^7.2",
1069 | "phpspec/prophecy": "^1.8.1",
1070 | "phpunit/php-code-coverage": "^7.0.7",
1071 | "phpunit/php-file-iterator": "^2.0.2",
1072 | "phpunit/php-text-template": "^1.2.1",
1073 | "phpunit/php-timer": "^2.1.2",
1074 | "sebastian/comparator": "^3.0.2",
1075 | "sebastian/diff": "^3.0.2",
1076 | "sebastian/environment": "^4.2.2",
1077 | "sebastian/exporter": "^3.1.1",
1078 | "sebastian/global-state": "^3.0.0",
1079 | "sebastian/object-enumerator": "^3.0.3",
1080 | "sebastian/resource-operations": "^2.0.1",
1081 | "sebastian/type": "^1.1.3",
1082 | "sebastian/version": "^2.0.1"
1083 | },
1084 | "require-dev": {
1085 | "ext-pdo": "*"
1086 | },
1087 | "suggest": {
1088 | "ext-soap": "*",
1089 | "ext-xdebug": "*",
1090 | "phpunit/php-invoker": "^2.0.0"
1091 | },
1092 | "bin": [
1093 | "phpunit"
1094 | ],
1095 | "type": "library",
1096 | "extra": {
1097 | "branch-alias": {
1098 | "dev-master": "8.4-dev"
1099 | }
1100 | },
1101 | "autoload": {
1102 | "classmap": [
1103 | "src/"
1104 | ]
1105 | },
1106 | "notification-url": "https://packagist.org/downloads/",
1107 | "license": [
1108 | "BSD-3-Clause"
1109 | ],
1110 | "authors": [
1111 | {
1112 | "name": "Sebastian Bergmann",
1113 | "email": "sebastian@phpunit.de",
1114 | "role": "lead"
1115 | }
1116 | ],
1117 | "description": "The PHP Unit Testing framework.",
1118 | "homepage": "https://phpunit.de/",
1119 | "keywords": [
1120 | "phpunit",
1121 | "testing",
1122 | "xunit"
1123 | ],
1124 | "time": "2019-11-06T09:42:23+00:00"
1125 | },
1126 | {
1127 | "name": "psr/container",
1128 | "version": "1.0.0",
1129 | "source": {
1130 | "type": "git",
1131 | "url": "https://github.com/php-fig/container.git",
1132 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
1133 | },
1134 | "dist": {
1135 | "type": "zip",
1136 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1137 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1138 | "shasum": ""
1139 | },
1140 | "require": {
1141 | "php": ">=5.3.0"
1142 | },
1143 | "type": "library",
1144 | "extra": {
1145 | "branch-alias": {
1146 | "dev-master": "1.0.x-dev"
1147 | }
1148 | },
1149 | "autoload": {
1150 | "psr-4": {
1151 | "Psr\\Container\\": "src/"
1152 | }
1153 | },
1154 | "notification-url": "https://packagist.org/downloads/",
1155 | "license": [
1156 | "MIT"
1157 | ],
1158 | "authors": [
1159 | {
1160 | "name": "PHP-FIG",
1161 | "homepage": "http://www.php-fig.org/"
1162 | }
1163 | ],
1164 | "description": "Common Container Interface (PHP FIG PSR-11)",
1165 | "homepage": "https://github.com/php-fig/container",
1166 | "keywords": [
1167 | "PSR-11",
1168 | "container",
1169 | "container-interface",
1170 | "container-interop",
1171 | "psr"
1172 | ],
1173 | "time": "2017-02-14T16:28:37+00:00"
1174 | },
1175 | {
1176 | "name": "psr/log",
1177 | "version": "1.1.2",
1178 | "source": {
1179 | "type": "git",
1180 | "url": "https://github.com/php-fig/log.git",
1181 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
1182 | },
1183 | "dist": {
1184 | "type": "zip",
1185 | "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
1186 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
1187 | "shasum": ""
1188 | },
1189 | "require": {
1190 | "php": ">=5.3.0"
1191 | },
1192 | "type": "library",
1193 | "extra": {
1194 | "branch-alias": {
1195 | "dev-master": "1.1.x-dev"
1196 | }
1197 | },
1198 | "autoload": {
1199 | "psr-4": {
1200 | "Psr\\Log\\": "Psr/Log/"
1201 | }
1202 | },
1203 | "notification-url": "https://packagist.org/downloads/",
1204 | "license": [
1205 | "MIT"
1206 | ],
1207 | "authors": [
1208 | {
1209 | "name": "PHP-FIG",
1210 | "homepage": "http://www.php-fig.org/"
1211 | }
1212 | ],
1213 | "description": "Common interface for logging libraries",
1214 | "homepage": "https://github.com/php-fig/log",
1215 | "keywords": [
1216 | "log",
1217 | "psr",
1218 | "psr-3"
1219 | ],
1220 | "time": "2019-11-01T11:05:21+00:00"
1221 | },
1222 | {
1223 | "name": "sebastian/code-unit-reverse-lookup",
1224 | "version": "1.0.1",
1225 | "source": {
1226 | "type": "git",
1227 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1228 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
1229 | },
1230 | "dist": {
1231 | "type": "zip",
1232 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
1233 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
1234 | "shasum": ""
1235 | },
1236 | "require": {
1237 | "php": "^5.6 || ^7.0"
1238 | },
1239 | "require-dev": {
1240 | "phpunit/phpunit": "^5.7 || ^6.0"
1241 | },
1242 | "type": "library",
1243 | "extra": {
1244 | "branch-alias": {
1245 | "dev-master": "1.0.x-dev"
1246 | }
1247 | },
1248 | "autoload": {
1249 | "classmap": [
1250 | "src/"
1251 | ]
1252 | },
1253 | "notification-url": "https://packagist.org/downloads/",
1254 | "license": [
1255 | "BSD-3-Clause"
1256 | ],
1257 | "authors": [
1258 | {
1259 | "name": "Sebastian Bergmann",
1260 | "email": "sebastian@phpunit.de"
1261 | }
1262 | ],
1263 | "description": "Looks up which function or method a line of code belongs to",
1264 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1265 | "time": "2017-03-04T06:30:41+00:00"
1266 | },
1267 | {
1268 | "name": "sebastian/comparator",
1269 | "version": "3.0.2",
1270 | "source": {
1271 | "type": "git",
1272 | "url": "https://github.com/sebastianbergmann/comparator.git",
1273 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
1274 | },
1275 | "dist": {
1276 | "type": "zip",
1277 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
1278 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
1279 | "shasum": ""
1280 | },
1281 | "require": {
1282 | "php": "^7.1",
1283 | "sebastian/diff": "^3.0",
1284 | "sebastian/exporter": "^3.1"
1285 | },
1286 | "require-dev": {
1287 | "phpunit/phpunit": "^7.1"
1288 | },
1289 | "type": "library",
1290 | "extra": {
1291 | "branch-alias": {
1292 | "dev-master": "3.0-dev"
1293 | }
1294 | },
1295 | "autoload": {
1296 | "classmap": [
1297 | "src/"
1298 | ]
1299 | },
1300 | "notification-url": "https://packagist.org/downloads/",
1301 | "license": [
1302 | "BSD-3-Clause"
1303 | ],
1304 | "authors": [
1305 | {
1306 | "name": "Jeff Welch",
1307 | "email": "whatthejeff@gmail.com"
1308 | },
1309 | {
1310 | "name": "Volker Dusch",
1311 | "email": "github@wallbash.com"
1312 | },
1313 | {
1314 | "name": "Bernhard Schussek",
1315 | "email": "bschussek@2bepublished.at"
1316 | },
1317 | {
1318 | "name": "Sebastian Bergmann",
1319 | "email": "sebastian@phpunit.de"
1320 | }
1321 | ],
1322 | "description": "Provides the functionality to compare PHP values for equality",
1323 | "homepage": "https://github.com/sebastianbergmann/comparator",
1324 | "keywords": [
1325 | "comparator",
1326 | "compare",
1327 | "equality"
1328 | ],
1329 | "time": "2018-07-12T15:12:46+00:00"
1330 | },
1331 | {
1332 | "name": "sebastian/diff",
1333 | "version": "3.0.2",
1334 | "source": {
1335 | "type": "git",
1336 | "url": "https://github.com/sebastianbergmann/diff.git",
1337 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
1338 | },
1339 | "dist": {
1340 | "type": "zip",
1341 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
1342 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
1343 | "shasum": ""
1344 | },
1345 | "require": {
1346 | "php": "^7.1"
1347 | },
1348 | "require-dev": {
1349 | "phpunit/phpunit": "^7.5 || ^8.0",
1350 | "symfony/process": "^2 || ^3.3 || ^4"
1351 | },
1352 | "type": "library",
1353 | "extra": {
1354 | "branch-alias": {
1355 | "dev-master": "3.0-dev"
1356 | }
1357 | },
1358 | "autoload": {
1359 | "classmap": [
1360 | "src/"
1361 | ]
1362 | },
1363 | "notification-url": "https://packagist.org/downloads/",
1364 | "license": [
1365 | "BSD-3-Clause"
1366 | ],
1367 | "authors": [
1368 | {
1369 | "name": "Kore Nordmann",
1370 | "email": "mail@kore-nordmann.de"
1371 | },
1372 | {
1373 | "name": "Sebastian Bergmann",
1374 | "email": "sebastian@phpunit.de"
1375 | }
1376 | ],
1377 | "description": "Diff implementation",
1378 | "homepage": "https://github.com/sebastianbergmann/diff",
1379 | "keywords": [
1380 | "diff",
1381 | "udiff",
1382 | "unidiff",
1383 | "unified diff"
1384 | ],
1385 | "time": "2019-02-04T06:01:07+00:00"
1386 | },
1387 | {
1388 | "name": "sebastian/environment",
1389 | "version": "4.2.3",
1390 | "source": {
1391 | "type": "git",
1392 | "url": "https://github.com/sebastianbergmann/environment.git",
1393 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368"
1394 | },
1395 | "dist": {
1396 | "type": "zip",
1397 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
1398 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
1399 | "shasum": ""
1400 | },
1401 | "require": {
1402 | "php": "^7.1"
1403 | },
1404 | "require-dev": {
1405 | "phpunit/phpunit": "^7.5"
1406 | },
1407 | "suggest": {
1408 | "ext-posix": "*"
1409 | },
1410 | "type": "library",
1411 | "extra": {
1412 | "branch-alias": {
1413 | "dev-master": "4.2-dev"
1414 | }
1415 | },
1416 | "autoload": {
1417 | "classmap": [
1418 | "src/"
1419 | ]
1420 | },
1421 | "notification-url": "https://packagist.org/downloads/",
1422 | "license": [
1423 | "BSD-3-Clause"
1424 | ],
1425 | "authors": [
1426 | {
1427 | "name": "Sebastian Bergmann",
1428 | "email": "sebastian@phpunit.de"
1429 | }
1430 | ],
1431 | "description": "Provides functionality to handle HHVM/PHP environments",
1432 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1433 | "keywords": [
1434 | "Xdebug",
1435 | "environment",
1436 | "hhvm"
1437 | ],
1438 | "time": "2019-11-20T08:46:58+00:00"
1439 | },
1440 | {
1441 | "name": "sebastian/exporter",
1442 | "version": "3.1.2",
1443 | "source": {
1444 | "type": "git",
1445 | "url": "https://github.com/sebastianbergmann/exporter.git",
1446 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
1447 | },
1448 | "dist": {
1449 | "type": "zip",
1450 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
1451 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
1452 | "shasum": ""
1453 | },
1454 | "require": {
1455 | "php": "^7.0",
1456 | "sebastian/recursion-context": "^3.0"
1457 | },
1458 | "require-dev": {
1459 | "ext-mbstring": "*",
1460 | "phpunit/phpunit": "^6.0"
1461 | },
1462 | "type": "library",
1463 | "extra": {
1464 | "branch-alias": {
1465 | "dev-master": "3.1.x-dev"
1466 | }
1467 | },
1468 | "autoload": {
1469 | "classmap": [
1470 | "src/"
1471 | ]
1472 | },
1473 | "notification-url": "https://packagist.org/downloads/",
1474 | "license": [
1475 | "BSD-3-Clause"
1476 | ],
1477 | "authors": [
1478 | {
1479 | "name": "Sebastian Bergmann",
1480 | "email": "sebastian@phpunit.de"
1481 | },
1482 | {
1483 | "name": "Jeff Welch",
1484 | "email": "whatthejeff@gmail.com"
1485 | },
1486 | {
1487 | "name": "Volker Dusch",
1488 | "email": "github@wallbash.com"
1489 | },
1490 | {
1491 | "name": "Adam Harvey",
1492 | "email": "aharvey@php.net"
1493 | },
1494 | {
1495 | "name": "Bernhard Schussek",
1496 | "email": "bschussek@gmail.com"
1497 | }
1498 | ],
1499 | "description": "Provides the functionality to export PHP variables for visualization",
1500 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1501 | "keywords": [
1502 | "export",
1503 | "exporter"
1504 | ],
1505 | "time": "2019-09-14T09:02:43+00:00"
1506 | },
1507 | {
1508 | "name": "sebastian/global-state",
1509 | "version": "3.0.0",
1510 | "source": {
1511 | "type": "git",
1512 | "url": "https://github.com/sebastianbergmann/global-state.git",
1513 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
1514 | },
1515 | "dist": {
1516 | "type": "zip",
1517 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
1518 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
1519 | "shasum": ""
1520 | },
1521 | "require": {
1522 | "php": "^7.2",
1523 | "sebastian/object-reflector": "^1.1.1",
1524 | "sebastian/recursion-context": "^3.0"
1525 | },
1526 | "require-dev": {
1527 | "ext-dom": "*",
1528 | "phpunit/phpunit": "^8.0"
1529 | },
1530 | "suggest": {
1531 | "ext-uopz": "*"
1532 | },
1533 | "type": "library",
1534 | "extra": {
1535 | "branch-alias": {
1536 | "dev-master": "3.0-dev"
1537 | }
1538 | },
1539 | "autoload": {
1540 | "classmap": [
1541 | "src/"
1542 | ]
1543 | },
1544 | "notification-url": "https://packagist.org/downloads/",
1545 | "license": [
1546 | "BSD-3-Clause"
1547 | ],
1548 | "authors": [
1549 | {
1550 | "name": "Sebastian Bergmann",
1551 | "email": "sebastian@phpunit.de"
1552 | }
1553 | ],
1554 | "description": "Snapshotting of global state",
1555 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1556 | "keywords": [
1557 | "global state"
1558 | ],
1559 | "time": "2019-02-01T05:30:01+00:00"
1560 | },
1561 | {
1562 | "name": "sebastian/object-enumerator",
1563 | "version": "3.0.3",
1564 | "source": {
1565 | "type": "git",
1566 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
1567 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
1568 | },
1569 | "dist": {
1570 | "type": "zip",
1571 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
1572 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
1573 | "shasum": ""
1574 | },
1575 | "require": {
1576 | "php": "^7.0",
1577 | "sebastian/object-reflector": "^1.1.1",
1578 | "sebastian/recursion-context": "^3.0"
1579 | },
1580 | "require-dev": {
1581 | "phpunit/phpunit": "^6.0"
1582 | },
1583 | "type": "library",
1584 | "extra": {
1585 | "branch-alias": {
1586 | "dev-master": "3.0.x-dev"
1587 | }
1588 | },
1589 | "autoload": {
1590 | "classmap": [
1591 | "src/"
1592 | ]
1593 | },
1594 | "notification-url": "https://packagist.org/downloads/",
1595 | "license": [
1596 | "BSD-3-Clause"
1597 | ],
1598 | "authors": [
1599 | {
1600 | "name": "Sebastian Bergmann",
1601 | "email": "sebastian@phpunit.de"
1602 | }
1603 | ],
1604 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1605 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1606 | "time": "2017-08-03T12:35:26+00:00"
1607 | },
1608 | {
1609 | "name": "sebastian/object-reflector",
1610 | "version": "1.1.1",
1611 | "source": {
1612 | "type": "git",
1613 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
1614 | "reference": "773f97c67f28de00d397be301821b06708fca0be"
1615 | },
1616 | "dist": {
1617 | "type": "zip",
1618 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
1619 | "reference": "773f97c67f28de00d397be301821b06708fca0be",
1620 | "shasum": ""
1621 | },
1622 | "require": {
1623 | "php": "^7.0"
1624 | },
1625 | "require-dev": {
1626 | "phpunit/phpunit": "^6.0"
1627 | },
1628 | "type": "library",
1629 | "extra": {
1630 | "branch-alias": {
1631 | "dev-master": "1.1-dev"
1632 | }
1633 | },
1634 | "autoload": {
1635 | "classmap": [
1636 | "src/"
1637 | ]
1638 | },
1639 | "notification-url": "https://packagist.org/downloads/",
1640 | "license": [
1641 | "BSD-3-Clause"
1642 | ],
1643 | "authors": [
1644 | {
1645 | "name": "Sebastian Bergmann",
1646 | "email": "sebastian@phpunit.de"
1647 | }
1648 | ],
1649 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
1650 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
1651 | "time": "2017-03-29T09:07:27+00:00"
1652 | },
1653 | {
1654 | "name": "sebastian/recursion-context",
1655 | "version": "3.0.0",
1656 | "source": {
1657 | "type": "git",
1658 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1659 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
1660 | },
1661 | "dist": {
1662 | "type": "zip",
1663 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1664 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
1665 | "shasum": ""
1666 | },
1667 | "require": {
1668 | "php": "^7.0"
1669 | },
1670 | "require-dev": {
1671 | "phpunit/phpunit": "^6.0"
1672 | },
1673 | "type": "library",
1674 | "extra": {
1675 | "branch-alias": {
1676 | "dev-master": "3.0.x-dev"
1677 | }
1678 | },
1679 | "autoload": {
1680 | "classmap": [
1681 | "src/"
1682 | ]
1683 | },
1684 | "notification-url": "https://packagist.org/downloads/",
1685 | "license": [
1686 | "BSD-3-Clause"
1687 | ],
1688 | "authors": [
1689 | {
1690 | "name": "Jeff Welch",
1691 | "email": "whatthejeff@gmail.com"
1692 | },
1693 | {
1694 | "name": "Sebastian Bergmann",
1695 | "email": "sebastian@phpunit.de"
1696 | },
1697 | {
1698 | "name": "Adam Harvey",
1699 | "email": "aharvey@php.net"
1700 | }
1701 | ],
1702 | "description": "Provides functionality to recursively process PHP variables",
1703 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1704 | "time": "2017-03-03T06:23:57+00:00"
1705 | },
1706 | {
1707 | "name": "sebastian/resource-operations",
1708 | "version": "2.0.1",
1709 | "source": {
1710 | "type": "git",
1711 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
1712 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
1713 | },
1714 | "dist": {
1715 | "type": "zip",
1716 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
1717 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
1718 | "shasum": ""
1719 | },
1720 | "require": {
1721 | "php": "^7.1"
1722 | },
1723 | "type": "library",
1724 | "extra": {
1725 | "branch-alias": {
1726 | "dev-master": "2.0-dev"
1727 | }
1728 | },
1729 | "autoload": {
1730 | "classmap": [
1731 | "src/"
1732 | ]
1733 | },
1734 | "notification-url": "https://packagist.org/downloads/",
1735 | "license": [
1736 | "BSD-3-Clause"
1737 | ],
1738 | "authors": [
1739 | {
1740 | "name": "Sebastian Bergmann",
1741 | "email": "sebastian@phpunit.de"
1742 | }
1743 | ],
1744 | "description": "Provides a list of PHP built-in functions that operate on resources",
1745 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1746 | "time": "2018-10-04T04:07:39+00:00"
1747 | },
1748 | {
1749 | "name": "sebastian/type",
1750 | "version": "1.1.3",
1751 | "source": {
1752 | "type": "git",
1753 | "url": "https://github.com/sebastianbergmann/type.git",
1754 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
1755 | },
1756 | "dist": {
1757 | "type": "zip",
1758 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
1759 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
1760 | "shasum": ""
1761 | },
1762 | "require": {
1763 | "php": "^7.2"
1764 | },
1765 | "require-dev": {
1766 | "phpunit/phpunit": "^8.2"
1767 | },
1768 | "type": "library",
1769 | "extra": {
1770 | "branch-alias": {
1771 | "dev-master": "1.1-dev"
1772 | }
1773 | },
1774 | "autoload": {
1775 | "classmap": [
1776 | "src/"
1777 | ]
1778 | },
1779 | "notification-url": "https://packagist.org/downloads/",
1780 | "license": [
1781 | "BSD-3-Clause"
1782 | ],
1783 | "authors": [
1784 | {
1785 | "name": "Sebastian Bergmann",
1786 | "email": "sebastian@phpunit.de",
1787 | "role": "lead"
1788 | }
1789 | ],
1790 | "description": "Collection of value objects that represent the types of the PHP type system",
1791 | "homepage": "https://github.com/sebastianbergmann/type",
1792 | "time": "2019-07-02T08:10:15+00:00"
1793 | },
1794 | {
1795 | "name": "sebastian/version",
1796 | "version": "2.0.1",
1797 | "source": {
1798 | "type": "git",
1799 | "url": "https://github.com/sebastianbergmann/version.git",
1800 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
1801 | },
1802 | "dist": {
1803 | "type": "zip",
1804 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
1805 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
1806 | "shasum": ""
1807 | },
1808 | "require": {
1809 | "php": ">=5.6"
1810 | },
1811 | "type": "library",
1812 | "extra": {
1813 | "branch-alias": {
1814 | "dev-master": "2.0.x-dev"
1815 | }
1816 | },
1817 | "autoload": {
1818 | "classmap": [
1819 | "src/"
1820 | ]
1821 | },
1822 | "notification-url": "https://packagist.org/downloads/",
1823 | "license": [
1824 | "BSD-3-Clause"
1825 | ],
1826 | "authors": [
1827 | {
1828 | "name": "Sebastian Bergmann",
1829 | "email": "sebastian@phpunit.de",
1830 | "role": "lead"
1831 | }
1832 | ],
1833 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1834 | "homepage": "https://github.com/sebastianbergmann/version",
1835 | "time": "2016-10-03T07:35:21+00:00"
1836 | },
1837 | {
1838 | "name": "squizlabs/php_codesniffer",
1839 | "version": "3.5.2",
1840 | "source": {
1841 | "type": "git",
1842 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
1843 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7"
1844 | },
1845 | "dist": {
1846 | "type": "zip",
1847 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7",
1848 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7",
1849 | "shasum": ""
1850 | },
1851 | "require": {
1852 | "ext-simplexml": "*",
1853 | "ext-tokenizer": "*",
1854 | "ext-xmlwriter": "*",
1855 | "php": ">=5.4.0"
1856 | },
1857 | "require-dev": {
1858 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
1859 | },
1860 | "bin": [
1861 | "bin/phpcs",
1862 | "bin/phpcbf"
1863 | ],
1864 | "type": "library",
1865 | "extra": {
1866 | "branch-alias": {
1867 | "dev-master": "3.x-dev"
1868 | }
1869 | },
1870 | "notification-url": "https://packagist.org/downloads/",
1871 | "license": [
1872 | "BSD-3-Clause"
1873 | ],
1874 | "authors": [
1875 | {
1876 | "name": "Greg Sherwood",
1877 | "role": "lead"
1878 | }
1879 | ],
1880 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
1881 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
1882 | "keywords": [
1883 | "phpcs",
1884 | "standards"
1885 | ],
1886 | "time": "2019-10-28T04:36:32+00:00"
1887 | },
1888 | {
1889 | "name": "symfony/config",
1890 | "version": "v5.0.1",
1891 | "source": {
1892 | "type": "git",
1893 | "url": "https://github.com/symfony/config.git",
1894 | "reference": "c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c"
1895 | },
1896 | "dist": {
1897 | "type": "zip",
1898 | "url": "https://api.github.com/repos/symfony/config/zipball/c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c",
1899 | "reference": "c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c",
1900 | "shasum": ""
1901 | },
1902 | "require": {
1903 | "php": "^7.2.5",
1904 | "symfony/filesystem": "^4.4|^5.0",
1905 | "symfony/polyfill-ctype": "~1.8"
1906 | },
1907 | "conflict": {
1908 | "symfony/finder": "<4.4"
1909 | },
1910 | "require-dev": {
1911 | "symfony/event-dispatcher": "^4.4|^5.0",
1912 | "symfony/finder": "^4.4|^5.0",
1913 | "symfony/messenger": "^4.4|^5.0",
1914 | "symfony/service-contracts": "^1.1|^2",
1915 | "symfony/yaml": "^4.4|^5.0"
1916 | },
1917 | "suggest": {
1918 | "symfony/yaml": "To use the yaml reference dumper"
1919 | },
1920 | "type": "library",
1921 | "extra": {
1922 | "branch-alias": {
1923 | "dev-master": "5.0-dev"
1924 | }
1925 | },
1926 | "autoload": {
1927 | "psr-4": {
1928 | "Symfony\\Component\\Config\\": ""
1929 | },
1930 | "exclude-from-classmap": [
1931 | "/Tests/"
1932 | ]
1933 | },
1934 | "notification-url": "https://packagist.org/downloads/",
1935 | "license": [
1936 | "MIT"
1937 | ],
1938 | "authors": [
1939 | {
1940 | "name": "Fabien Potencier",
1941 | "email": "fabien@symfony.com"
1942 | },
1943 | {
1944 | "name": "Symfony Community",
1945 | "homepage": "https://symfony.com/contributors"
1946 | }
1947 | ],
1948 | "description": "Symfony Config Component",
1949 | "homepage": "https://symfony.com",
1950 | "time": "2019-12-01T10:51:15+00:00"
1951 | },
1952 | {
1953 | "name": "symfony/console",
1954 | "version": "v5.0.1",
1955 | "source": {
1956 | "type": "git",
1957 | "url": "https://github.com/symfony/console.git",
1958 | "reference": "dae5ef273d700771168ab889d9f8a19b2d206656"
1959 | },
1960 | "dist": {
1961 | "type": "zip",
1962 | "url": "https://api.github.com/repos/symfony/console/zipball/dae5ef273d700771168ab889d9f8a19b2d206656",
1963 | "reference": "dae5ef273d700771168ab889d9f8a19b2d206656",
1964 | "shasum": ""
1965 | },
1966 | "require": {
1967 | "php": "^7.2.5",
1968 | "symfony/polyfill-mbstring": "~1.0",
1969 | "symfony/polyfill-php73": "^1.8",
1970 | "symfony/service-contracts": "^1.1|^2"
1971 | },
1972 | "conflict": {
1973 | "symfony/dependency-injection": "<4.4",
1974 | "symfony/event-dispatcher": "<4.4",
1975 | "symfony/lock": "<4.4",
1976 | "symfony/process": "<4.4"
1977 | },
1978 | "provide": {
1979 | "psr/log-implementation": "1.0"
1980 | },
1981 | "require-dev": {
1982 | "psr/log": "~1.0",
1983 | "symfony/config": "^4.4|^5.0",
1984 | "symfony/dependency-injection": "^4.4|^5.0",
1985 | "symfony/event-dispatcher": "^4.4|^5.0",
1986 | "symfony/lock": "^4.4|^5.0",
1987 | "symfony/process": "^4.4|^5.0",
1988 | "symfony/var-dumper": "^4.4|^5.0"
1989 | },
1990 | "suggest": {
1991 | "psr/log": "For using the console logger",
1992 | "symfony/event-dispatcher": "",
1993 | "symfony/lock": "",
1994 | "symfony/process": ""
1995 | },
1996 | "type": "library",
1997 | "extra": {
1998 | "branch-alias": {
1999 | "dev-master": "5.0-dev"
2000 | }
2001 | },
2002 | "autoload": {
2003 | "psr-4": {
2004 | "Symfony\\Component\\Console\\": ""
2005 | },
2006 | "exclude-from-classmap": [
2007 | "/Tests/"
2008 | ]
2009 | },
2010 | "notification-url": "https://packagist.org/downloads/",
2011 | "license": [
2012 | "MIT"
2013 | ],
2014 | "authors": [
2015 | {
2016 | "name": "Fabien Potencier",
2017 | "email": "fabien@symfony.com"
2018 | },
2019 | {
2020 | "name": "Symfony Community",
2021 | "homepage": "https://symfony.com/contributors"
2022 | }
2023 | ],
2024 | "description": "Symfony Console Component",
2025 | "homepage": "https://symfony.com",
2026 | "time": "2019-12-01T10:51:15+00:00"
2027 | },
2028 | {
2029 | "name": "symfony/filesystem",
2030 | "version": "v5.0.1",
2031 | "source": {
2032 | "type": "git",
2033 | "url": "https://github.com/symfony/filesystem.git",
2034 | "reference": "1d71f670bc5a07b9ccc97dc44f932177a322d4e6"
2035 | },
2036 | "dist": {
2037 | "type": "zip",
2038 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/1d71f670bc5a07b9ccc97dc44f932177a322d4e6",
2039 | "reference": "1d71f670bc5a07b9ccc97dc44f932177a322d4e6",
2040 | "shasum": ""
2041 | },
2042 | "require": {
2043 | "php": "^7.2.5",
2044 | "symfony/polyfill-ctype": "~1.8"
2045 | },
2046 | "type": "library",
2047 | "extra": {
2048 | "branch-alias": {
2049 | "dev-master": "5.0-dev"
2050 | }
2051 | },
2052 | "autoload": {
2053 | "psr-4": {
2054 | "Symfony\\Component\\Filesystem\\": ""
2055 | },
2056 | "exclude-from-classmap": [
2057 | "/Tests/"
2058 | ]
2059 | },
2060 | "notification-url": "https://packagist.org/downloads/",
2061 | "license": [
2062 | "MIT"
2063 | ],
2064 | "authors": [
2065 | {
2066 | "name": "Fabien Potencier",
2067 | "email": "fabien@symfony.com"
2068 | },
2069 | {
2070 | "name": "Symfony Community",
2071 | "homepage": "https://symfony.com/contributors"
2072 | }
2073 | ],
2074 | "description": "Symfony Filesystem Component",
2075 | "homepage": "https://symfony.com",
2076 | "time": "2019-11-26T23:25:11+00:00"
2077 | },
2078 | {
2079 | "name": "symfony/polyfill-ctype",
2080 | "version": "v1.13.1",
2081 | "source": {
2082 | "type": "git",
2083 | "url": "https://github.com/symfony/polyfill-ctype.git",
2084 | "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3"
2085 | },
2086 | "dist": {
2087 | "type": "zip",
2088 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
2089 | "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3",
2090 | "shasum": ""
2091 | },
2092 | "require": {
2093 | "php": ">=5.3.3"
2094 | },
2095 | "suggest": {
2096 | "ext-ctype": "For best performance"
2097 | },
2098 | "type": "library",
2099 | "extra": {
2100 | "branch-alias": {
2101 | "dev-master": "1.13-dev"
2102 | }
2103 | },
2104 | "autoload": {
2105 | "psr-4": {
2106 | "Symfony\\Polyfill\\Ctype\\": ""
2107 | },
2108 | "files": [
2109 | "bootstrap.php"
2110 | ]
2111 | },
2112 | "notification-url": "https://packagist.org/downloads/",
2113 | "license": [
2114 | "MIT"
2115 | ],
2116 | "authors": [
2117 | {
2118 | "name": "Gert de Pagter",
2119 | "email": "BackEndTea@gmail.com"
2120 | },
2121 | {
2122 | "name": "Symfony Community",
2123 | "homepage": "https://symfony.com/contributors"
2124 | }
2125 | ],
2126 | "description": "Symfony polyfill for ctype functions",
2127 | "homepage": "https://symfony.com",
2128 | "keywords": [
2129 | "compatibility",
2130 | "ctype",
2131 | "polyfill",
2132 | "portable"
2133 | ],
2134 | "time": "2019-11-27T13:56:44+00:00"
2135 | },
2136 | {
2137 | "name": "symfony/polyfill-mbstring",
2138 | "version": "v1.13.1",
2139 | "source": {
2140 | "type": "git",
2141 | "url": "https://github.com/symfony/polyfill-mbstring.git",
2142 | "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
2143 | },
2144 | "dist": {
2145 | "type": "zip",
2146 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
2147 | "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
2148 | "shasum": ""
2149 | },
2150 | "require": {
2151 | "php": ">=5.3.3"
2152 | },
2153 | "suggest": {
2154 | "ext-mbstring": "For best performance"
2155 | },
2156 | "type": "library",
2157 | "extra": {
2158 | "branch-alias": {
2159 | "dev-master": "1.13-dev"
2160 | }
2161 | },
2162 | "autoload": {
2163 | "psr-4": {
2164 | "Symfony\\Polyfill\\Mbstring\\": ""
2165 | },
2166 | "files": [
2167 | "bootstrap.php"
2168 | ]
2169 | },
2170 | "notification-url": "https://packagist.org/downloads/",
2171 | "license": [
2172 | "MIT"
2173 | ],
2174 | "authors": [
2175 | {
2176 | "name": "Nicolas Grekas",
2177 | "email": "p@tchwork.com"
2178 | },
2179 | {
2180 | "name": "Symfony Community",
2181 | "homepage": "https://symfony.com/contributors"
2182 | }
2183 | ],
2184 | "description": "Symfony polyfill for the Mbstring extension",
2185 | "homepage": "https://symfony.com",
2186 | "keywords": [
2187 | "compatibility",
2188 | "mbstring",
2189 | "polyfill",
2190 | "portable",
2191 | "shim"
2192 | ],
2193 | "time": "2019-11-27T14:18:11+00:00"
2194 | },
2195 | {
2196 | "name": "symfony/polyfill-php73",
2197 | "version": "v1.13.1",
2198 | "source": {
2199 | "type": "git",
2200 | "url": "https://github.com/symfony/polyfill-php73.git",
2201 | "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f"
2202 | },
2203 | "dist": {
2204 | "type": "zip",
2205 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f",
2206 | "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f",
2207 | "shasum": ""
2208 | },
2209 | "require": {
2210 | "php": ">=5.3.3"
2211 | },
2212 | "type": "library",
2213 | "extra": {
2214 | "branch-alias": {
2215 | "dev-master": "1.13-dev"
2216 | }
2217 | },
2218 | "autoload": {
2219 | "psr-4": {
2220 | "Symfony\\Polyfill\\Php73\\": ""
2221 | },
2222 | "files": [
2223 | "bootstrap.php"
2224 | ],
2225 | "classmap": [
2226 | "Resources/stubs"
2227 | ]
2228 | },
2229 | "notification-url": "https://packagist.org/downloads/",
2230 | "license": [
2231 | "MIT"
2232 | ],
2233 | "authors": [
2234 | {
2235 | "name": "Nicolas Grekas",
2236 | "email": "p@tchwork.com"
2237 | },
2238 | {
2239 | "name": "Symfony Community",
2240 | "homepage": "https://symfony.com/contributors"
2241 | }
2242 | ],
2243 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
2244 | "homepage": "https://symfony.com",
2245 | "keywords": [
2246 | "compatibility",
2247 | "polyfill",
2248 | "portable",
2249 | "shim"
2250 | ],
2251 | "time": "2019-11-27T16:25:15+00:00"
2252 | },
2253 | {
2254 | "name": "symfony/service-contracts",
2255 | "version": "v2.0.1",
2256 | "source": {
2257 | "type": "git",
2258 | "url": "https://github.com/symfony/service-contracts.git",
2259 | "reference": "144c5e51266b281231e947b51223ba14acf1a749"
2260 | },
2261 | "dist": {
2262 | "type": "zip",
2263 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
2264 | "reference": "144c5e51266b281231e947b51223ba14acf1a749",
2265 | "shasum": ""
2266 | },
2267 | "require": {
2268 | "php": "^7.2.5",
2269 | "psr/container": "^1.0"
2270 | },
2271 | "suggest": {
2272 | "symfony/service-implementation": ""
2273 | },
2274 | "type": "library",
2275 | "extra": {
2276 | "branch-alias": {
2277 | "dev-master": "2.0-dev"
2278 | }
2279 | },
2280 | "autoload": {
2281 | "psr-4": {
2282 | "Symfony\\Contracts\\Service\\": ""
2283 | }
2284 | },
2285 | "notification-url": "https://packagist.org/downloads/",
2286 | "license": [
2287 | "MIT"
2288 | ],
2289 | "authors": [
2290 | {
2291 | "name": "Nicolas Grekas",
2292 | "email": "p@tchwork.com"
2293 | },
2294 | {
2295 | "name": "Symfony Community",
2296 | "homepage": "https://symfony.com/contributors"
2297 | }
2298 | ],
2299 | "description": "Generic abstractions related to writing services",
2300 | "homepage": "https://symfony.com",
2301 | "keywords": [
2302 | "abstractions",
2303 | "contracts",
2304 | "decoupling",
2305 | "interfaces",
2306 | "interoperability",
2307 | "standards"
2308 | ],
2309 | "time": "2019-11-18T17:27:11+00:00"
2310 | },
2311 | {
2312 | "name": "symfony/stopwatch",
2313 | "version": "v5.0.1",
2314 | "source": {
2315 | "type": "git",
2316 | "url": "https://github.com/symfony/stopwatch.git",
2317 | "reference": "d410282956706e0b08681a5527447a8e6b6f421e"
2318 | },
2319 | "dist": {
2320 | "type": "zip",
2321 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/d410282956706e0b08681a5527447a8e6b6f421e",
2322 | "reference": "d410282956706e0b08681a5527447a8e6b6f421e",
2323 | "shasum": ""
2324 | },
2325 | "require": {
2326 | "php": "^7.2.5",
2327 | "symfony/service-contracts": "^1.0|^2"
2328 | },
2329 | "type": "library",
2330 | "extra": {
2331 | "branch-alias": {
2332 | "dev-master": "5.0-dev"
2333 | }
2334 | },
2335 | "autoload": {
2336 | "psr-4": {
2337 | "Symfony\\Component\\Stopwatch\\": ""
2338 | },
2339 | "exclude-from-classmap": [
2340 | "/Tests/"
2341 | ]
2342 | },
2343 | "notification-url": "https://packagist.org/downloads/",
2344 | "license": [
2345 | "MIT"
2346 | ],
2347 | "authors": [
2348 | {
2349 | "name": "Fabien Potencier",
2350 | "email": "fabien@symfony.com"
2351 | },
2352 | {
2353 | "name": "Symfony Community",
2354 | "homepage": "https://symfony.com/contributors"
2355 | }
2356 | ],
2357 | "description": "Symfony Stopwatch Component",
2358 | "homepage": "https://symfony.com",
2359 | "time": "2019-11-18T17:27:11+00:00"
2360 | },
2361 | {
2362 | "name": "symfony/yaml",
2363 | "version": "v5.0.1",
2364 | "source": {
2365 | "type": "git",
2366 | "url": "https://github.com/symfony/yaml.git",
2367 | "reference": "51b684480184fa767b97e28eaca67664e48dd3e9"
2368 | },
2369 | "dist": {
2370 | "type": "zip",
2371 | "url": "https://api.github.com/repos/symfony/yaml/zipball/51b684480184fa767b97e28eaca67664e48dd3e9",
2372 | "reference": "51b684480184fa767b97e28eaca67664e48dd3e9",
2373 | "shasum": ""
2374 | },
2375 | "require": {
2376 | "php": "^7.2.5",
2377 | "symfony/polyfill-ctype": "~1.8"
2378 | },
2379 | "conflict": {
2380 | "symfony/console": "<4.4"
2381 | },
2382 | "require-dev": {
2383 | "symfony/console": "^4.4|^5.0"
2384 | },
2385 | "suggest": {
2386 | "symfony/console": "For validating YAML files using the lint command"
2387 | },
2388 | "type": "library",
2389 | "extra": {
2390 | "branch-alias": {
2391 | "dev-master": "5.0-dev"
2392 | }
2393 | },
2394 | "autoload": {
2395 | "psr-4": {
2396 | "Symfony\\Component\\Yaml\\": ""
2397 | },
2398 | "exclude-from-classmap": [
2399 | "/Tests/"
2400 | ]
2401 | },
2402 | "notification-url": "https://packagist.org/downloads/",
2403 | "license": [
2404 | "MIT"
2405 | ],
2406 | "authors": [
2407 | {
2408 | "name": "Fabien Potencier",
2409 | "email": "fabien@symfony.com"
2410 | },
2411 | {
2412 | "name": "Symfony Community",
2413 | "homepage": "https://symfony.com/contributors"
2414 | }
2415 | ],
2416 | "description": "Symfony Yaml Component",
2417 | "homepage": "https://symfony.com",
2418 | "time": "2019-11-18T17:27:11+00:00"
2419 | },
2420 | {
2421 | "name": "theseer/tokenizer",
2422 | "version": "1.1.3",
2423 | "source": {
2424 | "type": "git",
2425 | "url": "https://github.com/theseer/tokenizer.git",
2426 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
2427 | },
2428 | "dist": {
2429 | "type": "zip",
2430 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2431 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
2432 | "shasum": ""
2433 | },
2434 | "require": {
2435 | "ext-dom": "*",
2436 | "ext-tokenizer": "*",
2437 | "ext-xmlwriter": "*",
2438 | "php": "^7.0"
2439 | },
2440 | "type": "library",
2441 | "autoload": {
2442 | "classmap": [
2443 | "src/"
2444 | ]
2445 | },
2446 | "notification-url": "https://packagist.org/downloads/",
2447 | "license": [
2448 | "BSD-3-Clause"
2449 | ],
2450 | "authors": [
2451 | {
2452 | "name": "Arne Blankerts",
2453 | "email": "arne@blankerts.de",
2454 | "role": "Developer"
2455 | }
2456 | ],
2457 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2458 | "time": "2019-06-13T22:48:21+00:00"
2459 | },
2460 | {
2461 | "name": "webmozart/assert",
2462 | "version": "1.6.0",
2463 | "source": {
2464 | "type": "git",
2465 | "url": "https://github.com/webmozart/assert.git",
2466 | "reference": "573381c0a64f155a0d9a23f4b0c797194805b925"
2467 | },
2468 | "dist": {
2469 | "type": "zip",
2470 | "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925",
2471 | "reference": "573381c0a64f155a0d9a23f4b0c797194805b925",
2472 | "shasum": ""
2473 | },
2474 | "require": {
2475 | "php": "^5.3.3 || ^7.0",
2476 | "symfony/polyfill-ctype": "^1.8"
2477 | },
2478 | "conflict": {
2479 | "vimeo/psalm": "<3.6.0"
2480 | },
2481 | "require-dev": {
2482 | "phpunit/phpunit": "^4.8.36 || ^7.5.13"
2483 | },
2484 | "type": "library",
2485 | "autoload": {
2486 | "psr-4": {
2487 | "Webmozart\\Assert\\": "src/"
2488 | }
2489 | },
2490 | "notification-url": "https://packagist.org/downloads/",
2491 | "license": [
2492 | "MIT"
2493 | ],
2494 | "authors": [
2495 | {
2496 | "name": "Bernhard Schussek",
2497 | "email": "bschussek@gmail.com"
2498 | }
2499 | ],
2500 | "description": "Assertions to validate method input/output with nice error messages.",
2501 | "keywords": [
2502 | "assert",
2503 | "check",
2504 | "validate"
2505 | ],
2506 | "time": "2019-11-24T13:36:37+00:00"
2507 | }
2508 | ],
2509 | "aliases": [],
2510 | "minimum-stability": "stable",
2511 | "stability-flags": [],
2512 | "prefer-stable": false,
2513 | "prefer-lowest": false,
2514 | "platform": [],
2515 | "platform-dev": []
2516 | }
2517 |
--------------------------------------------------------------------------------
/coverage.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/phpcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Oh See Software PHPCS config.
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 | ./tests
13 |
14 |
15 |
16 |
17 | src
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/Client.php:
--------------------------------------------------------------------------------
1 | setCaddyHost($caddyHost);
16 | $this->setHeaders($headers);
17 | }
18 |
19 | /**
20 | * Sets the Caddy host (base url).
21 | *
22 | * @param string $caddyHost
23 | * @return Client
24 | */
25 | public function setCaddyHost(string $caddyHost)
26 | {
27 | $this->caddyHost = $caddyHost;
28 | return $this;
29 | }
30 |
31 | /**
32 | * Sets the headers.
33 | *
34 | * @param string $headers
35 | * @return Client
36 | */
37 | public function setHeaders(array $headers = [])
38 | {
39 | $this->headers = $headers;
40 | return $this;
41 | }
42 |
43 | /**
44 | * Creates a new Request instance.
45 | *
46 | * @return Request
47 | */
48 | public function request(): Request
49 | {
50 | return new Request($this->caddyHost, $this->headers);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/Request.php:
--------------------------------------------------------------------------------
1 | http = new Client([
18 | 'base_uri' => $caddyHost
19 | ]);
20 |
21 | $this->options = [
22 | 'http_errors' => false,
23 | 'headers' => $headers
24 | ];
25 | }
26 |
27 | /**
28 | * Sends a GET request.
29 | *
30 | * @return void
31 | */
32 | public function get(): Response
33 | {
34 | return $this->sendRequest('GET');
35 | }
36 |
37 | /**
38 | * Adds a new host.
39 | *
40 | * @param string $host
41 | * @return Response
42 | */
43 | public function addHost(string $host): Response
44 | {
45 | $this->uri .= '/host';
46 | return $this->sendRequest('POST', $host);
47 | }
48 |
49 | /**
50 | * Adds the http route to the uri.
51 | *
52 | * @return Request
53 | */
54 | public function http()
55 | {
56 | $this->uri .= '/apps/http';
57 | return $this;
58 | }
59 |
60 | /**
61 | * Sets the server for the request.
62 | *
63 | * @param string $server
64 | * @return Request
65 | */
66 | public function server(string $server)
67 | {
68 | $this->uri .= "/servers/{$server}";
69 | return $this;
70 | }
71 |
72 | /**
73 | * Sets the route index for the request.
74 | *
75 | * @param int $routeIndex
76 | * @return Request
77 | */
78 | public function route(int $routeIndex)
79 | {
80 | $this->uri .= "/routes/{$routeIndex}";
81 | return $this;
82 | }
83 |
84 | /**
85 | * Sets the match index for the request.
86 | *
87 | * @param int $match
88 | * @return Request
89 | */
90 | public function match(int $matchIndex)
91 | {
92 | $this->uri .= "/match/{$matchIndex}";
93 | return $this;
94 | }
95 |
96 | /**
97 | * Sends the configured request.
98 | *
99 | * @param string $method
100 | * @param mixed $body
101 | * @return Response
102 | */
103 | public function sendRequest(string $method, $body = null): Response
104 | {
105 | if ($body) {
106 | $this->options['json'] = $body;
107 | }
108 |
109 | $response = $this->http->request($method, $this->uri, $this->options);
110 |
111 | return new Response($response);
112 | }
113 | }
114 |
--------------------------------------------------------------------------------
/src/Response.php:
--------------------------------------------------------------------------------
1 | response = $response;
15 | }
16 |
17 | /**
18 | * Returns the response body as a string.
19 | *
20 | * @return string
21 | */
22 | public function getBody()
23 | {
24 | return $this->response->getBody()->getContents();
25 | }
26 |
27 | /**
28 | * Returns a boolean indicating if the request was successful.
29 | *
30 | * @return boolean
31 | */
32 | public function isSuccessful()
33 | {
34 | return in_array($this->response->getStatusCode(), [200, 201]);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/tests/ClientTest.php:
--------------------------------------------------------------------------------
1 | assertEquals('localhost:2019', $client->caddyHost);
16 | }
17 |
18 | /** @test */
19 | public function it_can_be_initialized_with_custom_caddy_host()
20 | {
21 | $client = new Client('1.2.3.4:2019');
22 | $this->assertEquals('1.2.3.4:2019', $client->caddyHost);
23 | }
24 |
25 | /** @test */
26 | public function it_can_be_initialized_with_custom_headers()
27 | {
28 | $client = new Client('localhost:2019', [
29 | 'Origin' => 'abc1234'
30 | ]);
31 | $this->assertEquals([
32 | 'Origin' => 'abc1234'
33 | ], $client->headers);
34 | }
35 |
36 | /** @test */
37 | public function it_creates_new_request_instance()
38 | {
39 | $client = new Client();
40 | $this->assertInstanceOf(Request::class, $client->request());
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/tests/RequestTest.php:
--------------------------------------------------------------------------------
1 | getMockBuilder(GuzzleHttpClient::class);
16 | $this->mock = $mockBuilder->setMethods(['request'])->getMock();
17 |
18 | $this->request = new Request('localhost:2019');
19 | $this->request->http = $this->mock;
20 | }
21 |
22 | /** @test */
23 | public function it_sets_http_uri()
24 | {
25 | $this->request->http();
26 | $this->assertEquals('/config/apps/http', $this->request->uri);
27 | }
28 |
29 | /** @test */
30 | public function it_sets_server_uri()
31 | {
32 | $this->request->server('example');
33 | $this->assertEquals('/config/servers/example', $this->request->uri);
34 | }
35 |
36 | /** @test */
37 | public function it_sets_route_uri()
38 | {
39 | $this->request->route(0);
40 | $this->assertEquals('/config/routes/0', $this->request->uri);
41 | }
42 |
43 | /** @test */
44 | public function it_sets_match_uri()
45 | {
46 | $this->request->match(0);
47 | $this->assertEquals('/config/match/0', $this->request->uri);
48 | }
49 |
50 | /** @test */
51 | public function it_sets_base_uri_when_creating_http_client()
52 | {
53 | // Given
54 | $this->request = new Request('example.com:443');
55 |
56 | // When
57 | $config = $this->request->http->getConfig('base_uri');
58 |
59 | // Then
60 | $this->assertEquals('example.com', $config->getHost());
61 | $this->assertEquals(443, $config->getPort());
62 | }
63 |
64 | /** @test */
65 | public function it_sends_request_to_get_current_configuration()
66 | {
67 | // Given
68 | $this->mock->expects($this->once())
69 | ->method('request')
70 | ->with('GET', '/config/apps/http')
71 | ->willReturn(new GuzzleHttpResponse(200));
72 |
73 | // When
74 | $response = $this->request->http()->get();
75 |
76 | // Then
77 | $this->assertInstanceOf(Response::class, $response);
78 | }
79 |
80 | /** @test */
81 | public function it_adds_origin_header_to_request()
82 | {
83 | // Given
84 | $this->request = new Request('localhost:2019', [
85 | 'Origin' => 'abc123'
86 | ]);
87 |
88 | // Then
89 | $this->assertEquals([
90 | 'Origin' => 'abc123'
91 | ], $this->request->options['headers']);
92 | }
93 |
94 | /** @test */
95 | public function it_sends_request_to_add_a_host()
96 | {
97 | // Given
98 | $this->mock->expects($this->once())
99 | ->method('request')
100 | ->with('POST', '/config/apps/http/servers/srv0/routes/0/match/0/host', [
101 | 'json' => 'example.com',
102 | 'http_errors' => false,
103 | 'headers' => []
104 | ])
105 | ->willReturn(new GuzzleHttpResponse(200));
106 |
107 | // When
108 | $response = $this->request->http()
109 | ->server('srv0')
110 | ->route(0)
111 | ->match(0)
112 | ->addHost('example.com');
113 |
114 | // Then
115 | $this->assertInstanceOf(Response::class, $response);
116 | }
117 |
118 | /** @test */
119 | public function it_returns_a_response_instance()
120 | {
121 | // Given
122 | $this->mock->expects($this->once())
123 | ->method('request')
124 | ->with('POST', '/config', [
125 | 'http_errors' => false,
126 | 'headers' => []
127 | ])
128 | ->willReturn(new GuzzleHttpResponse(200));
129 |
130 | // When
131 | $this->request->uri = '/config';
132 | $response = $this->request->sendRequest('POST', []);
133 |
134 | // Then
135 | $this->assertInstanceOf(Response::class, $response);
136 | }
137 |
138 | /** @test */
139 | public function it_returns_a_response_instance_for_an_error_request()
140 | {
141 | // Given
142 | $this->mock->expects($this->once())
143 | ->method('request')
144 | ->with('POST', '/config', [
145 | 'http_errors' => false,
146 | 'headers' => []
147 | ])
148 | ->willReturn(new GuzzleHttpResponse(500));
149 |
150 | // When
151 | $this->request->uri = '/config';
152 | $response = $this->request->sendRequest('POST', []);
153 |
154 | // Then
155 | $this->assertInstanceOf(Response::class, $response);
156 | }
157 | }
158 |
--------------------------------------------------------------------------------
/tests/ResponseTest.php:
--------------------------------------------------------------------------------
1 | assertTrue($response->isSuccessful());
16 |
17 | $response = new Response(new GuzzleResponse(201, []));
18 | $this->assertTrue($response->isSuccessful());
19 | }
20 |
21 | /** @test */
22 | public function it_returns_false_if_the_response_is_successful()
23 | {
24 | $response = new Response(new GuzzleResponse(401, []));
25 | $this->assertFalse($response->isSuccessful());
26 |
27 | $response = new Response(new GuzzleResponse(403, []));
28 | $this->assertFalse($response->isSuccessful());
29 |
30 | $response = new Response(new GuzzleResponse(500, []));
31 | $this->assertFalse($response->isSuccessful());
32 | }
33 |
34 | /** @test */
35 | public function it_returns_the_response_body()
36 | {
37 | $response = new Response(new GuzzleResponse(200, [], 'example body'));
38 | $this->assertEquals('example body', $response->getBody());
39 |
40 | $body = ['abc' => 123];
41 | $response = new Response(new GuzzleResponse(201, [], json_encode($body)));
42 | $this->assertEquals(json_encode($body), $response->getBody());
43 | }
44 | }
45 |
--------------------------------------------------------------------------------