├── .env.example
├── .gitignore
├── .travis.yml
├── README.md
├── composer.json
├── composer.lock
├── phpunit.xml.dist
├── src
├── BatchMessage.php
├── EmailAddress.php
├── Mailer.php
└── Message.php
└── tests
├── BatchMessageTest.php
├── EmailAddressTest.php
├── MailerTest.php
├── MessageTest.php
├── TestCase.php
├── bootstrap.php
└── mail
├── example.php
└── layouts
└── html.php
/.env.example:
--------------------------------------------------------------------------------
1 | MAILGUN_DOMAIN=
2 | MAILGUN_KEY=
3 |
4 | TEST_RECIPIENT=
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | vendor/
3 | .env
4 | .phpunit.result.cache
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: php
2 |
3 | php:
4 | - 7.2
5 |
6 | # faster builds on new travis setup not using sudo
7 | sudo: false
8 |
9 | # cache vendor dirs
10 | cache:
11 | directories:
12 | - $HOME/.composer/cache
13 |
14 | install:
15 | - travis_retry composer self-update && composer --version
16 | - export PATH="$HOME/.composer/vendor/bin:$PATH"
17 | - travis_retry composer install --prefer-dist --no-interaction
18 |
19 | script:
20 | - ./vendor/bin/phpunit --verbose
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Mailgun Extension for Yii 2
2 |
3 | This extension provides a [Mailgun](https://www.mailgun.com/) mail solution for [Yii framework 2.0](http://www.yiiframework.com).
4 |
5 | [](https://packagist.org/packages/boundstate/yii2-mailgun)
6 | [](https://packagist.org/packages/boundstate/yii2-mailgun)
7 | [](https://travis-ci.com/boundstate/yii2-mailgun)
8 |
9 | ## Installation
10 |
11 | The preferred way to install this extension is through [composer](http://getcomposer.org/download/).
12 |
13 | ```
14 | composer require boundstate/yii2-mailgun
15 | ```
16 |
17 | The [Mailgun API Client](https://github.com/mailgun/mailgun-php) is not hard coupled to Guzzle, Buzz or any other library that sends
18 | HTTP messages. You must also install the [PSR-7 implementation and HTTP client](https://packagist.org/providers/php-http/client-implementation)
19 | you want to use.
20 |
21 | If you just want to get started quickly you should install [Buzz](https://github.com/kriswallsmith/Buzz) and [nyholm/psr7](https://github.com/Nyholm/psr7):
22 |
23 | ```bash
24 | composer require kriswallsmith/buzz nyholm/psr7
25 | ```
26 |
27 | ## Usage
28 |
29 | To use this extension, simply add the following code in your application configuration:
30 |
31 | ```php
32 | return [
33 | //....
34 | 'components' => [
35 | 'mailer' => [
36 | 'class' => 'boundstate\mailgun\Mailer',
37 | 'key' => 'key-example',
38 | 'domain' => 'mg.example.com',
39 | ],
40 | ],
41 | ];
42 | ```
43 |
44 | You can then send an email as follows:
45 |
46 | ```php
47 | Yii::$app->mailer->compose('contact/html', ['contactForm' => $form])
48 | ->setFrom('from@domain.com')
49 | ->setTo($form->email)
50 | ->setSubject($form->subject)
51 | ->send();
52 | ```
53 |
54 | You can also specify an array of addresses and/or speicfy names:
55 |
56 | ```php
57 | $message->setTo(['bob@example.com' => 'Bob']);
58 | ```
59 |
60 | > **Warning**: By default all recipients' email address will show up in the `to` field for each recipient.
61 | > Enable batch sending to avoid this.
62 |
63 | ### Batch Sending
64 |
65 | When [batch sending](https://documentation.mailgun.com/en/latest/user_manual.html#batch-sending) is enabled,
66 | Mailgun sends each recipient an individual email with only their email in the `to` field.
67 |
68 | To use batch sending, set the `messageClass` to `boundstate\mailgun\BatchMessage` in your application configuration:
69 |
70 | ```php
71 | 'mailer' => [
72 | 'class' => 'boundstate\mailgun\Mailer',
73 | 'messageClass' => 'boundstate\mailgun\BatchMessage',
74 | // ...
75 | ]
76 | ```
77 |
78 | Composing a batch email is similar to regular emails,
79 | except you may define and use recipient variables:
80 |
81 | ```php
82 | Yii::$app->mailer->compose('hello')
83 | ->setTo([
84 | 'bob@example.com' => [
85 | 'id': 3,
86 | 'full_name' => 'Bob'
87 | ],
88 | 'jane@example.com' => [
89 | 'id': 4,
90 | 'full_name' => 'Jane'
91 | ],
92 | ])
93 | ->setSubject('Hi %recipient.full_name%')
94 | ->send();
95 | ```
96 |
97 |
98 | For further instructions refer to the [Mailgun docs](https://documentation.mailgun.com/) and the [related section in the Yii Definitive Guide](http://www.yiiframework.com/doc-2.0/guide-tutorial-mailing.html).
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "boundstate/yii2-mailgun",
3 | "description": "Mailgun integration for the Yii framework",
4 | "type": "yii2-extension",
5 | "keywords": ["yii2", "extension", "rackspace", "mailgun", "mail", "email", "mailer"],
6 | "license": "Apache-2.0",
7 | "authors": [
8 | {
9 | "name": "Mike Peters",
10 | "email": "mikejpeters@gmail.com"
11 | }
12 | ],
13 | "require": {
14 | "yiisoft/yii2": ">=2.0.4",
15 | "mailgun/mailgun-php": "^3"
16 | },
17 | "require-dev": {
18 | "phpunit/phpunit": "^8",
19 | "kriswallsmith/buzz": "^1.0",
20 | "nyholm/psr7": "^1.2",
21 | "vlucas/phpdotenv": "^3.6"
22 | },
23 | "suggest": {
24 | "kriswallsmith/buzz": "Mailgun API client requires an HTTP client",
25 | "nyholm/psr7": "Mailgun API client requires a PSR-7 implementation"
26 | },
27 | "autoload": {
28 | "psr-4": {
29 | "boundstate\\mailgun\\": "src"
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/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": "6777e36d4d94994f8801ba3b4058fb2d",
8 | "packages": [
9 | {
10 | "name": "bower-asset/inputmask",
11 | "version": "3.3.11",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/RobinHerbots/Inputmask.git",
15 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/RobinHerbots/Inputmask/zipball/5e670ad62f50c738388d4dcec78d2888505ad77b",
20 | "reference": "5e670ad62f50c738388d4dcec78d2888505ad77b",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "bower-asset/jquery": ">=1.7"
25 | },
26 | "type": "bower-asset-library",
27 | "extra": {
28 | "bower-asset-main": [
29 | "./dist/inputmask/inputmask.js",
30 | "./dist/inputmask/inputmask.extensions.js",
31 | "./dist/inputmask/inputmask.date.extensions.js",
32 | "./dist/inputmask/inputmask.numeric.extensions.js",
33 | "./dist/inputmask/inputmask.phone.extensions.js",
34 | "./dist/inputmask/jquery.inputmask.js",
35 | "./dist/inputmask/global/document.js",
36 | "./dist/inputmask/global/window.js",
37 | "./dist/inputmask/phone-codes/phone.js",
38 | "./dist/inputmask/phone-codes/phone-be.js",
39 | "./dist/inputmask/phone-codes/phone-nl.js",
40 | "./dist/inputmask/phone-codes/phone-ru.js",
41 | "./dist/inputmask/phone-codes/phone-uk.js",
42 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jqlite.js",
43 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.jquery.js",
44 | "./dist/inputmask/dependencyLibs/inputmask.dependencyLib.js",
45 | "./dist/inputmask/bindings/inputmask.binding.js"
46 | ],
47 | "bower-asset-ignore": [
48 | "**/*",
49 | "!dist/*",
50 | "!dist/inputmask/*",
51 | "!dist/min/*",
52 | "!dist/min/inputmask/*"
53 | ]
54 | },
55 | "license": [
56 | "http://opensource.org/licenses/mit-license.php"
57 | ],
58 | "description": "Inputmask is a javascript library which creates an input mask. Inputmask can run against vanilla javascript, jQuery and jqlite.",
59 | "keywords": [
60 | "form",
61 | "input",
62 | "inputmask",
63 | "jquery",
64 | "mask",
65 | "plugins"
66 | ],
67 | "time": "2017-11-21T11:46:23+00:00"
68 | },
69 | {
70 | "name": "bower-asset/jquery",
71 | "version": "3.5.1",
72 | "source": {
73 | "type": "git",
74 | "url": "https://github.com/jquery/jquery-dist.git",
75 | "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215"
76 | },
77 | "dist": {
78 | "type": "zip",
79 | "url": "https://api.github.com/repos/jquery/jquery-dist/zipball/4c0e4becb8263bb5b3e6dadc448d8e7305ef8215",
80 | "reference": "4c0e4becb8263bb5b3e6dadc448d8e7305ef8215",
81 | "shasum": ""
82 | },
83 | "type": "bower-asset-library",
84 | "extra": {
85 | "bower-asset-main": "dist/jquery.js",
86 | "bower-asset-ignore": [
87 | "package.json"
88 | ]
89 | },
90 | "license": [
91 | "MIT"
92 | ],
93 | "keywords": [
94 | "browser",
95 | "javascript",
96 | "jquery",
97 | "library"
98 | ],
99 | "time": "2020-05-04T22:50:46+00:00"
100 | },
101 | {
102 | "name": "bower-asset/punycode",
103 | "version": "v1.3.2",
104 | "source": {
105 | "type": "git",
106 | "url": "https://github.com/bestiejs/punycode.js.git",
107 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3"
108 | },
109 | "dist": {
110 | "type": "zip",
111 | "url": "https://api.github.com/repos/bestiejs/punycode.js/zipball/38c8d3131a82567bfef18da09f7f4db68c84f8a3",
112 | "reference": "38c8d3131a82567bfef18da09f7f4db68c84f8a3",
113 | "shasum": ""
114 | },
115 | "type": "bower-asset-library",
116 | "extra": {
117 | "bower-asset-main": "punycode.js",
118 | "bower-asset-ignore": [
119 | "coverage",
120 | "tests",
121 | ".*",
122 | "component.json",
123 | "Gruntfile.js",
124 | "node_modules",
125 | "package.json"
126 | ]
127 | },
128 | "time": "2014-10-22T12:02:42+00:00"
129 | },
130 | {
131 | "name": "bower-asset/yii2-pjax",
132 | "version": "2.0.7.1",
133 | "source": {
134 | "type": "git",
135 | "url": "https://github.com/yiisoft/jquery-pjax.git",
136 | "reference": "aef7b953107264f00234902a3880eb50dafc48be"
137 | },
138 | "dist": {
139 | "type": "zip",
140 | "url": "https://api.github.com/repos/yiisoft/jquery-pjax/zipball/aef7b953107264f00234902a3880eb50dafc48be",
141 | "reference": "aef7b953107264f00234902a3880eb50dafc48be",
142 | "shasum": ""
143 | },
144 | "require": {
145 | "bower-asset/jquery": ">=1.8"
146 | },
147 | "type": "bower-asset-library",
148 | "extra": {
149 | "bower-asset-main": "./jquery.pjax.js",
150 | "bower-asset-ignore": [
151 | ".travis.yml",
152 | "Gemfile",
153 | "Gemfile.lock",
154 | "CONTRIBUTING.md",
155 | "vendor/",
156 | "script/",
157 | "test/"
158 | ]
159 | },
160 | "license": [
161 | "MIT"
162 | ],
163 | "time": "2017-10-12T10:11:14+00:00"
164 | },
165 | {
166 | "name": "cebe/markdown",
167 | "version": "1.2.1",
168 | "source": {
169 | "type": "git",
170 | "url": "https://github.com/cebe/markdown.git",
171 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86"
172 | },
173 | "dist": {
174 | "type": "zip",
175 | "url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86",
176 | "reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86",
177 | "shasum": ""
178 | },
179 | "require": {
180 | "lib-pcre": "*",
181 | "php": ">=5.4.0"
182 | },
183 | "require-dev": {
184 | "cebe/indent": "*",
185 | "facebook/xhprof": "*@dev",
186 | "phpunit/phpunit": "4.1.*"
187 | },
188 | "bin": [
189 | "bin/markdown"
190 | ],
191 | "type": "library",
192 | "extra": {
193 | "branch-alias": {
194 | "dev-master": "1.2.x-dev"
195 | }
196 | },
197 | "autoload": {
198 | "psr-4": {
199 | "cebe\\markdown\\": ""
200 | }
201 | },
202 | "notification-url": "https://packagist.org/downloads/",
203 | "license": [
204 | "MIT"
205 | ],
206 | "authors": [
207 | {
208 | "name": "Carsten Brandt",
209 | "email": "mail@cebe.cc",
210 | "homepage": "http://cebe.cc/",
211 | "role": "Creator"
212 | }
213 | ],
214 | "description": "A super fast, highly extensible markdown parser for PHP",
215 | "homepage": "https://github.com/cebe/markdown#readme",
216 | "keywords": [
217 | "extensible",
218 | "fast",
219 | "gfm",
220 | "markdown",
221 | "markdown-extra"
222 | ],
223 | "time": "2018-03-26T11:24:36+00:00"
224 | },
225 | {
226 | "name": "clue/stream-filter",
227 | "version": "v1.5.0",
228 | "source": {
229 | "type": "git",
230 | "url": "https://github.com/clue/php-stream-filter.git",
231 | "reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320"
232 | },
233 | "dist": {
234 | "type": "zip",
235 | "url": "https://api.github.com/repos/clue/php-stream-filter/zipball/aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
236 | "reference": "aeb7d8ea49c7963d3b581378955dbf5bc49aa320",
237 | "shasum": ""
238 | },
239 | "require": {
240 | "php": ">=5.3"
241 | },
242 | "require-dev": {
243 | "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
244 | },
245 | "type": "library",
246 | "autoload": {
247 | "psr-4": {
248 | "Clue\\StreamFilter\\": "src/"
249 | },
250 | "files": [
251 | "src/functions_include.php"
252 | ]
253 | },
254 | "notification-url": "https://packagist.org/downloads/",
255 | "license": [
256 | "MIT"
257 | ],
258 | "authors": [
259 | {
260 | "name": "Christian Lück",
261 | "email": "christian@clue.engineering"
262 | }
263 | ],
264 | "description": "A simple and modern approach to stream filtering in PHP",
265 | "homepage": "https://github.com/clue/php-stream-filter",
266 | "keywords": [
267 | "bucket brigade",
268 | "callback",
269 | "filter",
270 | "php_user_filter",
271 | "stream",
272 | "stream_filter_append",
273 | "stream_filter_register"
274 | ],
275 | "funding": [
276 | {
277 | "url": "https://clue.engineering/support",
278 | "type": "custom"
279 | },
280 | {
281 | "url": "https://github.com/clue",
282 | "type": "github"
283 | }
284 | ],
285 | "time": "2020-10-02T12:38:20+00:00"
286 | },
287 | {
288 | "name": "ezyang/htmlpurifier",
289 | "version": "v4.13.0",
290 | "source": {
291 | "type": "git",
292 | "url": "https://github.com/ezyang/htmlpurifier.git",
293 | "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
294 | },
295 | "dist": {
296 | "type": "zip",
297 | "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
298 | "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
299 | "shasum": ""
300 | },
301 | "require": {
302 | "php": ">=5.2"
303 | },
304 | "require-dev": {
305 | "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
306 | },
307 | "type": "library",
308 | "autoload": {
309 | "psr-0": {
310 | "HTMLPurifier": "library/"
311 | },
312 | "files": [
313 | "library/HTMLPurifier.composer.php"
314 | ],
315 | "exclude-from-classmap": [
316 | "/library/HTMLPurifier/Language/"
317 | ]
318 | },
319 | "notification-url": "https://packagist.org/downloads/",
320 | "license": [
321 | "LGPL-2.1-or-later"
322 | ],
323 | "authors": [
324 | {
325 | "name": "Edward Z. Yang",
326 | "email": "admin@htmlpurifier.org",
327 | "homepage": "http://ezyang.com"
328 | }
329 | ],
330 | "description": "Standards compliant HTML filter written in PHP",
331 | "homepage": "http://htmlpurifier.org/",
332 | "keywords": [
333 | "html"
334 | ],
335 | "time": "2020-06-29T00:56:53+00:00"
336 | },
337 | {
338 | "name": "mailgun/mailgun-php",
339 | "version": "3.1.0",
340 | "source": {
341 | "type": "git",
342 | "url": "https://github.com/mailgun/mailgun-php.git",
343 | "reference": "27d579fdf1295dd3fdf35f14cde797de21615fb7"
344 | },
345 | "dist": {
346 | "type": "zip",
347 | "url": "https://api.github.com/repos/mailgun/mailgun-php/zipball/27d579fdf1295dd3fdf35f14cde797de21615fb7",
348 | "reference": "27d579fdf1295dd3fdf35f14cde797de21615fb7",
349 | "shasum": ""
350 | },
351 | "require": {
352 | "php": "^7.1",
353 | "php-http/client-common": "^1.9 || ^2.0",
354 | "php-http/discovery": "^1.6",
355 | "php-http/multipart-stream-builder": "^1.0",
356 | "psr/http-client": "^1.0",
357 | "webmozart/assert": "^1.6"
358 | },
359 | "require-dev": {
360 | "nyholm/nsa": "^1.1",
361 | "nyholm/psr7": "^1.0",
362 | "php-http/guzzle6-adapter": "^1.0 || ^2.0",
363 | "phpunit/phpunit": "^7.5"
364 | },
365 | "suggest": {
366 | "guzzlehttp/psr7": "PSR-7 message implementation that also provides common utility methods",
367 | "php-http/curl-client": "cURL client for PHP-HTTP"
368 | },
369 | "type": "library",
370 | "extra": {
371 | "branch-alias": {
372 | "dev-master": "3.0-dev"
373 | }
374 | },
375 | "autoload": {
376 | "psr-4": {
377 | "Mailgun\\": "src/"
378 | }
379 | },
380 | "notification-url": "https://packagist.org/downloads/",
381 | "license": [
382 | "MIT"
383 | ],
384 | "authors": [
385 | {
386 | "name": "Travis Swientek",
387 | "email": "travis@mailgunhq.com"
388 | }
389 | ],
390 | "description": "The Mailgun SDK provides methods for all API functions.",
391 | "time": "2020-10-08T12:20:23+00:00"
392 | },
393 | {
394 | "name": "php-http/client-common",
395 | "version": "2.3.0",
396 | "source": {
397 | "type": "git",
398 | "url": "https://github.com/php-http/client-common.git",
399 | "reference": "e37e46c610c87519753135fb893111798c69076a"
400 | },
401 | "dist": {
402 | "type": "zip",
403 | "url": "https://api.github.com/repos/php-http/client-common/zipball/e37e46c610c87519753135fb893111798c69076a",
404 | "reference": "e37e46c610c87519753135fb893111798c69076a",
405 | "shasum": ""
406 | },
407 | "require": {
408 | "php": "^7.1 || ^8.0",
409 | "php-http/httplug": "^2.0",
410 | "php-http/message": "^1.6",
411 | "php-http/message-factory": "^1.0",
412 | "psr/http-client": "^1.0",
413 | "psr/http-factory": "^1.0",
414 | "psr/http-message": "^1.0",
415 | "symfony/options-resolver": "^2.6 || ^3.4.20 || ~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0",
416 | "symfony/polyfill-php80": "^1.17"
417 | },
418 | "require-dev": {
419 | "doctrine/instantiator": "^1.1",
420 | "guzzlehttp/psr7": "^1.4",
421 | "nyholm/psr7": "^1.2",
422 | "phpspec/phpspec": "^5.1 || ^6.0",
423 | "phpspec/prophecy": "^1.10.2",
424 | "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
425 | },
426 | "suggest": {
427 | "ext-json": "To detect JSON responses with the ContentTypePlugin",
428 | "ext-libxml": "To detect XML responses with the ContentTypePlugin",
429 | "php-http/cache-plugin": "PSR-6 Cache plugin",
430 | "php-http/logger-plugin": "PSR-3 Logger plugin",
431 | "php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
432 | },
433 | "type": "library",
434 | "extra": {
435 | "branch-alias": {
436 | "dev-master": "2.3.x-dev"
437 | }
438 | },
439 | "autoload": {
440 | "psr-4": {
441 | "Http\\Client\\Common\\": "src/"
442 | }
443 | },
444 | "notification-url": "https://packagist.org/downloads/",
445 | "license": [
446 | "MIT"
447 | ],
448 | "authors": [
449 | {
450 | "name": "Márk Sági-Kazár",
451 | "email": "mark.sagikazar@gmail.com"
452 | }
453 | ],
454 | "description": "Common HTTP Client implementations and tools for HTTPlug",
455 | "homepage": "http://httplug.io",
456 | "keywords": [
457 | "client",
458 | "common",
459 | "http",
460 | "httplug"
461 | ],
462 | "time": "2020-07-21T10:04:13+00:00"
463 | },
464 | {
465 | "name": "php-http/discovery",
466 | "version": "1.12.0",
467 | "source": {
468 | "type": "git",
469 | "url": "https://github.com/php-http/discovery.git",
470 | "reference": "4366bf1bc39b663aa87459bd725501d2f1988b6c"
471 | },
472 | "dist": {
473 | "type": "zip",
474 | "url": "https://api.github.com/repos/php-http/discovery/zipball/4366bf1bc39b663aa87459bd725501d2f1988b6c",
475 | "reference": "4366bf1bc39b663aa87459bd725501d2f1988b6c",
476 | "shasum": ""
477 | },
478 | "require": {
479 | "php": "^7.1 || ^8.0"
480 | },
481 | "conflict": {
482 | "nyholm/psr7": "<1.0"
483 | },
484 | "require-dev": {
485 | "graham-campbell/phpspec-skip-example-extension": "^5.0",
486 | "php-http/httplug": "^1.0 || ^2.0",
487 | "php-http/message-factory": "^1.0",
488 | "phpspec/phpspec": "^5.1 || ^6.1",
489 | "puli/composer-plugin": "1.0.0-beta10"
490 | },
491 | "suggest": {
492 | "php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories",
493 | "puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details."
494 | },
495 | "type": "library",
496 | "extra": {
497 | "branch-alias": {
498 | "dev-master": "1.9-dev"
499 | }
500 | },
501 | "autoload": {
502 | "psr-4": {
503 | "Http\\Discovery\\": "src/"
504 | }
505 | },
506 | "notification-url": "https://packagist.org/downloads/",
507 | "license": [
508 | "MIT"
509 | ],
510 | "authors": [
511 | {
512 | "name": "Márk Sági-Kazár",
513 | "email": "mark.sagikazar@gmail.com"
514 | }
515 | ],
516 | "description": "Finds installed HTTPlug implementations and PSR-7 message factories",
517 | "homepage": "http://php-http.org",
518 | "keywords": [
519 | "adapter",
520 | "client",
521 | "discovery",
522 | "factory",
523 | "http",
524 | "message",
525 | "psr7"
526 | ],
527 | "time": "2020-09-22T13:31:04+00:00"
528 | },
529 | {
530 | "name": "php-http/httplug",
531 | "version": "2.2.0",
532 | "source": {
533 | "type": "git",
534 | "url": "https://github.com/php-http/httplug.git",
535 | "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9"
536 | },
537 | "dist": {
538 | "type": "zip",
539 | "url": "https://api.github.com/repos/php-http/httplug/zipball/191a0a1b41ed026b717421931f8d3bd2514ffbf9",
540 | "reference": "191a0a1b41ed026b717421931f8d3bd2514ffbf9",
541 | "shasum": ""
542 | },
543 | "require": {
544 | "php": "^7.1 || ^8.0",
545 | "php-http/promise": "^1.1",
546 | "psr/http-client": "^1.0",
547 | "psr/http-message": "^1.0"
548 | },
549 | "require-dev": {
550 | "friends-of-phpspec/phpspec-code-coverage": "^4.1",
551 | "phpspec/phpspec": "^5.1 || ^6.0"
552 | },
553 | "type": "library",
554 | "extra": {
555 | "branch-alias": {
556 | "dev-master": "2.x-dev"
557 | }
558 | },
559 | "autoload": {
560 | "psr-4": {
561 | "Http\\Client\\": "src/"
562 | }
563 | },
564 | "notification-url": "https://packagist.org/downloads/",
565 | "license": [
566 | "MIT"
567 | ],
568 | "authors": [
569 | {
570 | "name": "Eric GELOEN",
571 | "email": "geloen.eric@gmail.com"
572 | },
573 | {
574 | "name": "Márk Sági-Kazár",
575 | "email": "mark.sagikazar@gmail.com",
576 | "homepage": "https://sagikazarmark.hu"
577 | }
578 | ],
579 | "description": "HTTPlug, the HTTP client abstraction for PHP",
580 | "homepage": "http://httplug.io",
581 | "keywords": [
582 | "client",
583 | "http"
584 | ],
585 | "time": "2020-07-13T15:43:23+00:00"
586 | },
587 | {
588 | "name": "php-http/message",
589 | "version": "1.9.1",
590 | "source": {
591 | "type": "git",
592 | "url": "https://github.com/php-http/message.git",
593 | "reference": "09f3f13af3a1a4273ecbf8e6b27248c002a3db29"
594 | },
595 | "dist": {
596 | "type": "zip",
597 | "url": "https://api.github.com/repos/php-http/message/zipball/09f3f13af3a1a4273ecbf8e6b27248c002a3db29",
598 | "reference": "09f3f13af3a1a4273ecbf8e6b27248c002a3db29",
599 | "shasum": ""
600 | },
601 | "require": {
602 | "clue/stream-filter": "^1.4.1",
603 | "php": "^7.1",
604 | "php-http/message-factory": "^1.0.2",
605 | "psr/http-message": "^1.0"
606 | },
607 | "provide": {
608 | "php-http/message-factory-implementation": "1.0"
609 | },
610 | "require-dev": {
611 | "akeneo/phpspec-skip-example-extension": "^1.0",
612 | "coduo/phpspec-data-provider-extension": "^1.0",
613 | "ergebnis/composer-normalize": "^2.1",
614 | "ext-zlib": "*",
615 | "guzzlehttp/psr7": "^1.0",
616 | "henrikbjorn/phpspec-code-coverage": "^1.0",
617 | "phpspec/phpspec": "^2.4",
618 | "slim/slim": "^3.0",
619 | "zendframework/zend-diactoros": "^1.0"
620 | },
621 | "suggest": {
622 | "ext-zlib": "Used with compressor/decompressor streams",
623 | "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
624 | "slim/slim": "Used with Slim Framework PSR-7 implementation",
625 | "zendframework/zend-diactoros": "Used with Diactoros Factories"
626 | },
627 | "type": "library",
628 | "extra": {
629 | "branch-alias": {
630 | "dev-master": "1.8-dev"
631 | }
632 | },
633 | "autoload": {
634 | "psr-4": {
635 | "Http\\Message\\": "src/"
636 | },
637 | "files": [
638 | "src/filters.php"
639 | ]
640 | },
641 | "notification-url": "https://packagist.org/downloads/",
642 | "license": [
643 | "MIT"
644 | ],
645 | "authors": [
646 | {
647 | "name": "Márk Sági-Kazár",
648 | "email": "mark.sagikazar@gmail.com"
649 | }
650 | ],
651 | "description": "HTTP Message related tools",
652 | "homepage": "http://php-http.org",
653 | "keywords": [
654 | "http",
655 | "message",
656 | "psr-7"
657 | ],
658 | "time": "2020-10-13T06:21:08+00:00"
659 | },
660 | {
661 | "name": "php-http/message-factory",
662 | "version": "v1.0.2",
663 | "source": {
664 | "type": "git",
665 | "url": "https://github.com/php-http/message-factory.git",
666 | "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
667 | },
668 | "dist": {
669 | "type": "zip",
670 | "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
671 | "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
672 | "shasum": ""
673 | },
674 | "require": {
675 | "php": ">=5.4",
676 | "psr/http-message": "^1.0"
677 | },
678 | "type": "library",
679 | "extra": {
680 | "branch-alias": {
681 | "dev-master": "1.0-dev"
682 | }
683 | },
684 | "autoload": {
685 | "psr-4": {
686 | "Http\\Message\\": "src/"
687 | }
688 | },
689 | "notification-url": "https://packagist.org/downloads/",
690 | "license": [
691 | "MIT"
692 | ],
693 | "authors": [
694 | {
695 | "name": "Márk Sági-Kazár",
696 | "email": "mark.sagikazar@gmail.com"
697 | }
698 | ],
699 | "description": "Factory interfaces for PSR-7 HTTP Message",
700 | "homepage": "http://php-http.org",
701 | "keywords": [
702 | "factory",
703 | "http",
704 | "message",
705 | "stream",
706 | "uri"
707 | ],
708 | "time": "2015-12-19T14:08:53+00:00"
709 | },
710 | {
711 | "name": "php-http/multipart-stream-builder",
712 | "version": "1.1.2",
713 | "source": {
714 | "type": "git",
715 | "url": "https://github.com/php-http/multipart-stream-builder.git",
716 | "reference": "121299c2aad475a19087bc6298a1c9aa4d5c1ecc"
717 | },
718 | "dist": {
719 | "type": "zip",
720 | "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/121299c2aad475a19087bc6298a1c9aa4d5c1ecc",
721 | "reference": "121299c2aad475a19087bc6298a1c9aa4d5c1ecc",
722 | "shasum": ""
723 | },
724 | "require": {
725 | "php": "^7.1 || ^8.0",
726 | "php-http/discovery": "^1.7",
727 | "php-http/message-factory": "^1.0.2",
728 | "psr/http-factory": "^1.0",
729 | "psr/http-message": "^1.0"
730 | },
731 | "require-dev": {
732 | "nyholm/psr7": "^1.0",
733 | "php-http/message": "^1.5",
734 | "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3"
735 | },
736 | "type": "library",
737 | "extra": {
738 | "branch-alias": {
739 | "dev-master": "1.1-dev"
740 | }
741 | },
742 | "autoload": {
743 | "psr-4": {
744 | "Http\\Message\\MultipartStream\\": "src/"
745 | }
746 | },
747 | "notification-url": "https://packagist.org/downloads/",
748 | "license": [
749 | "MIT"
750 | ],
751 | "authors": [
752 | {
753 | "name": "Tobias Nyholm",
754 | "email": "tobias.nyholm@gmail.com"
755 | }
756 | ],
757 | "description": "A builder class that help you create a multipart stream",
758 | "homepage": "http://php-http.org",
759 | "keywords": [
760 | "factory",
761 | "http",
762 | "message",
763 | "multipart stream",
764 | "stream"
765 | ],
766 | "time": "2020-07-13T15:48:43+00:00"
767 | },
768 | {
769 | "name": "php-http/promise",
770 | "version": "1.1.0",
771 | "source": {
772 | "type": "git",
773 | "url": "https://github.com/php-http/promise.git",
774 | "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88"
775 | },
776 | "dist": {
777 | "type": "zip",
778 | "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
779 | "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88",
780 | "shasum": ""
781 | },
782 | "require": {
783 | "php": "^7.1 || ^8.0"
784 | },
785 | "require-dev": {
786 | "friends-of-phpspec/phpspec-code-coverage": "^4.3.2",
787 | "phpspec/phpspec": "^5.1.2 || ^6.2"
788 | },
789 | "type": "library",
790 | "extra": {
791 | "branch-alias": {
792 | "dev-master": "1.1-dev"
793 | }
794 | },
795 | "autoload": {
796 | "psr-4": {
797 | "Http\\Promise\\": "src/"
798 | }
799 | },
800 | "notification-url": "https://packagist.org/downloads/",
801 | "license": [
802 | "MIT"
803 | ],
804 | "authors": [
805 | {
806 | "name": "Joel Wurtz",
807 | "email": "joel.wurtz@gmail.com"
808 | },
809 | {
810 | "name": "Márk Sági-Kazár",
811 | "email": "mark.sagikazar@gmail.com"
812 | }
813 | ],
814 | "description": "Promise used for asynchronous HTTP requests",
815 | "homepage": "http://httplug.io",
816 | "keywords": [
817 | "promise"
818 | ],
819 | "time": "2020-07-07T09:29:14+00:00"
820 | },
821 | {
822 | "name": "psr/http-client",
823 | "version": "1.0.1",
824 | "source": {
825 | "type": "git",
826 | "url": "https://github.com/php-fig/http-client.git",
827 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
828 | },
829 | "dist": {
830 | "type": "zip",
831 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
832 | "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
833 | "shasum": ""
834 | },
835 | "require": {
836 | "php": "^7.0 || ^8.0",
837 | "psr/http-message": "^1.0"
838 | },
839 | "type": "library",
840 | "extra": {
841 | "branch-alias": {
842 | "dev-master": "1.0.x-dev"
843 | }
844 | },
845 | "autoload": {
846 | "psr-4": {
847 | "Psr\\Http\\Client\\": "src/"
848 | }
849 | },
850 | "notification-url": "https://packagist.org/downloads/",
851 | "license": [
852 | "MIT"
853 | ],
854 | "authors": [
855 | {
856 | "name": "PHP-FIG",
857 | "homepage": "http://www.php-fig.org/"
858 | }
859 | ],
860 | "description": "Common interface for HTTP clients",
861 | "homepage": "https://github.com/php-fig/http-client",
862 | "keywords": [
863 | "http",
864 | "http-client",
865 | "psr",
866 | "psr-18"
867 | ],
868 | "time": "2020-06-29T06:28:15+00:00"
869 | },
870 | {
871 | "name": "psr/http-factory",
872 | "version": "1.0.1",
873 | "source": {
874 | "type": "git",
875 | "url": "https://github.com/php-fig/http-factory.git",
876 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
877 | },
878 | "dist": {
879 | "type": "zip",
880 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
881 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
882 | "shasum": ""
883 | },
884 | "require": {
885 | "php": ">=7.0.0",
886 | "psr/http-message": "^1.0"
887 | },
888 | "type": "library",
889 | "extra": {
890 | "branch-alias": {
891 | "dev-master": "1.0.x-dev"
892 | }
893 | },
894 | "autoload": {
895 | "psr-4": {
896 | "Psr\\Http\\Message\\": "src/"
897 | }
898 | },
899 | "notification-url": "https://packagist.org/downloads/",
900 | "license": [
901 | "MIT"
902 | ],
903 | "authors": [
904 | {
905 | "name": "PHP-FIG",
906 | "homepage": "http://www.php-fig.org/"
907 | }
908 | ],
909 | "description": "Common interfaces for PSR-7 HTTP message factories",
910 | "keywords": [
911 | "factory",
912 | "http",
913 | "message",
914 | "psr",
915 | "psr-17",
916 | "psr-7",
917 | "request",
918 | "response"
919 | ],
920 | "time": "2019-04-30T12:38:16+00:00"
921 | },
922 | {
923 | "name": "psr/http-message",
924 | "version": "1.0.1",
925 | "source": {
926 | "type": "git",
927 | "url": "https://github.com/php-fig/http-message.git",
928 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
929 | },
930 | "dist": {
931 | "type": "zip",
932 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
933 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
934 | "shasum": ""
935 | },
936 | "require": {
937 | "php": ">=5.3.0"
938 | },
939 | "type": "library",
940 | "extra": {
941 | "branch-alias": {
942 | "dev-master": "1.0.x-dev"
943 | }
944 | },
945 | "autoload": {
946 | "psr-4": {
947 | "Psr\\Http\\Message\\": "src/"
948 | }
949 | },
950 | "notification-url": "https://packagist.org/downloads/",
951 | "license": [
952 | "MIT"
953 | ],
954 | "authors": [
955 | {
956 | "name": "PHP-FIG",
957 | "homepage": "http://www.php-fig.org/"
958 | }
959 | ],
960 | "description": "Common interface for HTTP messages",
961 | "homepage": "https://github.com/php-fig/http-message",
962 | "keywords": [
963 | "http",
964 | "http-message",
965 | "psr",
966 | "psr-7",
967 | "request",
968 | "response"
969 | ],
970 | "time": "2016-08-06T14:39:51+00:00"
971 | },
972 | {
973 | "name": "symfony/deprecation-contracts",
974 | "version": "v2.2.0",
975 | "source": {
976 | "type": "git",
977 | "url": "https://github.com/symfony/deprecation-contracts.git",
978 | "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
979 | },
980 | "dist": {
981 | "type": "zip",
982 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
983 | "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
984 | "shasum": ""
985 | },
986 | "require": {
987 | "php": ">=7.1"
988 | },
989 | "type": "library",
990 | "extra": {
991 | "branch-alias": {
992 | "dev-master": "2.2-dev"
993 | },
994 | "thanks": {
995 | "name": "symfony/contracts",
996 | "url": "https://github.com/symfony/contracts"
997 | }
998 | },
999 | "autoload": {
1000 | "files": [
1001 | "function.php"
1002 | ]
1003 | },
1004 | "notification-url": "https://packagist.org/downloads/",
1005 | "license": [
1006 | "MIT"
1007 | ],
1008 | "authors": [
1009 | {
1010 | "name": "Nicolas Grekas",
1011 | "email": "p@tchwork.com"
1012 | },
1013 | {
1014 | "name": "Symfony Community",
1015 | "homepage": "https://symfony.com/contributors"
1016 | }
1017 | ],
1018 | "description": "A generic function and convention to trigger deprecation notices",
1019 | "homepage": "https://symfony.com",
1020 | "funding": [
1021 | {
1022 | "url": "https://symfony.com/sponsor",
1023 | "type": "custom"
1024 | },
1025 | {
1026 | "url": "https://github.com/fabpot",
1027 | "type": "github"
1028 | },
1029 | {
1030 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1031 | "type": "tidelift"
1032 | }
1033 | ],
1034 | "time": "2020-09-07T11:33:47+00:00"
1035 | },
1036 | {
1037 | "name": "symfony/options-resolver",
1038 | "version": "v5.1.8",
1039 | "source": {
1040 | "type": "git",
1041 | "url": "https://github.com/symfony/options-resolver.git",
1042 | "reference": "c6a02905e4ffc7a1498e8ee019db2b477cd1cc02"
1043 | },
1044 | "dist": {
1045 | "type": "zip",
1046 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c6a02905e4ffc7a1498e8ee019db2b477cd1cc02",
1047 | "reference": "c6a02905e4ffc7a1498e8ee019db2b477cd1cc02",
1048 | "shasum": ""
1049 | },
1050 | "require": {
1051 | "php": ">=7.2.5",
1052 | "symfony/deprecation-contracts": "^2.1",
1053 | "symfony/polyfill-php80": "^1.15"
1054 | },
1055 | "type": "library",
1056 | "autoload": {
1057 | "psr-4": {
1058 | "Symfony\\Component\\OptionsResolver\\": ""
1059 | },
1060 | "exclude-from-classmap": [
1061 | "/Tests/"
1062 | ]
1063 | },
1064 | "notification-url": "https://packagist.org/downloads/",
1065 | "license": [
1066 | "MIT"
1067 | ],
1068 | "authors": [
1069 | {
1070 | "name": "Fabien Potencier",
1071 | "email": "fabien@symfony.com"
1072 | },
1073 | {
1074 | "name": "Symfony Community",
1075 | "homepage": "https://symfony.com/contributors"
1076 | }
1077 | ],
1078 | "description": "Symfony OptionsResolver Component",
1079 | "homepage": "https://symfony.com",
1080 | "keywords": [
1081 | "config",
1082 | "configuration",
1083 | "options"
1084 | ],
1085 | "funding": [
1086 | {
1087 | "url": "https://symfony.com/sponsor",
1088 | "type": "custom"
1089 | },
1090 | {
1091 | "url": "https://github.com/fabpot",
1092 | "type": "github"
1093 | },
1094 | {
1095 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1096 | "type": "tidelift"
1097 | }
1098 | ],
1099 | "time": "2020-10-24T12:01:57+00:00"
1100 | },
1101 | {
1102 | "name": "symfony/polyfill-ctype",
1103 | "version": "v1.20.0",
1104 | "source": {
1105 | "type": "git",
1106 | "url": "https://github.com/symfony/polyfill-ctype.git",
1107 | "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41"
1108 | },
1109 | "dist": {
1110 | "type": "zip",
1111 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41",
1112 | "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41",
1113 | "shasum": ""
1114 | },
1115 | "require": {
1116 | "php": ">=7.1"
1117 | },
1118 | "suggest": {
1119 | "ext-ctype": "For best performance"
1120 | },
1121 | "type": "library",
1122 | "extra": {
1123 | "branch-alias": {
1124 | "dev-main": "1.20-dev"
1125 | },
1126 | "thanks": {
1127 | "name": "symfony/polyfill",
1128 | "url": "https://github.com/symfony/polyfill"
1129 | }
1130 | },
1131 | "autoload": {
1132 | "psr-4": {
1133 | "Symfony\\Polyfill\\Ctype\\": ""
1134 | },
1135 | "files": [
1136 | "bootstrap.php"
1137 | ]
1138 | },
1139 | "notification-url": "https://packagist.org/downloads/",
1140 | "license": [
1141 | "MIT"
1142 | ],
1143 | "authors": [
1144 | {
1145 | "name": "Gert de Pagter",
1146 | "email": "BackEndTea@gmail.com"
1147 | },
1148 | {
1149 | "name": "Symfony Community",
1150 | "homepage": "https://symfony.com/contributors"
1151 | }
1152 | ],
1153 | "description": "Symfony polyfill for ctype functions",
1154 | "homepage": "https://symfony.com",
1155 | "keywords": [
1156 | "compatibility",
1157 | "ctype",
1158 | "polyfill",
1159 | "portable"
1160 | ],
1161 | "funding": [
1162 | {
1163 | "url": "https://symfony.com/sponsor",
1164 | "type": "custom"
1165 | },
1166 | {
1167 | "url": "https://github.com/fabpot",
1168 | "type": "github"
1169 | },
1170 | {
1171 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1172 | "type": "tidelift"
1173 | }
1174 | ],
1175 | "time": "2020-10-23T14:02:19+00:00"
1176 | },
1177 | {
1178 | "name": "symfony/polyfill-php80",
1179 | "version": "v1.20.0",
1180 | "source": {
1181 | "type": "git",
1182 | "url": "https://github.com/symfony/polyfill-php80.git",
1183 | "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
1184 | },
1185 | "dist": {
1186 | "type": "zip",
1187 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
1188 | "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
1189 | "shasum": ""
1190 | },
1191 | "require": {
1192 | "php": ">=7.1"
1193 | },
1194 | "type": "library",
1195 | "extra": {
1196 | "branch-alias": {
1197 | "dev-main": "1.20-dev"
1198 | },
1199 | "thanks": {
1200 | "name": "symfony/polyfill",
1201 | "url": "https://github.com/symfony/polyfill"
1202 | }
1203 | },
1204 | "autoload": {
1205 | "psr-4": {
1206 | "Symfony\\Polyfill\\Php80\\": ""
1207 | },
1208 | "files": [
1209 | "bootstrap.php"
1210 | ],
1211 | "classmap": [
1212 | "Resources/stubs"
1213 | ]
1214 | },
1215 | "notification-url": "https://packagist.org/downloads/",
1216 | "license": [
1217 | "MIT"
1218 | ],
1219 | "authors": [
1220 | {
1221 | "name": "Ion Bazan",
1222 | "email": "ion.bazan@gmail.com"
1223 | },
1224 | {
1225 | "name": "Nicolas Grekas",
1226 | "email": "p@tchwork.com"
1227 | },
1228 | {
1229 | "name": "Symfony Community",
1230 | "homepage": "https://symfony.com/contributors"
1231 | }
1232 | ],
1233 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
1234 | "homepage": "https://symfony.com",
1235 | "keywords": [
1236 | "compatibility",
1237 | "polyfill",
1238 | "portable",
1239 | "shim"
1240 | ],
1241 | "funding": [
1242 | {
1243 | "url": "https://symfony.com/sponsor",
1244 | "type": "custom"
1245 | },
1246 | {
1247 | "url": "https://github.com/fabpot",
1248 | "type": "github"
1249 | },
1250 | {
1251 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
1252 | "type": "tidelift"
1253 | }
1254 | ],
1255 | "time": "2020-10-23T14:02:19+00:00"
1256 | },
1257 | {
1258 | "name": "webmozart/assert",
1259 | "version": "1.9.1",
1260 | "source": {
1261 | "type": "git",
1262 | "url": "https://github.com/webmozart/assert.git",
1263 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
1264 | },
1265 | "dist": {
1266 | "type": "zip",
1267 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
1268 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
1269 | "shasum": ""
1270 | },
1271 | "require": {
1272 | "php": "^5.3.3 || ^7.0 || ^8.0",
1273 | "symfony/polyfill-ctype": "^1.8"
1274 | },
1275 | "conflict": {
1276 | "phpstan/phpstan": "<0.12.20",
1277 | "vimeo/psalm": "<3.9.1"
1278 | },
1279 | "require-dev": {
1280 | "phpunit/phpunit": "^4.8.36 || ^7.5.13"
1281 | },
1282 | "type": "library",
1283 | "autoload": {
1284 | "psr-4": {
1285 | "Webmozart\\Assert\\": "src/"
1286 | }
1287 | },
1288 | "notification-url": "https://packagist.org/downloads/",
1289 | "license": [
1290 | "MIT"
1291 | ],
1292 | "authors": [
1293 | {
1294 | "name": "Bernhard Schussek",
1295 | "email": "bschussek@gmail.com"
1296 | }
1297 | ],
1298 | "description": "Assertions to validate method input/output with nice error messages.",
1299 | "keywords": [
1300 | "assert",
1301 | "check",
1302 | "validate"
1303 | ],
1304 | "time": "2020-07-08T17:02:28+00:00"
1305 | },
1306 | {
1307 | "name": "yiisoft/yii2",
1308 | "version": "2.0.38",
1309 | "source": {
1310 | "type": "git",
1311 | "url": "https://github.com/yiisoft/yii2-framework.git",
1312 | "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b"
1313 | },
1314 | "dist": {
1315 | "type": "zip",
1316 | "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/fd01e747cc66a049ec105048f0ab8dfbdf60bf4b",
1317 | "reference": "fd01e747cc66a049ec105048f0ab8dfbdf60bf4b",
1318 | "shasum": ""
1319 | },
1320 | "require": {
1321 | "bower-asset/inputmask": "~3.2.2 | ~3.3.5",
1322 | "bower-asset/jquery": "3.5.*@stable | 3.4.*@stable | 3.3.*@stable | 3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable",
1323 | "bower-asset/punycode": "1.3.*",
1324 | "bower-asset/yii2-pjax": "~2.0.1",
1325 | "cebe/markdown": "~1.0.0 | ~1.1.0 | ~1.2.0",
1326 | "ext-ctype": "*",
1327 | "ext-mbstring": "*",
1328 | "ezyang/htmlpurifier": "~4.6",
1329 | "lib-pcre": "*",
1330 | "php": ">=5.4.0",
1331 | "yiisoft/yii2-composer": "~2.0.4"
1332 | },
1333 | "bin": [
1334 | "yii"
1335 | ],
1336 | "type": "library",
1337 | "extra": {
1338 | "branch-alias": {
1339 | "dev-master": "2.0.x-dev"
1340 | }
1341 | },
1342 | "autoload": {
1343 | "psr-4": {
1344 | "yii\\": ""
1345 | }
1346 | },
1347 | "notification-url": "https://packagist.org/downloads/",
1348 | "license": [
1349 | "BSD-3-Clause"
1350 | ],
1351 | "authors": [
1352 | {
1353 | "name": "Qiang Xue",
1354 | "email": "qiang.xue@gmail.com",
1355 | "homepage": "http://www.yiiframework.com/",
1356 | "role": "Founder and project lead"
1357 | },
1358 | {
1359 | "name": "Alexander Makarov",
1360 | "email": "sam@rmcreative.ru",
1361 | "homepage": "http://rmcreative.ru/",
1362 | "role": "Core framework development"
1363 | },
1364 | {
1365 | "name": "Maurizio Domba",
1366 | "homepage": "http://mdomba.info/",
1367 | "role": "Core framework development"
1368 | },
1369 | {
1370 | "name": "Carsten Brandt",
1371 | "email": "mail@cebe.cc",
1372 | "homepage": "http://cebe.cc/",
1373 | "role": "Core framework development"
1374 | },
1375 | {
1376 | "name": "Timur Ruziev",
1377 | "email": "resurtm@gmail.com",
1378 | "homepage": "http://resurtm.com/",
1379 | "role": "Core framework development"
1380 | },
1381 | {
1382 | "name": "Paul Klimov",
1383 | "email": "klimov.paul@gmail.com",
1384 | "role": "Core framework development"
1385 | },
1386 | {
1387 | "name": "Dmitry Naumenko",
1388 | "email": "d.naumenko.a@gmail.com",
1389 | "role": "Core framework development"
1390 | },
1391 | {
1392 | "name": "Boudewijn Vahrmeijer",
1393 | "email": "info@dynasource.eu",
1394 | "homepage": "http://dynasource.eu",
1395 | "role": "Core framework development"
1396 | }
1397 | ],
1398 | "description": "Yii PHP Framework Version 2",
1399 | "homepage": "http://www.yiiframework.com/",
1400 | "keywords": [
1401 | "framework",
1402 | "yii2"
1403 | ],
1404 | "funding": [
1405 | {
1406 | "url": "https://github.com/yiisoft",
1407 | "type": "github"
1408 | },
1409 | {
1410 | "url": "https://opencollective.com/yiisoft",
1411 | "type": "open_collective"
1412 | },
1413 | {
1414 | "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2",
1415 | "type": "tidelift"
1416 | }
1417 | ],
1418 | "time": "2020-09-14T21:52:10+00:00"
1419 | },
1420 | {
1421 | "name": "yiisoft/yii2-composer",
1422 | "version": "2.0.10",
1423 | "source": {
1424 | "type": "git",
1425 | "url": "https://github.com/yiisoft/yii2-composer.git",
1426 | "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510"
1427 | },
1428 | "dist": {
1429 | "type": "zip",
1430 | "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/94bb3f66e779e2774f8776d6e1bdeab402940510",
1431 | "reference": "94bb3f66e779e2774f8776d6e1bdeab402940510",
1432 | "shasum": ""
1433 | },
1434 | "require": {
1435 | "composer-plugin-api": "^1.0 | ^2.0"
1436 | },
1437 | "require-dev": {
1438 | "composer/composer": "^1.0 | ^2.0@dev",
1439 | "phpunit/phpunit": "<7"
1440 | },
1441 | "type": "composer-plugin",
1442 | "extra": {
1443 | "class": "yii\\composer\\Plugin",
1444 | "branch-alias": {
1445 | "dev-master": "2.0.x-dev"
1446 | }
1447 | },
1448 | "autoload": {
1449 | "psr-4": {
1450 | "yii\\composer\\": ""
1451 | }
1452 | },
1453 | "notification-url": "https://packagist.org/downloads/",
1454 | "license": [
1455 | "BSD-3-Clause"
1456 | ],
1457 | "authors": [
1458 | {
1459 | "name": "Qiang Xue",
1460 | "email": "qiang.xue@gmail.com"
1461 | },
1462 | {
1463 | "name": "Carsten Brandt",
1464 | "email": "mail@cebe.cc"
1465 | }
1466 | ],
1467 | "description": "The composer plugin for Yii extension installer",
1468 | "keywords": [
1469 | "composer",
1470 | "extension installer",
1471 | "yii2"
1472 | ],
1473 | "funding": [
1474 | {
1475 | "url": "https://github.com/yiisoft",
1476 | "type": "github"
1477 | },
1478 | {
1479 | "url": "https://opencollective.com/yiisoft",
1480 | "type": "open_collective"
1481 | },
1482 | {
1483 | "url": "https://tidelift.com/funding/github/packagist/yiisoft/yii2-composer",
1484 | "type": "tidelift"
1485 | }
1486 | ],
1487 | "time": "2020-06-24T00:04:01+00:00"
1488 | }
1489 | ],
1490 | "packages-dev": [
1491 | {
1492 | "name": "doctrine/instantiator",
1493 | "version": "1.3.1",
1494 | "source": {
1495 | "type": "git",
1496 | "url": "https://github.com/doctrine/instantiator.git",
1497 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
1498 | },
1499 | "dist": {
1500 | "type": "zip",
1501 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
1502 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
1503 | "shasum": ""
1504 | },
1505 | "require": {
1506 | "php": "^7.1 || ^8.0"
1507 | },
1508 | "require-dev": {
1509 | "doctrine/coding-standard": "^6.0",
1510 | "ext-pdo": "*",
1511 | "ext-phar": "*",
1512 | "phpbench/phpbench": "^0.13",
1513 | "phpstan/phpstan-phpunit": "^0.11",
1514 | "phpstan/phpstan-shim": "^0.11",
1515 | "phpunit/phpunit": "^7.0"
1516 | },
1517 | "type": "library",
1518 | "extra": {
1519 | "branch-alias": {
1520 | "dev-master": "1.2.x-dev"
1521 | }
1522 | },
1523 | "autoload": {
1524 | "psr-4": {
1525 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
1526 | }
1527 | },
1528 | "notification-url": "https://packagist.org/downloads/",
1529 | "license": [
1530 | "MIT"
1531 | ],
1532 | "authors": [
1533 | {
1534 | "name": "Marco Pivetta",
1535 | "email": "ocramius@gmail.com",
1536 | "homepage": "http://ocramius.github.com/"
1537 | }
1538 | ],
1539 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
1540 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
1541 | "keywords": [
1542 | "constructor",
1543 | "instantiate"
1544 | ],
1545 | "funding": [
1546 | {
1547 | "url": "https://www.doctrine-project.org/sponsorship.html",
1548 | "type": "custom"
1549 | },
1550 | {
1551 | "url": "https://www.patreon.com/phpdoctrine",
1552 | "type": "patreon"
1553 | },
1554 | {
1555 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
1556 | "type": "tidelift"
1557 | }
1558 | ],
1559 | "time": "2020-05-29T17:27:14+00:00"
1560 | },
1561 | {
1562 | "name": "kriswallsmith/buzz",
1563 | "version": "1.1.0",
1564 | "source": {
1565 | "type": "git",
1566 | "url": "https://github.com/kriswallsmith/Buzz.git",
1567 | "reference": "40d2cece35d9b608505851395c390892f358e57e"
1568 | },
1569 | "dist": {
1570 | "type": "zip",
1571 | "url": "https://api.github.com/repos/kriswallsmith/Buzz/zipball/40d2cece35d9b608505851395c390892f358e57e",
1572 | "reference": "40d2cece35d9b608505851395c390892f358e57e",
1573 | "shasum": ""
1574 | },
1575 | "require": {
1576 | "php": "^7.1",
1577 | "php-http/httplug": "^1.1 || ^2.0",
1578 | "psr/http-client": "^1.0",
1579 | "psr/http-factory": "^1.0",
1580 | "psr/http-message": "^1.0",
1581 | "symfony/options-resolver": "^3.4 || ^4.0 || ^5.0"
1582 | },
1583 | "provide": {
1584 | "php-http/client-implementation": "1.0",
1585 | "psr/http-client-implementation": "1.0"
1586 | },
1587 | "require-dev": {
1588 | "nyholm/psr7": "^1.0",
1589 | "php-http/client-integration-tests": "^2.0.1",
1590 | "phpunit/phpunit": "7.5.20",
1591 | "psr/log": "^1.0"
1592 | },
1593 | "suggest": {
1594 | "ext-curl": "To use our cUrl clients",
1595 | "nyholm/psr7": "For PSR-7 and PSR-17 implementation"
1596 | },
1597 | "type": "library",
1598 | "autoload": {
1599 | "psr-4": {
1600 | "Buzz\\": "lib"
1601 | }
1602 | },
1603 | "notification-url": "https://packagist.org/downloads/",
1604 | "license": [
1605 | "MIT"
1606 | ],
1607 | "authors": [
1608 | {
1609 | "name": "Kris Wallsmith",
1610 | "email": "kris.wallsmith@gmail.com",
1611 | "homepage": "https://kriswallsmith.net/"
1612 | },
1613 | {
1614 | "name": "Tobias Nyholm",
1615 | "email": "tobias.nyholm@gmail.com",
1616 | "homepage": "https://tnyholm.se/"
1617 | }
1618 | ],
1619 | "description": "Lightweight HTTP client",
1620 | "homepage": "https://github.com/kriswallsmith/Buzz",
1621 | "keywords": [
1622 | "curl",
1623 | "http client"
1624 | ],
1625 | "time": "2020-03-07T13:42:51+00:00"
1626 | },
1627 | {
1628 | "name": "myclabs/deep-copy",
1629 | "version": "1.10.1",
1630 | "source": {
1631 | "type": "git",
1632 | "url": "https://github.com/myclabs/DeepCopy.git",
1633 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
1634 | },
1635 | "dist": {
1636 | "type": "zip",
1637 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
1638 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
1639 | "shasum": ""
1640 | },
1641 | "require": {
1642 | "php": "^7.1 || ^8.0"
1643 | },
1644 | "replace": {
1645 | "myclabs/deep-copy": "self.version"
1646 | },
1647 | "require-dev": {
1648 | "doctrine/collections": "^1.0",
1649 | "doctrine/common": "^2.6",
1650 | "phpunit/phpunit": "^7.1"
1651 | },
1652 | "type": "library",
1653 | "autoload": {
1654 | "psr-4": {
1655 | "DeepCopy\\": "src/DeepCopy/"
1656 | },
1657 | "files": [
1658 | "src/DeepCopy/deep_copy.php"
1659 | ]
1660 | },
1661 | "notification-url": "https://packagist.org/downloads/",
1662 | "license": [
1663 | "MIT"
1664 | ],
1665 | "description": "Create deep copies (clones) of your objects",
1666 | "keywords": [
1667 | "clone",
1668 | "copy",
1669 | "duplicate",
1670 | "object",
1671 | "object graph"
1672 | ],
1673 | "funding": [
1674 | {
1675 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
1676 | "type": "tidelift"
1677 | }
1678 | ],
1679 | "time": "2020-06-29T13:22:24+00:00"
1680 | },
1681 | {
1682 | "name": "nyholm/psr7",
1683 | "version": "1.3.1",
1684 | "source": {
1685 | "type": "git",
1686 | "url": "https://github.com/Nyholm/psr7.git",
1687 | "reference": "21b71a31eab5c0c2caf967b9c0fd97020254ed75"
1688 | },
1689 | "dist": {
1690 | "type": "zip",
1691 | "url": "https://api.github.com/repos/Nyholm/psr7/zipball/21b71a31eab5c0c2caf967b9c0fd97020254ed75",
1692 | "reference": "21b71a31eab5c0c2caf967b9c0fd97020254ed75",
1693 | "shasum": ""
1694 | },
1695 | "require": {
1696 | "php": ">=7.1",
1697 | "php-http/message-factory": "^1.0",
1698 | "psr/http-factory": "^1.0",
1699 | "psr/http-message": "^1.0"
1700 | },
1701 | "provide": {
1702 | "psr/http-factory-implementation": "1.0",
1703 | "psr/http-message-implementation": "1.0"
1704 | },
1705 | "require-dev": {
1706 | "http-interop/http-factory-tests": "dev-master",
1707 | "php-http/psr7-integration-tests": "^1.0",
1708 | "phpunit/phpunit": "^7.5",
1709 | "symfony/error-handler": "^4.4"
1710 | },
1711 | "type": "library",
1712 | "extra": {
1713 | "branch-alias": {
1714 | "dev-master": "1.0-dev"
1715 | }
1716 | },
1717 | "autoload": {
1718 | "psr-4": {
1719 | "Nyholm\\Psr7\\": "src/"
1720 | }
1721 | },
1722 | "notification-url": "https://packagist.org/downloads/",
1723 | "license": [
1724 | "MIT"
1725 | ],
1726 | "authors": [
1727 | {
1728 | "name": "Tobias Nyholm",
1729 | "email": "tobias.nyholm@gmail.com"
1730 | },
1731 | {
1732 | "name": "Martijn van der Ven",
1733 | "email": "martijn@vanderven.se"
1734 | }
1735 | ],
1736 | "description": "A fast PHP7 implementation of PSR-7",
1737 | "homepage": "http://tnyholm.se",
1738 | "keywords": [
1739 | "psr-17",
1740 | "psr-7"
1741 | ],
1742 | "funding": [
1743 | {
1744 | "url": "https://github.com/Zegnat",
1745 | "type": "github"
1746 | },
1747 | {
1748 | "url": "https://github.com/nyholm",
1749 | "type": "github"
1750 | }
1751 | ],
1752 | "time": "2020-06-13T15:59:10+00:00"
1753 | },
1754 | {
1755 | "name": "phar-io/manifest",
1756 | "version": "1.0.3",
1757 | "source": {
1758 | "type": "git",
1759 | "url": "https://github.com/phar-io/manifest.git",
1760 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
1761 | },
1762 | "dist": {
1763 | "type": "zip",
1764 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
1765 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
1766 | "shasum": ""
1767 | },
1768 | "require": {
1769 | "ext-dom": "*",
1770 | "ext-phar": "*",
1771 | "phar-io/version": "^2.0",
1772 | "php": "^5.6 || ^7.0"
1773 | },
1774 | "type": "library",
1775 | "extra": {
1776 | "branch-alias": {
1777 | "dev-master": "1.0.x-dev"
1778 | }
1779 | },
1780 | "autoload": {
1781 | "classmap": [
1782 | "src/"
1783 | ]
1784 | },
1785 | "notification-url": "https://packagist.org/downloads/",
1786 | "license": [
1787 | "BSD-3-Clause"
1788 | ],
1789 | "authors": [
1790 | {
1791 | "name": "Arne Blankerts",
1792 | "email": "arne@blankerts.de",
1793 | "role": "Developer"
1794 | },
1795 | {
1796 | "name": "Sebastian Heuer",
1797 | "email": "sebastian@phpeople.de",
1798 | "role": "Developer"
1799 | },
1800 | {
1801 | "name": "Sebastian Bergmann",
1802 | "email": "sebastian@phpunit.de",
1803 | "role": "Developer"
1804 | }
1805 | ],
1806 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
1807 | "time": "2018-07-08T19:23:20+00:00"
1808 | },
1809 | {
1810 | "name": "phar-io/version",
1811 | "version": "2.0.1",
1812 | "source": {
1813 | "type": "git",
1814 | "url": "https://github.com/phar-io/version.git",
1815 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
1816 | },
1817 | "dist": {
1818 | "type": "zip",
1819 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
1820 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
1821 | "shasum": ""
1822 | },
1823 | "require": {
1824 | "php": "^5.6 || ^7.0"
1825 | },
1826 | "type": "library",
1827 | "autoload": {
1828 | "classmap": [
1829 | "src/"
1830 | ]
1831 | },
1832 | "notification-url": "https://packagist.org/downloads/",
1833 | "license": [
1834 | "BSD-3-Clause"
1835 | ],
1836 | "authors": [
1837 | {
1838 | "name": "Arne Blankerts",
1839 | "email": "arne@blankerts.de",
1840 | "role": "Developer"
1841 | },
1842 | {
1843 | "name": "Sebastian Heuer",
1844 | "email": "sebastian@phpeople.de",
1845 | "role": "Developer"
1846 | },
1847 | {
1848 | "name": "Sebastian Bergmann",
1849 | "email": "sebastian@phpunit.de",
1850 | "role": "Developer"
1851 | }
1852 | ],
1853 | "description": "Library for handling version information and constraints",
1854 | "time": "2018-07-08T19:19:57+00:00"
1855 | },
1856 | {
1857 | "name": "phpdocumentor/reflection-common",
1858 | "version": "2.2.0",
1859 | "source": {
1860 | "type": "git",
1861 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
1862 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
1863 | },
1864 | "dist": {
1865 | "type": "zip",
1866 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
1867 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
1868 | "shasum": ""
1869 | },
1870 | "require": {
1871 | "php": "^7.2 || ^8.0"
1872 | },
1873 | "type": "library",
1874 | "extra": {
1875 | "branch-alias": {
1876 | "dev-2.x": "2.x-dev"
1877 | }
1878 | },
1879 | "autoload": {
1880 | "psr-4": {
1881 | "phpDocumentor\\Reflection\\": "src/"
1882 | }
1883 | },
1884 | "notification-url": "https://packagist.org/downloads/",
1885 | "license": [
1886 | "MIT"
1887 | ],
1888 | "authors": [
1889 | {
1890 | "name": "Jaap van Otterdijk",
1891 | "email": "opensource@ijaap.nl"
1892 | }
1893 | ],
1894 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
1895 | "homepage": "http://www.phpdoc.org",
1896 | "keywords": [
1897 | "FQSEN",
1898 | "phpDocumentor",
1899 | "phpdoc",
1900 | "reflection",
1901 | "static analysis"
1902 | ],
1903 | "time": "2020-06-27T09:03:43+00:00"
1904 | },
1905 | {
1906 | "name": "phpdocumentor/reflection-docblock",
1907 | "version": "5.2.2",
1908 | "source": {
1909 | "type": "git",
1910 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
1911 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
1912 | },
1913 | "dist": {
1914 | "type": "zip",
1915 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
1916 | "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
1917 | "shasum": ""
1918 | },
1919 | "require": {
1920 | "ext-filter": "*",
1921 | "php": "^7.2 || ^8.0",
1922 | "phpdocumentor/reflection-common": "^2.2",
1923 | "phpdocumentor/type-resolver": "^1.3",
1924 | "webmozart/assert": "^1.9.1"
1925 | },
1926 | "require-dev": {
1927 | "mockery/mockery": "~1.3.2"
1928 | },
1929 | "type": "library",
1930 | "extra": {
1931 | "branch-alias": {
1932 | "dev-master": "5.x-dev"
1933 | }
1934 | },
1935 | "autoload": {
1936 | "psr-4": {
1937 | "phpDocumentor\\Reflection\\": "src"
1938 | }
1939 | },
1940 | "notification-url": "https://packagist.org/downloads/",
1941 | "license": [
1942 | "MIT"
1943 | ],
1944 | "authors": [
1945 | {
1946 | "name": "Mike van Riel",
1947 | "email": "me@mikevanriel.com"
1948 | },
1949 | {
1950 | "name": "Jaap van Otterdijk",
1951 | "email": "account@ijaap.nl"
1952 | }
1953 | ],
1954 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
1955 | "time": "2020-09-03T19:13:55+00:00"
1956 | },
1957 | {
1958 | "name": "phpdocumentor/type-resolver",
1959 | "version": "1.4.0",
1960 | "source": {
1961 | "type": "git",
1962 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
1963 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
1964 | },
1965 | "dist": {
1966 | "type": "zip",
1967 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
1968 | "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
1969 | "shasum": ""
1970 | },
1971 | "require": {
1972 | "php": "^7.2 || ^8.0",
1973 | "phpdocumentor/reflection-common": "^2.0"
1974 | },
1975 | "require-dev": {
1976 | "ext-tokenizer": "*"
1977 | },
1978 | "type": "library",
1979 | "extra": {
1980 | "branch-alias": {
1981 | "dev-1.x": "1.x-dev"
1982 | }
1983 | },
1984 | "autoload": {
1985 | "psr-4": {
1986 | "phpDocumentor\\Reflection\\": "src"
1987 | }
1988 | },
1989 | "notification-url": "https://packagist.org/downloads/",
1990 | "license": [
1991 | "MIT"
1992 | ],
1993 | "authors": [
1994 | {
1995 | "name": "Mike van Riel",
1996 | "email": "me@mikevanriel.com"
1997 | }
1998 | ],
1999 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
2000 | "time": "2020-09-17T18:55:26+00:00"
2001 | },
2002 | {
2003 | "name": "phpoption/phpoption",
2004 | "version": "1.7.5",
2005 | "source": {
2006 | "type": "git",
2007 | "url": "https://github.com/schmittjoh/php-option.git",
2008 | "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525"
2009 | },
2010 | "dist": {
2011 | "type": "zip",
2012 | "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525",
2013 | "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525",
2014 | "shasum": ""
2015 | },
2016 | "require": {
2017 | "php": "^5.5.9 || ^7.0 || ^8.0"
2018 | },
2019 | "require-dev": {
2020 | "bamarni/composer-bin-plugin": "^1.4.1",
2021 | "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0"
2022 | },
2023 | "type": "library",
2024 | "extra": {
2025 | "branch-alias": {
2026 | "dev-master": "1.7-dev"
2027 | }
2028 | },
2029 | "autoload": {
2030 | "psr-4": {
2031 | "PhpOption\\": "src/PhpOption/"
2032 | }
2033 | },
2034 | "notification-url": "https://packagist.org/downloads/",
2035 | "license": [
2036 | "Apache-2.0"
2037 | ],
2038 | "authors": [
2039 | {
2040 | "name": "Johannes M. Schmitt",
2041 | "email": "schmittjoh@gmail.com"
2042 | },
2043 | {
2044 | "name": "Graham Campbell",
2045 | "email": "graham@alt-three.com"
2046 | }
2047 | ],
2048 | "description": "Option Type for PHP",
2049 | "keywords": [
2050 | "language",
2051 | "option",
2052 | "php",
2053 | "type"
2054 | ],
2055 | "funding": [
2056 | {
2057 | "url": "https://github.com/GrahamCampbell",
2058 | "type": "github"
2059 | },
2060 | {
2061 | "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
2062 | "type": "tidelift"
2063 | }
2064 | ],
2065 | "time": "2020-07-20T17:29:33+00:00"
2066 | },
2067 | {
2068 | "name": "phpspec/prophecy",
2069 | "version": "1.12.1",
2070 | "source": {
2071 | "type": "git",
2072 | "url": "https://github.com/phpspec/prophecy.git",
2073 | "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d"
2074 | },
2075 | "dist": {
2076 | "type": "zip",
2077 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/8ce87516be71aae9b956f81906aaf0338e0d8a2d",
2078 | "reference": "8ce87516be71aae9b956f81906aaf0338e0d8a2d",
2079 | "shasum": ""
2080 | },
2081 | "require": {
2082 | "doctrine/instantiator": "^1.2",
2083 | "php": "^7.2 || ~8.0, <8.1",
2084 | "phpdocumentor/reflection-docblock": "^5.2",
2085 | "sebastian/comparator": "^3.0 || ^4.0",
2086 | "sebastian/recursion-context": "^3.0 || ^4.0"
2087 | },
2088 | "require-dev": {
2089 | "phpspec/phpspec": "^6.0",
2090 | "phpunit/phpunit": "^8.0 || ^9.0 <9.3"
2091 | },
2092 | "type": "library",
2093 | "extra": {
2094 | "branch-alias": {
2095 | "dev-master": "1.11.x-dev"
2096 | }
2097 | },
2098 | "autoload": {
2099 | "psr-4": {
2100 | "Prophecy\\": "src/Prophecy"
2101 | }
2102 | },
2103 | "notification-url": "https://packagist.org/downloads/",
2104 | "license": [
2105 | "MIT"
2106 | ],
2107 | "authors": [
2108 | {
2109 | "name": "Konstantin Kudryashov",
2110 | "email": "ever.zet@gmail.com",
2111 | "homepage": "http://everzet.com"
2112 | },
2113 | {
2114 | "name": "Marcello Duarte",
2115 | "email": "marcello.duarte@gmail.com"
2116 | }
2117 | ],
2118 | "description": "Highly opinionated mocking framework for PHP 5.3+",
2119 | "homepage": "https://github.com/phpspec/prophecy",
2120 | "keywords": [
2121 | "Double",
2122 | "Dummy",
2123 | "fake",
2124 | "mock",
2125 | "spy",
2126 | "stub"
2127 | ],
2128 | "time": "2020-09-29T09:10:42+00:00"
2129 | },
2130 | {
2131 | "name": "phpunit/php-code-coverage",
2132 | "version": "7.0.10",
2133 | "source": {
2134 | "type": "git",
2135 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
2136 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf"
2137 | },
2138 | "dist": {
2139 | "type": "zip",
2140 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf",
2141 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf",
2142 | "shasum": ""
2143 | },
2144 | "require": {
2145 | "ext-dom": "*",
2146 | "ext-xmlwriter": "*",
2147 | "php": "^7.2",
2148 | "phpunit/php-file-iterator": "^2.0.2",
2149 | "phpunit/php-text-template": "^1.2.1",
2150 | "phpunit/php-token-stream": "^3.1.1",
2151 | "sebastian/code-unit-reverse-lookup": "^1.0.1",
2152 | "sebastian/environment": "^4.2.2",
2153 | "sebastian/version": "^2.0.1",
2154 | "theseer/tokenizer": "^1.1.3"
2155 | },
2156 | "require-dev": {
2157 | "phpunit/phpunit": "^8.2.2"
2158 | },
2159 | "suggest": {
2160 | "ext-xdebug": "^2.7.2"
2161 | },
2162 | "type": "library",
2163 | "extra": {
2164 | "branch-alias": {
2165 | "dev-master": "7.0-dev"
2166 | }
2167 | },
2168 | "autoload": {
2169 | "classmap": [
2170 | "src/"
2171 | ]
2172 | },
2173 | "notification-url": "https://packagist.org/downloads/",
2174 | "license": [
2175 | "BSD-3-Clause"
2176 | ],
2177 | "authors": [
2178 | {
2179 | "name": "Sebastian Bergmann",
2180 | "email": "sebastian@phpunit.de",
2181 | "role": "lead"
2182 | }
2183 | ],
2184 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
2185 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
2186 | "keywords": [
2187 | "coverage",
2188 | "testing",
2189 | "xunit"
2190 | ],
2191 | "time": "2019-11-20T13:55:58+00:00"
2192 | },
2193 | {
2194 | "name": "phpunit/php-file-iterator",
2195 | "version": "2.0.2",
2196 | "source": {
2197 | "type": "git",
2198 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
2199 | "reference": "050bedf145a257b1ff02746c31894800e5122946"
2200 | },
2201 | "dist": {
2202 | "type": "zip",
2203 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
2204 | "reference": "050bedf145a257b1ff02746c31894800e5122946",
2205 | "shasum": ""
2206 | },
2207 | "require": {
2208 | "php": "^7.1"
2209 | },
2210 | "require-dev": {
2211 | "phpunit/phpunit": "^7.1"
2212 | },
2213 | "type": "library",
2214 | "extra": {
2215 | "branch-alias": {
2216 | "dev-master": "2.0.x-dev"
2217 | }
2218 | },
2219 | "autoload": {
2220 | "classmap": [
2221 | "src/"
2222 | ]
2223 | },
2224 | "notification-url": "https://packagist.org/downloads/",
2225 | "license": [
2226 | "BSD-3-Clause"
2227 | ],
2228 | "authors": [
2229 | {
2230 | "name": "Sebastian Bergmann",
2231 | "email": "sebastian@phpunit.de",
2232 | "role": "lead"
2233 | }
2234 | ],
2235 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
2236 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
2237 | "keywords": [
2238 | "filesystem",
2239 | "iterator"
2240 | ],
2241 | "time": "2018-09-13T20:33:42+00:00"
2242 | },
2243 | {
2244 | "name": "phpunit/php-text-template",
2245 | "version": "1.2.1",
2246 | "source": {
2247 | "type": "git",
2248 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
2249 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
2250 | },
2251 | "dist": {
2252 | "type": "zip",
2253 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2254 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
2255 | "shasum": ""
2256 | },
2257 | "require": {
2258 | "php": ">=5.3.3"
2259 | },
2260 | "type": "library",
2261 | "autoload": {
2262 | "classmap": [
2263 | "src/"
2264 | ]
2265 | },
2266 | "notification-url": "https://packagist.org/downloads/",
2267 | "license": [
2268 | "BSD-3-Clause"
2269 | ],
2270 | "authors": [
2271 | {
2272 | "name": "Sebastian Bergmann",
2273 | "email": "sebastian@phpunit.de",
2274 | "role": "lead"
2275 | }
2276 | ],
2277 | "description": "Simple template engine.",
2278 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
2279 | "keywords": [
2280 | "template"
2281 | ],
2282 | "time": "2015-06-21T13:50:34+00:00"
2283 | },
2284 | {
2285 | "name": "phpunit/php-timer",
2286 | "version": "2.1.2",
2287 | "source": {
2288 | "type": "git",
2289 | "url": "https://github.com/sebastianbergmann/php-timer.git",
2290 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
2291 | },
2292 | "dist": {
2293 | "type": "zip",
2294 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
2295 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
2296 | "shasum": ""
2297 | },
2298 | "require": {
2299 | "php": "^7.1"
2300 | },
2301 | "require-dev": {
2302 | "phpunit/phpunit": "^7.0"
2303 | },
2304 | "type": "library",
2305 | "extra": {
2306 | "branch-alias": {
2307 | "dev-master": "2.1-dev"
2308 | }
2309 | },
2310 | "autoload": {
2311 | "classmap": [
2312 | "src/"
2313 | ]
2314 | },
2315 | "notification-url": "https://packagist.org/downloads/",
2316 | "license": [
2317 | "BSD-3-Clause"
2318 | ],
2319 | "authors": [
2320 | {
2321 | "name": "Sebastian Bergmann",
2322 | "email": "sebastian@phpunit.de",
2323 | "role": "lead"
2324 | }
2325 | ],
2326 | "description": "Utility class for timing",
2327 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
2328 | "keywords": [
2329 | "timer"
2330 | ],
2331 | "time": "2019-06-07T04:22:29+00:00"
2332 | },
2333 | {
2334 | "name": "phpunit/php-token-stream",
2335 | "version": "3.1.1",
2336 | "source": {
2337 | "type": "git",
2338 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
2339 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
2340 | },
2341 | "dist": {
2342 | "type": "zip",
2343 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
2344 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
2345 | "shasum": ""
2346 | },
2347 | "require": {
2348 | "ext-tokenizer": "*",
2349 | "php": "^7.1"
2350 | },
2351 | "require-dev": {
2352 | "phpunit/phpunit": "^7.0"
2353 | },
2354 | "type": "library",
2355 | "extra": {
2356 | "branch-alias": {
2357 | "dev-master": "3.1-dev"
2358 | }
2359 | },
2360 | "autoload": {
2361 | "classmap": [
2362 | "src/"
2363 | ]
2364 | },
2365 | "notification-url": "https://packagist.org/downloads/",
2366 | "license": [
2367 | "BSD-3-Clause"
2368 | ],
2369 | "authors": [
2370 | {
2371 | "name": "Sebastian Bergmann",
2372 | "email": "sebastian@phpunit.de"
2373 | }
2374 | ],
2375 | "description": "Wrapper around PHP's tokenizer extension.",
2376 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
2377 | "keywords": [
2378 | "tokenizer"
2379 | ],
2380 | "abandoned": true,
2381 | "time": "2019-09-17T06:23:10+00:00"
2382 | },
2383 | {
2384 | "name": "phpunit/phpunit",
2385 | "version": "8.5.8",
2386 | "source": {
2387 | "type": "git",
2388 | "url": "https://github.com/sebastianbergmann/phpunit.git",
2389 | "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997"
2390 | },
2391 | "dist": {
2392 | "type": "zip",
2393 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997",
2394 | "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997",
2395 | "shasum": ""
2396 | },
2397 | "require": {
2398 | "doctrine/instantiator": "^1.2.0",
2399 | "ext-dom": "*",
2400 | "ext-json": "*",
2401 | "ext-libxml": "*",
2402 | "ext-mbstring": "*",
2403 | "ext-xml": "*",
2404 | "ext-xmlwriter": "*",
2405 | "myclabs/deep-copy": "^1.9.1",
2406 | "phar-io/manifest": "^1.0.3",
2407 | "phar-io/version": "^2.0.1",
2408 | "php": "^7.2",
2409 | "phpspec/prophecy": "^1.8.1",
2410 | "phpunit/php-code-coverage": "^7.0.7",
2411 | "phpunit/php-file-iterator": "^2.0.2",
2412 | "phpunit/php-text-template": "^1.2.1",
2413 | "phpunit/php-timer": "^2.1.2",
2414 | "sebastian/comparator": "^3.0.2",
2415 | "sebastian/diff": "^3.0.2",
2416 | "sebastian/environment": "^4.2.2",
2417 | "sebastian/exporter": "^3.1.1",
2418 | "sebastian/global-state": "^3.0.0",
2419 | "sebastian/object-enumerator": "^3.0.3",
2420 | "sebastian/resource-operations": "^2.0.1",
2421 | "sebastian/type": "^1.1.3",
2422 | "sebastian/version": "^2.0.1"
2423 | },
2424 | "require-dev": {
2425 | "ext-pdo": "*"
2426 | },
2427 | "suggest": {
2428 | "ext-soap": "*",
2429 | "ext-xdebug": "*",
2430 | "phpunit/php-invoker": "^2.0.0"
2431 | },
2432 | "bin": [
2433 | "phpunit"
2434 | ],
2435 | "type": "library",
2436 | "extra": {
2437 | "branch-alias": {
2438 | "dev-master": "8.5-dev"
2439 | }
2440 | },
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": "Sebastian Bergmann",
2453 | "email": "sebastian@phpunit.de",
2454 | "role": "lead"
2455 | }
2456 | ],
2457 | "description": "The PHP Unit Testing framework.",
2458 | "homepage": "https://phpunit.de/",
2459 | "keywords": [
2460 | "phpunit",
2461 | "testing",
2462 | "xunit"
2463 | ],
2464 | "funding": [
2465 | {
2466 | "url": "https://phpunit.de/donate.html",
2467 | "type": "custom"
2468 | },
2469 | {
2470 | "url": "https://github.com/sebastianbergmann",
2471 | "type": "github"
2472 | }
2473 | ],
2474 | "time": "2020-06-22T07:06:58+00:00"
2475 | },
2476 | {
2477 | "name": "sebastian/code-unit-reverse-lookup",
2478 | "version": "1.0.1",
2479 | "source": {
2480 | "type": "git",
2481 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
2482 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
2483 | },
2484 | "dist": {
2485 | "type": "zip",
2486 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2487 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
2488 | "shasum": ""
2489 | },
2490 | "require": {
2491 | "php": "^5.6 || ^7.0"
2492 | },
2493 | "require-dev": {
2494 | "phpunit/phpunit": "^5.7 || ^6.0"
2495 | },
2496 | "type": "library",
2497 | "extra": {
2498 | "branch-alias": {
2499 | "dev-master": "1.0.x-dev"
2500 | }
2501 | },
2502 | "autoload": {
2503 | "classmap": [
2504 | "src/"
2505 | ]
2506 | },
2507 | "notification-url": "https://packagist.org/downloads/",
2508 | "license": [
2509 | "BSD-3-Clause"
2510 | ],
2511 | "authors": [
2512 | {
2513 | "name": "Sebastian Bergmann",
2514 | "email": "sebastian@phpunit.de"
2515 | }
2516 | ],
2517 | "description": "Looks up which function or method a line of code belongs to",
2518 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
2519 | "time": "2017-03-04T06:30:41+00:00"
2520 | },
2521 | {
2522 | "name": "sebastian/comparator",
2523 | "version": "3.0.2",
2524 | "source": {
2525 | "type": "git",
2526 | "url": "https://github.com/sebastianbergmann/comparator.git",
2527 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
2528 | },
2529 | "dist": {
2530 | "type": "zip",
2531 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
2532 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
2533 | "shasum": ""
2534 | },
2535 | "require": {
2536 | "php": "^7.1",
2537 | "sebastian/diff": "^3.0",
2538 | "sebastian/exporter": "^3.1"
2539 | },
2540 | "require-dev": {
2541 | "phpunit/phpunit": "^7.1"
2542 | },
2543 | "type": "library",
2544 | "extra": {
2545 | "branch-alias": {
2546 | "dev-master": "3.0-dev"
2547 | }
2548 | },
2549 | "autoload": {
2550 | "classmap": [
2551 | "src/"
2552 | ]
2553 | },
2554 | "notification-url": "https://packagist.org/downloads/",
2555 | "license": [
2556 | "BSD-3-Clause"
2557 | ],
2558 | "authors": [
2559 | {
2560 | "name": "Jeff Welch",
2561 | "email": "whatthejeff@gmail.com"
2562 | },
2563 | {
2564 | "name": "Volker Dusch",
2565 | "email": "github@wallbash.com"
2566 | },
2567 | {
2568 | "name": "Bernhard Schussek",
2569 | "email": "bschussek@2bepublished.at"
2570 | },
2571 | {
2572 | "name": "Sebastian Bergmann",
2573 | "email": "sebastian@phpunit.de"
2574 | }
2575 | ],
2576 | "description": "Provides the functionality to compare PHP values for equality",
2577 | "homepage": "https://github.com/sebastianbergmann/comparator",
2578 | "keywords": [
2579 | "comparator",
2580 | "compare",
2581 | "equality"
2582 | ],
2583 | "time": "2018-07-12T15:12:46+00:00"
2584 | },
2585 | {
2586 | "name": "sebastian/diff",
2587 | "version": "3.0.2",
2588 | "source": {
2589 | "type": "git",
2590 | "url": "https://github.com/sebastianbergmann/diff.git",
2591 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
2592 | },
2593 | "dist": {
2594 | "type": "zip",
2595 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
2596 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
2597 | "shasum": ""
2598 | },
2599 | "require": {
2600 | "php": "^7.1"
2601 | },
2602 | "require-dev": {
2603 | "phpunit/phpunit": "^7.5 || ^8.0",
2604 | "symfony/process": "^2 || ^3.3 || ^4"
2605 | },
2606 | "type": "library",
2607 | "extra": {
2608 | "branch-alias": {
2609 | "dev-master": "3.0-dev"
2610 | }
2611 | },
2612 | "autoload": {
2613 | "classmap": [
2614 | "src/"
2615 | ]
2616 | },
2617 | "notification-url": "https://packagist.org/downloads/",
2618 | "license": [
2619 | "BSD-3-Clause"
2620 | ],
2621 | "authors": [
2622 | {
2623 | "name": "Kore Nordmann",
2624 | "email": "mail@kore-nordmann.de"
2625 | },
2626 | {
2627 | "name": "Sebastian Bergmann",
2628 | "email": "sebastian@phpunit.de"
2629 | }
2630 | ],
2631 | "description": "Diff implementation",
2632 | "homepage": "https://github.com/sebastianbergmann/diff",
2633 | "keywords": [
2634 | "diff",
2635 | "udiff",
2636 | "unidiff",
2637 | "unified diff"
2638 | ],
2639 | "time": "2019-02-04T06:01:07+00:00"
2640 | },
2641 | {
2642 | "name": "sebastian/environment",
2643 | "version": "4.2.3",
2644 | "source": {
2645 | "type": "git",
2646 | "url": "https://github.com/sebastianbergmann/environment.git",
2647 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368"
2648 | },
2649 | "dist": {
2650 | "type": "zip",
2651 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
2652 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
2653 | "shasum": ""
2654 | },
2655 | "require": {
2656 | "php": "^7.1"
2657 | },
2658 | "require-dev": {
2659 | "phpunit/phpunit": "^7.5"
2660 | },
2661 | "suggest": {
2662 | "ext-posix": "*"
2663 | },
2664 | "type": "library",
2665 | "extra": {
2666 | "branch-alias": {
2667 | "dev-master": "4.2-dev"
2668 | }
2669 | },
2670 | "autoload": {
2671 | "classmap": [
2672 | "src/"
2673 | ]
2674 | },
2675 | "notification-url": "https://packagist.org/downloads/",
2676 | "license": [
2677 | "BSD-3-Clause"
2678 | ],
2679 | "authors": [
2680 | {
2681 | "name": "Sebastian Bergmann",
2682 | "email": "sebastian@phpunit.de"
2683 | }
2684 | ],
2685 | "description": "Provides functionality to handle HHVM/PHP environments",
2686 | "homepage": "http://www.github.com/sebastianbergmann/environment",
2687 | "keywords": [
2688 | "Xdebug",
2689 | "environment",
2690 | "hhvm"
2691 | ],
2692 | "time": "2019-11-20T08:46:58+00:00"
2693 | },
2694 | {
2695 | "name": "sebastian/exporter",
2696 | "version": "3.1.2",
2697 | "source": {
2698 | "type": "git",
2699 | "url": "https://github.com/sebastianbergmann/exporter.git",
2700 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
2701 | },
2702 | "dist": {
2703 | "type": "zip",
2704 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
2705 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
2706 | "shasum": ""
2707 | },
2708 | "require": {
2709 | "php": "^7.0",
2710 | "sebastian/recursion-context": "^3.0"
2711 | },
2712 | "require-dev": {
2713 | "ext-mbstring": "*",
2714 | "phpunit/phpunit": "^6.0"
2715 | },
2716 | "type": "library",
2717 | "extra": {
2718 | "branch-alias": {
2719 | "dev-master": "3.1.x-dev"
2720 | }
2721 | },
2722 | "autoload": {
2723 | "classmap": [
2724 | "src/"
2725 | ]
2726 | },
2727 | "notification-url": "https://packagist.org/downloads/",
2728 | "license": [
2729 | "BSD-3-Clause"
2730 | ],
2731 | "authors": [
2732 | {
2733 | "name": "Sebastian Bergmann",
2734 | "email": "sebastian@phpunit.de"
2735 | },
2736 | {
2737 | "name": "Jeff Welch",
2738 | "email": "whatthejeff@gmail.com"
2739 | },
2740 | {
2741 | "name": "Volker Dusch",
2742 | "email": "github@wallbash.com"
2743 | },
2744 | {
2745 | "name": "Adam Harvey",
2746 | "email": "aharvey@php.net"
2747 | },
2748 | {
2749 | "name": "Bernhard Schussek",
2750 | "email": "bschussek@gmail.com"
2751 | }
2752 | ],
2753 | "description": "Provides the functionality to export PHP variables for visualization",
2754 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
2755 | "keywords": [
2756 | "export",
2757 | "exporter"
2758 | ],
2759 | "time": "2019-09-14T09:02:43+00:00"
2760 | },
2761 | {
2762 | "name": "sebastian/global-state",
2763 | "version": "3.0.0",
2764 | "source": {
2765 | "type": "git",
2766 | "url": "https://github.com/sebastianbergmann/global-state.git",
2767 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
2768 | },
2769 | "dist": {
2770 | "type": "zip",
2771 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
2772 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
2773 | "shasum": ""
2774 | },
2775 | "require": {
2776 | "php": "^7.2",
2777 | "sebastian/object-reflector": "^1.1.1",
2778 | "sebastian/recursion-context": "^3.0"
2779 | },
2780 | "require-dev": {
2781 | "ext-dom": "*",
2782 | "phpunit/phpunit": "^8.0"
2783 | },
2784 | "suggest": {
2785 | "ext-uopz": "*"
2786 | },
2787 | "type": "library",
2788 | "extra": {
2789 | "branch-alias": {
2790 | "dev-master": "3.0-dev"
2791 | }
2792 | },
2793 | "autoload": {
2794 | "classmap": [
2795 | "src/"
2796 | ]
2797 | },
2798 | "notification-url": "https://packagist.org/downloads/",
2799 | "license": [
2800 | "BSD-3-Clause"
2801 | ],
2802 | "authors": [
2803 | {
2804 | "name": "Sebastian Bergmann",
2805 | "email": "sebastian@phpunit.de"
2806 | }
2807 | ],
2808 | "description": "Snapshotting of global state",
2809 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
2810 | "keywords": [
2811 | "global state"
2812 | ],
2813 | "time": "2019-02-01T05:30:01+00:00"
2814 | },
2815 | {
2816 | "name": "sebastian/object-enumerator",
2817 | "version": "3.0.3",
2818 | "source": {
2819 | "type": "git",
2820 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
2821 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
2822 | },
2823 | "dist": {
2824 | "type": "zip",
2825 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2826 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
2827 | "shasum": ""
2828 | },
2829 | "require": {
2830 | "php": "^7.0",
2831 | "sebastian/object-reflector": "^1.1.1",
2832 | "sebastian/recursion-context": "^3.0"
2833 | },
2834 | "require-dev": {
2835 | "phpunit/phpunit": "^6.0"
2836 | },
2837 | "type": "library",
2838 | "extra": {
2839 | "branch-alias": {
2840 | "dev-master": "3.0.x-dev"
2841 | }
2842 | },
2843 | "autoload": {
2844 | "classmap": [
2845 | "src/"
2846 | ]
2847 | },
2848 | "notification-url": "https://packagist.org/downloads/",
2849 | "license": [
2850 | "BSD-3-Clause"
2851 | ],
2852 | "authors": [
2853 | {
2854 | "name": "Sebastian Bergmann",
2855 | "email": "sebastian@phpunit.de"
2856 | }
2857 | ],
2858 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
2859 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
2860 | "time": "2017-08-03T12:35:26+00:00"
2861 | },
2862 | {
2863 | "name": "sebastian/object-reflector",
2864 | "version": "1.1.1",
2865 | "source": {
2866 | "type": "git",
2867 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
2868 | "reference": "773f97c67f28de00d397be301821b06708fca0be"
2869 | },
2870 | "dist": {
2871 | "type": "zip",
2872 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
2873 | "reference": "773f97c67f28de00d397be301821b06708fca0be",
2874 | "shasum": ""
2875 | },
2876 | "require": {
2877 | "php": "^7.0"
2878 | },
2879 | "require-dev": {
2880 | "phpunit/phpunit": "^6.0"
2881 | },
2882 | "type": "library",
2883 | "extra": {
2884 | "branch-alias": {
2885 | "dev-master": "1.1-dev"
2886 | }
2887 | },
2888 | "autoload": {
2889 | "classmap": [
2890 | "src/"
2891 | ]
2892 | },
2893 | "notification-url": "https://packagist.org/downloads/",
2894 | "license": [
2895 | "BSD-3-Clause"
2896 | ],
2897 | "authors": [
2898 | {
2899 | "name": "Sebastian Bergmann",
2900 | "email": "sebastian@phpunit.de"
2901 | }
2902 | ],
2903 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
2904 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
2905 | "time": "2017-03-29T09:07:27+00:00"
2906 | },
2907 | {
2908 | "name": "sebastian/recursion-context",
2909 | "version": "3.0.0",
2910 | "source": {
2911 | "type": "git",
2912 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
2913 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
2914 | },
2915 | "dist": {
2916 | "type": "zip",
2917 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
2918 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
2919 | "shasum": ""
2920 | },
2921 | "require": {
2922 | "php": "^7.0"
2923 | },
2924 | "require-dev": {
2925 | "phpunit/phpunit": "^6.0"
2926 | },
2927 | "type": "library",
2928 | "extra": {
2929 | "branch-alias": {
2930 | "dev-master": "3.0.x-dev"
2931 | }
2932 | },
2933 | "autoload": {
2934 | "classmap": [
2935 | "src/"
2936 | ]
2937 | },
2938 | "notification-url": "https://packagist.org/downloads/",
2939 | "license": [
2940 | "BSD-3-Clause"
2941 | ],
2942 | "authors": [
2943 | {
2944 | "name": "Jeff Welch",
2945 | "email": "whatthejeff@gmail.com"
2946 | },
2947 | {
2948 | "name": "Sebastian Bergmann",
2949 | "email": "sebastian@phpunit.de"
2950 | },
2951 | {
2952 | "name": "Adam Harvey",
2953 | "email": "aharvey@php.net"
2954 | }
2955 | ],
2956 | "description": "Provides functionality to recursively process PHP variables",
2957 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
2958 | "time": "2017-03-03T06:23:57+00:00"
2959 | },
2960 | {
2961 | "name": "sebastian/resource-operations",
2962 | "version": "2.0.1",
2963 | "source": {
2964 | "type": "git",
2965 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
2966 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
2967 | },
2968 | "dist": {
2969 | "type": "zip",
2970 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
2971 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
2972 | "shasum": ""
2973 | },
2974 | "require": {
2975 | "php": "^7.1"
2976 | },
2977 | "type": "library",
2978 | "extra": {
2979 | "branch-alias": {
2980 | "dev-master": "2.0-dev"
2981 | }
2982 | },
2983 | "autoload": {
2984 | "classmap": [
2985 | "src/"
2986 | ]
2987 | },
2988 | "notification-url": "https://packagist.org/downloads/",
2989 | "license": [
2990 | "BSD-3-Clause"
2991 | ],
2992 | "authors": [
2993 | {
2994 | "name": "Sebastian Bergmann",
2995 | "email": "sebastian@phpunit.de"
2996 | }
2997 | ],
2998 | "description": "Provides a list of PHP built-in functions that operate on resources",
2999 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
3000 | "time": "2018-10-04T04:07:39+00:00"
3001 | },
3002 | {
3003 | "name": "sebastian/type",
3004 | "version": "1.1.3",
3005 | "source": {
3006 | "type": "git",
3007 | "url": "https://github.com/sebastianbergmann/type.git",
3008 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
3009 | },
3010 | "dist": {
3011 | "type": "zip",
3012 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
3013 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
3014 | "shasum": ""
3015 | },
3016 | "require": {
3017 | "php": "^7.2"
3018 | },
3019 | "require-dev": {
3020 | "phpunit/phpunit": "^8.2"
3021 | },
3022 | "type": "library",
3023 | "extra": {
3024 | "branch-alias": {
3025 | "dev-master": "1.1-dev"
3026 | }
3027 | },
3028 | "autoload": {
3029 | "classmap": [
3030 | "src/"
3031 | ]
3032 | },
3033 | "notification-url": "https://packagist.org/downloads/",
3034 | "license": [
3035 | "BSD-3-Clause"
3036 | ],
3037 | "authors": [
3038 | {
3039 | "name": "Sebastian Bergmann",
3040 | "email": "sebastian@phpunit.de",
3041 | "role": "lead"
3042 | }
3043 | ],
3044 | "description": "Collection of value objects that represent the types of the PHP type system",
3045 | "homepage": "https://github.com/sebastianbergmann/type",
3046 | "time": "2019-07-02T08:10:15+00:00"
3047 | },
3048 | {
3049 | "name": "sebastian/version",
3050 | "version": "2.0.1",
3051 | "source": {
3052 | "type": "git",
3053 | "url": "https://github.com/sebastianbergmann/version.git",
3054 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
3055 | },
3056 | "dist": {
3057 | "type": "zip",
3058 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
3059 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
3060 | "shasum": ""
3061 | },
3062 | "require": {
3063 | "php": ">=5.6"
3064 | },
3065 | "type": "library",
3066 | "extra": {
3067 | "branch-alias": {
3068 | "dev-master": "2.0.x-dev"
3069 | }
3070 | },
3071 | "autoload": {
3072 | "classmap": [
3073 | "src/"
3074 | ]
3075 | },
3076 | "notification-url": "https://packagist.org/downloads/",
3077 | "license": [
3078 | "BSD-3-Clause"
3079 | ],
3080 | "authors": [
3081 | {
3082 | "name": "Sebastian Bergmann",
3083 | "email": "sebastian@phpunit.de",
3084 | "role": "lead"
3085 | }
3086 | ],
3087 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
3088 | "homepage": "https://github.com/sebastianbergmann/version",
3089 | "time": "2016-10-03T07:35:21+00:00"
3090 | },
3091 | {
3092 | "name": "theseer/tokenizer",
3093 | "version": "1.2.0",
3094 | "source": {
3095 | "type": "git",
3096 | "url": "https://github.com/theseer/tokenizer.git",
3097 | "reference": "75a63c33a8577608444246075ea0af0d052e452a"
3098 | },
3099 | "dist": {
3100 | "type": "zip",
3101 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
3102 | "reference": "75a63c33a8577608444246075ea0af0d052e452a",
3103 | "shasum": ""
3104 | },
3105 | "require": {
3106 | "ext-dom": "*",
3107 | "ext-tokenizer": "*",
3108 | "ext-xmlwriter": "*",
3109 | "php": "^7.2 || ^8.0"
3110 | },
3111 | "type": "library",
3112 | "autoload": {
3113 | "classmap": [
3114 | "src/"
3115 | ]
3116 | },
3117 | "notification-url": "https://packagist.org/downloads/",
3118 | "license": [
3119 | "BSD-3-Clause"
3120 | ],
3121 | "authors": [
3122 | {
3123 | "name": "Arne Blankerts",
3124 | "email": "arne@blankerts.de",
3125 | "role": "Developer"
3126 | }
3127 | ],
3128 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
3129 | "funding": [
3130 | {
3131 | "url": "https://github.com/theseer",
3132 | "type": "github"
3133 | }
3134 | ],
3135 | "time": "2020-07-12T23:59:07+00:00"
3136 | },
3137 | {
3138 | "name": "vlucas/phpdotenv",
3139 | "version": "v3.6.7",
3140 | "source": {
3141 | "type": "git",
3142 | "url": "https://github.com/vlucas/phpdotenv.git",
3143 | "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82"
3144 | },
3145 | "dist": {
3146 | "type": "zip",
3147 | "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2065beda6cbe75e2603686907b2e45f6f3a5ad82",
3148 | "reference": "2065beda6cbe75e2603686907b2e45f6f3a5ad82",
3149 | "shasum": ""
3150 | },
3151 | "require": {
3152 | "php": "^5.4 || ^7.0 || ^8.0",
3153 | "phpoption/phpoption": "^1.5.2",
3154 | "symfony/polyfill-ctype": "^1.17"
3155 | },
3156 | "require-dev": {
3157 | "ext-filter": "*",
3158 | "ext-pcre": "*",
3159 | "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0"
3160 | },
3161 | "suggest": {
3162 | "ext-filter": "Required to use the boolean validator.",
3163 | "ext-pcre": "Required to use most of the library."
3164 | },
3165 | "type": "library",
3166 | "extra": {
3167 | "branch-alias": {
3168 | "dev-master": "3.6-dev"
3169 | }
3170 | },
3171 | "autoload": {
3172 | "psr-4": {
3173 | "Dotenv\\": "src/"
3174 | }
3175 | },
3176 | "notification-url": "https://packagist.org/downloads/",
3177 | "license": [
3178 | "BSD-3-Clause"
3179 | ],
3180 | "authors": [
3181 | {
3182 | "name": "Graham Campbell",
3183 | "email": "graham@alt-three.com",
3184 | "homepage": "https://gjcampbell.co.uk/"
3185 | },
3186 | {
3187 | "name": "Vance Lucas",
3188 | "email": "vance@vancelucas.com",
3189 | "homepage": "https://vancelucas.com/"
3190 | }
3191 | ],
3192 | "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
3193 | "keywords": [
3194 | "dotenv",
3195 | "env",
3196 | "environment"
3197 | ],
3198 | "funding": [
3199 | {
3200 | "url": "https://github.com/GrahamCampbell",
3201 | "type": "github"
3202 | },
3203 | {
3204 | "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
3205 | "type": "tidelift"
3206 | }
3207 | ],
3208 | "time": "2020-07-14T19:04:52+00:00"
3209 | }
3210 | ],
3211 | "aliases": [],
3212 | "minimum-stability": "stable",
3213 | "stability-flags": [],
3214 | "prefer-stable": false,
3215 | "prefer-lowest": false,
3216 | "platform": [],
3217 | "platform-dev": [],
3218 | "plugin-api-version": "1.1.0"
3219 | }
3220 |
--------------------------------------------------------------------------------
/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
Hi John!
', $html); 30 | } 31 | 32 | public function testSingleTo(): void 33 | { 34 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 35 | ->setTo('a@example.com'); 36 | $this->assertEquals(['a@example.com'], $message->getTo()); 37 | } 38 | 39 | public function testMultiTo(): void 40 | { 41 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 42 | ->setTo(['a@example.com', 'b@example.com']); 43 | $this->assertEquals(['a@example.com', 'b@example.com'], $message->getTo()); 44 | } 45 | 46 | public function testMultiToWithNames(): void 47 | { 48 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 49 | ->setTo([ 50 | 'a@example.com' => 'Anne', 51 | 'b@example.com' => 'Billy' 52 | ]); 53 | $this->assertEquals(['"Anne" ', '"Billy" '], $message->getTo()); 54 | } 55 | 56 | public function testMultiToWithVariables(): void 57 | { 58 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 59 | ->setTo([ 60 | 'a@example.com' => ['full_name' => 'Anne', 'id' => 3], 61 | 'b@example.com' => ['full_name' => 'Billy', 'id' => 4] 62 | ]); 63 | $this->assertEquals(['"Anne" ', '"Billy" '], $message->getTo()); 64 | } 65 | 66 | public function testSend(): void 67 | { 68 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 69 | ->setTo(getenv('TEST_RECIPIENT')) 70 | ->setFrom('test@example.com') 71 | ->setSubject('Test') 72 | ->setTestMode(true); 73 | 74 | $this->assertTrue($message->send()); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /tests/EmailAddressTest.php: -------------------------------------------------------------------------------- 1 | assertCount(1, $addresses); 12 | $this->assertInstanceOf(EmailAddress::class, $addresses[0]); 13 | $this->assertEquals('jon@example.com', $addresses[0]->email); 14 | $this->assertEquals([], $addresses[0]->variables); 15 | } 16 | 17 | public function testParseSimpleArray(): void 18 | { 19 | $addresses = EmailAddress::parse(['jake@example.com', 'sally@example.com']); 20 | $this->assertCount(2, $addresses); 21 | $this->assertInstanceOf(EmailAddress::class, $addresses[0]); 22 | $this->assertEquals('jake@example.com', $addresses[0]->email); 23 | $this->assertEquals([], $addresses[0]->variables); 24 | $this->assertEquals('sally@example.com', $addresses[1]->email); 25 | $this->assertEquals([], $addresses[1]->variables); 26 | } 27 | 28 | public function testParseArrayWithNames(): void 29 | { 30 | $addresses = EmailAddress::parse([ 31 | 'jake@example.com' => 'Jake', 32 | 'sally@example.com' => 'Sally' 33 | ]); 34 | $this->assertCount(2, $addresses); 35 | $this->assertInstanceOf(EmailAddress::class, $addresses[0]); 36 | $this->assertEquals('jake@example.com', $addresses[0]->email); 37 | $this->assertEquals(['full_name' => 'Jake'], $addresses[0]->variables); 38 | $this->assertEquals('sally@example.com', $addresses[1]->email); 39 | $this->assertEquals(['full_name' => 'Sally'], $addresses[1]->variables); 40 | } 41 | 42 | public function testParseArrayWithVariables(): void 43 | { 44 | $addresses = EmailAddress::parse([ 45 | 'jake@example.com' => ['full_name' => 'Jake', 'id' => 5], 46 | 'sally@example.com' => ['full_name' => 'Sally', 'id' => 6] 47 | ]); 48 | $this->assertCount(2, $addresses); 49 | $this->assertInstanceOf(EmailAddress::class, $addresses[0]); 50 | $this->assertEquals('jake@example.com', $addresses[0]->email); 51 | $this->assertEquals(['full_name' => 'Jake', 'id' => 5], $addresses[0]->variables); 52 | $this->assertEquals('sally@example.com', $addresses[1]->email); 53 | $this->assertEquals(['full_name' => 'Sally', 'id' => 6], $addresses[1]->variables); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /tests/MailerTest.php: -------------------------------------------------------------------------------- 1 | mockApplication([ 13 | 'components' => [ 14 | 'mailer' => [ 15 | 'class' => 'boundstate\mailgun\Mailer', 16 | 'key' => 'key-example', 17 | 'domain' => 'mg.example.com', 18 | ], 19 | ] 20 | ]); 21 | } 22 | 23 | public function testGetMailgun(): void 24 | { 25 | $mailgun = Yii::$app->mailer->getMailgun(); 26 | $this->assertInstanceOf(\Mailgun\Mailgun::class, $mailgun); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/MessageTest.php: -------------------------------------------------------------------------------- 1 | mockApplication([ 13 | 'components' => [ 14 | 'mailer' => [ 15 | 'class' => 'boundstate\mailgun\Mailer', 16 | 'key' => getenv('MAILGUN_KEY'), 17 | 'domain' => getenv('MAILGUN_DOMAIN'), 18 | ], 19 | ] 20 | ]); 21 | } 22 | 23 | public function testCompose(): void 24 | { 25 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']); 26 | $html = $message->getMessageBuilder()->getMessage()['html']; 27 | 28 | $this->assertEquals('Hi John!
', $html); 29 | } 30 | 31 | public function testSingleTo(): void 32 | { 33 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 34 | ->setTo('a@example.com'); 35 | $this->assertEquals(['a@example.com'], $message->getTo()); 36 | } 37 | 38 | public function testMultiTo(): void 39 | { 40 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 41 | ->setTo(['a@example.com', 'b@example.com']); 42 | $this->assertEquals(['a@example.com', 'b@example.com'], $message->getTo()); 43 | } 44 | 45 | public function testMultiToWithNames(): void 46 | { 47 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 48 | ->setTo([ 49 | 'a@example.com' => 'Anne', 50 | 'b@example.com' => 'Billy' 51 | ]); 52 | $this->assertEquals(['"Anne" ', '"Billy" '], $message->getTo()); 53 | } 54 | 55 | public function testSend(): void 56 | { 57 | $message = Yii::$app->mailer->compose('example', ['name' => 'John']) 58 | ->setTo(getenv('TEST_RECIPIENT')) 59 | ->setFrom('test@example.com') 60 | ->setSubject('Test') 61 | ->setTestMode(true); 62 | 63 | $this->assertTrue($message->send()); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | destroyApplication(); 16 | } 17 | 18 | /** 19 | * Populates Yii::$app with a new application 20 | * The application will be destroyed on tearDown() automatically. 21 | * @param array $config The application configuration, if needed 22 | * @param string $appClass name of the application class to create 23 | */ 24 | protected function mockApplication($config = [], $appClass = '\yii\console\Application') 25 | { 26 | new $appClass(ArrayHelper::merge([ 27 | 'id' => 'testapp', 28 | 'basePath' => __DIR__, 29 | 'vendorPath' => $this->getVendorPath(), 30 | ], $config)); 31 | } 32 | 33 | protected function getVendorPath() 34 | { 35 | $vendor = dirname(dirname(__DIR__)) . '/vendor'; 36 | if (!is_dir($vendor)) { 37 | $vendor = dirname(dirname(dirname(dirname(__DIR__)))); 38 | } 39 | return $vendor; 40 | } 41 | 42 | /** 43 | * Destroys application in Yii::$app by setting it to null. 44 | */ 45 | protected function destroyApplication() 46 | { 47 | \Yii::$app = null; 48 | } 49 | } -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | load(); 20 | $dotenv->required(['MAILGUN_DOMAIN', 'MAILGUN_KEY', 'TEST_RECIPIENT']); 21 | } -------------------------------------------------------------------------------- /tests/mail/example.php: -------------------------------------------------------------------------------- 1 |Hi = $name ?>!
-------------------------------------------------------------------------------- /tests/mail/layouts/html.php: -------------------------------------------------------------------------------- 1 | = $content ?> --------------------------------------------------------------------------------