aboutsummaryrefslogtreecommitdiffhomepage
path: root/assets/php/vendor/react
diff options
context:
space:
mode:
authormarvin-borner@live.com2018-04-16 21:09:05 +0200
committermarvin-borner@live.com2018-04-16 21:09:05 +0200
commitcf14306c2b3f82a81f8d56669a71633b4d4b5fce (patch)
tree86700651aa180026e89a66064b0364b1e4346f3f /assets/php/vendor/react
parent619b01b3615458c4ed78bfaeabb6b1a47cc8ad8b (diff)
Main merge to user management system - files are now at /main/public/
Diffstat (limited to 'assets/php/vendor/react')
-rwxr-xr-xassets/php/vendor/react/cache/.gitignore2
-rwxr-xr-xassets/php/vendor/react/cache/.travis.yml25
-rwxr-xr-xassets/php/vendor/react/cache/CHANGELOG.md35
-rwxr-xr-xassets/php/vendor/react/cache/LICENSE19
-rwxr-xr-xassets/php/vendor/react/cache/README.md171
-rwxr-xr-xassets/php/vendor/react/cache/composer.json19
-rwxr-xr-xassets/php/vendor/react/cache/phpunit.xml.dist20
-rwxr-xr-xassets/php/vendor/react/cache/src/ArrayCache.php29
-rwxr-xr-xassets/php/vendor/react/cache/src/CacheInterface.php13
-rwxr-xr-xassets/php/vendor/react/cache/tests/ArrayCacheTest.php60
-rwxr-xr-xassets/php/vendor/react/cache/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/cache/tests/TestCase.php43
-rwxr-xr-xassets/php/vendor/react/dns/.gitignore2
-rwxr-xr-xassets/php/vendor/react/dns/.travis.yml29
-rwxr-xr-xassets/php/vendor/react/dns/CHANGELOG.md179
-rwxr-xr-xassets/php/vendor/react/dns/LICENSE19
-rwxr-xr-xassets/php/vendor/react/dns/README.md209
-rwxr-xr-xassets/php/vendor/react/dns/composer.json24
-rwxr-xr-xassets/php/vendor/react/dns/examples/01-one.php22
-rwxr-xr-xassets/php/vendor/react/dns/examples/02-concurrent.php27
-rwxr-xr-xassets/php/vendor/react/dns/examples/03-cached.php40
-rwxr-xr-xassets/php/vendor/react/dns/examples/04-query-a-and-aaaa.php32
-rwxr-xr-xassets/php/vendor/react/dns/phpunit.xml.dist25
-rwxr-xr-xassets/php/vendor/react/dns/src/BadServerException.php7
-rwxr-xr-xassets/php/vendor/react/dns/src/Config/Config.php127
-rwxr-xr-xassets/php/vendor/react/dns/src/Config/FilesystemFactory.php73
-rwxr-xr-xassets/php/vendor/react/dns/src/Config/HostsFile.php151
-rwxr-xr-xassets/php/vendor/react/dns/src/Model/HeaderBag.php56
-rwxr-xr-xassets/php/vendor/react/dns/src/Model/Message.php100
-rwxr-xr-xassets/php/vendor/react/dns/src/Model/Record.php21
-rwxr-xr-xassets/php/vendor/react/dns/src/Protocol/BinaryDumper.php62
-rwxr-xr-xassets/php/vendor/react/dns/src/Protocol/Parser.php254
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/CachedExecutor.php55
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/CancellationException.php7
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/Executor.php156
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/ExecutorInterface.php8
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/HostsFileExecutor.php89
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/Query.php19
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/RecordBag.php27
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/RecordCache.php82
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/RetryExecutor.php44
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/TimeoutException.php7
-rwxr-xr-xassets/php/vendor/react/dns/src/Query/TimeoutExecutor.php32
-rwxr-xr-xassets/php/vendor/react/dns/src/RecordNotFoundException.php7
-rwxr-xr-xassets/php/vendor/react/dns/src/Resolver/Factory.php103
-rwxr-xr-xassets/php/vendor/react/dns/src/Resolver/Resolver.php100
-rwxr-xr-xassets/php/vendor/react/dns/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/dns/tests/Config/ConfigTest.php189
-rwxr-xr-xassets/php/vendor/react/dns/tests/Config/FilesystemFactoryTest.php70
-rwxr-xr-xassets/php/vendor/react/dns/tests/Config/HostsFileTest.php170
-rwxr-xr-xassets/php/vendor/react/dns/tests/Fixtures/etc/resolv.conf1
-rwxr-xr-xassets/php/vendor/react/dns/tests/FunctionalResolverTest.php71
-rwxr-xr-xassets/php/vendor/react/dns/tests/Model/MessageTest.php30
-rwxr-xr-xassets/php/vendor/react/dns/tests/Protocol/BinaryDumperTest.php48
-rwxr-xr-xassets/php/vendor/react/dns/tests/Protocol/ParserTest.php343
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/CachedExecutorTest.php100
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/ExecutorTest.php308
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/HostsFileExecutorTest.php126
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/RecordBagTest.php64
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/RecordCacheTest.php123
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/RetryExecutorTest.php197
-rwxr-xr-xassets/php/vendor/react/dns/tests/Query/TimeoutExecutorTest.php115
-rwxr-xr-xassets/php/vendor/react/dns/tests/Resolver/FactoryTest.php131
-rwxr-xr-xassets/php/vendor/react/dns/tests/Resolver/ResolveAliasesTest.php100
-rwxr-xr-xassets/php/vendor/react/dns/tests/Resolver/ResolverTest.php129
-rwxr-xr-xassets/php/vendor/react/dns/tests/TestCase.php61
-rwxr-xr-xassets/php/vendor/react/event-loop/.gitignore3
-rwxr-xr-xassets/php/vendor/react/event-loop/.travis.yml39
-rwxr-xr-xassets/php/vendor/react/event-loop/CHANGELOG.md316
-rwxr-xr-xassets/php/vendor/react/event-loop/LICENSE19
-rwxr-xr-xassets/php/vendor/react/event-loop/README.md702
-rwxr-xr-xassets/php/vendor/react/event-loop/composer.json21
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/01-timers.php15
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/02-periodic.php16
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/03-ticks.php15
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/04-signals.php19
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/11-consume-stdin.php30
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/12-generate-yes.php41
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/13-http-client-blocking.php35
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/14-http-client-async.php63
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/21-http-server.php36
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/91-benchmark-ticks.php15
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/92-benchmark-timers.php15
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/93-benchmark-ticks-delay.php22
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/94-benchmark-timers-delay.php22
-rwxr-xr-xassets/php/vendor/react/event-loop/examples/95-benchmark-memory.php67
-rwxr-xr-xassets/php/vendor/react/event-loop/phpunit.xml.dist25
-rwxr-xr-xassets/php/vendor/react/event-loop/src/ExtEvLoop.php252
-rwxr-xr-xassets/php/vendor/react/event-loop/src/ExtEventLoop.php259
-rwxr-xr-xassets/php/vendor/react/event-loop/src/ExtLibevLoop.php199
-rwxr-xr-xassets/php/vendor/react/event-loop/src/ExtLibeventLoop.php283
-rwxr-xr-xassets/php/vendor/react/event-loop/src/Factory.php41
-rwxr-xr-xassets/php/vendor/react/event-loop/src/LoopInterface.php463
-rwxr-xr-xassets/php/vendor/react/event-loop/src/SignalsHandler.php63
-rwxr-xr-xassets/php/vendor/react/event-loop/src/StreamSelectLoop.php275
-rwxr-xr-xassets/php/vendor/react/event-loop/src/Tick/FutureTickQueue.php60
-rwxr-xr-xassets/php/vendor/react/event-loop/src/Timer/Timer.php55
-rwxr-xr-xassets/php/vendor/react/event-loop/src/Timer/Timers.php109
-rwxr-xr-xassets/php/vendor/react/event-loop/src/TimerInterface.php27
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/AbstractLoopTest.php621
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/ExtEvLoopTest.php17
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/ExtEventLoopTest.php84
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/ExtLibevLoopTest.php22
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/ExtLibeventLoopTest.php58
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/SignalsHandlerTest.php55
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/StreamSelectLoopTest.php148
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/TestCase.php53
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php122
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php17
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php17
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php17
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php17
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php13
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/Timer/TimersTest.php27
-rwxr-xr-xassets/php/vendor/react/event-loop/tests/bootstrap.php15
-rwxr-xr-xassets/php/vendor/react/event-loop/travis-init.sh42
-rwxr-xr-xassets/php/vendor/react/promise-timer/.gitignore2
-rwxr-xr-xassets/php/vendor/react/promise-timer/.travis.yml26
-rwxr-xr-xassets/php/vendor/react/promise-timer/CHANGELOG.md40
-rwxr-xr-xassets/php/vendor/react/promise-timer/LICENSE21
-rwxr-xr-xassets/php/vendor/react/promise-timer/README.md372
-rwxr-xr-xassets/php/vendor/react/promise-timer/composer.json28
-rwxr-xr-xassets/php/vendor/react/promise-timer/phpunit.xml.dist19
-rwxr-xr-xassets/php/vendor/react/promise-timer/src/TimeoutException.php22
-rwxr-xr-xassets/php/vendor/react/promise-timer/src/functions.php70
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/FunctionRejectTest.php49
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/FunctionResolveTest.php71
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/FunctionTimeoutTest.php169
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/TestCase.php61
-rwxr-xr-xassets/php/vendor/react/promise-timer/tests/TimeoutExceptionTest.php15
-rwxr-xr-xassets/php/vendor/react/promise/.gitignore5
-rwxr-xr-xassets/php/vendor/react/promise/.travis.yml22
-rwxr-xr-xassets/php/vendor/react/promise/CHANGELOG.md96
-rwxr-xr-xassets/php/vendor/react/promise/LICENSE22
-rwxr-xr-xassets/php/vendor/react/promise/README.md840
-rwxr-xr-xassets/php/vendor/react/promise/composer.json29
-rwxr-xr-xassets/php/vendor/react/promise/phpunit.xml.dist28
-rwxr-xr-xassets/php/vendor/react/promise/src/CancellablePromiseInterface.php11
-rwxr-xr-xassets/php/vendor/react/promise/src/CancellationQueue.php55
-rwxr-xr-xassets/php/vendor/react/promise/src/Deferred.php60
-rwxr-xr-xassets/php/vendor/react/promise/src/Exception/LengthException.php7
-rwxr-xr-xassets/php/vendor/react/promise/src/ExtendedPromiseInterface.php26
-rwxr-xr-xassets/php/vendor/react/promise/src/FulfilledPromise.php68
-rwxr-xr-xassets/php/vendor/react/promise/src/LazyPromise.php63
-rwxr-xr-xassets/php/vendor/react/promise/src/Promise.php216
-rwxr-xr-xassets/php/vendor/react/promise/src/PromiseInterface.php11
-rwxr-xr-xassets/php/vendor/react/promise/src/PromisorInterface.php11
-rwxr-xr-xassets/php/vendor/react/promise/src/RejectedPromise.php76
-rwxr-xr-xassets/php/vendor/react/promise/src/UnhandledRejectionException.php31
-rwxr-xr-xassets/php/vendor/react/promise/src/functions.php244
-rwxr-xr-xassets/php/vendor/react/promise/src/functions_include.php5
-rwxr-xr-xassets/php/vendor/react/promise/tests/CancellationQueueTest.php100
-rwxr-xr-xassets/php/vendor/react/promise/tests/DeferredTest.php42
-rwxr-xr-xassets/php/vendor/react/promise/tests/FulfilledPromiseTest.php50
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionAllTest.php114
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionAnyTest.php204
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionCheckTypehintTest.php118
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionMapTest.php198
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionRaceTest.php211
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionReduceTest.php347
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionRejectTest.php64
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionResolveTest.php171
-rwxr-xr-xassets/php/vendor/react/promise/tests/FunctionSomeTest.php258
-rwxr-xr-xassets/php/vendor/react/promise/tests/LazyPromiseTest.php107
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php40
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php14
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest.php84
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php231
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php15
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php336
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php351
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php68
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php512
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php86
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php368
-rwxr-xr-xassets/php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php312
-rwxr-xr-xassets/php/vendor/react/promise/tests/RejectedPromiseTest.php50
-rwxr-xr-xassets/php/vendor/react/promise/tests/Stub/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/promise/tests/TestCase.php43
-rwxr-xr-xassets/php/vendor/react/promise/tests/bootstrap.php7
-rwxr-xr-xassets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php21
-rwxr-xr-xassets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php21
-rwxr-xr-xassets/php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php21
-rwxr-xr-xassets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php13
-rwxr-xr-xassets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php18
-rwxr-xr-xassets/php/vendor/react/socket/.gitignore2
-rwxr-xr-xassets/php/vendor/react/socket/.travis.yml49
-rwxr-xr-xassets/php/vendor/react/socket/CHANGELOG.md451
-rwxr-xr-xassets/php/vendor/react/socket/LICENSE19
-rwxr-xr-xassets/php/vendor/react/socket/README.md1419
-rwxr-xr-xassets/php/vendor/react/socket/composer.json29
-rwxr-xr-xassets/php/vendor/react/socket/examples/01-echo-server.php42
-rwxr-xr-xassets/php/vendor/react/socket/examples/02-chat-server.php59
-rwxr-xr-xassets/php/vendor/react/socket/examples/03-http-server.php57
-rwxr-xr-xassets/php/vendor/react/socket/examples/11-http-client.php36
-rwxr-xr-xassets/php/vendor/react/socket/examples/12-https-client.php36
-rwxr-xr-xassets/php/vendor/react/socket/examples/21-netcat-client.php68
-rwxr-xr-xassets/php/vendor/react/socket/examples/22-http-client.php60
-rwxr-xr-xassets/php/vendor/react/socket/examples/91-benchmark-server.php60
-rwxr-xr-xassets/php/vendor/react/socket/examples/99-generate-self-signed.php31
-rwxr-xr-xassets/php/vendor/react/socket/examples/localhost.pem49
-rwxr-xr-xassets/php/vendor/react/socket/examples/localhost_swordfish.pem51
-rwxr-xr-xassets/php/vendor/react/socket/phpunit.xml.dist25
-rwxr-xr-xassets/php/vendor/react/socket/src/Connection.php178
-rwxr-xr-xassets/php/vendor/react/socket/src/ConnectionInterface.php119
-rwxr-xr-xassets/php/vendor/react/socket/src/Connector.php136
-rwxr-xr-xassets/php/vendor/react/socket/src/ConnectorInterface.php58
-rwxr-xr-xassets/php/vendor/react/socket/src/DnsConnector.php111
-rwxr-xr-xassets/php/vendor/react/socket/src/FixedUriConnector.php41
-rwxr-xr-xassets/php/vendor/react/socket/src/LimitingServer.php203
-rwxr-xr-xassets/php/vendor/react/socket/src/SecureConnector.php64
-rwxr-xr-xassets/php/vendor/react/socket/src/SecureServer.php192
-rwxr-xr-xassets/php/vendor/react/socket/src/Server.php73
-rwxr-xr-xassets/php/vendor/react/socket/src/ServerInterface.php151
-rwxr-xr-xassets/php/vendor/react/socket/src/StreamEncryption.php146
-rwxr-xr-xassets/php/vendor/react/socket/src/TcpConnector.php122
-rwxr-xr-xassets/php/vendor/react/socket/src/TcpServer.php236
-rwxr-xr-xassets/php/vendor/react/socket/src/TimeoutConnector.php25
-rwxr-xr-xassets/php/vendor/react/socket/src/UnixConnector.php44
-rwxr-xr-xassets/php/vendor/react/socket/src/UnixServer.php130
-rwxr-xr-xassets/php/vendor/react/socket/tests/ConnectionTest.php47
-rwxr-xr-xassets/php/vendor/react/socket/tests/ConnectorTest.php128
-rwxr-xr-xassets/php/vendor/react/socket/tests/DnsConnectorTest.php111
-rwxr-xr-xassets/php/vendor/react/socket/tests/FixedUriConnectorTest.php19
-rwxr-xr-xassets/php/vendor/react/socket/tests/FunctionalConnectorTest.php32
-rwxr-xr-xassets/php/vendor/react/socket/tests/FunctionalSecureServerTest.php438
-rwxr-xr-xassets/php/vendor/react/socket/tests/FunctionalTcpServerTest.php324
-rwxr-xr-xassets/php/vendor/react/socket/tests/IntegrationTest.php171
-rwxr-xr-xassets/php/vendor/react/socket/tests/LimitingServerTest.php195
-rwxr-xr-xassets/php/vendor/react/socket/tests/SecureConnectorTest.php74
-rwxr-xr-xassets/php/vendor/react/socket/tests/SecureIntegrationTest.php204
-rwxr-xr-xassets/php/vendor/react/socket/tests/SecureServerTest.php105
-rwxr-xr-xassets/php/vendor/react/socket/tests/ServerTest.php173
-rwxr-xr-xassets/php/vendor/react/socket/tests/Stub/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/socket/tests/Stub/ConnectionStub.php63
-rwxr-xr-xassets/php/vendor/react/socket/tests/Stub/ServerStub.php18
-rwxr-xr-xassets/php/vendor/react/socket/tests/TcpConnectorTest.php255
-rwxr-xr-xassets/php/vendor/react/socket/tests/TcpServerTest.php285
-rwxr-xr-xassets/php/vendor/react/socket/tests/TestCase.php101
-rwxr-xr-xassets/php/vendor/react/socket/tests/TimeoutConnectorTest.php103
-rwxr-xr-xassets/php/vendor/react/socket/tests/UnixConnectorTest.php64
-rwxr-xr-xassets/php/vendor/react/socket/tests/UnixServerTest.php283
-rwxr-xr-xassets/php/vendor/react/stream/.gitignore2
-rwxr-xr-xassets/php/vendor/react/stream/.travis.yml50
-rwxr-xr-xassets/php/vendor/react/stream/CHANGELOG.md377
-rwxr-xr-xassets/php/vendor/react/stream/LICENSE19
-rwxr-xr-xassets/php/vendor/react/stream/README.md1224
-rwxr-xr-xassets/php/vendor/react/stream/composer.json25
-rwxr-xr-xassets/php/vendor/react/stream/examples/01-http.php40
-rwxr-xr-xassets/php/vendor/react/stream/examples/02-https.php40
-rwxr-xr-xassets/php/vendor/react/stream/examples/11-cat.php28
-rwxr-xr-xassets/php/vendor/react/stream/examples/91-benchmark-throughput.php62
-rwxr-xr-xassets/php/vendor/react/stream/phpunit.xml.dist25
-rwxr-xr-xassets/php/vendor/react/stream/src/CompositeStream.php82
-rwxr-xr-xassets/php/vendor/react/stream/src/DuplexResourceStream.php224
-rwxr-xr-xassets/php/vendor/react/stream/src/DuplexStreamInterface.php39
-rwxr-xr-xassets/php/vendor/react/stream/src/ReadableResourceStream.php177
-rwxr-xr-xassets/php/vendor/react/stream/src/ReadableStreamInterface.php362
-rwxr-xr-xassets/php/vendor/react/stream/src/ThroughStream.php190
-rwxr-xr-xassets/php/vendor/react/stream/src/Util.php75
-rwxr-xr-xassets/php/vendor/react/stream/src/WritableResourceStream.php171
-rwxr-xr-xassets/php/vendor/react/stream/src/WritableStreamInterface.php347
-rwxr-xr-xassets/php/vendor/react/stream/tests/CallableStub.php10
-rwxr-xr-xassets/php/vendor/react/stream/tests/CompositeStreamTest.php267
-rwxr-xr-xassets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php352
-rwxr-xr-xassets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php495
-rwxr-xr-xassets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php35
-rwxr-xr-xassets/php/vendor/react/stream/tests/FunctionalInternetTest.php122
-rwxr-xr-xassets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php372
-rwxr-xr-xassets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php61
-rwxr-xr-xassets/php/vendor/react/stream/tests/TestCase.php54
-rwxr-xr-xassets/php/vendor/react/stream/tests/ThroughStreamTest.php267
-rwxr-xr-xassets/php/vendor/react/stream/tests/UtilTest.php273
-rwxr-xr-xassets/php/vendor/react/stream/tests/WritableStreamResourceTest.php534
276 files changed, 0 insertions, 31686 deletions
diff --git a/assets/php/vendor/react/cache/.gitignore b/assets/php/vendor/react/cache/.gitignore
deleted file mode 100755
index 987e2a2..0000000
--- a/assets/php/vendor/react/cache/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor
diff --git a/assets/php/vendor/react/cache/.travis.yml b/assets/php/vendor/react/cache/.travis.yml
deleted file mode 100755
index 290df75..0000000
--- a/assets/php/vendor/react/cache/.travis.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7
- - hhvm
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
-
-sudo: false
-
-install:
- - composer install --no-interaction
-
-script:
- - ./vendor/bin/phpunit --coverage-text
diff --git a/assets/php/vendor/react/cache/CHANGELOG.md b/assets/php/vendor/react/cache/CHANGELOG.md
deleted file mode 100755
index 19d1801..0000000
--- a/assets/php/vendor/react/cache/CHANGELOG.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Changelog
-
-## 0.4.2 (2017-12-20)
-
-* Improve documentation with usage and installation instructions
- (#10 by @clue)
-
-* Improve test suite by adding PHPUnit to `require-dev` and
- add forward compatibility with PHPUnit 5 and PHPUnit 6 and
- sanitize Composer autoload paths
- (#14 by @shaunbramley and #12 and #18 by @clue)
-
-## 0.4.1 (2016-02-25)
-
-* Repository maintenance, split off from main repo, improve test suite and documentation
-* First class support for PHP7 and HHVM (#9 by @clue)
-* Adjust compatibility to 5.3 (#7 by @clue)
-
-## 0.4.0 (2014-02-02)
-
-* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks
-* BC break: Update to React/Promise 2.0
-* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0
-
-## 0.3.2 (2013-05-10)
-
-* Version bump
-
-## 0.3.0 (2013-04-14)
-
-* Version bump
-
-## 0.2.6 (2012-12-26)
-
-* Feature: New cache component, used by DNS
diff --git a/assets/php/vendor/react/cache/LICENSE b/assets/php/vendor/react/cache/LICENSE
deleted file mode 100755
index a808108..0000000
--- a/assets/php/vendor/react/cache/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Igor Wiedler, Chris Boden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/cache/README.md b/assets/php/vendor/react/cache/README.md
deleted file mode 100755
index 70ad40a..0000000
--- a/assets/php/vendor/react/cache/README.md
+++ /dev/null
@@ -1,171 +0,0 @@
-# Cache Component
-
-[![Build Status](https://secure.travis-ci.org/reactphp/cache.png?branch=master)](http://travis-ci.org/reactphp/cache) [![Code Climate](https://codeclimate.com/github/reactphp/cache/badges/gpa.svg)](https://codeclimate.com/github/reactphp/cache)
-
-Async, [Promise](https://github.com/reactphp/promise)-based cache interface
-for [ReactPHP](https://reactphp.org/).
-
-The cache component provides a
-[Promise](https://github.com/reactphp/promise)-based
-[`CacheInterface`](#cacheinterface) and an in-memory [`ArrayCache`](#arraycache)
-implementation of that.
-This allows consumers to type hint against the interface and third parties to
-provide alternate implementations.
-
-**Table of Contents**
-
-* [Usage](#usage)
- * [CacheInterface](#cacheinterface)
- * [get()](#get)
- * [set()](#set)
- * [remove()](#remove)
- * [ArrayCache](#arraycache)
-* [Common usage](#common-usage)
- * [Fallback get](#fallback-get)
- * [Fallback-get-and-set](#fallback-get-and-set)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-
-## Usage
-
-### CacheInterface
-
-The `CacheInterface` describes the main interface of this component.
-This allows consumers to type hint against the interface and third parties to
-provide alternate implementations.
-
-#### get()
-
-```php
-$cache
- ->get('foo')
- ->then('var_dump');
-```
-
-This example fetches the value of the key `foo` and passes it to the
-`var_dump` function. You can use any of the composition provided by
-[promises](https://github.com/reactphp/promise).
-
-If the key `foo` does not exist, the promise will be rejected.
-
-#### set()
-
-```php
-$cache->set('foo', 'bar');
-```
-
-This example eventually sets the value of the key `foo` to `bar`. If it
-already exists, it is overridden. No guarantees are made as to when the cache
-value is set. If the cache implementation has to go over the network to store
-it, it may take a while.
-
-#### remove()
-
-```php
-$cache->remove('foo');
-```
-
-This example eventually removes the key `foo` from the cache. As with `set`,
-this may not happen instantly.
-
-### ArrayCache
-
-The `ArrayCache` provides an in-memory implementation of the
-[`CacheInterface`](#cacheinterface).
-
-```php
-$cache = new ArrayCache();
-
-$cache->set('foo', 'bar');
-```
-
-## Common usage
-
-### Fallback get
-
-A common use case of caches is to attempt fetching a cached value and as a
-fallback retrieve it from the original data source if not found. Here is an
-example of that:
-
-```php
-$cache
- ->get('foo')
- ->then(null, 'getFooFromDb')
- ->then('var_dump');
-```
-
-First an attempt is made to retrieve the value of `foo`. A promise rejection
-handler of the function `getFooFromDb` is registered. `getFooFromDb` is a
-function (can be any PHP callable) that will be called if the key does not
-exist in the cache.
-
-`getFooFromDb` can handle the missing key by returning a promise for the
-actual value from the database (or any other data source). As a result, this
-chain will correctly fall back, and provide the value in both cases.
-
-### Fallback get and set
-
-To expand on the fallback get example, often you want to set the value on the
-cache after fetching it from the data source.
-
-```php
-$cache
- ->get('foo')
- ->then(null, array($this, 'getAndCacheFooFromDb'))
- ->then('var_dump');
-
-public function getAndCacheFooFromDb()
-{
- return $this->db
- ->get('foo')
- ->then(array($this, 'cacheFooFromDb'));
-}
-
-public function cacheFooFromDb($foo)
-{
- $this->cache->set('foo', $foo);
-
- return $foo;
-}
-```
-
-By using chaining you can easily conditionally cache the value if it is
-fetched from the database.
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This will install the latest supported version:
-
-```bash
-$ composer require react/cache:^0.4.2
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
-HHVM.
-It's *highly recommended to use PHP 7+* for this project.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
diff --git a/assets/php/vendor/react/cache/composer.json b/assets/php/vendor/react/cache/composer.json
deleted file mode 100755
index 51573b6..0000000
--- a/assets/php/vendor/react/cache/composer.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "name": "react/cache",
- "description": "Async, Promise-based cache interface for ReactPHP",
- "keywords": ["cache", "caching", "promise", "ReactPHP"],
- "license": "MIT",
- "require": {
- "php": ">=5.3.0",
- "react/promise": "~2.0|~1.1"
- },
- "autoload": {
- "psr-4": { "React\\Cache\\": "src/" }
- },
- "autoload-dev": {
- "psr-4": { "React\\Tests\\Cache\\": "tests/" }
- },
- "require-dev": {
- "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
- }
-}
diff --git a/assets/php/vendor/react/cache/phpunit.xml.dist b/assets/php/vendor/react/cache/phpunit.xml.dist
deleted file mode 100755
index d02182f..0000000
--- a/assets/php/vendor/react/cache/phpunit.xml.dist
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- bootstrap="vendor/autoload.php"
->
- <testsuites>
- <testsuite name="React Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/cache/src/ArrayCache.php b/assets/php/vendor/react/cache/src/ArrayCache.php
deleted file mode 100755
index 03dcc15..0000000
--- a/assets/php/vendor/react/cache/src/ArrayCache.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-namespace React\Cache;
-
-use React\Promise;
-
-class ArrayCache implements CacheInterface
-{
- private $data = array();
-
- public function get($key)
- {
- if (!isset($this->data[$key])) {
- return Promise\reject();
- }
-
- return Promise\resolve($this->data[$key]);
- }
-
- public function set($key, $value)
- {
- $this->data[$key] = $value;
- }
-
- public function remove($key)
- {
- unset($this->data[$key]);
- }
-}
diff --git a/assets/php/vendor/react/cache/src/CacheInterface.php b/assets/php/vendor/react/cache/src/CacheInterface.php
deleted file mode 100755
index fd5f2d5..0000000
--- a/assets/php/vendor/react/cache/src/CacheInterface.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace React\Cache;
-
-interface CacheInterface
-{
- // @return React\Promise\PromiseInterface
- public function get($key);
-
- public function set($key, $value);
-
- public function remove($key);
-}
diff --git a/assets/php/vendor/react/cache/tests/ArrayCacheTest.php b/assets/php/vendor/react/cache/tests/ArrayCacheTest.php
deleted file mode 100755
index eec3739..0000000
--- a/assets/php/vendor/react/cache/tests/ArrayCacheTest.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace React\Tests\Cache;
-
-use React\Cache\ArrayCache;
-
-class ArrayCacheTest extends TestCase
-{
- private $cache;
-
- public function setUp()
- {
- $this->cache = new ArrayCache();
- }
-
- /** @test */
- public function getShouldRejectPromiseForNonExistentKey()
- {
- $this->cache
- ->get('foo')
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
- }
-
- /** @test */
- public function setShouldSetKey()
- {
- $this->cache
- ->set('foo', 'bar');
-
- $success = $this->createCallableMock();
- $success
- ->expects($this->once())
- ->method('__invoke')
- ->with('bar');
-
- $this->cache
- ->get('foo')
- ->then($success);
- }
-
- /** @test */
- public function removeShouldRemoveKey()
- {
- $this->cache
- ->set('foo', 'bar');
-
- $this->cache
- ->remove('foo');
-
- $this->cache
- ->get('foo')
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
- }
-}
diff --git a/assets/php/vendor/react/cache/tests/CallableStub.php b/assets/php/vendor/react/cache/tests/CallableStub.php
deleted file mode 100755
index 2f547cd..0000000
--- a/assets/php/vendor/react/cache/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Cache;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/cache/tests/TestCase.php b/assets/php/vendor/react/cache/tests/TestCase.php
deleted file mode 100755
index aa449f2..0000000
--- a/assets/php/vendor/react/cache/tests/TestCase.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace React\Tests\Cache;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-
-class TestCase extends BaseTestCase
-{
- protected function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Cache\CallableStub')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/dns/.gitignore b/assets/php/vendor/react/dns/.gitignore
deleted file mode 100755
index 19982ea..0000000
--- a/assets/php/vendor/react/dns/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor \ No newline at end of file
diff --git a/assets/php/vendor/react/dns/.travis.yml b/assets/php/vendor/react/dns/.travis.yml
deleted file mode 100755
index 41921e3..0000000
--- a/assets/php/vendor/react/dns/.travis.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - 7.2
- - hhvm # ignore errors, see below
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
- allow_failures:
- - php: hhvm
-
-sudo: false
-
-install:
- - composer install --no-interaction
-
-script:
- - vendor/bin/phpunit --coverage-text
diff --git a/assets/php/vendor/react/dns/CHANGELOG.md b/assets/php/vendor/react/dns/CHANGELOG.md
deleted file mode 100755
index adad0a7..0000000
--- a/assets/php/vendor/react/dns/CHANGELOG.md
+++ /dev/null
@@ -1,179 +0,0 @@
-# Changelog
-
-## 0.4.13 (2018-02-27)
-
-* Add `Config::loadSystemConfigBlocking()` to load default system config
- and support parsing DNS config on all supported platforms
- (`/etc/resolv.conf` on Unix/Linux/Mac and WMIC on Windows)
- (#92, #93, #94 and #95 by @clue)
-
- ```php
- $config = Config::loadSystemConfigBlocking();
- $server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
- ```
-
-* Remove unneeded cyclic dependency on react/socket
- (#96 by @clue)
-
-## 0.4.12 (2018-01-14)
-
-* Improve test suite by adding forward compatibility with PHPUnit 6,
- test against PHP 7.2, fix forward compatibility with upcoming EventLoop releases,
- add test group to skip integration tests relying on internet connection
- and add minor documentation improvements.
- (#85 and #87 by @carusogabriel, #88 and #89 by @clue and #83 by @jsor)
-
-## 0.4.11 (2017-08-25)
-
-* Feature: Support resolving from default hosts file
- (#75, #76 and #77 by @clue)
-
- This means that resolving hosts such as `localhost` will now work as
- expected across all platforms with no changes required:
-
- ```php
- $resolver->resolve('localhost')->then(function ($ip) {
- echo 'IP: ' . $ip;
- });
- ```
-
- The new `HostsExecutor` exists for advanced usage and is otherwise used
- internally for this feature.
-
-## 0.4.10 (2017-08-10)
-
-* Feature: Forward compatibility with EventLoop v1.0 and v0.5 and
- lock minimum dependencies and work around circular dependency for tests
- (#70 and #71 by @clue)
-
-* Fix: Work around DNS timeout issues for Windows users
- (#74 by @clue)
-
-* Documentation and examples for advanced usage
- (#66 by @WyriHaximus)
-
-* Remove broken TCP code, do not retry with invalid TCP query
- (#73 by @clue)
-
-* Improve test suite by fixing HHVM build for now again and ignore future HHVM build errors and
- lock Travis distro so new defaults will not break the build and
- fix failing tests for PHP 7.1
- (#68 by @WyriHaximus and #69 and #72 by @clue)
-
-## 0.4.9 (2017-05-01)
-
-* Feature: Forward compatibility with upcoming Socket v1.0 and v0.8
- (#61 by @clue)
-
-## 0.4.8 (2017-04-16)
-
-* Feature: Add support for the AAAA record type to the protocol parser
- (#58 by @othillo)
-
-* Feature: Add support for the PTR record type to the protocol parser
- (#59 by @othillo)
-
-## 0.4.7 (2017-03-31)
-
-* Feature: Forward compatibility with upcoming Socket v0.6 and v0.7 component
- (#57 by @clue)
-
-## 0.4.6 (2017-03-11)
-
-* Fix: Fix DNS timeout issues for Windows users and add forward compatibility
- with Stream v0.5 and upcoming v0.6
- (#53 by @clue)
-
-* Improve test suite by adding PHPUnit to `require-dev`
- (#54 by @clue)
-
-## 0.4.5 (2017-03-02)
-
-* Fix: Ensure we ignore the case of the answer
- (#51 by @WyriHaximus)
-
-* Feature: Add `TimeoutExecutor` and simplify internal APIs to allow internal
- code re-use for upcoming versions.
- (#48 and #49 by @clue)
-
-## 0.4.4 (2017-02-13)
-
-* Fix: Fix handling connection and stream errors
- (#45 by @clue)
-
-* Feature: Add examples and forward compatibility with upcoming Socket v0.5 component
- (#46 and #47 by @clue)
-
-## 0.4.3 (2016-07-31)
-
-* Feature: Allow for cache adapter injection (#38 by @WyriHaximus)
-
- ```php
- $factory = new React\Dns\Resolver\Factory();
-
- $cache = new MyCustomCacheInstance();
- $resolver = $factory->createCached('8.8.8.8', $loop, $cache);
- ```
-
-* Feature: Support Promise cancellation (#35 by @clue)
-
- ```php
- $promise = $resolver->resolve('reactphp.org');
-
- $promise->cancel();
- ```
-
-## 0.4.2 (2016-02-24)
-
-* Repository maintenance, split off from main repo, improve test suite and documentation
-* First class support for PHP7 and HHVM (#34 by @clue)
-* Adjust compatibility to 5.3 (#30 by @clue)
-
-## 0.4.1 (2014-04-13)
-
-* Bug fix: Fixed PSR-4 autoload path (@marcj/WyriHaximus)
-
-## 0.4.0 (2014-02-02)
-
-* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks
-* BC break: Update to React/Promise 2.0
-* Bug fix: Properly resolve CNAME aliases
-* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0
-* Bump React dependencies to v0.4
-
-## 0.3.2 (2013-05-10)
-
-* Feature: Support default port for IPv6 addresses (@clue)
-
-## 0.3.0 (2013-04-14)
-
-* Bump React dependencies to v0.3
-
-## 0.2.6 (2012-12-26)
-
-* Feature: New cache component, used by DNS
-
-## 0.2.5 (2012-11-26)
-
-* Version bump
-
-## 0.2.4 (2012-11-18)
-
-* Feature: Change to promise-based API (@jsor)
-
-## 0.2.3 (2012-11-14)
-
-* Version bump
-
-## 0.2.2 (2012-10-28)
-
-* Feature: DNS executor timeout handling (@arnaud-lb)
-* Feature: DNS retry executor (@arnaud-lb)
-
-## 0.2.1 (2012-10-14)
-
-* Minor adjustments to DNS parser
-
-## 0.2.0 (2012-09-10)
-
-* Feature: DNS resolver
diff --git a/assets/php/vendor/react/dns/LICENSE b/assets/php/vendor/react/dns/LICENSE
deleted file mode 100755
index a808108..0000000
--- a/assets/php/vendor/react/dns/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Igor Wiedler, Chris Boden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/dns/README.md b/assets/php/vendor/react/dns/README.md
deleted file mode 100755
index ed86667..0000000
--- a/assets/php/vendor/react/dns/README.md
+++ /dev/null
@@ -1,209 +0,0 @@
-# Dns
-
-[![Build Status](https://travis-ci.org/reactphp/dns.svg?branch=master)](https://travis-ci.org/reactphp/dns)
-
-Async DNS resolver for [ReactPHP](https://reactphp.org/).
-
-The main point of the DNS component is to provide async DNS resolution.
-However, it is really a toolkit for working with DNS messages, and could
-easily be used to create a DNS server.
-
-**Table of contents**
-
-* [Basic usage](#basic-usage)
-* [Caching](#caching)
- * [Custom cache adapter](#custom-cache-adapter)
-* [Advanced usage](#advanced-usage)
- * [HostsFileExecutor](#hostsfileexecutor)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-* [References](#references)
-
-## Basic usage
-
-The most basic usage is to just create a resolver through the resolver
-factory. All you need to give it is a nameserver, then you can start resolving
-names, baby!
-
-```php
-$loop = React\EventLoop\Factory::create();
-
-$config = React\Dns\Config\Config::loadSystemConfigBlocking();
-$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
-
-$factory = new React\Dns\Resolver\Factory();
-$dns = $factory->create($server, $loop);
-
-$dns->resolve('igor.io')->then(function ($ip) {
- echo "Host: $ip\n";
-});
-
-$loop->run();
-```
-
-See also the [first example](examples).
-
-The `Config` class can be used to load the system default config. This is an
-operation that may access the filesystem and block. Ideally, this method should
-thus be executed only once before the loop starts and not repeatedly while it is
-running.
-Note that this class may return an *empty* configuration if the system config
-can not be loaded. As such, you'll likely want to apply a default nameserver
-as above if none can be found.
-
-> Note that the factory loads the hosts file from the filesystem once when
- creating the resolver instance.
- Ideally, this method should thus be executed only once before the loop starts
- and not repeatedly while it is running.
-
-Pending DNS queries can be cancelled by cancelling its pending promise like so:
-
-```php
-$promise = $resolver->resolve('reactphp.org');
-
-$promise->cancel();
-```
-
-But there's more.
-
-## Caching
-
-You can cache results by configuring the resolver to use a `CachedExecutor`:
-
-```php
-$loop = React\EventLoop\Factory::create();
-
-$config = React\Dns\Config\Config::loadSystemConfigBlocking();
-$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
-
-$factory = new React\Dns\Resolver\Factory();
-$dns = $factory->createCached($server, $loop);
-
-$dns->resolve('igor.io')->then(function ($ip) {
- echo "Host: $ip\n";
-});
-
-...
-
-$dns->resolve('igor.io')->then(function ($ip) {
- echo "Host: $ip\n";
-});
-
-$loop->run();
-```
-
-If the first call returns before the second, only one query will be executed.
-The second result will be served from an in memory cache.
-This is particularly useful for long running scripts where the same hostnames
-have to be looked up multiple times.
-
-See also the [third example](examples).
-
-### Custom cache adapter
-
-By default, the above will use an in memory cache.
-
-You can also specify a custom cache implementing [`CacheInterface`](https://github.com/reactphp/cache) to handle the record cache instead:
-
-```php
-$cache = new React\Cache\ArrayCache();
-$loop = React\EventLoop\Factory::create();
-$factory = new React\Dns\Resolver\Factory();
-$dns = $factory->createCached('8.8.8.8', $loop, $cache);
-```
-
-See also the wiki for possible [cache implementations](https://github.com/reactphp/react/wiki/Users#cache-implementations).
-
-## Advanced Usage
-
-For more advanced usages one can utilize the `React\Dns\Query\Executor` directly.
-The following example looks up the `IPv6` address for `igor.io`.
-
-```php
-$loop = Factory::create();
-
-$executor = new Executor($loop, new Parser(), new BinaryDumper(), null);
-
-$executor->query(
- '8.8.8.8:53',
- new Query($name, Message::TYPE_AAAA, Message::CLASS_IN, time())
-)->done(function (Message $message) {
- foreach ($message->answers as $answer) {
- echo 'IPv6: ' . $answer->data . PHP_EOL;
- }
-}, 'printf');
-
-$loop->run();
-
-```
-
-See also the [fourth example](examples).
-
-### HostsFileExecutor
-
-Note that the above `Executor` class always performs an actual DNS query.
-If you also want to take entries from your hosts file into account, you may
-use this code:
-
-```php
-$hosts = \React\Dns\Config\HostsFile::loadFromPathBlocking();
-
-$executor = new Executor($loop, new Parser(), new BinaryDumper(), null);
-$executor = new HostsFileExecutor($hosts, $executor);
-
-$executor->query(
- '8.8.8.8:53',
- new Query('localhost', Message::TYPE_A, Message::CLASS_IN, time())
-);
-```
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This will install the latest supported version:
-
-```bash
-$ composer require react/dns:^0.4.13
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
-HHVM.
-It's *highly recommended to use PHP 7+* for this project.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-The test suite also contains a number of functional integration tests that rely
-on a stable internet connection.
-If you do not want to run these, they can simply be skipped like this:
-
-```bash
-$ php vendor/bin/phpunit --exclude-group internet
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
-
-## References
-
-* [RFC 1034](https://tools.ietf.org/html/rfc1034) Domain Names - Concepts and Facilities
-* [RFC 1035](https://tools.ietf.org/html/rfc1035) Domain Names - Implementation and Specification
diff --git a/assets/php/vendor/react/dns/composer.json b/assets/php/vendor/react/dns/composer.json
deleted file mode 100755
index 510a43c..0000000
--- a/assets/php/vendor/react/dns/composer.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "name": "react/dns",
- "description": "Async DNS resolver for ReactPHP",
- "keywords": ["dns", "dns-resolver", "ReactPHP", "async"],
- "license": "MIT",
- "require": {
- "php": ">=5.3.0",
- "react/cache": "~0.4.0|~0.3.0",
- "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
- "react/promise": "^2.1 || ^1.2.1",
- "react/promise-timer": "^1.2",
- "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.5"
- },
- "require-dev": {
- "clue/block-react": "^1.2",
- "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
- },
- "autoload": {
- "psr-4": { "React\\Dns\\": "src" }
- },
- "autoload-dev": {
- "psr-4": { "React\\Tests\\Dns\\": "tests" }
- }
-}
diff --git a/assets/php/vendor/react/dns/examples/01-one.php b/assets/php/vendor/react/dns/examples/01-one.php
deleted file mode 100755
index 5db164f..0000000
--- a/assets/php/vendor/react/dns/examples/01-one.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-use React\Dns\Config\Config;
-use React\Dns\Resolver\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$config = Config::loadSystemConfigBlocking();
-$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
-
-$factory = new Factory();
-$resolver = $factory->create($server, $loop);
-
-$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-$resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
-}, 'printf');
-
-$loop->run();
diff --git a/assets/php/vendor/react/dns/examples/02-concurrent.php b/assets/php/vendor/react/dns/examples/02-concurrent.php
deleted file mode 100755
index 87e3f5c..0000000
--- a/assets/php/vendor/react/dns/examples/02-concurrent.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-use React\Dns\Config\Config;
-use React\Dns\Resolver\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$config = Config::loadSystemConfigBlocking();
-$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
-
-$factory = new Factory();
-$resolver = $factory->create($server, $loop);
-
-$names = array_slice($argv, 1);
-if (!$names) {
- $names = array('google.com', 'www.google.com', 'gmail.com');
-}
-
-foreach ($names as $name) {
- $resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
- }, 'printf');
-}
-
-$loop->run();
diff --git a/assets/php/vendor/react/dns/examples/03-cached.php b/assets/php/vendor/react/dns/examples/03-cached.php
deleted file mode 100755
index e76a27c..0000000
--- a/assets/php/vendor/react/dns/examples/03-cached.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-use React\Dns\Config\Config;
-use React\Dns\Resolver\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$config = Config::loadSystemConfigBlocking();
-$server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
-
-$factory = new Factory();
-$resolver = $factory->createCached($server, $loop);
-
-$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-$resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
-}, 'printf');
-
-$loop->addTimer(1.0, function() use ($name, $resolver) {
- $resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
- }, 'printf');
-});
-
-$loop->addTimer(2.0, function() use ($name, $resolver) {
- $resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
- }, 'printf');
-});
-
-$loop->addTimer(3.0, function() use ($name, $resolver) {
- $resolver->resolve($name)->then(function ($ip) use ($name) {
- echo 'IP for ' . $name . ': ' . $ip . PHP_EOL;
- }, 'printf');
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/dns/examples/04-query-a-and-aaaa.php b/assets/php/vendor/react/dns/examples/04-query-a-and-aaaa.php
deleted file mode 100755
index 6c46bbf..0000000
--- a/assets/php/vendor/react/dns/examples/04-query-a-and-aaaa.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-use React\Dns\Model\Message;
-use React\Dns\Protocol\BinaryDumper;
-use React\Dns\Protocol\Parser;
-use React\Dns\Query\Executor;
-use React\Dns\Query\Query;
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$executor = new Executor($loop, new Parser(), new BinaryDumper(), null);
-
-$name = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-$ipv4Query = new Query($name, Message::TYPE_A, Message::CLASS_IN, time());
-$ipv6Query = new Query($name, Message::TYPE_AAAA, Message::CLASS_IN, time());
-
-$executor->query('8.8.8.8:53', $ipv4Query)->done(function (Message $message) {
- foreach ($message->answers as $answer) {
- echo 'IPv4: ' . $answer->data . PHP_EOL;
- }
-}, 'printf');
-$executor->query('8.8.8.8:53', $ipv6Query)->done(function (Message $message) {
- foreach ($message->answers as $answer) {
- echo 'IPv6: ' . $answer->data . PHP_EOL;
- }
-}, 'printf');
-
-$loop->run();
diff --git a/assets/php/vendor/react/dns/phpunit.xml.dist b/assets/php/vendor/react/dns/phpunit.xml.dist
deleted file mode 100755
index 13d3fab..0000000
--- a/assets/php/vendor/react/dns/phpunit.xml.dist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false"
- bootstrap="vendor/autoload.php"
->
- <testsuites>
- <testsuite name="React Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/dns/src/BadServerException.php b/assets/php/vendor/react/dns/src/BadServerException.php
deleted file mode 100755
index 3bf50f1..0000000
--- a/assets/php/vendor/react/dns/src/BadServerException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace React\Dns;
-
-class BadServerException extends \Exception
-{
-}
diff --git a/assets/php/vendor/react/dns/src/Config/Config.php b/assets/php/vendor/react/dns/src/Config/Config.php
deleted file mode 100755
index c82635d..0000000
--- a/assets/php/vendor/react/dns/src/Config/Config.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-
-namespace React\Dns\Config;
-
-use RuntimeException;
-
-class Config
-{
- /**
- * Loads the system DNS configuration
- *
- * Note that this method may block while loading its internal files and/or
- * commands and should thus be used with care! While this should be
- * relatively fast for most systems, it remains unknown if this may block
- * under certain circumstances. In particular, this method should only be
- * executed before the loop starts, not while it is running.
- *
- * Note that this method will try to access its files and/or commands and
- * try to parse its output. Currently, this will only parse valid nameserver
- * entries from its output and will ignore all other output without
- * complaining.
- *
- * Note that the previous section implies that this may return an empty
- * `Config` object if no valid nameserver entries can be found.
- *
- * @return self
- * @codeCoverageIgnore
- */
- public static function loadSystemConfigBlocking()
- {
- // Use WMIC output on Windows
- if (DIRECTORY_SEPARATOR === '\\') {
- return self::loadWmicBlocking();
- }
-
- // otherwise (try to) load from resolv.conf
- try {
- return self::loadResolvConfBlocking();
- } catch (RuntimeException $ignored) {
- // return empty config if parsing fails (file not found)
- return new self();
- }
- }
-
- /**
- * Loads a resolv.conf file (from the given path or default location)
- *
- * Note that this method blocks while loading the given path and should
- * thus be used with care! While this should be relatively fast for normal
- * resolv.conf files, this may be an issue if this file is located on a slow
- * device or contains an excessive number of entries. In particular, this
- * method should only be executed before the loop starts, not while it is
- * running.
- *
- * Note that this method will throw if the given file can not be loaded,
- * such as if it is not readable or does not exist. In particular, this file
- * is not available on Windows.
- *
- * Currently, this will only parse valid "nameserver X" lines from the
- * given file contents. Lines can be commented out with "#" and ";" and
- * invalid lines will be ignored without complaining. See also
- * `man resolv.conf` for more details.
- *
- * Note that the previous section implies that this may return an empty
- * `Config` object if no valid "nameserver X" lines can be found. See also
- * `man resolv.conf` which suggests that the DNS server on the localhost
- * should be used in this case. This is left up to higher level consumers
- * of this API.
- *
- * @param ?string $path (optional) path to resolv.conf file or null=load default location
- * @return self
- * @throws RuntimeException if the path can not be loaded (does not exist)
- */
- public static function loadResolvConfBlocking($path = null)
- {
- if ($path === null) {
- $path = '/etc/resolv.conf';
- }
-
- $contents = @file_get_contents($path);
- if ($contents === false) {
- throw new RuntimeException('Unable to load resolv.conf file "' . $path . '"');
- }
-
- preg_match_all('/^nameserver\s+(\S+)\s*$/m', $contents, $matches);
-
- $config = new self();
- $config->nameservers = $matches[1];
-
- return $config;
- }
-
- /**
- * Loads the DNS configurations from Windows's WMIC (from the given command or default command)
- *
- * Note that this method blocks while loading the given command and should
- * thus be used with care! While this should be relatively fast for normal
- * WMIC commands, it remains unknown if this may block under certain
- * circumstances. In particular, this method should only be executed before
- * the loop starts, not while it is running.
- *
- * Note that this method will only try to execute the given command try to
- * parse its output, irrespective of whether this command exists. In
- * particular, this command is only available on Windows. Currently, this
- * will only parse valid nameserver entries from the command output and will
- * ignore all other output without complaining.
- *
- * Note that the previous section implies that this may return an empty
- * `Config` object if no valid nameserver entries can be found.
- *
- * @param ?string $command (advanced) should not be given (NULL) unless you know what you're doing
- * @return self
- * @link https://ss64.com/nt/wmic.html
- */
- public static function loadWmicBlocking($command = null)
- {
- $contents = shell_exec($command === null ? 'wmic NICCONFIG get "DNSServerSearchOrder" /format:CSV' : $command);
- preg_match_all('/(?<=[{;,"])([\da-f.:]{4,})(?=[};,"])/i', $contents, $matches);
-
- $config = new self();
- $config->nameservers = $matches[1];
-
- return $config;
- }
-
- public $nameservers = array();
-}
diff --git a/assets/php/vendor/react/dns/src/Config/FilesystemFactory.php b/assets/php/vendor/react/dns/src/Config/FilesystemFactory.php
deleted file mode 100755
index 68cec3e..0000000
--- a/assets/php/vendor/react/dns/src/Config/FilesystemFactory.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace React\Dns\Config;
-
-use React\EventLoop\LoopInterface;
-use React\Promise;
-use React\Promise\Deferred;
-use React\Stream\ReadableResourceStream;
-use React\Stream\Stream;
-
-/**
- * @deprecated
- * @see Config see Config class instead.
- */
-class FilesystemFactory
-{
- private $loop;
-
- public function __construct(LoopInterface $loop)
- {
- $this->loop = $loop;
- }
-
- public function create($filename)
- {
- return $this
- ->loadEtcResolvConf($filename)
- ->then(array($this, 'parseEtcResolvConf'));
- }
-
- /**
- * @param string $contents
- * @return Promise
- * @deprecated see Config instead
- */
- public function parseEtcResolvConf($contents)
- {
- return Promise\resolve(Config::loadResolvConfBlocking(
- 'data://text/plain;base64,' . base64_encode($contents)
- ));
- }
-
- public function loadEtcResolvConf($filename)
- {
- if (!file_exists($filename)) {
- return Promise\reject(new \InvalidArgumentException("The filename for /etc/resolv.conf given does not exist: $filename"));
- }
-
- try {
- $deferred = new Deferred();
-
- $fd = fopen($filename, 'r');
- stream_set_blocking($fd, 0);
-
- $contents = '';
-
- $stream = class_exists('React\Stream\ReadableResourceStream') ? new ReadableResourceStream($fd, $this->loop) : new Stream($fd, $this->loop);
- $stream->on('data', function ($data) use (&$contents) {
- $contents .= $data;
- });
- $stream->on('end', function () use (&$contents, $deferred) {
- $deferred->resolve($contents);
- });
- $stream->on('error', function ($error) use ($deferred) {
- $deferred->reject($error);
- });
-
- return $deferred->promise();
- } catch (\Exception $e) {
- return Promise\reject($e);
- }
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Config/HostsFile.php b/assets/php/vendor/react/dns/src/Config/HostsFile.php
deleted file mode 100755
index 5b6277e..0000000
--- a/assets/php/vendor/react/dns/src/Config/HostsFile.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-namespace React\Dns\Config;
-
-use RuntimeException;
-
-/**
- * Represents a static hosts file which maps hostnames to IPs
- *
- * Hosts files are used on most systems to avoid actually hitting the DNS for
- * certain common hostnames.
- *
- * Most notably, this file usually contains an entry to map "localhost" to the
- * local IP. Windows is a notable exception here, as Windows does not actually
- * include "localhost" in this file by default. To compensate for this, this
- * class may explicitly be wrapped in another HostsFile instance which
- * hard-codes these entries for Windows (see also Factory).
- *
- * This class mostly exists to abstract the parsing/extraction process so this
- * can be replaced with a faster alternative in the future.
- */
-class HostsFile
-{
- /**
- * Returns the default path for the hosts file on this system
- *
- * @return string
- * @codeCoverageIgnore
- */
- public static function getDefaultPath()
- {
- // use static path for all Unix-based systems
- if (DIRECTORY_SEPARATOR !== '\\') {
- return '/etc/hosts';
- }
-
- // Windows actually stores the path in the registry under
- // \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath
- $path = '%SystemRoot%\\system32\drivers\etc\hosts';
-
- $base = getenv('SystemRoot');
- if ($base === false) {
- $base = 'C:\\Windows';
- }
-
- return str_replace('%SystemRoot%', $base, $path);
- }
-
- /**
- * Loads a hosts file (from the given path or default location)
- *
- * Note that this method blocks while loading the given path and should
- * thus be used with care! While this should be relatively fast for normal
- * hosts file, this may be an issue if this file is located on a slow device
- * or contains an excessive number of entries. In particular, this method
- * should only be executed before the loop starts, not while it is running.
- *
- * @param ?string $path (optional) path to hosts file or null=load default location
- * @return self
- * @throws RuntimeException if the path can not be loaded (does not exist)
- */
- public static function loadFromPathBlocking($path = null)
- {
- if ($path === null) {
- $path = self::getDefaultPath();
- }
-
- $contents = @file_get_contents($path);
- if ($contents === false) {
- throw new RuntimeException('Unable to load hosts file "' . $path . '"');
- }
-
- return new self($contents);
- }
-
- /**
- * Instantiate new hosts file with the given hosts file contents
- *
- * @param string $contents
- */
- public function __construct($contents)
- {
- // remove all comments from the contents
- $contents = preg_replace('/[ \t]*#.*/', '', strtolower($contents));
-
- $this->contents = $contents;
- }
-
- /**
- * Returns all IPs for the given hostname
- *
- * @param string $name
- * @return string[]
- */
- public function getIpsForHost($name)
- {
- $name = strtolower($name);
-
- $ips = array();
- foreach (preg_split('/\r?\n/', $this->contents) as $line) {
- $parts = preg_split('/\s+/', $line);
- $ip = array_shift($parts);
- if ($parts && array_search($name, $parts) !== false) {
- // remove IPv6 zone ID (`fe80::1%lo0` => `fe80:1`)
- if (strpos($ip, ':') !== false && ($pos = strpos($ip, '%')) !== false) {
- $ip = substr($ip, 0, $pos);
- }
-
- if (@inet_pton($ip) !== false) {
- $ips[] = $ip;
- }
- }
- }
-
- return $ips;
- }
-
- /**
- * Returns all hostnames for the given IPv4 or IPv6 address
- *
- * @param string $ip
- * @return string[]
- */
- public function getHostsForIp($ip)
- {
- // check binary representation of IP to avoid string case and short notation
- $ip = @inet_pton($ip);
- if ($ip === false) {
- return array();
- }
-
- $names = array();
- foreach (preg_split('/\r?\n/', $this->contents) as $line) {
- $parts = preg_split('/\s+/', $line, null, PREG_SPLIT_NO_EMPTY);
- $addr = array_shift($parts);
-
- // remove IPv6 zone ID (`fe80::1%lo0` => `fe80:1`)
- if (strpos($addr, ':') !== false && ($pos = strpos($addr, '%')) !== false) {
- $addr = substr($addr, 0, $pos);
- }
-
- if (@inet_pton($addr) === $ip) {
- foreach ($parts as $part) {
- $names[] = $part;
- }
- }
- }
-
- return $names;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Model/HeaderBag.php b/assets/php/vendor/react/dns/src/Model/HeaderBag.php
deleted file mode 100755
index 193e65c..0000000
--- a/assets/php/vendor/react/dns/src/Model/HeaderBag.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-namespace React\Dns\Model;
-
-class HeaderBag
-{
- public $data = '';
-
- public $attributes = array(
- 'qdCount' => 0,
- 'anCount' => 0,
- 'nsCount' => 0,
- 'arCount' => 0,
- 'qr' => 0,
- 'opcode' => Message::OPCODE_QUERY,
- 'aa' => 0,
- 'tc' => 0,
- 'rd' => 0,
- 'ra' => 0,
- 'z' => 0,
- 'rcode' => Message::RCODE_OK,
- );
-
- public function get($name)
- {
- return isset($this->attributes[$name]) ? $this->attributes[$name] : null;
- }
-
- public function set($name, $value)
- {
- $this->attributes[$name] = $value;
- }
-
- public function isQuery()
- {
- return 0 === $this->attributes['qr'];
- }
-
- public function isResponse()
- {
- return 1 === $this->attributes['qr'];
- }
-
- public function isTruncated()
- {
- return 1 === $this->attributes['tc'];
- }
-
- public function populateCounts(Message $message)
- {
- $this->attributes['qdCount'] = count($message->questions);
- $this->attributes['anCount'] = count($message->answers);
- $this->attributes['nsCount'] = count($message->authority);
- $this->attributes['arCount'] = count($message->additional);
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Model/Message.php b/assets/php/vendor/react/dns/src/Model/Message.php
deleted file mode 100755
index 715cb1f..0000000
--- a/assets/php/vendor/react/dns/src/Model/Message.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace React\Dns\Model;
-
-use React\Dns\Query\Query;
-use React\Dns\Model\Record;
-
-class Message
-{
- const TYPE_A = 1;
- const TYPE_NS = 2;
- const TYPE_CNAME = 5;
- const TYPE_SOA = 6;
- const TYPE_PTR = 12;
- const TYPE_MX = 15;
- const TYPE_TXT = 16;
- const TYPE_AAAA = 28;
-
- const CLASS_IN = 1;
-
- const OPCODE_QUERY = 0;
- const OPCODE_IQUERY = 1; // inverse query
- const OPCODE_STATUS = 2;
-
- const RCODE_OK = 0;
- const RCODE_FORMAT_ERROR = 1;
- const RCODE_SERVER_FAILURE = 2;
- const RCODE_NAME_ERROR = 3;
- const RCODE_NOT_IMPLEMENTED = 4;
- const RCODE_REFUSED = 5;
-
- /**
- * Creates a new request message for the given query
- *
- * @param Query $query
- * @return self
- */
- public static function createRequestForQuery(Query $query)
- {
- $request = new Message();
- $request->header->set('id', self::generateId());
- $request->header->set('rd', 1);
- $request->questions[] = (array) $query;
- $request->prepare();
-
- return $request;
- }
-
- /**
- * Creates a new response message for the given query with the given answer records
- *
- * @param Query $query
- * @param Record[] $answers
- * @return self
- */
- public static function createResponseWithAnswersForQuery(Query $query, array $answers)
- {
- $response = new Message();
- $response->header->set('id', self::generateId());
- $response->header->set('qr', 1);
- $response->header->set('opcode', Message::OPCODE_QUERY);
- $response->header->set('rd', 1);
- $response->header->set('rcode', Message::RCODE_OK);
-
- $response->questions[] = (array) $query;
-
- foreach ($answers as $record) {
- $response->answers[] = $record;
- }
-
- $response->prepare();
-
- return $response;
- }
-
- private static function generateId()
- {
- return mt_rand(0, 0xffff);
- }
-
- public $data = '';
-
- public $header;
- public $questions = array();
- public $answers = array();
- public $authority = array();
- public $additional = array();
-
- public $consumed = 0;
-
- public function __construct()
- {
- $this->header = new HeaderBag();
- }
-
- public function prepare()
- {
- $this->header->populateCounts($this);
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Model/Record.php b/assets/php/vendor/react/dns/src/Model/Record.php
deleted file mode 100755
index 029d232..0000000
--- a/assets/php/vendor/react/dns/src/Model/Record.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace React\Dns\Model;
-
-class Record
-{
- public $name;
- public $type;
- public $class;
- public $ttl;
- public $data;
-
- public function __construct($name, $type, $class, $ttl = 0, $data = null)
- {
- $this->name = $name;
- $this->type = $type;
- $this->class = $class;
- $this->ttl = $ttl;
- $this->data = $data;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Protocol/BinaryDumper.php b/assets/php/vendor/react/dns/src/Protocol/BinaryDumper.php
deleted file mode 100755
index 35d6ae6..0000000
--- a/assets/php/vendor/react/dns/src/Protocol/BinaryDumper.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-namespace React\Dns\Protocol;
-
-use React\Dns\Model\Message;
-use React\Dns\Model\HeaderBag;
-
-class BinaryDumper
-{
- public function toBinary(Message $message)
- {
- $data = '';
-
- $data .= $this->headerToBinary($message->header);
- $data .= $this->questionToBinary($message->questions);
-
- return $data;
- }
-
- private function headerToBinary(HeaderBag $header)
- {
- $data = '';
-
- $data .= pack('n', $header->get('id'));
-
- $flags = 0x00;
- $flags = ($flags << 1) | $header->get('qr');
- $flags = ($flags << 4) | $header->get('opcode');
- $flags = ($flags << 1) | $header->get('aa');
- $flags = ($flags << 1) | $header->get('tc');
- $flags = ($flags << 1) | $header->get('rd');
- $flags = ($flags << 1) | $header->get('ra');
- $flags = ($flags << 3) | $header->get('z');
- $flags = ($flags << 4) | $header->get('rcode');
-
- $data .= pack('n', $flags);
-
- $data .= pack('n', $header->get('qdCount'));
- $data .= pack('n', $header->get('anCount'));
- $data .= pack('n', $header->get('nsCount'));
- $data .= pack('n', $header->get('arCount'));
-
- return $data;
- }
-
- private function questionToBinary(array $questions)
- {
- $data = '';
-
- foreach ($questions as $question) {
- $labels = explode('.', $question['name']);
- foreach ($labels as $label) {
- $data .= chr(strlen($label)).$label;
- }
- $data .= "\x00";
-
- $data .= pack('n*', $question['type'], $question['class']);
- }
-
- return $data;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Protocol/Parser.php b/assets/php/vendor/react/dns/src/Protocol/Parser.php
deleted file mode 100755
index 1191cd3..0000000
--- a/assets/php/vendor/react/dns/src/Protocol/Parser.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-
-namespace React\Dns\Protocol;
-
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use InvalidArgumentException;
-
-/**
- * DNS protocol parser
- *
- * Obsolete and uncommon types and classes are not implemented.
- */
-class Parser
-{
- /**
- * Parses the given raw binary message into a Message object
- *
- * @param string $data
- * @throws InvalidArgumentException
- * @return Message
- */
- public function parseMessage($data)
- {
- $message = new Message();
- if ($this->parse($data, $message) !== $message) {
- throw new InvalidArgumentException('Unable to parse binary message');
- }
-
- return $message;
- }
-
- /**
- * @deprecated unused, exists for BC only
- */
- public function parseChunk($data, Message $message)
- {
- return $this->parse($data, $message);
- }
-
- private function parse($data, Message $message)
- {
- $message->data .= $data;
-
- if (!$message->header->get('id')) {
- if (!$this->parseHeader($message)) {
- return;
- }
- }
-
- if ($message->header->get('qdCount') != count($message->questions)) {
- if (!$this->parseQuestion($message)) {
- return;
- }
- }
-
- if ($message->header->get('anCount') != count($message->answers)) {
- if (!$this->parseAnswer($message)) {
- return;
- }
- }
-
- return $message;
- }
-
- public function parseHeader(Message $message)
- {
- if (strlen($message->data) < 12) {
- return;
- }
-
- $header = substr($message->data, 0, 12);
- $message->consumed += 12;
-
- list($id, $fields, $qdCount, $anCount, $nsCount, $arCount) = array_values(unpack('n*', $header));
-
- $rcode = $fields & bindec('1111');
- $z = ($fields >> 4) & bindec('111');
- $ra = ($fields >> 7) & 1;
- $rd = ($fields >> 8) & 1;
- $tc = ($fields >> 9) & 1;
- $aa = ($fields >> 10) & 1;
- $opcode = ($fields >> 11) & bindec('1111');
- $qr = ($fields >> 15) & 1;
-
- $vars = compact('id', 'qdCount', 'anCount', 'nsCount', 'arCount',
- 'qr', 'opcode', 'aa', 'tc', 'rd', 'ra', 'z', 'rcode');
-
-
- foreach ($vars as $name => $value) {
- $message->header->set($name, $value);
- }
-
- return $message;
- }
-
- public function parseQuestion(Message $message)
- {
- if (strlen($message->data) < 2) {
- return;
- }
-
- $consumed = $message->consumed;
-
- list($labels, $consumed) = $this->readLabels($message->data, $consumed);
-
- if (null === $labels) {
- return;
- }
-
- if (strlen($message->data) - $consumed < 4) {
- return;
- }
-
- list($type, $class) = array_values(unpack('n*', substr($message->data, $consumed, 4)));
- $consumed += 4;
-
- $message->consumed = $consumed;
-
- $message->questions[] = array(
- 'name' => implode('.', $labels),
- 'type' => $type,
- 'class' => $class,
- );
-
- if ($message->header->get('qdCount') != count($message->questions)) {
- return $this->parseQuestion($message);
- }
-
- return $message;
- }
-
- public function parseAnswer(Message $message)
- {
- if (strlen($message->data) < 2) {
- return;
- }
-
- $consumed = $message->consumed;
-
- list($labels, $consumed) = $this->readLabels($message->data, $consumed);
-
- if (null === $labels) {
- return;
- }
-
- if (strlen($message->data) - $consumed < 10) {
- return;
- }
-
- list($type, $class) = array_values(unpack('n*', substr($message->data, $consumed, 4)));
- $consumed += 4;
-
- list($ttl) = array_values(unpack('N', substr($message->data, $consumed, 4)));
- $consumed += 4;
-
- list($rdLength) = array_values(unpack('n', substr($message->data, $consumed, 2)));
- $consumed += 2;
-
- $rdata = null;
-
- if (Message::TYPE_A === $type || Message::TYPE_AAAA === $type) {
- $ip = substr($message->data, $consumed, $rdLength);
- $consumed += $rdLength;
-
- $rdata = inet_ntop($ip);
- }
-
- if (Message::TYPE_CNAME === $type || Message::TYPE_PTR === $type) {
- list($bodyLabels, $consumed) = $this->readLabels($message->data, $consumed);
-
- $rdata = implode('.', $bodyLabels);
- }
-
- $message->consumed = $consumed;
-
- $name = implode('.', $labels);
- $ttl = $this->signedLongToUnsignedLong($ttl);
- $record = new Record($name, $type, $class, $ttl, $rdata);
-
- $message->answers[] = $record;
-
- if ($message->header->get('anCount') != count($message->answers)) {
- return $this->parseAnswer($message);
- }
-
- return $message;
- }
-
- private function readLabels($data, $consumed)
- {
- $labels = array();
-
- while (true) {
- if ($this->isEndOfLabels($data, $consumed)) {
- $consumed += 1;
- break;
- }
-
- if ($this->isCompressedLabel($data, $consumed)) {
- list($newLabels, $consumed) = $this->getCompressedLabel($data, $consumed);
- $labels = array_merge($labels, $newLabels);
- break;
- }
-
- $length = ord(substr($data, $consumed, 1));
- $consumed += 1;
-
- if (strlen($data) - $consumed < $length) {
- return array(null, null);
- }
-
- $labels[] = substr($data, $consumed, $length);
- $consumed += $length;
- }
-
- return array($labels, $consumed);
- }
-
- public function isEndOfLabels($data, $consumed)
- {
- $length = ord(substr($data, $consumed, 1));
- return 0 === $length;
- }
-
- public function getCompressedLabel($data, $consumed)
- {
- list($nameOffset, $consumed) = $this->getCompressedLabelOffset($data, $consumed);
- list($labels) = $this->readLabels($data, $nameOffset);
-
- return array($labels, $consumed);
- }
-
- public function isCompressedLabel($data, $consumed)
- {
- $mask = 0xc000; // 1100000000000000
- list($peek) = array_values(unpack('n', substr($data, $consumed, 2)));
-
- return (bool) ($peek & $mask);
- }
-
- public function getCompressedLabelOffset($data, $consumed)
- {
- $mask = 0x3fff; // 0011111111111111
- list($peek) = array_values(unpack('n', substr($data, $consumed, 2)));
-
- return array($peek & $mask, $consumed + 2);
- }
-
- public function signedLongToUnsignedLong($i)
- {
- return $i & 0x80000000 ? $i - 0xffffffff : $i;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/CachedExecutor.php b/assets/php/vendor/react/dns/src/Query/CachedExecutor.php
deleted file mode 100755
index 285936d..0000000
--- a/assets/php/vendor/react/dns/src/Query/CachedExecutor.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Dns\Model\Message;
-
-class CachedExecutor implements ExecutorInterface
-{
- private $executor;
- private $cache;
-
- public function __construct(ExecutorInterface $executor, RecordCache $cache)
- {
- $this->executor = $executor;
- $this->cache = $cache;
- }
-
- public function query($nameserver, Query $query)
- {
- $executor = $this->executor;
- $cache = $this->cache;
-
- return $this->cache
- ->lookup($query)
- ->then(
- function ($cachedRecords) use ($query) {
- return Message::createResponseWithAnswersForQuery($query, $cachedRecords);
- },
- function () use ($executor, $cache, $nameserver, $query) {
- return $executor
- ->query($nameserver, $query)
- ->then(function ($response) use ($cache, $query) {
- $cache->storeResponseMessage($query->currentTime, $response);
- return $response;
- });
- }
- );
- }
-
- /**
- * @deprecated unused, exists for BC only
- */
- public function buildResponse(Query $query, array $cachedRecords)
- {
- return Message::createResponseWithAnswersForQuery($query, $cachedRecords);
- }
-
- /**
- * @deprecated unused, exists for BC only
- */
- protected function generateId()
- {
- return mt_rand(0, 0xffff);
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/CancellationException.php b/assets/php/vendor/react/dns/src/Query/CancellationException.php
deleted file mode 100755
index ac30f4c..0000000
--- a/assets/php/vendor/react/dns/src/Query/CancellationException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-class CancellationException extends \RuntimeException
-{
-}
diff --git a/assets/php/vendor/react/dns/src/Query/Executor.php b/assets/php/vendor/react/dns/src/Query/Executor.php
deleted file mode 100755
index 4c51f2b..0000000
--- a/assets/php/vendor/react/dns/src/Query/Executor.php
+++ /dev/null
@@ -1,156 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Dns\Model\Message;
-use React\Dns\Protocol\Parser;
-use React\Dns\Protocol\BinaryDumper;
-use React\EventLoop\LoopInterface;
-use React\Promise\Deferred;
-use React\Promise;
-use React\Stream\DuplexResourceStream;
-use React\Stream\Stream;
-
-class Executor implements ExecutorInterface
-{
- private $loop;
- private $parser;
- private $dumper;
- private $timeout;
-
- /**
- *
- * Note that albeit supported, the $timeout parameter is deprecated!
- * You should pass a `null` value here instead. If you need timeout handling,
- * use the `TimeoutConnector` instead.
- *
- * @param LoopInterface $loop
- * @param Parser $parser
- * @param BinaryDumper $dumper
- * @param null|float $timeout DEPRECATED: timeout for DNS query or NULL=no timeout
- */
- public function __construct(LoopInterface $loop, Parser $parser, BinaryDumper $dumper, $timeout = 5)
- {
- $this->loop = $loop;
- $this->parser = $parser;
- $this->dumper = $dumper;
- $this->timeout = $timeout;
- }
-
- public function query($nameserver, Query $query)
- {
- $request = Message::createRequestForQuery($query);
-
- $queryData = $this->dumper->toBinary($request);
- $transport = strlen($queryData) > 512 ? 'tcp' : 'udp';
-
- return $this->doQuery($nameserver, $transport, $queryData, $query->name);
- }
-
- /**
- * @deprecated unused, exists for BC only
- */
- public function prepareRequest(Query $query)
- {
- return Message::createRequestForQuery($query);
- }
-
- public function doQuery($nameserver, $transport, $queryData, $name)
- {
- // we only support UDP right now
- if ($transport !== 'udp') {
- return Promise\reject(new \RuntimeException(
- 'DNS query for ' . $name . ' failed: Requested transport "' . $transport . '" not available, only UDP is supported in this version'
- ));
- }
-
- $that = $this;
- $parser = $this->parser;
- $loop = $this->loop;
-
- // UDP connections are instant, so try this without a timer
- try {
- $conn = $this->createConnection($nameserver, $transport);
- } catch (\Exception $e) {
- return Promise\reject(new \RuntimeException('DNS query for ' . $name . ' failed: ' . $e->getMessage(), 0, $e));
- }
-
- $deferred = new Deferred(function ($resolve, $reject) use (&$timer, $loop, &$conn, $name) {
- $reject(new CancellationException(sprintf('DNS query for %s has been cancelled', $name)));
-
- if ($timer !== null) {
- $loop->cancelTimer($timer);
- }
- $conn->close();
- });
-
- $timer = null;
- if ($this->timeout !== null) {
- $timer = $this->loop->addTimer($this->timeout, function () use (&$conn, $name, $deferred) {
- $conn->close();
- $deferred->reject(new TimeoutException(sprintf("DNS query for %s timed out", $name)));
- });
- }
-
- $conn->on('data', function ($data) use ($conn, $parser, $deferred, $timer, $loop, $name) {
- $conn->end();
- if ($timer !== null) {
- $loop->cancelTimer($timer);
- }
-
- try {
- $response = $parser->parseMessage($data);
- } catch (\Exception $e) {
- $deferred->reject($e);
- return;
- }
-
- if ($response->header->isTruncated()) {
- $deferred->reject(new \RuntimeException('DNS query for ' . $name . ' failed: The server returned a truncated result for a UDP query, but retrying via TCP is currently not supported'));
- return;
- }
-
- $deferred->resolve($response);
- });
- $conn->write($queryData);
-
- return $deferred->promise();
- }
-
- /**
- * @deprecated unused, exists for BC only
- */
- protected function generateId()
- {
- return mt_rand(0, 0xffff);
- }
-
- /**
- * @param string $nameserver
- * @param string $transport
- * @return \React\Stream\DuplexStreamInterface
- */
- protected function createConnection($nameserver, $transport)
- {
- $fd = @stream_socket_client("$transport://$nameserver", $errno, $errstr, 0, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT);
- if ($fd === false) {
- throw new \RuntimeException('Unable to connect to DNS server: ' . $errstr, $errno);
- }
-
- // Instantiate stream instance around this stream resource.
- // This ought to be replaced with a datagram socket in the future.
- // Temporary work around for Windows 10: buffer whole UDP response
- // @coverageIgnoreStart
- if (!class_exists('React\Stream\Stream')) {
- // prefer DuplexResourceStream as of react/stream v0.7.0
- $conn = new DuplexResourceStream($fd, $this->loop, -1);
- } else {
- // use legacy Stream class for react/stream < v0.7.0
- $conn = new Stream($fd, $this->loop);
- $conn->bufferSize = null;
- }
- // @coverageIgnoreEnd
-
- return $conn;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/ExecutorInterface.php b/assets/php/vendor/react/dns/src/Query/ExecutorInterface.php
deleted file mode 100755
index 2f7a635..0000000
--- a/assets/php/vendor/react/dns/src/Query/ExecutorInterface.php
+++ /dev/null
@@ -1,8 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-interface ExecutorInterface
-{
- public function query($nameserver, Query $query);
-}
diff --git a/assets/php/vendor/react/dns/src/Query/HostsFileExecutor.php b/assets/php/vendor/react/dns/src/Query/HostsFileExecutor.php
deleted file mode 100755
index 0ca58be..0000000
--- a/assets/php/vendor/react/dns/src/Query/HostsFileExecutor.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Dns\Config\HostsFile;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Promise;
-
-/**
- * Resolves hosts from the givne HostsFile or falls back to another executor
- *
- * If the host is found in the hosts file, it will not be passed to the actual
- * DNS executor. If the host is not found in the hosts file, it will be passed
- * to the DNS executor as a fallback.
- */
-class HostsFileExecutor implements ExecutorInterface
-{
- private $hosts;
- private $fallback;
-
- public function __construct(HostsFile $hosts, ExecutorInterface $fallback)
- {
- $this->hosts = $hosts;
- $this->fallback = $fallback;
- }
-
- public function query($nameserver, Query $query)
- {
- if ($query->class === Message::CLASS_IN && ($query->type === Message::TYPE_A || $query->type === Message::TYPE_AAAA)) {
- // forward lookup for type A or AAAA
- $records = array();
- $expectsColon = $query->type === Message::TYPE_AAAA;
- foreach ($this->hosts->getIpsForHost($query->name) as $ip) {
- // ensure this is an IPv4/IPV6 address according to query type
- if ((strpos($ip, ':') !== false) === $expectsColon) {
- $records[] = new Record($query->name, $query->type, $query->class, 0, $ip);
- }
- }
-
- if ($records) {
- return Promise\resolve(
- Message::createResponseWithAnswersForQuery($query, $records)
- );
- }
- } elseif ($query->class === Message::CLASS_IN && $query->type === Message::TYPE_PTR) {
- // reverse lookup: extract IPv4 or IPv6 from special `.arpa` domain
- $ip = $this->getIpFromHost($query->name);
-
- if ($ip !== null) {
- $records = array();
- foreach ($this->hosts->getHostsForIp($ip) as $host) {
- $records[] = new Record($query->name, $query->type, $query->class, 0, $host);
- }
-
- if ($records) {
- return Promise\resolve(
- Message::createResponseWithAnswersForQuery($query, $records)
- );
- }
- }
- }
-
- return $this->fallback->query($nameserver, $query);
- }
-
- private function getIpFromHost($host)
- {
- if (substr($host, -13) === '.in-addr.arpa') {
- // IPv4: read as IP and reverse bytes
- $ip = @inet_pton(substr($host, 0, -13));
- if ($ip === false || isset($ip[4])) {
- return null;
- }
-
- return inet_ntop(strrev($ip));
- } elseif (substr($host, -9) === '.ip6.arpa') {
- // IPv6: replace dots, reverse nibbles and interpret as hexadecimal string
- $ip = @inet_ntop(pack('H*', strrev(str_replace('.', '', substr($host, 0, -9)))));
- if ($ip === false) {
- return null;
- }
-
- return $ip;
- } else {
- return null;
- }
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/Query.php b/assets/php/vendor/react/dns/src/Query/Query.php
deleted file mode 100755
index aef6e05..0000000
--- a/assets/php/vendor/react/dns/src/Query/Query.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-class Query
-{
- public $name;
- public $type;
- public $class;
- public $currentTime;
-
- public function __construct($name, $type, $class, $currentTime)
- {
- $this->name = $name;
- $this->type = $type;
- $this->class = $class;
- $this->currentTime = $currentTime;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/RecordBag.php b/assets/php/vendor/react/dns/src/Query/RecordBag.php
deleted file mode 100755
index 358cf5d..0000000
--- a/assets/php/vendor/react/dns/src/Query/RecordBag.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-
-class RecordBag
-{
- private $records = array();
-
- public function set($currentTime, Record $record)
- {
- $this->records[$record->data] = array($currentTime + $record->ttl, $record);
- }
-
- public function all()
- {
- return array_values(array_map(
- function ($value) {
- list($expiresAt, $record) = $value;
- return $record;
- },
- $this->records
- ));
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/RecordCache.php b/assets/php/vendor/react/dns/src/Query/RecordCache.php
deleted file mode 100755
index b8142d3..0000000
--- a/assets/php/vendor/react/dns/src/Query/RecordCache.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Cache\CacheInterface;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Promise;
-
-class RecordCache
-{
- private $cache;
- private $expiredAt;
-
- public function __construct(CacheInterface $cache)
- {
- $this->cache = $cache;
- }
-
- public function lookup(Query $query)
- {
- $id = $this->serializeQueryToIdentity($query);
-
- $expiredAt = $this->expiredAt;
-
- return $this->cache
- ->get($id)
- ->then(function ($value) use ($query, $expiredAt) {
- $recordBag = unserialize($value);
-
- if (null !== $expiredAt && $expiredAt <= $query->currentTime) {
- return Promise\reject();
- }
-
- return $recordBag->all();
- });
- }
-
- public function storeResponseMessage($currentTime, Message $message)
- {
- foreach ($message->answers as $record) {
- $this->storeRecord($currentTime, $record);
- }
- }
-
- public function storeRecord($currentTime, Record $record)
- {
- $id = $this->serializeRecordToIdentity($record);
-
- $cache = $this->cache;
-
- $this->cache
- ->get($id)
- ->then(
- function ($value) {
- return unserialize($value);
- },
- function ($e) {
- return new RecordBag();
- }
- )
- ->then(function ($recordBag) use ($id, $currentTime, $record, $cache) {
- $recordBag->set($currentTime, $record);
- $cache->set($id, serialize($recordBag));
- });
- }
-
- public function expire($currentTime)
- {
- $this->expiredAt = $currentTime;
- }
-
- public function serializeQueryToIdentity(Query $query)
- {
- return sprintf('%s:%s:%s', $query->name, $query->type, $query->class);
- }
-
- public function serializeRecordToIdentity(Record $record)
- {
- return sprintf('%s:%s:%s', $record->name, $record->type, $record->class);
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/RetryExecutor.php b/assets/php/vendor/react/dns/src/Query/RetryExecutor.php
deleted file mode 100755
index 90353e5..0000000
--- a/assets/php/vendor/react/dns/src/Query/RetryExecutor.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\Promise\Deferred;
-
-class RetryExecutor implements ExecutorInterface
-{
- private $executor;
- private $retries;
-
- public function __construct(ExecutorInterface $executor, $retries = 2)
- {
- $this->executor = $executor;
- $this->retries = $retries;
- }
-
- public function query($nameserver, Query $query)
- {
- return $this->tryQuery($nameserver, $query, $this->retries);
- }
-
- public function tryQuery($nameserver, Query $query, $retries)
- {
- $that = $this;
- $errorback = function ($error) use ($nameserver, $query, $retries, $that) {
- if (!$error instanceof TimeoutException) {
- throw $error;
- }
- if (0 >= $retries) {
- throw new \RuntimeException(
- sprintf("DNS query for %s failed: too many retries", $query->name),
- 0,
- $error
- );
- }
- return $that->tryQuery($nameserver, $query, $retries-1);
- };
-
- return $this->executor
- ->query($nameserver, $query)
- ->then(null, $errorback);
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Query/TimeoutException.php b/assets/php/vendor/react/dns/src/Query/TimeoutException.php
deleted file mode 100755
index 90bf806..0000000
--- a/assets/php/vendor/react/dns/src/Query/TimeoutException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-class TimeoutException extends \Exception
-{
-}
diff --git a/assets/php/vendor/react/dns/src/Query/TimeoutExecutor.php b/assets/php/vendor/react/dns/src/Query/TimeoutExecutor.php
deleted file mode 100755
index 6a44888..0000000
--- a/assets/php/vendor/react/dns/src/Query/TimeoutExecutor.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace React\Dns\Query;
-
-use React\EventLoop\LoopInterface;
-use React\Promise\Deferred;
-use React\Promise\CancellablePromiseInterface;
-use React\Promise\Timer;
-
-class TimeoutExecutor implements ExecutorInterface
-{
- private $executor;
- private $loop;
- private $timeout;
-
- public function __construct(ExecutorInterface $executor, $timeout, LoopInterface $loop)
- {
- $this->executor = $executor;
- $this->loop = $loop;
- $this->timeout = $timeout;
- }
-
- public function query($nameserver, Query $query)
- {
- return Timer\timeout($this->executor->query($nameserver, $query), $this->timeout, $this->loop)->then(null, function ($e) use ($query) {
- if ($e instanceof Timer\TimeoutException) {
- $e = new TimeoutException(sprintf("DNS query for %s timed out", $query->name), 0, $e);
- }
- throw $e;
- });
- }
-}
diff --git a/assets/php/vendor/react/dns/src/RecordNotFoundException.php b/assets/php/vendor/react/dns/src/RecordNotFoundException.php
deleted file mode 100755
index 0028413..0000000
--- a/assets/php/vendor/react/dns/src/RecordNotFoundException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace React\Dns;
-
-class RecordNotFoundException extends \Exception
-{
-}
diff --git a/assets/php/vendor/react/dns/src/Resolver/Factory.php b/assets/php/vendor/react/dns/src/Resolver/Factory.php
deleted file mode 100755
index 12a912f..0000000
--- a/assets/php/vendor/react/dns/src/Resolver/Factory.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace React\Dns\Resolver;
-
-use React\Cache\ArrayCache;
-use React\Cache\CacheInterface;
-use React\Dns\Config\HostsFile;
-use React\Dns\Protocol\Parser;
-use React\Dns\Protocol\BinaryDumper;
-use React\Dns\Query\CachedExecutor;
-use React\Dns\Query\Executor;
-use React\Dns\Query\ExecutorInterface;
-use React\Dns\Query\HostsFileExecutor;
-use React\Dns\Query\RecordCache;
-use React\Dns\Query\RetryExecutor;
-use React\Dns\Query\TimeoutExecutor;
-use React\EventLoop\LoopInterface;
-
-class Factory
-{
- public function create($nameserver, LoopInterface $loop)
- {
- $nameserver = $this->addPortToServerIfMissing($nameserver);
- $executor = $this->decorateHostsFileExecutor($this->createRetryExecutor($loop));
-
- return new Resolver($nameserver, $executor);
- }
-
- public function createCached($nameserver, LoopInterface $loop, CacheInterface $cache = null)
- {
- if (!($cache instanceof CacheInterface)) {
- $cache = new ArrayCache();
- }
-
- $nameserver = $this->addPortToServerIfMissing($nameserver);
- $executor = $this->decorateHostsFileExecutor($this->createCachedExecutor($loop, $cache));
-
- return new Resolver($nameserver, $executor);
- }
-
- /**
- * Tries to load the hosts file and decorates the given executor on success
- *
- * @param ExecutorInterface $executor
- * @return ExecutorInterface
- * @codeCoverageIgnore
- */
- private function decorateHostsFileExecutor(ExecutorInterface $executor)
- {
- try {
- $executor = new HostsFileExecutor(
- HostsFile::loadFromPathBlocking(),
- $executor
- );
- } catch (\RuntimeException $e) {
- // ignore this file if it can not be loaded
- }
-
- // Windows does not store localhost in hosts file by default but handles this internally
- // To compensate for this, we explicitly use hard-coded defaults for localhost
- if (DIRECTORY_SEPARATOR === '\\') {
- $executor = new HostsFileExecutor(
- new HostsFile("127.0.0.1 localhost\n::1 localhost"),
- $executor
- );
- }
-
- return $executor;
- }
-
- protected function createExecutor(LoopInterface $loop)
- {
- return new TimeoutExecutor(
- new Executor($loop, new Parser(), new BinaryDumper(), null),
- 5.0,
- $loop
- );
- }
-
- protected function createRetryExecutor(LoopInterface $loop)
- {
- return new RetryExecutor($this->createExecutor($loop));
- }
-
- protected function createCachedExecutor(LoopInterface $loop, CacheInterface $cache)
- {
- return new CachedExecutor($this->createRetryExecutor($loop), new RecordCache($cache));
- }
-
- protected function addPortToServerIfMissing($nameserver)
- {
- if (strpos($nameserver, '[') === false && substr_count($nameserver, ':') >= 2) {
- // several colons, but not enclosed in square brackets => enclose IPv6 address in square brackets
- $nameserver = '[' . $nameserver . ']';
- }
- // assume a dummy scheme when checking for the port, otherwise parse_url() fails
- if (parse_url('dummy://' . $nameserver, PHP_URL_PORT) === null) {
- $nameserver .= ':53';
- }
-
- return $nameserver;
- }
-}
diff --git a/assets/php/vendor/react/dns/src/Resolver/Resolver.php b/assets/php/vendor/react/dns/src/Resolver/Resolver.php
deleted file mode 100755
index 4a4983a..0000000
--- a/assets/php/vendor/react/dns/src/Resolver/Resolver.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace React\Dns\Resolver;
-
-use React\Dns\Query\ExecutorInterface;
-use React\Dns\Query\Query;
-use React\Dns\RecordNotFoundException;
-use React\Dns\Model\Message;
-
-class Resolver
-{
- private $nameserver;
- private $executor;
-
- public function __construct($nameserver, ExecutorInterface $executor)
- {
- $this->nameserver = $nameserver;
- $this->executor = $executor;
- }
-
- public function resolve($domain)
- {
- $query = new Query($domain, Message::TYPE_A, Message::CLASS_IN, time());
- $that = $this;
-
- return $this->executor
- ->query($this->nameserver, $query)
- ->then(function (Message $response) use ($query, $that) {
- return $that->extractAddress($query, $response);
- });
- }
-
- public function extractAddress(Query $query, Message $response)
- {
- $answers = $response->answers;
-
- $addresses = $this->resolveAliases($answers, $query->name);
-
- if (0 === count($addresses)) {
- $message = 'DNS Request did not return valid answer.';
- throw new RecordNotFoundException($message);
- }
-
- $address = $addresses[array_rand($addresses)];
- return $address;
- }
-
- public function resolveAliases(array $answers, $name)
- {
- $named = $this->filterByName($answers, $name);
- $aRecords = $this->filterByType($named, Message::TYPE_A);
- $cnameRecords = $this->filterByType($named, Message::TYPE_CNAME);
-
- if ($aRecords) {
- return $this->mapRecordData($aRecords);
- }
-
- if ($cnameRecords) {
- $aRecords = array();
-
- $cnames = $this->mapRecordData($cnameRecords);
- foreach ($cnames as $cname) {
- $targets = $this->filterByName($answers, $cname);
- $aRecords = array_merge(
- $aRecords,
- $this->resolveAliases($answers, $cname)
- );
- }
-
- return $aRecords;
- }
-
- return array();
- }
-
- private function filterByName(array $answers, $name)
- {
- return $this->filterByField($answers, 'name', $name);
- }
-
- private function filterByType(array $answers, $type)
- {
- return $this->filterByField($answers, 'type', $type);
- }
-
- private function filterByField(array $answers, $field, $value)
- {
- $value = strtolower($value);
- return array_filter($answers, function ($answer) use ($field, $value) {
- return $value === strtolower($answer->$field);
- });
- }
-
- private function mapRecordData(array $records)
- {
- return array_map(function ($record) {
- return $record->data;
- }, $records);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/CallableStub.php b/assets/php/vendor/react/dns/tests/CallableStub.php
deleted file mode 100755
index a34a263..0000000
--- a/assets/php/vendor/react/dns/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Dns;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Config/ConfigTest.php b/assets/php/vendor/react/dns/tests/Config/ConfigTest.php
deleted file mode 100755
index 8020408..0000000
--- a/assets/php/vendor/react/dns/tests/Config/ConfigTest.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Config;
-
-use React\Tests\Dns\TestCase;
-use React\Dns\Config\Config;
-
-class ConfigTest extends TestCase
-{
- public function testLoadsSystemDefault()
- {
- $config = Config::loadSystemConfigBlocking();
-
- $this->assertInstanceOf('React\Dns\Config\Config', $config);
- }
-
- public function testLoadsDefaultPath()
- {
- if (DIRECTORY_SEPARATOR === '\\') {
- $this->markTestSkipped('Not supported on Windows');
- }
-
- $config = Config::loadResolvConfBlocking();
-
- $this->assertInstanceOf('React\Dns\Config\Config', $config);
- }
-
- public function testLoadsFromExplicitPath()
- {
- $config = Config::loadResolvConfBlocking(__DIR__ . '/../Fixtures/etc/resolv.conf');
-
- $this->assertEquals(array('8.8.8.8'), $config->nameservers);
- }
-
- /**
- * @expectedException RuntimeException
- */
- public function testLoadThrowsWhenPathIsInvalid()
- {
- Config::loadResolvConfBlocking(__DIR__ . '/invalid.conf');
- }
-
- public function testParsesSingleEntryFile()
- {
- $contents = 'nameserver 8.8.8.8';
- $expected = array('8.8.8.8');
-
- $config = Config::loadResolvConfBlocking('data://text/plain;base64,' . base64_encode($contents));
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testParsesNameserverEntriesFromAverageFileCorrectly()
- {
- $contents = '#
-# Mac OS X Notice
-#
-# This file is not used by the host name and address resolution
-# or the DNS query routing mechanisms used by most processes on
-# this Mac OS X system.
-#
-# This file is automatically generated.
-#
-domain v.cablecom.net
-nameserver 127.0.0.1
-nameserver ::1
-';
- $expected = array('127.0.0.1', '::1');
-
- $config = Config::loadResolvConfBlocking('data://text/plain;base64,' . base64_encode($contents));
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testParsesEmptyFileWithoutNameserverEntries()
- {
- $contents = '';
- $expected = array();
-
- $config = Config::loadResolvConfBlocking('data://text/plain;base64,');
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testParsesFileAndIgnoresCommentsAndInvalidNameserverEntries()
- {
- $contents = '
-# nameserver 1.2.3.4
-; nameserver 2.3.4.5
-
-nameserver 3.4.5.6 # nope
-nameserver 4.5.6.7 5.6.7.8
- nameserver 6.7.8.9
-NameServer 7.8.9.10
-';
- $expected = array();
-
- $config = Config::loadResolvConfBlocking('data://text/plain;base64,' . base64_encode($contents));
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testLoadsFromWmicOnWindows()
- {
- if (DIRECTORY_SEPARATOR !== '\\') {
- $this->markTestSkipped('Only on Windows');
- }
-
- $config = Config::loadWmicBlocking();
-
- $this->assertInstanceOf('React\Dns\Config\Config', $config);
- }
-
- public function testLoadsSingleEntryFromWmicOutput()
- {
- $contents = '
-Node,DNSServerSearchOrder
-ACE,
-ACE,{192.168.2.1}
-ACE,
-';
- $expected = array('192.168.2.1');
-
- $config = Config::loadWmicBlocking($this->echoCommand($contents));
-
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testLoadsEmptyListFromWmicOutput()
- {
- $contents = '
-Node,DNSServerSearchOrder
-ACE,
-';
- $expected = array();
-
- $config = Config::loadWmicBlocking($this->echoCommand($contents));
-
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testLoadsSingleEntryForMultipleNicsFromWmicOutput()
- {
- $contents = '
-Node,DNSServerSearchOrder
-ACE,
-ACE,{192.168.2.1}
-ACE,
-ACE,{192.168.2.2}
-ACE,
-';
- $expected = array('192.168.2.1', '192.168.2.2');
-
- $config = Config::loadWmicBlocking($this->echoCommand($contents));
-
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testLoadsMultipleEntriesForSingleNicWithSemicolonFromWmicOutput()
- {
- $contents = '
-Node,DNSServerSearchOrder
-ACE,
-ACE,{192.168.2.1;192.168.2.2}
-ACE,
-';
- $expected = array('192.168.2.1', '192.168.2.2');
-
- $config = Config::loadWmicBlocking($this->echoCommand($contents));
-
- $this->assertEquals($expected, $config->nameservers);
- }
-
- public function testLoadsMultipleEntriesForSingleNicWithQuotesFromWmicOutput()
- {
- $contents = '
-Node,DNSServerSearchOrder
-ACE,
-ACE,{"192.168.2.1","192.168.2.2"}
-ACE,
-';
- $expected = array('192.168.2.1', '192.168.2.2');
-
- $config = Config::loadWmicBlocking($this->echoCommand($contents));
-
- $this->assertEquals($expected, $config->nameservers);
- }
-
- private function echoCommand($output)
- {
- return 'echo ' . escapeshellarg($output);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Config/FilesystemFactoryTest.php b/assets/php/vendor/react/dns/tests/Config/FilesystemFactoryTest.php
deleted file mode 100755
index bb9eac7..0000000
--- a/assets/php/vendor/react/dns/tests/Config/FilesystemFactoryTest.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace React\Test\Dns\Config;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Config\FilesystemFactory;
-
-class FilesystemFactoryTest extends TestCase
-{
- /** @test */
- public function parseEtcResolvConfShouldParseCorrectly()
- {
- $contents = '#
-# Mac OS X Notice
-#
-# This file is not used by the host name and address resolution
-# or the DNS query routing mechanisms used by most processes on
-# this Mac OS X system.
-#
-# This file is automatically generated.
-#
-domain v.cablecom.net
-nameserver 127.0.0.1
-nameserver 8.8.8.8
-';
- $expected = array('127.0.0.1', '8.8.8.8');
-
- $capturedConfig = null;
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $factory = new FilesystemFactory($loop);
- $factory->parseEtcResolvConf($contents)->then(function ($config) use (&$capturedConfig) {
- $capturedConfig = $config;
- });
-
- $this->assertNotNull($capturedConfig);
- $this->assertSame($expected, $capturedConfig->nameservers);
- }
-
- /** @test */
- public function createShouldLoadStuffFromFilesystem()
- {
- $this->markTestIncomplete('Filesystem API is incomplete');
-
- $expected = array('8.8.8.8');
-
- $triggerListener = null;
- $capturedConfig = null;
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop
- ->expects($this->once())
- ->method('addReadStream')
- ->will($this->returnCallback(function ($stream, $listener) use (&$triggerListener) {
- $triggerListener = function () use ($stream, $listener) {
- call_user_func($listener, $stream);
- };
- }));
-
- $factory = new FilesystemFactory($loop);
- $factory->create(__DIR__.'/../Fixtures/etc/resolv.conf')->then(function ($config) use (&$capturedConfig) {
- $capturedConfig = $config;
- });
-
- $triggerListener();
-
- $this->assertNotNull($capturedConfig);
- $this->assertSame($expected, $capturedConfig->nameservers);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Config/HostsFileTest.php b/assets/php/vendor/react/dns/tests/Config/HostsFileTest.php
deleted file mode 100755
index ff74ad2..0000000
--- a/assets/php/vendor/react/dns/tests/Config/HostsFileTest.php
+++ /dev/null
@@ -1,170 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Config;
-
-use React\Tests\Dns\TestCase;
-use React\Dns\Config\HostsFile;
-
-class HostsFileTest extends TestCase
-{
- public function testLoadsFromDefaultPath()
- {
- $hosts = HostsFile::loadFromPathBlocking();
-
- $this->assertInstanceOf('React\Dns\Config\HostsFile', $hosts);
- }
-
- public function testDefaultShouldHaveLocalhostMapped()
- {
- if (DIRECTORY_SEPARATOR === '\\') {
- $this->markTestSkipped('Not supported on Windows');
- }
-
- $hosts = HostsFile::loadFromPathBlocking();
-
- $this->assertContains('127.0.0.1', $hosts->getIpsForHost('localhost'));
- }
-
- /**
- * @expectedException RuntimeException
- */
- public function testLoadThrowsForInvalidPath()
- {
- HostsFile::loadFromPathBlocking('does/not/exist');
- }
-
- public function testContainsSingleLocalhostEntry()
- {
- $hosts = new HostsFile('127.0.0.1 localhost');
-
- $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('localhost'));
- $this->assertEquals(array(), $hosts->getIpsForHost('example.com'));
- }
-
- public function testNonIpReturnsNothingForInvalidHosts()
- {
- $hosts = new HostsFile('a b');
-
- $this->assertEquals(array(), $hosts->getIpsForHost('a'));
- $this->assertEquals(array(), $hosts->getIpsForHost('b'));
- }
-
- public function testIgnoresIpv6ZoneId()
- {
- $hosts = new HostsFile('fe80::1%lo0 localhost');
-
- $this->assertEquals(array('fe80::1'), $hosts->getIpsForHost('localhost'));
- }
-
- public function testSkipsComments()
- {
- $hosts = new HostsFile('# start' . PHP_EOL .'#127.0.0.1 localhost' . PHP_EOL . '127.0.0.2 localhost # example.com');
-
- $this->assertEquals(array('127.0.0.2'), $hosts->getIpsForHost('localhost'));
- $this->assertEquals(array(), $hosts->getIpsForHost('example.com'));
- }
-
- public function testContainsSingleLocalhostEntryWithCaseIgnored()
- {
- $hosts = new HostsFile('127.0.0.1 LocalHost');
-
- $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('LOCALHOST'));
- }
-
- public function testEmptyFileContainsNothing()
- {
- $hosts = new HostsFile('');
-
- $this->assertEquals(array(), $hosts->getIpsForHost('example.com'));
- }
-
- public function testSingleEntryWithMultipleNames()
- {
- $hosts = new HostsFile('127.0.0.1 localhost example.com');
-
- $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('example.com'));
- $this->assertEquals(array('127.0.0.1'), $hosts->getIpsForHost('localhost'));
- }
-
- public function testMergesEntriesOverMultipleLines()
- {
- $hosts = new HostsFile("127.0.0.1 localhost\n127.0.0.2 localhost\n127.0.0.3 a localhost b\n127.0.0.4 a localhost");
-
- $this->assertEquals(array('127.0.0.1', '127.0.0.2', '127.0.0.3', '127.0.0.4'), $hosts->getIpsForHost('localhost'));
- }
-
- public function testMergesIpv4AndIpv6EntriesOverMultipleLines()
- {
- $hosts = new HostsFile("127.0.0.1 localhost\n::1 localhost");
-
- $this->assertEquals(array('127.0.0.1', '::1'), $hosts->getIpsForHost('localhost'));
- }
-
- public function testReverseLookup()
- {
- $hosts = new HostsFile('127.0.0.1 localhost');
-
- $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.1'));
- $this->assertEquals(array(), $hosts->getHostsForIp('192.168.1.1'));
- }
-
- public function testReverseSkipsComments()
- {
- $hosts = new HostsFile("# start\n#127.0.0.1 localhosted\n127.0.0.2\tlocalhost\t# example.com\n\t127.0.0.3\t\texample.org\t\t");
-
- $this->assertEquals(array(), $hosts->getHostsForIp('127.0.0.1'));
- $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.2'));
- $this->assertEquals(array('example.org'), $hosts->getHostsForIp('127.0.0.3'));
- }
-
- public function testReverseNonIpReturnsNothing()
- {
- $hosts = new HostsFile('127.0.0.1 localhost');
-
- $this->assertEquals(array(), $hosts->getHostsForIp('localhost'));
- $this->assertEquals(array(), $hosts->getHostsForIp('127.0.0.1.1'));
- }
-
- public function testReverseNonIpReturnsNothingForInvalidHosts()
- {
- $hosts = new HostsFile('a b');
-
- $this->assertEquals(array(), $hosts->getHostsForIp('a'));
- $this->assertEquals(array(), $hosts->getHostsForIp('b'));
- }
-
- public function testReverseLookupReturnsLowerCaseHost()
- {
- $hosts = new HostsFile('127.0.0.1 LocalHost');
-
- $this->assertEquals(array('localhost'), $hosts->getHostsForIp('127.0.0.1'));
- }
-
- public function testReverseLookupChecksNormalizedIpv6()
- {
- $hosts = new HostsFile('FE80::00a1 localhost');
-
- $this->assertEquals(array('localhost'), $hosts->getHostsForIp('fe80::A1'));
- }
-
- public function testReverseLookupIgnoresIpv6ZoneId()
- {
- $hosts = new HostsFile('fe80::1%lo0 localhost');
-
- $this->assertEquals(array('localhost'), $hosts->getHostsForIp('fe80::1'));
- }
-
- public function testReverseLookupReturnsMultipleHostsOverSingleLine()
- {
- $hosts = new HostsFile("::1 ip6-localhost ip6-loopback");
-
- $this->assertEquals(array('ip6-localhost', 'ip6-loopback'), $hosts->getHostsForIp('::1'));
- }
-
- public function testReverseLookupReturnsMultipleHostsOverMultipleLines()
- {
- $hosts = new HostsFile("::1 ip6-localhost\n::1 ip6-loopback");
-
- $this->assertEquals(array('ip6-localhost', 'ip6-loopback'), $hosts->getHostsForIp('::1'));
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Fixtures/etc/resolv.conf b/assets/php/vendor/react/dns/tests/Fixtures/etc/resolv.conf
deleted file mode 100755
index cae093a..0000000
--- a/assets/php/vendor/react/dns/tests/Fixtures/etc/resolv.conf
+++ /dev/null
@@ -1 +0,0 @@
-nameserver 8.8.8.8
diff --git a/assets/php/vendor/react/dns/tests/FunctionalResolverTest.php b/assets/php/vendor/react/dns/tests/FunctionalResolverTest.php
deleted file mode 100755
index 0807e86..0000000
--- a/assets/php/vendor/react/dns/tests/FunctionalResolverTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace React\Tests\Dns;
-
-use React\Tests\Dns\TestCase;
-use React\EventLoop\Factory as LoopFactory;
-use React\Dns\Resolver\Resolver;
-use React\Dns\Resolver\Factory;
-
-class FunctionalTest extends TestCase
-{
- public function setUp()
- {
- $this->loop = LoopFactory::create();
-
- $factory = new Factory();
- $this->resolver = $factory->create('8.8.8.8', $this->loop);
- }
-
- public function testResolveLocalhostResolves()
- {
- $promise = $this->resolver->resolve('localhost');
- $promise->then($this->expectCallableOnce(), $this->expectCallableNever());
-
- $this->loop->run();
- }
-
- /**
- * @group internet
- */
- public function testResolveGoogleResolves()
- {
- $promise = $this->resolver->resolve('google.com');
- $promise->then($this->expectCallableOnce(), $this->expectCallableNever());
-
- $this->loop->run();
- }
-
- /**
- * @group internet
- */
- public function testResolveInvalidRejects()
- {
- $promise = $this->resolver->resolve('example.invalid');
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
-
- $this->loop->run();
- }
-
- public function testResolveCancelledRejectsImmediately()
- {
- $promise = $this->resolver->resolve('google.com');
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- $promise->cancel();
-
- $time = microtime(true);
- $this->loop->run();
- $time = microtime(true) - $time;
-
- $this->assertLessThan(0.1, $time);
- }
-
- public function testInvalidResolverDoesNotResolveGoogle()
- {
- $factory = new Factory();
- $this->resolver = $factory->create('255.255.255.255', $this->loop);
-
- $promise = $this->resolver->resolve('google.com');
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Model/MessageTest.php b/assets/php/vendor/react/dns/tests/Model/MessageTest.php
deleted file mode 100755
index 53d6b28..0000000
--- a/assets/php/vendor/react/dns/tests/Model/MessageTest.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Model;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-
-class MessageTest extends TestCase
-{
- public function testCreateRequestDesiresRecusion()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $request = Message::createRequestForQuery($query);
-
- $this->assertTrue($request->header->isQuery());
- $this->assertSame(1, $request->header->get('rd'));
- }
-
- public function testCreateResponseWithNoAnswers()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $answers = array();
- $request = Message::createResponseWithAnswersForQuery($query, $answers);
-
- $this->assertFalse($request->header->isQuery());
- $this->assertTrue($request->header->isResponse());
- $this->assertEquals(0, $request->header->get('anCount'));
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Protocol/BinaryDumperTest.php b/assets/php/vendor/react/dns/tests/Protocol/BinaryDumperTest.php
deleted file mode 100755
index bf60ca9..0000000
--- a/assets/php/vendor/react/dns/tests/Protocol/BinaryDumperTest.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Protocol;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Protocol\BinaryDumper;
-use React\Dns\Model\Message;
-
-class BinaryDumperTest extends TestCase
-{
- public function testRequestToBinary()
- {
- $data = "";
- $data .= "72 62 01 00 00 01 00 00 00 00 00 00"; // header
- $data .= "04 69 67 6f 72 02 69 6f 00"; // question: igor.io
- $data .= "00 01 00 01"; // question: type A, class IN
-
- $expected = $this->formatHexDump(str_replace(' ', '', $data), 2);
-
- $request = new Message();
- $request->header->set('id', 0x7262);
- $request->header->set('rd', 1);
-
- $request->questions[] = array(
- 'name' => 'igor.io',
- 'type' => Message::TYPE_A,
- 'class' => Message::CLASS_IN,
- );
-
- $request->prepare();
-
- $dumper = new BinaryDumper();
- $data = $dumper->toBinary($request);
- $data = $this->convertBinaryToHexDump($data);
-
- $this->assertSame($expected, $data);
- }
-
- private function convertBinaryToHexDump($input)
- {
- return $this->formatHexDump(implode('', unpack('H*', $input)));
- }
-
- private function formatHexDump($input)
- {
- return implode(' ', str_split($input, 2));
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Protocol/ParserTest.php b/assets/php/vendor/react/dns/tests/Protocol/ParserTest.php
deleted file mode 100755
index 195fad2..0000000
--- a/assets/php/vendor/react/dns/tests/Protocol/ParserTest.php
+++ /dev/null
@@ -1,343 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Protocol;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Protocol\Parser;
-use React\Dns\Model\Message;
-
-class ParserTest extends TestCase
-{
- public function setUp()
- {
- $this->parser = new Parser();
- }
-
- /**
- * @dataProvider provideConvertTcpDumpToBinary
- */
- public function testConvertTcpDumpToBinary($expected, $data)
- {
- $this->assertSame($expected, $this->convertTcpDumpToBinary($data));
- }
-
- public function provideConvertTcpDumpToBinary()
- {
- return array(
- array(chr(0x72).chr(0x62), "72 62"),
- array(chr(0x72).chr(0x62).chr(0x01).chr(0x00), "72 62 01 00"),
- array(chr(0x72).chr(0x62).chr(0x01).chr(0x00).chr(0x00).chr(0x01), "72 62 01 00 00 01"),
- array(chr(0x01).chr(0x00).chr(0x01), "01 00 01"),
- );
- }
-
- public function testParseRequest()
- {
- $data = "";
- $data .= "72 62 01 00 00 01 00 00 00 00 00 00"; // header
- $data .= "04 69 67 6f 72 02 69 6f 00"; // question: igor.io
- $data .= "00 01 00 01"; // question: type A, class IN
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $request = $this->parser->parseMessage($data);
-
- $header = $request->header;
- $this->assertSame(0x7262, $header->get('id'));
- $this->assertSame(1, $header->get('qdCount'));
- $this->assertSame(0, $header->get('anCount'));
- $this->assertSame(0, $header->get('nsCount'));
- $this->assertSame(0, $header->get('arCount'));
- $this->assertSame(0, $header->get('qr'));
- $this->assertSame(Message::OPCODE_QUERY, $header->get('opcode'));
- $this->assertSame(0, $header->get('aa'));
- $this->assertSame(0, $header->get('tc'));
- $this->assertSame(1, $header->get('rd'));
- $this->assertSame(0, $header->get('ra'));
- $this->assertSame(0, $header->get('z'));
- $this->assertSame(Message::RCODE_OK, $header->get('rcode'));
-
- $this->assertCount(1, $request->questions);
- $this->assertSame('igor.io', $request->questions[0]['name']);
- $this->assertSame(Message::TYPE_A, $request->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $request->questions[0]['class']);
- }
-
- public function testParseResponse()
- {
- $data = "";
- $data .= "72 62 81 80 00 01 00 01 00 00 00 00"; // header
- $data .= "04 69 67 6f 72 02 69 6f 00"; // question: igor.io
- $data .= "00 01 00 01"; // question: type A, class IN
- $data .= "c0 0c"; // answer: offset pointer to igor.io
- $data .= "00 01 00 01"; // answer: type A, class IN
- $data .= "00 01 51 80"; // answer: ttl 86400
- $data .= "00 04"; // answer: rdlength 4
- $data .= "b2 4f a9 83"; // answer: rdata 178.79.169.131
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = $this->parser->parseMessage($data);
-
- $header = $response->header;
- $this->assertSame(0x7262, $header->get('id'));
- $this->assertSame(1, $header->get('qdCount'));
- $this->assertSame(1, $header->get('anCount'));
- $this->assertSame(0, $header->get('nsCount'));
- $this->assertSame(0, $header->get('arCount'));
- $this->assertSame(1, $header->get('qr'));
- $this->assertSame(Message::OPCODE_QUERY, $header->get('opcode'));
- $this->assertSame(0, $header->get('aa'));
- $this->assertSame(0, $header->get('tc'));
- $this->assertSame(1, $header->get('rd'));
- $this->assertSame(1, $header->get('ra'));
- $this->assertSame(0, $header->get('z'));
- $this->assertSame(Message::RCODE_OK, $header->get('rcode'));
-
- $this->assertCount(1, $response->questions);
- $this->assertSame('igor.io', $response->questions[0]['name']);
- $this->assertSame(Message::TYPE_A, $response->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $response->questions[0]['class']);
-
- $this->assertCount(1, $response->answers);
- $this->assertSame('igor.io', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_A, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(86400, $response->answers[0]->ttl);
- $this->assertSame('178.79.169.131', $response->answers[0]->data);
- }
-
- public function testParseQuestionWithTwoQuestions()
- {
- $data = "";
- $data .= "04 69 67 6f 72 02 69 6f 00"; // question: igor.io
- $data .= "00 01 00 01"; // question: type A, class IN
- $data .= "03 77 77 77 04 69 67 6f 72 02 69 6f 00"; // question: www.igor.io
- $data .= "00 01 00 01"; // question: type A, class IN
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $request = new Message();
- $request->header->set('qdCount', 2);
- $request->data = $data;
-
- $this->parser->parseQuestion($request);
-
- $this->assertCount(2, $request->questions);
- $this->assertSame('igor.io', $request->questions[0]['name']);
- $this->assertSame(Message::TYPE_A, $request->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $request->questions[0]['class']);
- $this->assertSame('www.igor.io', $request->questions[1]['name']);
- $this->assertSame(Message::TYPE_A, $request->questions[1]['type']);
- $this->assertSame(Message::CLASS_IN, $request->questions[1]['class']);
- }
-
- public function testParseAnswerWithInlineData()
- {
- $data = "";
- $data .= "04 69 67 6f 72 02 69 6f 00"; // answer: igor.io
- $data .= "00 01 00 01"; // answer: type A, class IN
- $data .= "00 01 51 80"; // answer: ttl 86400
- $data .= "00 04"; // answer: rdlength 4
- $data .= "b2 4f a9 83"; // answer: rdata 178.79.169.131
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = new Message();
- $response->header->set('anCount', 1);
- $response->data = $data;
-
- $this->parser->parseAnswer($response);
-
- $this->assertCount(1, $response->answers);
- $this->assertSame('igor.io', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_A, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(86400, $response->answers[0]->ttl);
- $this->assertSame('178.79.169.131', $response->answers[0]->data);
- }
-
- public function testParseResponseWithCnameAndOffsetPointers()
- {
- $data = "";
- $data .= "9e 8d 81 80 00 01 00 01 00 00 00 00"; // header
- $data .= "04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d 00"; // question: mail.google.com
- $data .= "00 05 00 01"; // question: type CNAME, class IN
- $data .= "c0 0c"; // answer: offset pointer to mail.google.com
- $data .= "00 05 00 01"; // answer: type CNAME, class IN
- $data .= "00 00 a8 9c"; // answer: ttl 43164
- $data .= "00 0f"; // answer: rdlength 15
- $data .= "0a 67 6f 6f 67 6c 65 6d 61 69 6c 01 6c"; // answer: rdata googlemail.l.
- $data .= "c0 11"; // answer: rdata offset pointer to google.com
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = $this->parser->parseMessage($data);
-
- $this->assertCount(1, $response->questions);
- $this->assertSame('mail.google.com', $response->questions[0]['name']);
- $this->assertSame(Message::TYPE_CNAME, $response->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $response->questions[0]['class']);
-
- $this->assertCount(1, $response->answers);
- $this->assertSame('mail.google.com', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_CNAME, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(43164, $response->answers[0]->ttl);
- $this->assertSame('googlemail.l.google.com', $response->answers[0]->data);
- }
-
- public function testParseAAAAResponse()
- {
- $data = "";
- $data .= "cd 72 81 80 00 01 00 01 00 00 00 00 06"; // header
- $data .= "67 6f 6f 67 6c 65 03 63 6f 6d 00"; // question: google.com
- $data .= "00 1c 00 01"; // question: type AAAA, class IN
- $data .= "c0 0c"; // answer: offset pointer to google.com
- $data .= "00 1c 00 01"; // answer: type AAAA, class IN
- $data .= "00 00 01 2b"; // answer: ttl 299
- $data .= "00 10"; // answer: rdlength 16
- $data .= "2a 00 14 50 40 09 08 09 00 00 00 00 00 00 20 0e"; // answer: 2a00:1450:4009:809::200e
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = $this->parser->parseMessage($data);
-
- $header = $response->header;
- $this->assertSame(0xcd72, $header->get('id'));
- $this->assertSame(1, $header->get('qdCount'));
- $this->assertSame(1, $header->get('anCount'));
- $this->assertSame(0, $header->get('nsCount'));
- $this->assertSame(0, $header->get('arCount'));
- $this->assertSame(1, $header->get('qr'));
- $this->assertSame(Message::OPCODE_QUERY, $header->get('opcode'));
- $this->assertSame(0, $header->get('aa'));
- $this->assertSame(0, $header->get('tc'));
- $this->assertSame(1, $header->get('rd'));
- $this->assertSame(1, $header->get('ra'));
- $this->assertSame(0, $header->get('z'));
- $this->assertSame(Message::RCODE_OK, $header->get('rcode'));
-
- $this->assertCount(1, $response->questions);
- $this->assertSame('google.com', $response->questions[0]['name']);
- $this->assertSame(Message::TYPE_AAAA, $response->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $response->questions[0]['class']);
-
- $this->assertCount(1, $response->answers);
- $this->assertSame('google.com', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_AAAA, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(299, $response->answers[0]->ttl);
- $this->assertSame('2a00:1450:4009:809::200e', $response->answers[0]->data);
- }
-
- public function testParseResponseWithTwoAnswers()
- {
- $data = "";
- $data .= "bc 73 81 80 00 01 00 02 00 00 00 00"; // header
- $data .= "02 69 6f 0d 77 68 6f 69 73 2d 73 65 72 76 65 72 73 03 6e 65 74 00";
- // question: io.whois-servers.net
- $data .= "00 01 00 01"; // question: type A, class IN
- $data .= "c0 0c"; // answer: offset pointer to io.whois-servers.net
- $data .= "00 05 00 01"; // answer: type CNAME, class IN
- $data .= "00 00 00 29"; // answer: ttl 41
- $data .= "00 0e"; // answer: rdlength 14
- $data .= "05 77 68 6f 69 73 03 6e 69 63 02 69 6f 00"; // answer: rdata whois.nic.io
- $data .= "c0 32"; // answer: offset pointer to whois.nic.io
- $data .= "00 01 00 01"; // answer: type CNAME, class IN
- $data .= "00 00 0d f7"; // answer: ttl 3575
- $data .= "00 04"; // answer: rdlength 4
- $data .= "c1 df 4e 98"; // answer: rdata 193.223.78.152
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = $this->parser->parseMessage($data);
-
- $this->assertCount(1, $response->questions);
- $this->assertSame('io.whois-servers.net', $response->questions[0]['name']);
- $this->assertSame(Message::TYPE_A, $response->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $response->questions[0]['class']);
-
- $this->assertCount(2, $response->answers);
-
- $this->assertSame('io.whois-servers.net', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_CNAME, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(41, $response->answers[0]->ttl);
- $this->assertSame('whois.nic.io', $response->answers[0]->data);
-
- $this->assertSame('whois.nic.io', $response->answers[1]->name);
- $this->assertSame(Message::TYPE_A, $response->answers[1]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[1]->class);
- $this->assertSame(3575, $response->answers[1]->ttl);
- $this->assertSame('193.223.78.152', $response->answers[1]->data);
- }
-
- public function testParsePTRResponse()
- {
- $data = "";
- $data .= "5d d8 81 80 00 01 00 01 00 00 00 00"; // header
- $data .= "01 34 01 34 01 38 01 38 07 69 6e"; // question: 4.4.8.8.in-addr.arpa
- $data .= "2d 61 64 64 72 04 61 72 70 61 00"; // question (continued)
- $data .= "00 0c 00 01"; // question: type PTR, class IN
- $data .= "c0 0c"; // answer: offset pointer to rdata
- $data .= "00 0c 00 01"; // answer: type PTR, class IN
- $data .= "00 01 51 7f"; // answer: ttl 86399
- $data .= "00 20"; // answer: rdlength 32
- $data .= "13 67 6f 6f 67 6c 65 2d 70 75 62 6c 69 63 2d 64"; // answer: rdata google-public-dns-b.google.com.
- $data .= "6e 73 2d 62 06 67 6f 6f 67 6c 65 03 63 6f 6d 00";
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $response = $this->parser->parseMessage($data);
-
- $header = $response->header;
- $this->assertSame(0x5dd8, $header->get('id'));
- $this->assertSame(1, $header->get('qdCount'));
- $this->assertSame(1, $header->get('anCount'));
- $this->assertSame(0, $header->get('nsCount'));
- $this->assertSame(0, $header->get('arCount'));
- $this->assertSame(1, $header->get('qr'));
- $this->assertSame(Message::OPCODE_QUERY, $header->get('opcode'));
- $this->assertSame(0, $header->get('aa'));
- $this->assertSame(0, $header->get('tc'));
- $this->assertSame(1, $header->get('rd'));
- $this->assertSame(1, $header->get('ra'));
- $this->assertSame(0, $header->get('z'));
- $this->assertSame(Message::RCODE_OK, $header->get('rcode'));
-
- $this->assertCount(1, $response->questions);
- $this->assertSame('4.4.8.8.in-addr.arpa', $response->questions[0]['name']);
- $this->assertSame(Message::TYPE_PTR, $response->questions[0]['type']);
- $this->assertSame(Message::CLASS_IN, $response->questions[0]['class']);
-
- $this->assertCount(1, $response->answers);
- $this->assertSame('4.4.8.8.in-addr.arpa', $response->answers[0]->name);
- $this->assertSame(Message::TYPE_PTR, $response->answers[0]->type);
- $this->assertSame(Message::CLASS_IN, $response->answers[0]->class);
- $this->assertSame(86399, $response->answers[0]->ttl);
- $this->assertSame('google-public-dns-b.google.com', $response->answers[0]->data);
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testParseIncomplete()
- {
- $data = "";
- $data .= "72 62 01 00 00 01 00 00 00 00 00 00"; // header
- $data .= "04 69 67 6f 72 02 69 6f 00"; // question: igor.io
- //$data .= "00 01 00 01"; // question: type A, class IN
-
- $data = $this->convertTcpDumpToBinary($data);
-
- $this->parser->parseMessage($data);
- }
-
- private function convertTcpDumpToBinary($input)
- {
- // sudo ngrep -d en1 -x port 53
-
- return pack('H*', str_replace(' ', '', $input));
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/CachedExecutorTest.php b/assets/php/vendor/react/dns/tests/Query/CachedExecutorTest.php
deleted file mode 100755
index d08ed05..0000000
--- a/assets/php/vendor/react/dns/tests/Query/CachedExecutorTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use React\Tests\Dns\TestCase;
-use React\Dns\Query\CachedExecutor;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Promise;
-
-class CachedExecutorTest extends TestCase
-{
- /**
- * @covers React\Dns\Query\CachedExecutor
- * @test
- */
- public function queryShouldDelegateToDecoratedExecutor()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnValue($this->createPromiseMock()));
-
- $cache = $this->getMockBuilder('React\Dns\Query\RecordCache')
- ->disableOriginalConstructor()
- ->getMock();
- $cache
- ->expects($this->once())
- ->method('lookup')
- ->will($this->returnValue(Promise\reject()));
- $cachedExecutor = new CachedExecutor($executor, $cache);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $cachedExecutor->query('8.8.8.8', $query);
- }
-
- /**
- * @covers React\Dns\Query\CachedExecutor
- * @test
- */
- public function callingQueryTwiceShouldUseCachedResult()
- {
- $cachedRecords = array(new Record('igor.io', Message::TYPE_A, Message::CLASS_IN));
-
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->will($this->callQueryCallbackWithAddress('178.79.169.131'));
-
- $cache = $this->getMockBuilder('React\Dns\Query\RecordCache')
- ->disableOriginalConstructor()
- ->getMock();
- $cache
- ->expects($this->at(0))
- ->method('lookup')
- ->with($this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnValue(Promise\reject()));
- $cache
- ->expects($this->at(1))
- ->method('storeResponseMessage')
- ->with($this->isType('integer'), $this->isInstanceOf('React\Dns\Model\Message'));
- $cache
- ->expects($this->at(2))
- ->method('lookup')
- ->with($this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnValue(Promise\resolve($cachedRecords)));
-
- $cachedExecutor = new CachedExecutor($executor, $cache);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $cachedExecutor->query('8.8.8.8', $query, function () {}, function () {});
- $cachedExecutor->query('8.8.8.8', $query, function () {}, function () {});
- }
-
- private function callQueryCallbackWithAddress($address)
- {
- return $this->returnCallback(function ($nameserver, $query) use ($address) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record($query->name, $query->type, $query->class);
- $response->answers[] = new Record($query->name, $query->type, $query->class, 3600, $address);
-
- return Promise\resolve($response);
- });
- }
-
- private function createExecutorMock()
- {
- return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
- }
-
- private function createPromiseMock()
- {
- return $this->getMockBuilder('React\Promise\PromiseInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/ExecutorTest.php b/assets/php/vendor/react/dns/tests/Query/ExecutorTest.php
deleted file mode 100755
index 0d7ac1d..0000000
--- a/assets/php/vendor/react/dns/tests/Query/ExecutorTest.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use Clue\React\Block;
-use React\Dns\Query\Executor;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Dns\Protocol\BinaryDumper;
-use React\Tests\Dns\TestCase;
-
-class ExecutorTest extends TestCase
-{
- private $loop;
- private $parser;
- private $dumper;
- private $executor;
-
- public function setUp()
- {
- $this->loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $this->parser = $this->getMockBuilder('React\Dns\Protocol\Parser')->getMock();
- $this->dumper = new BinaryDumper();
-
- $this->executor = new Executor($this->loop, $this->parser, $this->dumper);
- }
-
- /** @test */
- public function queryShouldCreateUdpRequest()
- {
- $timer = $this->createTimerMock();
- $this->loop
- ->expects($this->any())
- ->method('addTimer')
- ->will($this->returnValue($timer));
-
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->once())
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->returnNewConnectionMock(false));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $this->executor->query('8.8.8.8:53', $query);
- }
-
- /** @test */
- public function resolveShouldRejectIfRequestIsLargerThan512Bytes()
- {
- $query = new Query(str_repeat('a', 512).'.igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $this->setExpectedException('RuntimeException', 'DNS query for ' . $query->name . ' failed: Requested transport "tcp" not available, only UDP is supported in this version');
- Block\await($promise, $this->loop);
- }
-
- /** @test */
- public function resolveShouldCloseConnectionWhenCancelled()
- {
- $conn = $this->createConnectionMock(false);
- $conn->expects($this->once())->method('close');
-
- $timer = $this->createTimerMock();
- $this->loop
- ->expects($this->any())
- ->method('addTimer')
- ->will($this->returnValue($timer));
-
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->once())
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->returnValue($conn));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $promise->cancel();
-
- $this->setExpectedException('React\Dns\Query\CancellationException', 'DNS query for igor.io has been cancelled');
- Block\await($promise, $this->loop);
- }
-
- /** @test */
- public function resolveShouldNotStartOrCancelTimerWhenCancelledWithTimeoutIsNull()
- {
- $this->loop
- ->expects($this->never())
- ->method('addTimer');
-
- $this->executor = new Executor($this->loop, $this->parser, $this->dumper, null);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('127.0.0.1:53', $query);
-
- $promise->cancel();
-
- $this->setExpectedException('React\Dns\Query\CancellationException', 'DNS query for igor.io has been cancelled');
- Block\await($promise, $this->loop);
- }
-
- /** @test */
- public function resolveShouldRejectIfResponseIsTruncated()
- {
- $timer = $this->createTimerMock();
-
- $this->loop
- ->expects($this->any())
- ->method('addTimer')
- ->will($this->returnValue($timer));
-
- $this->parser
- ->expects($this->once())
- ->method('parseMessage')
- ->will($this->returnTruncatedResponse());
-
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->once())
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->returnNewConnectionMock());
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $this->executor->query('8.8.8.8:53', $query);
- }
-
- /** @test */
- public function resolveShouldFailIfUdpThrow()
- {
- $this->loop
- ->expects($this->never())
- ->method('addTimer');
-
- $this->parser
- ->expects($this->never())
- ->method('parseMessage');
-
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->once())
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->throwException(new \Exception('Nope')));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $this->setExpectedException('RuntimeException', 'DNS query for igor.io failed: Nope');
- Block\await($promise, $this->loop);
- }
-
- /** @test */
- public function resolveShouldCancelTimerWhenFullResponseIsReceived()
- {
- $conn = $this->createConnectionMock();
-
- $this->parser
- ->expects($this->once())
- ->method('parseMessage')
- ->will($this->returnStandardResponse());
-
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->at(0))
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->returnNewConnectionMock());
-
-
- $timer = $this->createTimerMock();
-
- $this->loop
- ->expects($this->once())
- ->method('addTimer')
- ->with(5, $this->isInstanceOf('Closure'))
- ->will($this->returnValue($timer));
-
- $this->loop
- ->expects($this->once())
- ->method('cancelTimer')
- ->with($timer);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $this->executor->query('8.8.8.8:53', $query);
- }
-
- /** @test */
- public function resolveShouldCloseConnectionOnTimeout()
- {
- $this->executor = $this->createExecutorMock();
- $this->executor
- ->expects($this->at(0))
- ->method('createConnection')
- ->with('8.8.8.8:53', 'udp')
- ->will($this->returnNewConnectionMock(false));
-
- $timer = $this->createTimerMock();
-
- $this->loop
- ->expects($this->never())
- ->method('cancelTimer');
-
- $this->loop
- ->expects($this->once())
- ->method('addTimer')
- ->with(5, $this->isInstanceOf('Closure'))
- ->will($this->returnCallback(function ($time, $callback) use (&$timerCallback, $timer) {
- $timerCallback = $callback;
- return $timer;
- }));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $this->assertNotNull($timerCallback);
- $timerCallback();
-
- $this->setExpectedException('React\Dns\Query\TimeoutException', 'DNS query for igor.io timed out');
- Block\await($promise, $this->loop);
- }
-
- private function returnStandardResponse()
- {
- $that = $this;
- $callback = function ($data) use ($that) {
- $response = new Message();
- $that->convertMessageToStandardResponse($response);
- return $response;
- };
-
- return $this->returnCallback($callback);
- }
-
- private function returnTruncatedResponse()
- {
- $that = $this;
- $callback = function ($data) use ($that) {
- $response = new Message();
- $that->convertMessageToTruncatedResponse($response);
- return $response;
- };
-
- return $this->returnCallback($callback);
- }
-
- public function convertMessageToStandardResponse(Message $response)
- {
- $response->header->set('qr', 1);
- $response->questions[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN);
- $response->answers[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131');
- $response->prepare();
-
- return $response;
- }
-
- public function convertMessageToTruncatedResponse(Message $response)
- {
- $this->convertMessageToStandardResponse($response);
- $response->header->set('tc', 1);
- $response->prepare();
-
- return $response;
- }
-
- private function returnNewConnectionMock($emitData = true)
- {
- $conn = $this->createConnectionMock($emitData);
-
- $callback = function () use ($conn) {
- return $conn;
- };
-
- return $this->returnCallback($callback);
- }
-
- private function createConnectionMock($emitData = true)
- {
- $conn = $this->getMockBuilder('React\Stream\DuplexStreamInterface')->getMock();
- $conn
- ->expects($this->any())
- ->method('on')
- ->with('data', $this->isInstanceOf('Closure'))
- ->will($this->returnCallback(function ($name, $callback) use ($emitData) {
- $emitData && $callback(null);
- }));
-
- return $conn;
- }
-
- private function createTimerMock()
- {
- return $this->getMockBuilder(
- interface_exists('React\EventLoop\TimerInterface') ? 'React\EventLoop\TimerInterface' : 'React\EventLoop\Timer\TimerInterface'
- )->getMock();
- }
-
- private function createExecutorMock()
- {
- return $this->getMockBuilder('React\Dns\Query\Executor')
- ->setConstructorArgs(array($this->loop, $this->parser, $this->dumper))
- ->setMethods(array('createConnection'))
- ->getMock();
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/HostsFileExecutorTest.php b/assets/php/vendor/react/dns/tests/Query/HostsFileExecutorTest.php
deleted file mode 100755
index 70d877e..0000000
--- a/assets/php/vendor/react/dns/tests/Query/HostsFileExecutorTest.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use React\Tests\Dns\TestCase;
-use React\Dns\Query\HostsFileExecutor;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-
-class HostsFileExecutorTest extends TestCase
-{
- private $hosts;
- private $fallback;
- private $executor;
-
- public function setUp()
- {
- $this->hosts = $this->getMockBuilder('React\Dns\Config\HostsFile')->disableOriginalConstructor()->getMock();
- $this->fallback = $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
- $this->executor = new HostsFileExecutor($this->hosts, $this->fallback);
- }
-
- public function testDoesNotTryToGetIpsForMxQuery()
- {
- $this->hosts->expects($this->never())->method('getIpsForHost');
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_MX, Message::CLASS_IN, 0));
- }
-
- public function testFallsBackIfNoIpsWereFound()
- {
- $this->hosts->expects($this->once())->method('getIpsForHost')->willReturn(array());
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_A, Message::CLASS_IN, 0));
- }
-
- public function testReturnsResponseMessageIfIpsWereFound()
- {
- $this->hosts->expects($this->once())->method('getIpsForHost')->willReturn(array('127.0.0.1'));
- $this->fallback->expects($this->never())->method('query');
-
- $ret = $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_A, Message::CLASS_IN, 0));
- }
-
- public function testFallsBackIfNoIpv4Matches()
- {
- $this->hosts->expects($this->once())->method('getIpsForHost')->willReturn(array('::1'));
- $this->fallback->expects($this->once())->method('query');
-
- $ret = $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_A, Message::CLASS_IN, 0));
- }
-
- public function testReturnsResponseMessageIfIpv6AddressesWereFound()
- {
- $this->hosts->expects($this->once())->method('getIpsForHost')->willReturn(array('::1'));
- $this->fallback->expects($this->never())->method('query');
-
- $ret = $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_AAAA, Message::CLASS_IN, 0));
- }
-
- public function testFallsBackIfNoIpv6Matches()
- {
- $this->hosts->expects($this->once())->method('getIpsForHost')->willReturn(array('127.0.0.1'));
- $this->fallback->expects($this->once())->method('query');
-
- $ret = $this->executor->query('8.8.8.8', new Query('google.com', Message::TYPE_AAAA, Message::CLASS_IN, 0));
- }
-
- public function testDoesReturnReverseIpv4Lookup()
- {
- $this->hosts->expects($this->once())->method('getHostsForIp')->with('127.0.0.1')->willReturn(array('localhost'));
- $this->fallback->expects($this->never())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('1.0.0.127.in-addr.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testFallsBackIfNoReverseIpv4Matches()
- {
- $this->hosts->expects($this->once())->method('getHostsForIp')->with('127.0.0.1')->willReturn(array());
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('1.0.0.127.in-addr.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testDoesReturnReverseIpv6Lookup()
- {
- $this->hosts->expects($this->once())->method('getHostsForIp')->with('2a02:2e0:3fe:100::6')->willReturn(array('ip6-localhost'));
- $this->fallback->expects($this->never())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('6.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.e.f.3.0.0.e.2.0.2.0.a.2.ip6.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testFallsBackForInvalidAddress()
- {
- $this->hosts->expects($this->never())->method('getHostsForIp');
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('example.com', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testReverseFallsBackForInvalidIpv4Address()
- {
- $this->hosts->expects($this->never())->method('getHostsForIp');
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('::1.in-addr.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testReverseFallsBackForInvalidLengthIpv6Address()
- {
- $this->hosts->expects($this->never())->method('getHostsForIp');
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('abcd.ip6.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-
- public function testReverseFallsBackForInvalidHexIpv6Address()
- {
- $this->hosts->expects($this->never())->method('getHostsForIp');
- $this->fallback->expects($this->once())->method('query');
-
- $this->executor->query('8.8.8.8', new Query('zZz.ip6.arpa', Message::TYPE_PTR, Message::CLASS_IN, 0));
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/RecordBagTest.php b/assets/php/vendor/react/dns/tests/Query/RecordBagTest.php
deleted file mode 100755
index 83b8934..0000000
--- a/assets/php/vendor/react/dns/tests/Query/RecordBagTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Query\RecordBag;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-
-class RecordBagTest extends TestCase
-{
- /**
- * @covers React\Dns\Query\RecordBag
- * @test
- */
- public function emptyBagShouldBeEmpty()
- {
- $recordBag = new RecordBag();
-
- $this->assertSame(array(), $recordBag->all());
- }
-
- /**
- * @covers React\Dns\Query\RecordBag
- * @test
- */
- public function setShouldSetTheValue()
- {
- $currentTime = 1345656451;
-
- $recordBag = new RecordBag();
- $recordBag->set($currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600));
-
- $records = $recordBag->all();
- $this->assertCount(1, $records);
- $this->assertSame('igor.io', $records[0]->name);
- $this->assertSame(Message::TYPE_A, $records[0]->type);
- $this->assertSame(Message::CLASS_IN, $records[0]->class);
- }
-
- /**
- * @covers React\Dns\Query\RecordBag
- * @test
- */
- public function setShouldSetManyValues()
- {
- $currentTime = 1345656451;
-
- $recordBag = new RecordBag();
- $recordBag->set($currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
- $recordBag->set($currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'));
-
- $records = $recordBag->all();
- $this->assertCount(2, $records);
- $this->assertSame('igor.io', $records[0]->name);
- $this->assertSame(Message::TYPE_A, $records[0]->type);
- $this->assertSame(Message::CLASS_IN, $records[0]->class);
- $this->assertSame('178.79.169.131', $records[0]->data);
- $this->assertSame('igor.io', $records[1]->name);
- $this->assertSame(Message::TYPE_A, $records[1]->type);
- $this->assertSame(Message::CLASS_IN, $records[1]->class);
- $this->assertSame('178.79.169.132', $records[1]->data);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/RecordCacheTest.php b/assets/php/vendor/react/dns/tests/Query/RecordCacheTest.php
deleted file mode 100755
index 399fbe8..0000000
--- a/assets/php/vendor/react/dns/tests/Query/RecordCacheTest.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use PHPUnit\Framework\TestCase;
-use React\Cache\ArrayCache;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Dns\Query\RecordCache;
-use React\Dns\Query\Query;
-use React\Promise\PromiseInterface;
-
-class RecordCacheTest extends TestCase
-{
- /**
- * @covers React\Dns\Query\RecordCache
- * @test
- */
- public function lookupOnEmptyCacheShouldReturnNull()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
-
- $cache = new RecordCache(new ArrayCache());
- $promise = $cache->lookup($query);
-
- $this->assertInstanceOf('React\Promise\RejectedPromise', $promise);
- }
-
- /**
- * @covers React\Dns\Query\RecordCache
- * @test
- */
- public function storeRecordShouldMakeLookupSucceed()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
-
- $cache = new RecordCache(new ArrayCache());
- $cache->storeRecord($query->currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
- $promise = $cache->lookup($query);
-
- $this->assertInstanceOf('React\Promise\FulfilledPromise', $promise);
- $cachedRecords = $this->getPromiseValue($promise);
-
- $this->assertCount(1, $cachedRecords);
- $this->assertSame('178.79.169.131', $cachedRecords[0]->data);
- }
-
- /**
- * @covers React\Dns\Query\RecordCache
- * @test
- */
- public function storeTwoRecordsShouldReturnBoth()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
-
- $cache = new RecordCache(new ArrayCache());
- $cache->storeRecord($query->currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
- $cache->storeRecord($query->currentTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'));
- $promise = $cache->lookup($query);
-
- $this->assertInstanceOf('React\Promise\FulfilledPromise', $promise);
- $cachedRecords = $this->getPromiseValue($promise);
-
- $this->assertCount(2, $cachedRecords);
- $this->assertSame('178.79.169.131', $cachedRecords[0]->data);
- $this->assertSame('178.79.169.132', $cachedRecords[1]->data);
- }
-
- /**
- * @covers React\Dns\Query\RecordCache
- * @test
- */
- public function storeResponseMessageShouldStoreAllAnswerValues()
- {
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
-
- $response = new Message();
- $response->answers[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131');
- $response->answers[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132');
- $response->prepare();
-
- $cache = new RecordCache(new ArrayCache());
- $cache->storeResponseMessage($query->currentTime, $response);
- $promise = $cache->lookup($query);
-
- $this->assertInstanceOf('React\Promise\FulfilledPromise', $promise);
- $cachedRecords = $this->getPromiseValue($promise);
-
- $this->assertCount(2, $cachedRecords);
- $this->assertSame('178.79.169.131', $cachedRecords[0]->data);
- $this->assertSame('178.79.169.132', $cachedRecords[1]->data);
- }
-
- /**
- * @covers React\Dns\Query\RecordCache
- * @test
- */
- public function expireShouldExpireDeadRecords()
- {
- $cachedTime = 1345656451;
- $currentTime = $cachedTime + 3605;
-
- $cache = new RecordCache(new ArrayCache());
- $cache->storeRecord($cachedTime, new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'));
- $cache->expire($currentTime);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, $currentTime);
- $promise = $cache->lookup($query);
-
- $this->assertInstanceOf('React\Promise\RejectedPromise', $promise);
- }
-
- private function getPromiseValue(PromiseInterface $promise)
- {
- $capturedValue = null;
-
- $promise->then(function ($value) use (&$capturedValue) {
- $capturedValue = $value;
- });
-
- return $capturedValue;
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Query/RetryExecutorTest.php b/assets/php/vendor/react/dns/tests/Query/RetryExecutorTest.php
deleted file mode 100755
index 8950f84..0000000
--- a/assets/php/vendor/react/dns/tests/Query/RetryExecutorTest.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use React\Tests\Dns\TestCase;
-use React\Dns\Query\RetryExecutor;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Dns\Query\TimeoutException;
-use React\Dns\Model\Record;
-use React\Promise;
-use React\Promise\Deferred;
-use React\Dns\Query\CancellationException;
-
-class RetryExecutorTest extends TestCase
-{
- /**
- * @covers React\Dns\Query\RetryExecutor
- * @test
- */
- public function queryShouldDelegateToDecoratedExecutor()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnValue($this->expectPromiseOnce()));
-
- $retryExecutor = new RetryExecutor($executor, 2);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $retryExecutor->query('8.8.8.8', $query);
- }
-
- /**
- * @covers React\Dns\Query\RetryExecutor
- * @test
- */
- public function queryShouldRetryQueryOnTimeout()
- {
- $response = $this->createStandardResponse();
-
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->exactly(2))
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->onConsecutiveCalls(
- $this->returnCallback(function ($domain, $query) {
- return Promise\reject(new TimeoutException("timeout"));
- }),
- $this->returnCallback(function ($domain, $query) use ($response) {
- return Promise\resolve($response);
- })
- ));
-
- $callback = $this->createCallableMock();
- $callback
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->isInstanceOf('React\Dns\Model\Message'));
-
- $errorback = $this->expectCallableNever();
-
- $retryExecutor = new RetryExecutor($executor, 2);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $retryExecutor->query('8.8.8.8', $query)->then($callback, $errorback);
- }
-
- /**
- * @covers React\Dns\Query\RetryExecutor
- * @test
- */
- public function queryShouldStopRetryingAfterSomeAttempts()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->exactly(3))
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($domain, $query) {
- return Promise\reject(new TimeoutException("timeout"));
- }));
-
- $callback = $this->expectCallableNever();
-
- $errorback = $this->createCallableMock();
- $errorback
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->isInstanceOf('RuntimeException'));
-
- $retryExecutor = new RetryExecutor($executor, 2);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $retryExecutor->query('8.8.8.8', $query)->then($callback, $errorback);
- }
-
- /**
- * @covers React\Dns\Query\RetryExecutor
- * @test
- */
- public function queryShouldForwardNonTimeoutErrors()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($domain, $query) {
- return Promise\reject(new \Exception);
- }));
-
- $callback = $this->expectCallableNever();
-
- $errorback = $this->createCallableMock();
- $errorback
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->isInstanceOf('Exception'));
-
- $retryExecutor = new RetryExecutor($executor, 2);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $retryExecutor->query('8.8.8.8', $query)->then($callback, $errorback);
- }
-
- /**
- * @covers React\Dns\Query\RetryExecutor
- * @test
- */
- public function queryShouldCancelQueryOnCancel()
- {
- $cancelled = 0;
-
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with('8.8.8.8', $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($domain, $query) use (&$cancelled) {
- $deferred = new Deferred(function ($resolve, $reject) use (&$cancelled) {
- ++$cancelled;
- $reject(new CancellationException('Cancelled'));
- });
-
- return $deferred->promise();
- })
- );
-
- $retryExecutor = new RetryExecutor($executor, 2);
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $retryExecutor->query('8.8.8.8', $query);
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
-
- $this->assertEquals(0, $cancelled);
- $promise->cancel();
- $this->assertEquals(1, $cancelled);
- }
-
- protected function expectPromiseOnce($return = null)
- {
- $mock = $this->createPromiseMock();
- $mock
- ->expects($this->once())
- ->method('then')
- ->will($this->returnValue($return));
-
- return $mock;
- }
-
- protected function createExecutorMock()
- {
- return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
- }
-
- protected function createPromiseMock()
- {
- return $this->getMockBuilder('React\Promise\PromiseInterface')->getMock();
- }
-
- protected function createStandardResponse()
- {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN);
- $response->answers[] = new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131');
- $response->prepare();
-
- return $response;
- }
-}
-
diff --git a/assets/php/vendor/react/dns/tests/Query/TimeoutExecutorTest.php b/assets/php/vendor/react/dns/tests/Query/TimeoutExecutorTest.php
deleted file mode 100755
index 0d37fb4..0000000
--- a/assets/php/vendor/react/dns/tests/Query/TimeoutExecutorTest.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Query;
-
-use React\Dns\Query\TimeoutExecutor;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Promise\Deferred;
-use React\Dns\Query\CancellationException;
-use React\Tests\Dns\TestCase;
-use React\EventLoop\Factory;
-use React\Promise;
-
-class TimeoutExecutorTest extends TestCase
-{
- public function setUp()
- {
- $this->loop = Factory::create();
-
- $this->wrapped = $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
-
- $this->executor = new TimeoutExecutor($this->wrapped, 5.0, $this->loop);
- }
-
- public function testCancellingPromiseWillCancelWrapped()
- {
- $cancelled = 0;
-
- $this->wrapped
- ->expects($this->once())
- ->method('query')
- ->will($this->returnCallback(function ($domain, $query) use (&$cancelled) {
- $deferred = new Deferred(function ($resolve, $reject) use (&$cancelled) {
- ++$cancelled;
- $reject(new CancellationException('Cancelled'));
- });
-
- return $deferred->promise();
- }));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $this->assertEquals(0, $cancelled);
- $promise->cancel();
- $this->assertEquals(1, $cancelled);
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-
- public function testResolvesPromiseWhenWrappedResolves()
- {
- $this->wrapped
- ->expects($this->once())
- ->method('query')
- ->willReturn(Promise\resolve('0.0.0.0'));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $promise->then($this->expectCallableOnce(), $this->expectCallableNever());
- }
-
- public function testRejectsPromiseWhenWrappedRejects()
- {
- $this->wrapped
- ->expects($this->once())
- ->method('query')
- ->willReturn(Promise\reject(new \RuntimeException()));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $promise = $this->executor->query('8.8.8.8:53', $query);
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnceWith(new \RuntimeException()));
- }
-
- public function testWrappedWillBeCancelledOnTimeout()
- {
- $this->executor = new TimeoutExecutor($this->wrapped, 0, $this->loop);
-
- $cancelled = 0;
-
- $this->wrapped
- ->expects($this->once())
- ->method('query')
- ->will($this->returnCallback(function ($domain, $query) use (&$cancelled) {
- $deferred = new Deferred(function ($resolve, $reject) use (&$cancelled) {
- ++$cancelled;
- $reject(new CancellationException('Cancelled'));
- });
-
- return $deferred->promise();
- }));
-
- $callback = $this->expectCallableNever();
-
- $errorback = $this->createCallableMock();
- $errorback
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->logicalAnd(
- $this->isInstanceOf('React\Dns\Query\TimeoutException'),
- $this->attribute($this->equalTo('DNS query for igor.io timed out'), 'message')
- ));
-
- $query = new Query('igor.io', Message::TYPE_A, Message::CLASS_IN, 1345656451);
- $this->executor->query('8.8.8.8:53', $query)->then($callback, $errorback);
-
- $this->assertEquals(0, $cancelled);
-
- $this->loop->run();
-
- $this->assertEquals(1, $cancelled);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Resolver/FactoryTest.php b/assets/php/vendor/react/dns/tests/Resolver/FactoryTest.php
deleted file mode 100755
index acaeac0..0000000
--- a/assets/php/vendor/react/dns/tests/Resolver/FactoryTest.php
+++ /dev/null
@@ -1,131 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Resolver;
-
-use React\Dns\Resolver\Factory;
-use React\Tests\Dns\TestCase;
-use React\Dns\Query\HostsFileExecutor;
-
-class FactoryTest extends TestCase
-{
- /** @test */
- public function createShouldCreateResolver()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $factory = new Factory();
- $resolver = $factory->create('8.8.8.8:53', $loop);
-
- $this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
- }
-
- /** @test */
- public function createWithoutPortShouldCreateResolverWithDefaultPort()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $factory = new Factory();
- $resolver = $factory->create('8.8.8.8', $loop);
-
- $this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
- $this->assertSame('8.8.8.8:53', $this->getResolverPrivateMemberValue($resolver, 'nameserver'));
- }
-
- /** @test */
- public function createCachedShouldCreateResolverWithCachedExecutor()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $factory = new Factory();
- $resolver = $factory->createCached('8.8.8.8:53', $loop);
-
- $this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
- $executor = $this->getResolverPrivateExecutor($resolver);
- $this->assertInstanceOf('React\Dns\Query\CachedExecutor', $executor);
- $recordCache = $this->getCachedExecutorPrivateMemberValue($executor, 'cache');
- $recordCacheCache = $this->getRecordCachePrivateMemberValue($recordCache, 'cache');
- $this->assertInstanceOf('React\Cache\CacheInterface', $recordCacheCache);
- $this->assertInstanceOf('React\Cache\ArrayCache', $recordCacheCache);
- }
-
- /** @test */
- public function createCachedShouldCreateResolverWithCachedExecutorWithCustomCache()
- {
- $cache = $this->getMockBuilder('React\Cache\CacheInterface')->getMock();
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $factory = new Factory();
- $resolver = $factory->createCached('8.8.8.8:53', $loop, $cache);
-
- $this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
- $executor = $this->getResolverPrivateExecutor($resolver);
- $this->assertInstanceOf('React\Dns\Query\CachedExecutor', $executor);
- $recordCache = $this->getCachedExecutorPrivateMemberValue($executor, 'cache');
- $recordCacheCache = $this->getRecordCachePrivateMemberValue($recordCache, 'cache');
- $this->assertInstanceOf('React\Cache\CacheInterface', $recordCacheCache);
- $this->assertSame($cache, $recordCacheCache);
- }
-
- /**
- * @test
- * @dataProvider factoryShouldAddDefaultPortProvider
- */
- public function factoryShouldAddDefaultPort($input, $expected)
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $factory = new Factory();
- $resolver = $factory->create($input, $loop);
-
- $this->assertInstanceOf('React\Dns\Resolver\Resolver', $resolver);
- $this->assertSame($expected, $this->getResolverPrivateMemberValue($resolver, 'nameserver'));
- }
-
- public static function factoryShouldAddDefaultPortProvider()
- {
- return array(
- array('8.8.8.8', '8.8.8.8:53'),
- array('1.2.3.4:5', '1.2.3.4:5'),
- array('localhost', 'localhost:53'),
- array('localhost:1234', 'localhost:1234'),
- array('::1', '[::1]:53'),
- array('[::1]:53', '[::1]:53')
- );
- }
-
- private function getResolverPrivateExecutor($resolver)
- {
- $executor = $this->getResolverPrivateMemberValue($resolver, 'executor');
-
- // extract underlying executor that may be wrapped in multiple layers of hosts file executors
- while ($executor instanceof HostsFileExecutor) {
- $reflector = new \ReflectionProperty('React\Dns\Query\HostsFileExecutor', 'fallback');
- $reflector->setAccessible(true);
-
- $executor = $reflector->getValue($executor);
- }
-
- return $executor;
- }
-
- private function getResolverPrivateMemberValue($resolver, $field)
- {
- $reflector = new \ReflectionProperty('React\Dns\Resolver\Resolver', $field);
- $reflector->setAccessible(true);
- return $reflector->getValue($resolver);
- }
-
- private function getCachedExecutorPrivateMemberValue($resolver, $field)
- {
- $reflector = new \ReflectionProperty('React\Dns\Query\CachedExecutor', $field);
- $reflector->setAccessible(true);
- return $reflector->getValue($resolver);
- }
-
- private function getRecordCachePrivateMemberValue($resolver, $field)
- {
- $reflector = new \ReflectionProperty('React\Dns\Query\RecordCache', $field);
- $reflector->setAccessible(true);
- return $reflector->getValue($resolver);
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Resolver/ResolveAliasesTest.php b/assets/php/vendor/react/dns/tests/Resolver/ResolveAliasesTest.php
deleted file mode 100755
index b5175e3..0000000
--- a/assets/php/vendor/react/dns/tests/Resolver/ResolveAliasesTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Resolver;
-
-use PHPUnit\Framework\TestCase;
-use React\Dns\Resolver\Resolver;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-
-class ResolveAliasesTest extends TestCase
-{
- /**
- * @covers React\Dns\Resolver\Resolver::resolveAliases
- * @dataProvider provideAliasedAnswers
- */
- public function testResolveAliases(array $expectedAnswers, array $answers, $name)
- {
- $executor = $this->createExecutorMock();
- $resolver = new Resolver('8.8.8.8:53', $executor);
-
- $answers = $resolver->resolveAliases($answers, $name);
-
- $this->assertEquals($expectedAnswers, $answers);
- }
-
- public function provideAliasedAnswers()
- {
- return array(
- array(
- array('178.79.169.131'),
- array(
- new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- ),
- 'igor.io',
- ),
- array(
- array('178.79.169.131', '178.79.169.132', '178.79.169.133'),
- array(
- new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'),
- new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.133'),
- ),
- 'igor.io',
- ),
- array(
- array('178.79.169.131'),
- array(
- new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- new Record('foo.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- new Record('bar.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- ),
- 'igor.io',
- ),
- array(
- array(),
- array(
- new Record('foo.igor.io', Message::TYPE_A, Message::CLASS_IN),
- new Record('bar.igor.io', Message::TYPE_A, Message::CLASS_IN),
- ),
- 'igor.io',
- ),
- array(
- array('178.79.169.131'),
- array(
- new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
- new Record('foo.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- ),
- 'igor.io',
- ),
- array(
- array('178.79.169.131'),
- array(
- new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
- new Record('foo.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'bar.igor.io'),
- new Record('bar.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- ),
- 'igor.io',
- ),
- array(
- array('178.79.169.131', '178.79.169.132', '178.79.169.133'),
- array(
- new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
- new Record('foo.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'bar.igor.io'),
- new Record('bar.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'baz.igor.io'),
- new Record('bar.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'qux.igor.io'),
- new Record('baz.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
- new Record('baz.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'),
- new Record('qux.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.133'),
- ),
- 'igor.io',
- ),
- );
- }
-
- private function createExecutorMock()
- {
- return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/Resolver/ResolverTest.php b/assets/php/vendor/react/dns/tests/Resolver/ResolverTest.php
deleted file mode 100755
index e11509b..0000000
--- a/assets/php/vendor/react/dns/tests/Resolver/ResolverTest.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-namespace React\Tests\Dns\Resolver;
-
-use React\Dns\Resolver\Resolver;
-use React\Dns\Query\Query;
-use React\Dns\Model\Message;
-use React\Dns\Model\Record;
-use React\Promise;
-use React\Tests\Dns\TestCase;
-
-class ResolverTest extends TestCase
-{
- /** @test */
- public function resolveShouldQueryARecords()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with($this->anything(), $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($nameserver, $query) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record($query->name, $query->type, $query->class);
- $response->answers[] = new Record($query->name, $query->type, $query->class, 3600, '178.79.169.131');
-
- return Promise\resolve($response);
- }));
-
- $resolver = new Resolver('8.8.8.8:53', $executor);
- $resolver->resolve('igor.io')->then($this->expectCallableOnceWith('178.79.169.131'));
- }
-
- /** @test */
- public function resolveShouldQueryARecordsAndIgnoreCase()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with($this->anything(), $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($nameserver, $query) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record('Blog.wyrihaximus.net', $query->type, $query->class);
- $response->answers[] = new Record('Blog.wyrihaximus.net', $query->type, $query->class, 3600, '178.79.169.131');
-
- return Promise\resolve($response);
- }));
-
- $resolver = new Resolver('8.8.8.8:53', $executor);
- $resolver->resolve('blog.wyrihaximus.net')->then($this->expectCallableOnceWith('178.79.169.131'));
- }
-
- /** @test */
- public function resolveShouldFilterByName()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with($this->anything(), $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($nameserver, $query) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record($query->name, $query->type, $query->class);
- $response->answers[] = new Record('foo.bar', $query->type, $query->class, 3600, '178.79.169.131');
-
- return Promise\resolve($response);
- }));
-
- $errback = $this->expectCallableOnceWith($this->isInstanceOf('React\Dns\RecordNotFoundException'));
-
- $resolver = new Resolver('8.8.8.8:53', $executor);
- $resolver->resolve('igor.io')->then($this->expectCallableNever(), $errback);
- }
-
- /** @test */
- public function resolveWithNoAnswersShouldThrowException()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with($this->anything(), $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($nameserver, $query) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record($query->name, $query->type, $query->class);
-
- return Promise\resolve($response);
- }));
-
- $errback = $this->expectCallableOnceWith($this->isInstanceOf('React\Dns\RecordNotFoundException'));
-
- $resolver = new Resolver('8.8.8.8:53', $executor);
- $resolver->resolve('igor.io')->then($this->expectCallableNever(), $errback);
- }
-
- /**
- * @test
- */
- public function resolveWithNoAnswersShouldCallErrbackIfGiven()
- {
- $executor = $this->createExecutorMock();
- $executor
- ->expects($this->once())
- ->method('query')
- ->with($this->anything(), $this->isInstanceOf('React\Dns\Query\Query'))
- ->will($this->returnCallback(function ($nameserver, $query) {
- $response = new Message();
- $response->header->set('qr', 1);
- $response->questions[] = new Record($query->name, $query->type, $query->class);
-
- return Promise\resolve($response);
- }));
-
- $errback = $this->expectCallableOnceWith($this->isInstanceOf('React\Dns\RecordNotFoundException'));
-
- $resolver = new Resolver('8.8.8.8:53', $executor);
- $resolver->resolve('igor.io')->then($this->expectCallableNever(), $errback);
- }
-
- private function createExecutorMock()
- {
- return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/dns/tests/TestCase.php b/assets/php/vendor/react/dns/tests/TestCase.php
deleted file mode 100755
index a5a22bf..0000000
--- a/assets/php/vendor/react/dns/tests/TestCase.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace React\Tests\Dns;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-
-abstract class TestCase extends BaseTestCase
-{
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnceWith($value)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($value);
-
- return $mock;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Dns\CallableStub')->getMock();
- }
-
- public function setExpectedException($exception, $exceptionMessage = '', $exceptionCode = null)
- {
- if (method_exists($this, 'expectException')) {
- // PHPUnit 5
- $this->expectException($exception);
- if ($exceptionMessage !== '') {
- $this->expectExceptionMessage($exceptionMessage);
- }
- if ($exceptionCode !== null) {
- $this->expectExceptionCode($exceptionCode);
- }
- } else {
- // legacy PHPUnit 4
- parent::setExpectedException($exception, $exceptionMessage, $exceptionCode);
- }
- }
-}
diff --git a/assets/php/vendor/react/event-loop/.gitignore b/assets/php/vendor/react/event-loop/.gitignore
deleted file mode 100755
index 81b9258..0000000
--- a/assets/php/vendor/react/event-loop/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-composer.lock
-phpunit.xml
-vendor
diff --git a/assets/php/vendor/react/event-loop/.travis.yml b/assets/php/vendor/react/event-loop/.travis.yml
deleted file mode 100755
index 7af713a..0000000
--- a/assets/php/vendor/react/event-loop/.travis.yml
+++ /dev/null
@@ -1,39 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - 7.2
- - hhvm # ignore errors, see below
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
- allow_failures:
- - php: hhvm
-
-sudo: false
-
-addons:
- apt:
- packages:
- - libevent-dev # Used by 'event' and 'libevent' PHP extensions
-
-cache:
- directories:
- - $HOME/.composer/cache/files
-
-install:
- - ./travis-init.sh
- - composer install
-
-script:
- - ./vendor/bin/phpunit --coverage-text
diff --git a/assets/php/vendor/react/event-loop/CHANGELOG.md b/assets/php/vendor/react/event-loop/CHANGELOG.md
deleted file mode 100755
index c291840..0000000
--- a/assets/php/vendor/react/event-loop/CHANGELOG.md
+++ /dev/null
@@ -1,316 +0,0 @@
-# Changelog
-
-## 0.5.1 (2018-04-09)
-
-* New loop: ExtEvLoop (PECL ext-ev) (#148 by @kaduev13)
-
-## 0.5.0 (2018-04-05)
-
-A major feature release with a significant documentation overhaul and long overdue API cleanup!
-
-This update involves a number of BC breaks due to dropped support for deprecated
-functionality. We've tried hard to avoid BC breaks where possible and minimize
-impact otherwise. We expect that most consumers of this package will actually
-not be affected by any BC breaks, see below for more details.
-
-We realize that the changes listed below may seem overwhelming, but we've tried
-to be very clear about any possible BC breaks. Don't worry: In fact, all ReactPHP
-components are already compatible and support both this new release as well as
-providing backwards compatibility with the last release.
-
-* Feature / BC break: Add support for signal handling via new
- `LoopInterface::addSignal()` and `LoopInterface::removeSignal()` methods.
- (#104 by @WyriHaximus and #111 and #150 by @clue)
-
- ```php
- $loop->addSignal(SIGINT, function () {
- echo 'CTRL-C';
- });
- ```
-
-* Feature: Significant documentation updates for `LoopInterface` and `Factory`.
- (#100, #119, #126, #127, #159 and #160 by @clue, #113 by @WyriHaximus and #81 and #91 by @jsor)
-
-* Feature: Add examples to ease getting started
- (#99, #100 and #125 by @clue, #59 by @WyriHaximus and #143 by @jsor)
-
-* Feature: Documentation for advanced timer concepts, such as monotonic time source vs wall-clock time
- and high precision timers with millisecond accuracy or below.
- (#130 and #157 by @clue)
-
-* Feature: Documentation for advanced stream concepts, such as edge-triggered event listeners
- and stream buffers and allow throwing Exception if stream resource is not supported.
- (#129 and #158 by @clue)
-
-* Feature: Throw `BadMethodCallException` on manual loop creation when required extension isn't installed.
- (#153 by @WyriHaximus)
-
-* Feature / BC break: First class support for legacy PHP 5.3 through PHP 7.2 and HHVM
- and remove all `callable` type hints for consistency reasons.
- (#141 and #151 by @clue)
-
-* BC break: Documentation for timer API and clean up unneeded timer API.
- (#102 by @clue)
-
- Remove `TimerInterface::cancel()`, use `LoopInterface::cancelTimer()` instead:
-
- ```php
- // old (method invoked on timer instance)
- $timer->cancel();
-
- // already supported before: invoke method on loop instance
- $loop->cancelTimer($timer);
- ```
-
- Remove unneeded `TimerInterface::setData()` and `TimerInterface::getData()`,
- use closure binding to add arbitrary data to timer instead:
-
- ```php
- // old (limited setData() and getData() only allows single variable)
- $name = 'Tester';
- $timer = $loop->addTimer(1.0, function ($timer) {
- echo 'Hello ' . $timer->getData() . PHP_EOL;
- });
- $timer->setData($name);
-
- // already supported before: closure binding allows any number of variables
- $name = 'Tester';
- $loop->addTimer(1.0, function () use ($name) {
- echo 'Hello ' . $name . PHP_EOL;
- });
- ```
-
- Remove unneeded `TimerInterface::getLoop()`, use closure binding instead:
-
- ```php
- // old (getLoop() called on timer instance)
- $loop->addTimer(0.1, function ($timer) {
- $timer->getLoop()->stop();
- });
-
- // already supported before: use closure binding as usual
- $loop->addTimer(0.1, function () use ($loop) {
- $loop->stop();
- });
- ```
-
-* BC break: Remove unneeded `LoopInterface::isTimerActive()` and
- `TimerInterface::isActive()` to reduce API surface.
- (#133 by @clue)
-
- ```php
- // old (method on timer instance or on loop instance)
- $timer->isActive();
- $loop->isTimerActive($timer);
- ```
-
-* BC break: Move `TimerInterface` one level up to `React\EventLoop\TimerInterface`.
- (#138 by @WyriHaximus)
-
- ```php
- // old (notice obsolete "Timer" namespace)
- assert($timer instanceof React\EventLoop\Timer\TimerInterface);
-
- // new
- assert($timer instanceof React\EventLoop\TimerInterface);
- ```
-
-* BC break: Remove unneeded `LoopInterface::nextTick()` (and internal `NextTickQueue`),
- use `LoopInterface::futureTick()` instead.
- (#30 by @clue)
-
- ```php
- // old (removed)
- $loop->nextTick(function () {
- echo 'tick';
- });
-
- // already supported before
- $loop->futureTick(function () {
- echo 'tick';
- });
- ```
-
-* BC break: Remove unneeded `$loop` argument for `LoopInterface::futureTick()`
- (and fix internal cyclic dependency).
- (#103 by @clue)
-
- ```php
- // old ($loop gets passed by default)
- $loop->futureTick(function ($loop) {
- $loop->stop();
- });
-
- // already supported before: use closure binding as usual
- $loop->futureTick(function () use ($loop) {
- $loop->stop();
- });
- ```
-
-* BC break: Remove unneeded `LoopInterface::tick()`.
- (#72 by @jsor)
-
- ```php
- // old (removed)
- $loop->tick();
-
- // suggested work around for testing purposes only
- $loop->futureTick(function () use ($loop) {
- $loop->stop();
- });
- ```
-
-* BC break: Documentation for advanced stream API and clean up unneeded stream API.
- (#110 by @clue)
-
- Remove unneeded `$loop` argument for `LoopInterface::addReadStream()`
- and `LoopInterface::addWriteStream()`, use closure binding instead:
-
- ```php
- // old ($loop gets passed by default)
- $loop->addReadStream($stream, function ($stream, $loop) {
- $loop->removeReadStream($stream);
- });
-
- // already supported before: use closure binding as usual
- $loop->addReadStream($stream, function ($stream) use ($loop) {
- $loop->removeReadStream($stream);
- });
- ```
-
-* BC break: Remove unneeded `LoopInterface::removeStream()` method,
- use `LoopInterface::removeReadStream()` and `LoopInterface::removeWriteStream()` instead.
- (#118 by @clue)
-
- ```php
- // old
- $loop->removeStream($stream);
-
- // already supported before
- $loop->removeReadStream($stream);
- $loop->removeWriteStream($stream);
- ```
-
-* BC break: Rename `LibEventLoop` to `ExtLibeventLoop` and `LibEvLoop` to `ExtLibevLoop`
- for consistent naming for event loop implementations.
- (#128 by @clue)
-
-* BC break: Remove optional `EventBaseConfig` argument from `ExtEventLoop`
- and make its `FEATURE_FDS` enabled by default.
- (#156 by @WyriHaximus)
-
-* BC break: Mark all classes as final to discourage inheritance.
- (#131 by @clue)
-
-* Fix: Fix `ExtEventLoop` to keep track of stream resources (refcount)
- (#123 by @clue)
-
-* Fix: Ensure large timer interval does not overflow on 32bit systems
- (#132 by @clue)
-
-* Fix: Fix separately removing readable and writable side of stream when closing
- (#139 by @clue)
-
-* Fix: Properly clean up event watchers for `ext-event` and `ext-libev`
- (#149 by @clue)
-
-* Fix: Minor code cleanup and remove unneeded references
- (#145 by @seregazhuk)
-
-* Fix: Discourage outdated `ext-libevent` on PHP 7
- (#62 by @cboden)
-
-* Improve test suite by adding forward compatibility with PHPUnit 6 and PHPUnit 5,
- lock Travis distro so new defaults will not break the build,
- improve test suite to be less fragile and increase test timeouts,
- test against PHP 7.2 and reduce fwrite() call length to one chunk.
- (#106 and #144 by @clue, #120 and #124 by @carusogabriel, #147 by nawarian and #92 by @kelunik)
-
-* A number of changes were originally planned for this release but have been backported
- to the last `v0.4.3` already: #74, #76, #79, #81 (refs #65, #66, #67), #88 and #93
-
-## 0.4.3 (2017-04-27)
-
-* Bug fix: Bugfix in the usage sample code #57 (@dandelionred)
-* Improvement: Remove branch-alias definition #53 (@WyriHaximus)
-* Improvement: StreamSelectLoop: Use fresh time so Timers added during stream events are accurate #51 (@andrewminerd)
-* Improvement: Avoid deprecation warnings in test suite due to deprecation of getMock() in PHPUnit #68 (@martinschroeder)
-* Improvement: Add PHPUnit 4.8 to require-dev #69 (@shaunbramley)
-* Improvement: Increase test timeouts for HHVM and unify timeout handling #70 (@clue)
-* Improvement: Travis improvements (backported from #74) #75 (@clue)
-* Improvement: Test suite now uses socket pairs instead of memory streams #66 (@martinschroeder)
-* Improvement: StreamSelectLoop: Test suite uses signal constant names in data provider #67 (@martinschroeder)
-* Improvement: ExtEventLoop: No longer suppress all errors #65 (@mamciek)
-* Improvement: Readme cleanup #89 (@jsor)
-* Improvement: Restructure and improve README #90 (@jsor)
-* Bug fix: StreamSelectLoop: Fix erroneous zero-time sleep (backport to 0.4) #94 (@jsor)
-
-## 0.4.2 (2016-03-07)
-
-* Bug fix: No longer error when signals sent to StreamSelectLoop
-* Support HHVM and PHP7 (@ondrejmirtes, @cebe)
-* Feature: Added support for EventConfig for ExtEventLoop (@steverhoades)
-* Bug fix: Fixed an issue loading loop extension libs via autoloader (@czarpino)
-
-## 0.4.1 (2014-04-13)
-
-* Bug fix: null timeout in StreamSelectLoop causing 100% CPU usage (@clue)
-* Bug fix: v0.3.4 changes merged for v0.4.1
-
-## 0.4.0 (2014-02-02)
-
-* Feature: Added `EventLoopInterface::nextTick()`, implemented in all event loops (@jmalloc)
-* Feature: Added `EventLoopInterface::futureTick()`, implemented in all event loops (@jmalloc)
-* Feature: Added `ExtEventLoop` implementation using pecl/event (@jmalloc)
-* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks
-* BC break: New method: `EventLoopInterface::nextTick()`
-* BC break: New method: `EventLoopInterface::futureTick()`
-* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0
-
-## 0.3.5 (2016-12-28)
-
-This is a compatibility release that eases upgrading to the v0.4 release branch.
-You should consider upgrading to the v0.4 release branch.
-
-* Feature: Cap min timer interval at 1µs, thus improving compatibility with v0.4
- (#47 by @clue)
-
-## 0.3.4 (2014-03-30)
-
-* Bug fix: Changed StreamSelectLoop to use non-blocking behavior on tick() (@astephens25)
-
-## 0.3.3 (2013-07-08)
-
-* Bug fix: No error on removing non-existent streams (@clue)
-* Bug fix: Do not silently remove feof listeners in `LibEvLoop`
-
-## 0.3.0 (2013-04-14)
-
-* BC break: New timers API (@nrk)
-* BC break: Remove check on return value from stream callbacks (@nrk)
-
-## 0.2.7 (2013-01-05)
-
-* Bug fix: Fix libevent timers with PHP 5.3
-* Bug fix: Fix libevent timer cancellation (@nrk)
-
-## 0.2.6 (2012-12-26)
-
-* Bug fix: Plug memory issue in libevent timers (@cameronjacobson)
-* Bug fix: Correctly pause LibEvLoop on stop()
-
-## 0.2.3 (2012-11-14)
-
-* Feature: LibEvLoop, integration of `php-libev`
-
-## 0.2.0 (2012-09-10)
-
-* Version bump
-
-## 0.1.1 (2012-07-12)
-
-* Version bump
-
-## 0.1.0 (2012-07-11)
-
-* First tagged release
diff --git a/assets/php/vendor/react/event-loop/LICENSE b/assets/php/vendor/react/event-loop/LICENSE
deleted file mode 100755
index a808108..0000000
--- a/assets/php/vendor/react/event-loop/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Igor Wiedler, Chris Boden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/event-loop/README.md b/assets/php/vendor/react/event-loop/README.md
deleted file mode 100755
index 207e7f4..0000000
--- a/assets/php/vendor/react/event-loop/README.md
+++ /dev/null
@@ -1,702 +0,0 @@
-# EventLoop Component
-
-[![Build Status](https://travis-ci.org/reactphp/event-loop.svg?branch=master)](https://travis-ci.org/reactphp/event-loop)
-
-[ReactPHP](https://reactphp.org/)'s core reactor event loop that libraries can use for evented I/O.
-
-In order for async based libraries to be interoperable, they need to use the
-same event loop. This component provides a common `LoopInterface` that any
-library can target. This allows them to be used in the same loop, with one
-single [`run()`](#run) call that is controlled by the user.
-
-**Table of Contents**
-
-* [Quickstart example](#quickstart-example)
-* [Usage](#usage)
- * [Factory](#factory)
- * [create()](#create)
- * [Loop implementations](#loop-implementations)
- * [StreamSelectLoop](#streamselectloop)
- * [ExtEventLoop](#exteventloop)
- * [ExtLibeventLoop](#extlibeventloop)
- * [ExtLibevLoop](#extlibevloop)
- * [ExtEvLoop](#extevloop)
- * [LoopInterface](#loopinterface)
- * [run()](#run)
- * [stop()](#stop)
- * [addTimer()](#addtimer)
- * [addPeriodicTimer()](#addperiodictimer)
- * [cancelTimer()](#canceltimer)
- * [futureTick()](#futuretick)
- * [addSignal()](#addsignal)
- * [removeSignal()](#removesignal)
- * [addReadStream()](#addreadstream)
- * [addWriteStream()](#addwritestream)
- * [removeReadStream()](#removereadstream)
- * [removeWriteStream()](#removewritestream)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-* [More](#more)
-
-## Quickstart example
-
-Here is an async HTTP server built with just the event loop.
-
-```php
-$loop = React\EventLoop\Factory::create();
-
-$server = stream_socket_server('tcp://127.0.0.1:8080');
-stream_set_blocking($server, false);
-
-$loop->addReadStream($server, function ($server) use ($loop) {
- $conn = stream_socket_accept($server);
- $data = "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nHi\n";
- $loop->addWriteStream($conn, function ($conn) use (&$data, $loop) {
- $written = fwrite($conn, $data);
- if ($written === strlen($data)) {
- fclose($conn);
- $loop->removeWriteStream($conn);
- } else {
- $data = substr($data, $written);
- }
- });
-});
-
-$loop->addPeriodicTimer(5, function () {
- $memory = memory_get_usage() / 1024;
- $formatted = number_format($memory, 3).'K';
- echo "Current memory usage: {$formatted}\n";
-});
-
-$loop->run();
-```
-
-See also the [examples](examples).
-
-## Usage
-
-Typical applications use a single event loop which is created at the beginning
-and run at the end of the program.
-
-```php
-// [1]
-$loop = React\EventLoop\Factory::create();
-
-// [2]
-$loop->addPeriodicTimer(1, function () {
- echo "Tick\n";
-});
-
-$stream = new React\Stream\ReadableResourceStream(
- fopen('file.txt', 'r'),
- $loop
-);
-
-// [3]
-$loop->run();
-```
-
-1. The loop instance is created at the beginning of the program. A convenience
- factory [`React\EventLoop\Factory::create()`](#create) is provided by this library which
- picks the best available [loop implementation](#loop-implementations).
-2. The loop instance is used directly or passed to library and application code.
- In this example, a periodic timer is registered with the event loop which
- simply outputs `Tick` every second and a
- [readable stream](https://github.com/reactphp/stream#readableresourcestream)
- is created by using ReactPHP's
- [stream component](https://github.com/reactphp/stream) for demonstration
- purposes.
-3. The loop is run with a single [`$loop->run()`](#run) call at the end of the program.
-
-### Factory
-
-The `Factory` class exists as a convenient way to pick the best available
-[event loop implementation](#loop-implementations).
-
-#### create()
-
-The `create(): LoopInterface` method can be used to create a new event loop
-instance:
-
-```php
-$loop = React\EventLoop\Factory::create();
-```
-
-This method always returns an instance implementing [`LoopInterface`](#loopinterface),
-the actual [event loop implementation](#loop-implementations) is an implementation detail.
-
-This method should usually only be called once at the beginning of the program.
-
-### Loop implementations
-
-In addition to the [`LoopInterface`](#loopinterface), there are a number of
-event loop implementations provided.
-
-All of the event loops support these features:
-
-* File descriptor polling
-* One-off timers
-* Periodic timers
-* Deferred execution on future loop tick
-
-For most consumers of this package, the underlying event loop implementation is
-an implementation detail.
-You should use the [`Factory`](#factory) to automatically create a new instance.
-
-Advanced! If you explicitly need a certain event loop implementation, you can
-manually instantiate one of the following classes.
-Note that you may have to install the required PHP extensions for the respective
-event loop implementation first or they will throw a `BadMethodCallException` on creation.
-
-#### StreamSelectLoop
-
-A `stream_select()` based event loop.
-
-This uses the [`stream_select()`](http://php.net/manual/en/function.stream-select.php)
-function and is the only implementation which works out of the box with PHP.
-
-This event loop works out of the box on PHP 5.3 through PHP 7+ and HHVM.
-This means that no installation is required and this library works on all
-platforms and supported PHP versions.
-Accordingly, the [`Factory`](#factory) will use this event loop by default if
-you do not install any of the event loop extensions listed below.
-
-Under the hood, it does a simple `select` system call.
-This system call is limited to the maximum file descriptor number of
-`FD_SETSIZE` (platform dependent, commonly 1024) and scales with `O(m)`
-(`m` being the maximum file descriptor number passed).
-This means that you may run into issues when handling thousands of streams
-concurrently and you may want to look into using one of the alternative
-event loop implementations listed below in this case.
-If your use case is among the many common use cases that involve handling only
-dozens or a few hundred streams at once, then this event loop implementation
-performs really well.
-
-If you want to use signal handling (see also [`addSignal()`](#addsignal) below),
-this event loop implementation requires `ext-pcntl`.
-This extension is only available for Unix-like platforms and does not support
-Windows.
-It is commonly installed as part of many PHP distributions.
-If this extension is missing (or you're running on Windows), signal handling is
-not supported and throws a `BadMethodCallException` instead.
-
-This event loop is known to rely on wall-clock time to schedule future
-timers, because a monotonic time source is not available in PHP by default.
-While this does not affect many common use cases, this is an important
-distinction for programs that rely on a high time precision or on systems
-that are subject to discontinuous time adjustments (time jumps).
-This means that if you schedule a timer to trigger in 30s and then adjust
-your system time forward by 20s, the timer may trigger in 10s.
-See also [`addTimer()`](#addtimer) for more details.
-
-#### ExtEventLoop
-
-An `ext-event` based event loop.
-
-This uses the [`event` PECL extension](https://pecl.php.net/package/event).
-It supports the same backends as libevent.
-
-This loop is known to work with PHP 5.4 through PHP 7+.
-
-#### ExtEvLoop
-
-An `ext-ev` based event loop.
-
-This loop uses the [`ev` PECL extension](https://pecl.php.net/package/ev), that
-provides an interface to `libev` library.
-
-This loop is known to work with PHP 5.4 through PHP 7+.
-
-
-#### ExtLibeventLoop
-
-An `ext-libevent` based event loop.
-
-This uses the [`libevent` PECL extension](https://pecl.php.net/package/libevent).
-`libevent` itself supports a number of system-specific backends (epoll, kqueue).
-
-This event loop does only work with PHP 5.
-An [unofficial update](https://github.com/php/pecl-event-libevent/pull/2) for
-PHP 7 does exist, but it is known to cause regular crashes due to `SEGFAULT`s.
-To reiterate: Using this event loop on PHP 7 is not recommended.
-Accordingly, the [`Factory`](#factory) will not try to use this event loop on
-PHP 7.
-
-This event loop is known to trigger a readable listener only if
-the stream *becomes* readable (edge-triggered) and may not trigger if the
-stream has already been readable from the beginning.
-This also implies that a stream may not be recognized as readable when data
-is still left in PHP's internal stream buffers.
-As such, it's recommended to use `stream_set_read_buffer($stream, 0);`
-to disable PHP's internal read buffer in this case.
-See also [`addReadStream()`](#addreadstream) for more details.
-
-#### ExtLibevLoop
-
-An `ext-libev` based event loop.
-
-This uses an [unofficial `libev` extension](https://github.com/m4rw3r/php-libev).
-It supports the same backends as libevent.
-
-This loop does only work with PHP 5.
-An update for PHP 7 is [unlikely](https://github.com/m4rw3r/php-libev/issues/8)
-to happen any time soon.
-
-### LoopInterface
-
-#### run()
-
-The `run(): void` method can be used to
-run the event loop until there are no more tasks to perform.
-
-For many applications, this method is the only directly visible
-invocation on the event loop.
-As a rule of thumb, it is usally recommended to attach everything to the
-same loop instance and then run the loop once at the bottom end of the
-application.
-
-```php
-$loop->run();
-```
-
-This method will keep the loop running until there are no more tasks
-to perform. In other words: This method will block until the last
-timer, stream and/or signal has been removed.
-
-Likewise, it is imperative to ensure the application actually invokes
-this method once. Adding listeners to the loop and missing to actually
-run it will result in the application exiting without actually waiting
-for any of the attached listeners.
-
-This method MUST NOT be called while the loop is already running.
-This method MAY be called more than once after it has explicity been
-[`stop()`ped](#stop) or after it automatically stopped because it
-previously did no longer have anything to do.
-
-#### stop()
-
-The `stop(): void` method can be used to
-instruct a running event loop to stop.
-
-This method is considered advanced usage and should be used with care.
-As a rule of thumb, it is usually recommended to let the loop stop
-only automatically when it no longer has anything to do.
-
-This method can be used to explicitly instruct the event loop to stop:
-
-```php
-$loop->addTimer(3.0, function () use ($loop) {
- $loop->stop();
-});
-```
-
-Calling this method on a loop instance that is not currently running or
-on a loop instance that has already been stopped has no effect.
-
-#### addTimer()
-
-The `addTimer(float $interval, callable $callback): TimerInterface` method can be used to
-enqueue a callback to be invoked once after the given interval.
-
-The timer callback function MUST be able to accept a single parameter,
-the timer instance as also returned by this method or you MAY use a
-function which has no parameters at all.
-
-The timer callback function MUST NOT throw an `Exception`.
-The return value of the timer callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-Unlike [`addPeriodicTimer()`](#addperiodictimer), this method will ensure
-the callback will be invoked only once after the given interval.
-You can invoke [`cancelTimer`](#canceltimer) to cancel a pending timer.
-
-```php
-$loop->addTimer(0.8, function () {
- echo 'world!' . PHP_EOL;
-});
-
-$loop->addTimer(0.3, function () {
- echo 'hello ';
-});
-```
-
-See also [example #1](examples).
-
-If you want to access any variables within your callback function, you
-can bind arbitrary data to a callback closure like this:
-
-```php
-function hello($name, LoopInterface $loop)
-{
- $loop->addTimer(1.0, function () use ($name) {
- echo "hello $name\n";
- });
-}
-
-hello('Tester', $loop);
-```
-
-This interface does not enforce any particular timer resolution, so
-special care may have to be taken if you rely on very high precision with
-millisecond accuracy or below. Event loop implementations SHOULD work on
-a best effort basis and SHOULD provide at least millisecond accuracy
-unless otherwise noted. Many existing event loop implementations are
-known to provide microsecond accuracy, but it's generally not recommended
-to rely on this high precision.
-
-Similarly, the execution order of timers scheduled to execute at the
-same time (within its possible accuracy) is not guaranteed.
-
-This interface suggests that event loop implementations SHOULD use a
-monotonic time source if available. Given that a monotonic time source is
-not available on PHP by default, event loop implementations MAY fall back
-to using wall-clock time.
-While this does not affect many common use cases, this is an important
-distinction for programs that rely on a high time precision or on systems
-that are subject to discontinuous time adjustments (time jumps).
-This means that if you schedule a timer to trigger in 30s and then adjust
-your system time forward by 20s, the timer SHOULD still trigger in 30s.
-See also [event loop implementations](#loop-implementations) for more details.
-
-#### addPeriodicTimer()
-
-The `addPeriodicTimer(float $interval, callable $callback): TimerInterface` method can be used to
-enqueue a callback to be invoked repeatedly after the given interval.
-
-The timer callback function MUST be able to accept a single parameter,
-the timer instance as also returned by this method or you MAY use a
-function which has no parameters at all.
-
-The timer callback function MUST NOT throw an `Exception`.
-The return value of the timer callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-Unlike [`addTimer()`](#addtimer), this method will ensure the the
-callback will be invoked infinitely after the given interval or until you
-invoke [`cancelTimer`](#canceltimer).
-
-```php
-$timer = $loop->addPeriodicTimer(0.1, function () {
- echo 'tick!' . PHP_EOL;
-});
-
-$loop->addTimer(1.0, function () use ($loop, $timer) {
- $loop->cancelTimer($timer);
- echo 'Done' . PHP_EOL;
-});
-```
-
-See also [example #2](examples).
-
-If you want to limit the number of executions, you can bind
-arbitrary data to a callback closure like this:
-
-```php
-function hello($name, LoopInterface $loop)
-{
- $n = 3;
- $loop->addPeriodicTimer(1.0, function ($timer) use ($name, $loop, &$n) {
- if ($n > 0) {
- --$n;
- echo "hello $name\n";
- } else {
- $loop->cancelTimer($timer);
- }
- });
-}
-
-hello('Tester', $loop);
-```
-
-This interface does not enforce any particular timer resolution, so
-special care may have to be taken if you rely on very high precision with
-millisecond accuracy or below. Event loop implementations SHOULD work on
-a best effort basis and SHOULD provide at least millisecond accuracy
-unless otherwise noted. Many existing event loop implementations are
-known to provide microsecond accuracy, but it's generally not recommended
-to rely on this high precision.
-
-Similarly, the execution order of timers scheduled to execute at the
-same time (within its possible accuracy) is not guaranteed.
-
-This interface suggests that event loop implementations SHOULD use a
-monotonic time source if available. Given that a monotonic time source is
-not available on PHP by default, event loop implementations MAY fall back
-to using wall-clock time.
-While this does not affect many common use cases, this is an important
-distinction for programs that rely on a high time precision or on systems
-that are subject to discontinuous time adjustments (time jumps).
-This means that if you schedule a timer to trigger in 30s and then adjust
-your system time forward by 20s, the timer SHOULD still trigger in 30s.
-See also [event loop implementations](#loop-implementations) for more details.
-
-Additionally, periodic timers may be subject to timer drift due to
-re-scheduling after each invocation. As such, it's generally not
-recommended to rely on this for high precision intervals with millisecond
-accuracy or below.
-
-#### cancelTimer()
-
-The `cancelTimer(TimerInterface $timer): void` method can be used to
-cancel a pending timer.
-
-See also [`addPeriodicTimer()`](#addperiodictimer) and [example #2](examples).
-
-Calling this method on a timer instance that has not been added to this
-loop instance or on a timer that has already been cancelled has no effect.
-
-#### futureTick()
-
-The `futureTick(callable $listener): void` method can be used to
-schedule a callback to be invoked on a future tick of the event loop.
-
-This works very much similar to timers with an interval of zero seconds,
-but does not require the overhead of scheduling a timer queue.
-
-The tick callback function MUST be able to accept zero parameters.
-
-The tick callback function MUST NOT throw an `Exception`.
-The return value of the tick callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-If you want to access any variables within your callback function, you
-can bind arbitrary data to a callback closure like this:
-
-```php
-function hello($name, LoopInterface $loop)
-{
- $loop->futureTick(function () use ($name) {
- echo "hello $name\n";
- });
-}
-
-hello('Tester', $loop);
-```
-
-Unlike timers, tick callbacks are guaranteed to be executed in the order
-they are enqueued.
-Also, once a callback is enqueued, there's no way to cancel this operation.
-
-This is often used to break down bigger tasks into smaller steps (a form
-of cooperative multitasking).
-
-```php
-$loop->futureTick(function () {
- echo 'b';
-});
-$loop->futureTick(function () {
- echo 'c';
-});
-echo 'a';
-```
-
-See also [example #3](examples).
-
-#### addSignal()
-
-The `addSignal(int $signal, callable $listener): void` method can be used to
-register a listener to be notified when a signal has been caught by this process.
-
-This is useful to catch user interrupt signals or shutdown signals from
-tools like `supervisor` or `systemd`.
-
-The listener callback function MUST be able to accept a single parameter,
-the signal added by this method or you MAY use a function which
-has no parameters at all.
-
-The listener callback function MUST NOT throw an `Exception`.
-The return value of the listener callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-```php
-$loop->addSignal(SIGINT, function (int $signal) {
- echo 'Caught user interrupt signal' . PHP_EOL;
-});
-```
-
-See also [example #4](examples).
-
-Signaling is only available on Unix-like platform, Windows isn't
-supported due to operating system limitations.
-This method may throw a `BadMethodCallException` if signals aren't
-supported on this platform, for example when required extensions are
-missing.
-
-**Note: A listener can only be added once to the same signal, any
-attempts to add it more then once will be ignored.**
-
-#### removeSignal()
-
-The `removeSignal(int $signal, callable $listener): void` method can be used to
-remove a previously added signal listener.
-
-```php
-$loop->removeSignal(SIGINT, $listener);
-```
-
-Any attempts to remove listeners that aren't registered will be ignored.
-
-#### addReadStream()
-
-> Advanced! Note that this low-level API is considered advanced usage.
- Most use cases should probably use the higher-level
- [readable Stream API](https://github.com/reactphp/stream#readablestreaminterface)
- instead.
-
-The `addReadStream(resource $stream, callable $callback): void` method can be used to
-register a listener to be notified when a stream is ready to read.
-
-The first parameter MUST be a valid stream resource that supports
-checking whether it is ready to read by this loop implementation.
-A single stream resource MUST NOT be added more than once.
-Instead, either call [`removeReadStream()`](#removereadstream) first or
-react to this event with a single listener and then dispatch from this
-listener. This method MAY throw an `Exception` if the given resource type
-is not supported by this loop implementation.
-
-The listener callback function MUST be able to accept a single parameter,
-the stream resource added by this method or you MAY use a function which
-has no parameters at all.
-
-The listener callback function MUST NOT throw an `Exception`.
-The return value of the listener callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-If you want to access any variables within your callback function, you
-can bind arbitrary data to a callback closure like this:
-
-```php
-$loop->addReadStream($stream, function ($stream) use ($name) {
- echo $name . ' said: ' . fread($stream);
-});
-```
-
-See also [example #11](examples).
-
-You can invoke [`removeReadStream()`](#removereadstream) to remove the
-read event listener for this stream.
-
-The execution order of listeners when multiple streams become ready at
-the same time is not guaranteed.
-
-Some event loop implementations are known to only trigger the listener if
-the stream *becomes* readable (edge-triggered) and may not trigger if the
-stream has already been readable from the beginning.
-This also implies that a stream may not be recognized as readable when data
-is still left in PHP's internal stream buffers.
-As such, it's recommended to use `stream_set_read_buffer($stream, 0);`
-to disable PHP's internal read buffer in this case.
-
-#### addWriteStream()
-
-> Advanced! Note that this low-level API is considered advanced usage.
- Most use cases should probably use the higher-level
- [writable Stream API](https://github.com/reactphp/stream#writablestreaminterface)
- instead.
-
-The `addWriteStream(resource $stream, callable $callback): void` method can be used to
-register a listener to be notified when a stream is ready to write.
-
-The first parameter MUST be a valid stream resource that supports
-checking whether it is ready to write by this loop implementation.
-A single stream resource MUST NOT be added more than once.
-Instead, either call [`removeWriteStream()`](#removewritestream) first or
-react to this event with a single listener and then dispatch from this
-listener. This method MAY throw an `Exception` if the given resource type
-is not supported by this loop implementation.
-
-The listener callback function MUST be able to accept a single parameter,
-the stream resource added by this method or you MAY use a function which
-has no parameters at all.
-
-The listener callback function MUST NOT throw an `Exception`.
-The return value of the listener callback function will be ignored and has
-no effect, so for performance reasons you're recommended to not return
-any excessive data structures.
-
-If you want to access any variables within your callback function, you
-can bind arbitrary data to a callback closure like this:
-
-```php
-$loop->addWriteStream($stream, function ($stream) use ($name) {
- fwrite($stream, 'Hello ' . $name);
-});
-```
-
-See also [example #12](examples).
-
-You can invoke [`removeWriteStream()`](#removewritestream) to remove the
-write event listener for this stream.
-
-The execution order of listeners when multiple streams become ready at
-the same time is not guaranteed.
-
-#### removeReadStream()
-
-The `removeReadStream(resource $stream): void` method can be used to
-remove the read event listener for the given stream.
-
-Removing a stream from the loop that has already been removed or trying
-to remove a stream that was never added or is invalid has no effect.
-
-#### removeWriteStream()
-
-The `removeWriteStream(resource $stream): void` method can be used to
-remove the write event listener for the given stream.
-
-Removing a stream from the loop that has already been removed or trying
-to remove a stream that was never added or is invalid has no effect.
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This will install the latest supported version:
-
-```bash
-$ composer require react/event-loop:^0.5.1
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
-HHVM.
-It's *highly recommended to use PHP 7+* for this project.
-
-Installing any of the event loop extensions is suggested, but entirely optional.
-See also [event loop implementations](#loop-implementations) for more details.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
-
-## More
-
-* See our [Stream component](https://github.com/reactphp/stream) for more
- information on how streams are used in real-world applications.
-* See our [users wiki](https://github.com/reactphp/react/wiki/Users) and the
- [dependents on Packagist](https://packagist.org/packages/react/event-loop/dependents)
- for a list of packages that use the EventLoop in real-world applications.
diff --git a/assets/php/vendor/react/event-loop/composer.json b/assets/php/vendor/react/event-loop/composer.json
deleted file mode 100755
index 24974ec..0000000
--- a/assets/php/vendor/react/event-loop/composer.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": "react/event-loop",
- "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.",
- "keywords": ["event-loop", "asynchronous"],
- "license": "MIT",
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8.35 || ^5.7 || ^6.4"
- },
- "suggest": {
- "ext-event": "~1.0 for ExtEventLoop",
- "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
- },
- "autoload": {
- "psr-4": {
- "React\\EventLoop\\": "src"
- }
- }
-}
diff --git a/assets/php/vendor/react/event-loop/examples/01-timers.php b/assets/php/vendor/react/event-loop/examples/01-timers.php
deleted file mode 100755
index e6107e4..0000000
--- a/assets/php/vendor/react/event-loop/examples/01-timers.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$loop->addTimer(0.8, function () {
- echo 'world!' . PHP_EOL;
-});
-
-$loop->addTimer(0.3, function () {
- echo 'hello ';
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/02-periodic.php b/assets/php/vendor/react/event-loop/examples/02-periodic.php
deleted file mode 100755
index 5e138a6..0000000
--- a/assets/php/vendor/react/event-loop/examples/02-periodic.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$timer = $loop->addPeriodicTimer(0.1, function () {
- echo 'tick!' . PHP_EOL;
-});
-
-$loop->addTimer(1.0, function () use ($loop, $timer) {
- $loop->cancelTimer($timer);
- echo 'Done' . PHP_EOL;
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/03-ticks.php b/assets/php/vendor/react/event-loop/examples/03-ticks.php
deleted file mode 100755
index 3f36c6d..0000000
--- a/assets/php/vendor/react/event-loop/examples/03-ticks.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-$loop->futureTick(function () {
- echo 'b';
-});
-$loop->futureTick(function () {
- echo 'c';
-});
-echo 'a';
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/04-signals.php b/assets/php/vendor/react/event-loop/examples/04-signals.php
deleted file mode 100755
index 90b6898..0000000
--- a/assets/php/vendor/react/event-loop/examples/04-signals.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-if (!defined('SIGINT')) {
- fwrite(STDERR, 'Not supported on your platform (ext-pcntl missing or Windows?)' . PHP_EOL);
- exit(1);
-}
-
-$loop = React\EventLoop\Factory::create();
-
-$loop->addSignal(SIGINT, $func = function ($signal) use ($loop, &$func) {
- echo 'Signal: ', (string)$signal, PHP_EOL;
- $loop->removeSignal(SIGINT, $func);
-});
-
-echo 'Listening for SIGINT. Use "kill -SIGINT ' . getmypid() . '" or CTRL+C' . PHP_EOL;
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/11-consume-stdin.php b/assets/php/vendor/react/event-loop/examples/11-consume-stdin.php
deleted file mode 100755
index 2a77245..0000000
--- a/assets/php/vendor/react/event-loop/examples/11-consume-stdin.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-if (!defined('STDIN') || stream_set_blocking(STDIN, false) !== true) {
- fwrite(STDERR, 'ERROR: Unable to set STDIN non-blocking (not CLI or Windows?)' . PHP_EOL);
- exit(1);
-}
-
-$loop = Factory::create();
-
-// read everything from STDIN and report number of bytes
-// for illustration purposes only, should use react/stream instead
-$loop->addReadStream(STDIN, function ($stream) use ($loop) {
- $chunk = fread($stream, 64 * 1024);
-
- // reading nothing means we reached EOF
- if ($chunk === '') {
- $loop->removeReadStream($stream);
- stream_set_blocking($stream, true);
- fclose($stream);
- return;
- }
-
- echo strlen($chunk) . ' bytes' . PHP_EOL;
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/12-generate-yes.php b/assets/php/vendor/react/event-loop/examples/12-generate-yes.php
deleted file mode 100755
index ebc2beb..0000000
--- a/assets/php/vendor/react/event-loop/examples/12-generate-yes.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-// data can be given as first argument or defaults to "y"
-$data = (isset($argv[1]) ? $argv[1] : 'y') . "\n";
-
-// repeat data X times in order to fill around 200 KB
-$data = str_repeat($data, round(200000 / strlen($data)));
-
-$loop = React\EventLoop\Factory::create();
-
-if (!defined('STDOUT') || stream_set_blocking(STDOUT, false) !== true) {
- fwrite(STDERR, 'ERROR: Unable to set STDOUT non-blocking (not CLI or Windows?)' . PHP_EOL);
- exit(1);
-}
-
-// write data to STDOUT whenever its write buffer accepts data
-// for illustrations purpose only, should use react/stream instead
-$loop->addWriteStream(STDOUT, function ($stdout) use ($loop, &$data) {
- // try to write data
- $r = fwrite($stdout, $data);
-
- // nothing could be written despite being writable => closed
- if ($r === 0) {
- $loop->removeWriteStream($stdout);
- fclose($stdout);
- stream_set_blocking($stdout, true);
- fwrite(STDERR, 'Stopped because STDOUT closed' . PHP_EOL);
-
- return;
- }
-
- // implement a very simple ring buffer, unless everything has been written at once:
- // everything written in this iteration will be appended for next iteration
- if (isset($data[$r])) {
- $data = substr($data, $r) . substr($data, 0, $r);
- }
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/13-http-client-blocking.php b/assets/php/vendor/react/event-loop/examples/13-http-client-blocking.php
deleted file mode 100755
index a2dde55..0000000
--- a/assets/php/vendor/react/event-loop/examples/13-http-client-blocking.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-// connect to www.google.com:80 (blocking call!)
-// for illustration purposes only, should use react/socket instead
-$stream = stream_socket_client('tcp://www.google.com:80');
-if (!$stream) {
- exit(1);
-}
-stream_set_blocking($stream, false);
-
-// send HTTP request
-fwrite($stream, "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n");
-
-// wait for HTTP response
-$loop->addReadStream($stream, function ($stream) use ($loop) {
- $chunk = fread($stream, 64 * 1024);
-
- // reading nothing means we reached EOF
- if ($chunk === '') {
- echo '[END]' . PHP_EOL;
- $loop->removeReadStream($stream);
- fclose($stream);
- return;
- }
-
- echo $chunk;
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/14-http-client-async.php b/assets/php/vendor/react/event-loop/examples/14-http-client-async.php
deleted file mode 100755
index c82c988..0000000
--- a/assets/php/vendor/react/event-loop/examples/14-http-client-async.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-// resolve hostname before establishing TCP/IP connection (resolving DNS is still blocking here)
-// for illustration purposes only, should use react/socket or react/dns instead!
-$ip = gethostbyname('www.google.com');
-if (ip2long($ip) === false) {
- echo 'Unable to resolve hostname' . PHP_EOL;
- exit(1);
-}
-
-// establish TCP/IP connection (non-blocking)
-// for illustraction purposes only, should use react/socket instead!
-$stream = stream_socket_client('tcp://' . $ip . ':80', $errno, $errstr, null, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT);
-if (!$stream) {
- exit(1);
-}
-stream_set_blocking($stream, false);
-
-// print progress every 10ms
-echo 'Connecting';
-$timer = $loop->addPeriodicTimer(0.01, function () {
- echo '.';
-});
-
-// wait for connection success/error
-$loop->addWriteStream($stream, function ($stream) use ($loop, $timer) {
- $loop->removeWriteStream($stream);
- $loop->cancelTimer($timer);
-
- // check for socket error (connection rejected)
- if (stream_socket_get_name($stream, true) === false) {
- echo '[unable to connect]' . PHP_EOL;
- exit(1);
- } else {
- echo '[connected]' . PHP_EOL;
- }
-
- // send HTTP request
- fwrite($stream, "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n");
-
- // wait for HTTP response
- $loop->addReadStream($stream, function ($stream) use ($loop) {
- $chunk = fread($stream, 64 * 1024);
-
- // reading nothing means we reached EOF
- if ($chunk === '') {
- echo '[END]' . PHP_EOL;
- $loop->removeReadStream($stream);
- fclose($stream);
- return;
- }
-
- echo $chunk;
- });
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/21-http-server.php b/assets/php/vendor/react/event-loop/examples/21-http-server.php
deleted file mode 100755
index 89520ce..0000000
--- a/assets/php/vendor/react/event-loop/examples/21-http-server.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = React\EventLoop\Factory::create();
-
-// start TCP/IP server on localhost:8080
-// for illustration purposes only, should use react/socket instead
-$server = stream_socket_server('tcp://127.0.0.1:8080');
-if (!$server) {
- exit(1);
-}
-stream_set_blocking($server, false);
-
-// wait for incoming connections on server socket
-$loop->addReadStream($server, function ($server) use ($loop) {
- $conn = stream_socket_accept($server);
- $data = "HTTP/1.1 200 OK\r\nContent-Length: 3\r\n\r\nHi\n";
- $loop->addWriteStream($conn, function ($conn) use (&$data, $loop) {
- $written = fwrite($conn, $data);
- if ($written === strlen($data)) {
- fclose($conn);
- $loop->removeWriteStream($conn);
- } else {
- $data = substr($data, $written);
- }
- });
-});
-
-$loop->addPeriodicTimer(5, function () {
- $memory = memory_get_usage() / 1024;
- $formatted = number_format($memory, 3).'K';
- echo "Current memory usage: {$formatted}\n";
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/91-benchmark-ticks.php b/assets/php/vendor/react/event-loop/examples/91-benchmark-ticks.php
deleted file mode 100755
index 3f4690b..0000000
--- a/assets/php/vendor/react/event-loop/examples/91-benchmark-ticks.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$n = isset($argv[1]) ? (int)$argv[1] : 1000 * 100;
-
-for ($i = 0; $i < $n; ++$i) {
- $loop->futureTick(function () { });
-}
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/92-benchmark-timers.php b/assets/php/vendor/react/event-loop/examples/92-benchmark-timers.php
deleted file mode 100755
index e2e02e4..0000000
--- a/assets/php/vendor/react/event-loop/examples/92-benchmark-timers.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$n = isset($argv[1]) ? (int)$argv[1] : 1000 * 100;
-
-for ($i = 0; $i < $n; ++$i) {
- $loop->addTimer(0, function () { });
-}
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/93-benchmark-ticks-delay.php b/assets/php/vendor/react/event-loop/examples/93-benchmark-ticks-delay.php
deleted file mode 100755
index 95ee78c..0000000
--- a/assets/php/vendor/react/event-loop/examples/93-benchmark-ticks-delay.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$ticks = isset($argv[1]) ? (int)$argv[1] : 1000 * 100;
-$tick = function () use (&$tick, &$ticks, $loop) {
- if ($ticks > 0) {
- --$ticks;
- //$loop->addTimer(0, $tick);
- $loop->futureTick($tick);
- } else {
- echo 'done';
- }
-};
-
-$tick();
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/94-benchmark-timers-delay.php b/assets/php/vendor/react/event-loop/examples/94-benchmark-timers-delay.php
deleted file mode 100755
index 2d6cfa2..0000000
--- a/assets/php/vendor/react/event-loop/examples/94-benchmark-timers-delay.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-use React\EventLoop\Factory;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$ticks = isset($argv[1]) ? (int)$argv[1] : 1000 * 100;
-$tick = function () use (&$tick, &$ticks, $loop) {
- if ($ticks > 0) {
- --$ticks;
- //$loop->futureTick($tick);
- $loop->addTimer(0, $tick);
- } else {
- echo 'done';
- }
-};
-
-$tick();
-
-$loop->run();
diff --git a/assets/php/vendor/react/event-loop/examples/95-benchmark-memory.php b/assets/php/vendor/react/event-loop/examples/95-benchmark-memory.php
deleted file mode 100755
index 084c404..0000000
--- a/assets/php/vendor/react/event-loop/examples/95-benchmark-memory.php
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-/**
- * Run the script indefinitely seconds with the loop from the factory and report every 2 seconds:
- * php 95-benchmark-memory.php
- * Run the script for 30 seconds with the stream_select loop and report every 10 seconds:
- * php 95-benchmark-memory.php -t 30 -l StreamSelect -r 10
- */
-
-use React\EventLoop\Factory;
-use React\EventLoop\LoopInterface;
-use React\EventLoop\TimerInterface;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$args = getopt('t:l:r:');
-$t = isset($args['t']) ? (int)$args['t'] : 0;
-$loop = isset($args['l']) && class_exists('React\EventLoop\\' . $args['l'] . 'Loop') ? 'React\EventLoop\\' . $args['l'] . 'Loop' : Factory::create();
-
-if (!($loop instanceof LoopInterface)) {
- $loop = new $loop();
-}
-
-$r = isset($args['r']) ? (int)$args['r'] : 2;
-
-$runs = 0;
-
-if (5 < $t) {
- $loop->addTimer($t, function () use ($loop) {
- $loop->stop();
- });
-
-}
-
-$loop->addPeriodicTimer(0.001, function () use (&$runs, $loop) {
- $runs++;
-
- $loop->addPeriodicTimer(1, function (TimerInterface $timer) use ($loop) {
- $loop->cancelTimer($timer);
- });
-});
-
-$loop->addPeriodicTimer($r, function () use (&$runs) {
- $kmem = round(memory_get_usage() / 1024);
- $kmemReal = round(memory_get_usage(true) / 1024);
- echo "Runs:\t\t\t$runs\n";
- echo "Memory (internal):\t$kmem KiB\n";
- echo "Memory (real):\t\t$kmemReal KiB\n";
- echo str_repeat('-', 50), "\n";
-});
-
-echo "PHP Version:\t\t", phpversion(), "\n";
-echo "Loop\t\t\t", get_class($loop), "\n";
-echo "Time\t\t\t", date('r'), "\n";
-
-echo str_repeat('-', 50), "\n";
-
-$beginTime = time();
-$loop->run();
-$endTime = time();
-$timeTaken = $endTime - $beginTime;
-
-echo "PHP Version:\t\t", phpversion(), "\n";
-echo "Loop\t\t\t", get_class($loop), "\n";
-echo "Time\t\t\t", date('r'), "\n";
-echo "Time taken\t\t", $timeTaken, " seconds\n";
-echo "Runs per second\t\t", round($runs / $timeTaken), "\n";
diff --git a/assets/php/vendor/react/event-loop/phpunit.xml.dist b/assets/php/vendor/react/event-loop/phpunit.xml.dist
deleted file mode 100755
index cba6d4d..0000000
--- a/assets/php/vendor/react/event-loop/phpunit.xml.dist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false"
- bootstrap="tests/bootstrap.php"
->
- <testsuites>
- <testsuite name="React Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/event-loop/src/ExtEvLoop.php b/assets/php/vendor/react/event-loop/src/ExtEvLoop.php
deleted file mode 100755
index 74db6d0..0000000
--- a/assets/php/vendor/react/event-loop/src/ExtEvLoop.php
+++ /dev/null
@@ -1,252 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-use Ev;
-use EvIo;
-use EvLoop;
-use React\EventLoop\Tick\FutureTickQueue;
-use React\EventLoop\Timer\Timer;
-use SplObjectStorage;
-
-/**
- * An `ext-ev` based event loop.
- *
- * This loop uses the [`ev` PECL extension](https://pecl.php.net/package/ev),
- * that provides an interface to `libev` library.
- *
- * This loop is known to work with PHP 5.4 through PHP 7+.
- *
- * @see http://php.net/manual/en/book.ev.php
- * @see https://bitbucket.org/osmanov/pecl-ev/overview
- */
-class ExtEvLoop implements LoopInterface
-{
- /**
- * @var EvLoop
- */
- private $loop;
-
- /**
- * @var FutureTickQueue
- */
- private $futureTickQueue;
-
- /**
- * @var SplObjectStorage
- */
- private $timers;
-
- /**
- * @var EvIo[]
- */
- private $readStreams = [];
-
- /**
- * @var EvIo[]
- */
- private $writeStreams = [];
-
- /**
- * @var bool
- */
- private $running;
-
- /**
- * @var SignalsHandler
- */
- private $signals;
-
- /**
- * @var \EvSignal[]
- */
- private $signalEvents = [];
-
- public function __construct()
- {
- $this->loop = new EvLoop();
- $this->futureTickQueue = new FutureTickQueue();
- $this->timers = new SplObjectStorage();
- $this->signals = new SignalsHandler();
- }
-
- public function addReadStream($stream, $listener)
- {
- $key = (int)$stream;
-
- if (isset($this->readStreams[$key])) {
- return;
- }
-
- $callback = $this->getStreamListenerClosure($stream, $listener);
- $event = $this->loop->io($stream, Ev::READ, $callback);
- $this->readStreams[$key] = $event;
- }
-
- /**
- * @param resource $stream
- * @param callable $listener
- *
- * @return \Closure
- */
- private function getStreamListenerClosure($stream, $listener)
- {
- return function () use ($stream, $listener) {
- call_user_func($listener, $stream);
- };
- }
-
- public function addWriteStream($stream, $listener)
- {
- $key = (int)$stream;
-
- if (isset($this->writeStreams[$key])) {
- return;
- }
-
- $callback = $this->getStreamListenerClosure($stream, $listener);
- $event = $this->loop->io($stream, Ev::WRITE, $callback);
- $this->writeStreams[$key] = $event;
- }
-
- public function removeReadStream($stream)
- {
- $key = (int)$stream;
-
- if (!isset($this->readStreams[$key])) {
- return;
- }
-
- $this->readStreams[$key]->stop();
- unset($this->readStreams[$key]);
- }
-
- public function removeWriteStream($stream)
- {
- $key = (int)$stream;
-
- if (!isset($this->writeStreams[$key])) {
- return;
- }
-
- $this->writeStreams[$key]->stop();
- unset($this->writeStreams[$key]);
- }
-
- public function addTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, false);
-
- $that = $this;
- $timers = $this->timers;
- $callback = function () use ($timer, $timers, $that) {
- call_user_func($timer->getCallback(), $timer);
-
- if ($timers->contains($timer)) {
- $that->cancelTimer($timer);
- }
- };
-
- $event = $this->loop->timer($timer->getInterval(), 0.0, $callback);
- $this->timers->attach($timer, $event);
-
- return $timer;
- }
-
- public function addPeriodicTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, true);
-
- $callback = function () use ($timer) {
- call_user_func($timer->getCallback(), $timer);
- };
-
- $event = $this->loop->timer($interval, $interval, $callback);
- $this->timers->attach($timer, $event);
-
- return $timer;
- }
-
- public function cancelTimer(TimerInterface $timer)
- {
- if (!isset($this->timers[$timer])) {
- return;
- }
-
- $event = $this->timers[$timer];
- $event->stop();
- $this->timers->detach($timer);
- }
-
- public function futureTick($listener)
- {
- $this->futureTickQueue->add($listener);
- }
-
- public function run()
- {
- $this->running = true;
-
- while ($this->running) {
- $this->futureTickQueue->tick();
-
- $hasPendingCallbacks = !$this->futureTickQueue->isEmpty();
- $wasJustStopped = !$this->running;
- $nothingLeftToDo = !$this->readStreams
- && !$this->writeStreams
- && !$this->timers->count()
- && $this->signals->isEmpty();
-
- $flags = Ev::RUN_ONCE;
- if ($wasJustStopped || $hasPendingCallbacks) {
- $flags |= Ev::RUN_NOWAIT;
- } elseif ($nothingLeftToDo) {
- break;
- }
-
- $this->loop->run($flags);
- }
- }
-
- public function stop()
- {
- $this->running = false;
- }
-
- public function __destruct()
- {
- /** @var TimerInterface $timer */
- foreach ($this->timers as $timer) {
- $this->cancelTimer($timer);
- }
-
- foreach ($this->readStreams as $key => $stream) {
- $this->removeReadStream($key);
- }
-
- foreach ($this->writeStreams as $key => $stream) {
- $this->removeWriteStream($key);
- }
- }
-
- public function addSignal($signal, $listener)
- {
- $this->signals->add($signal, $listener);
-
- if (!isset($this->signalEvents[$signal])) {
- $this->signalEvents[$signal] = $this->loop->signal($signal, function() use ($signal) {
- $this->signals->call($signal);
- });
- }
- }
-
- public function removeSignal($signal, $listener)
- {
- $this->signals->remove($signal, $listener);
-
- if (isset($this->signalEvents[$signal])) {
- $this->signalEvents[$signal]->stop();
- unset($this->signalEvents[$signal]);
- }
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/ExtEventLoop.php b/assets/php/vendor/react/event-loop/src/ExtEventLoop.php
deleted file mode 100755
index 622dd47..0000000
--- a/assets/php/vendor/react/event-loop/src/ExtEventLoop.php
+++ /dev/null
@@ -1,259 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-use BadMethodCallException;
-use Event;
-use EventBase;
-use EventConfig as EventBaseConfig;
-use React\EventLoop\Tick\FutureTickQueue;
-use React\EventLoop\Timer\Timer;
-use SplObjectStorage;
-
-/**
- * An `ext-event` based event loop.
- *
- * This uses the [`event` PECL extension](https://pecl.php.net/package/event).
- * It supports the same backends as libevent.
- *
- * This loop is known to work with PHP 5.4 through PHP 7+.
- *
- * @link https://pecl.php.net/package/event
- */
-final class ExtEventLoop implements LoopInterface
-{
- private $eventBase;
- private $futureTickQueue;
- private $timerCallback;
- private $timerEvents;
- private $streamCallback;
- private $readEvents = array();
- private $writeEvents = array();
- private $readListeners = array();
- private $writeListeners = array();
- private $readRefs = array();
- private $writeRefs = array();
- private $running;
- private $signals;
- private $signalEvents = array();
-
- public function __construct()
- {
- if (!class_exists('EventBase', false)) {
- throw new BadMethodCallException('Cannot create ExtEventLoop, ext-event extension missing');
- }
-
- $config = new EventBaseConfig();
- $config->requireFeatures(EventBaseConfig::FEATURE_FDS);
-
- $this->eventBase = new EventBase($config);
- $this->futureTickQueue = new FutureTickQueue();
- $this->timerEvents = new SplObjectStorage();
- $this->signals = new SignalsHandler();
-
- $this->createTimerCallback();
- $this->createStreamCallback();
- }
-
- public function addReadStream($stream, $listener)
- {
- $key = (int) $stream;
- if (isset($this->readListeners[$key])) {
- return;
- }
-
- $event = new Event($this->eventBase, $stream, Event::PERSIST | Event::READ, $this->streamCallback);
- $event->add();
- $this->readEvents[$key] = $event;
- $this->readListeners[$key] = $listener;
-
- // ext-event does not increase refcount on stream resources for PHP 7+
- // manually keep track of stream resource to prevent premature garbage collection
- if (PHP_VERSION_ID >= 70000) {
- $this->readRefs[$key] = $stream;
- }
- }
-
- public function addWriteStream($stream, $listener)
- {
- $key = (int) $stream;
- if (isset($this->writeListeners[$key])) {
- return;
- }
-
- $event = new Event($this->eventBase, $stream, Event::PERSIST | Event::WRITE, $this->streamCallback);
- $event->add();
- $this->writeEvents[$key] = $event;
- $this->writeListeners[$key] = $listener;
-
- // ext-event does not increase refcount on stream resources for PHP 7+
- // manually keep track of stream resource to prevent premature garbage collection
- if (PHP_VERSION_ID >= 70000) {
- $this->writeRefs[$key] = $stream;
- }
- }
-
- public function removeReadStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->readEvents[$key])) {
- $this->readEvents[$key]->free();
- unset(
- $this->readEvents[$key],
- $this->readListeners[$key],
- $this->readRefs[$key]
- );
- }
- }
-
- public function removeWriteStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->writeEvents[$key])) {
- $this->writeEvents[$key]->free();
- unset(
- $this->writeEvents[$key],
- $this->writeListeners[$key],
- $this->writeRefs[$key]
- );
- }
- }
-
- public function addTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, false);
-
- $this->scheduleTimer($timer);
-
- return $timer;
- }
-
- public function addPeriodicTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, true);
-
- $this->scheduleTimer($timer);
-
- return $timer;
- }
-
- public function cancelTimer(TimerInterface $timer)
- {
- if ($this->timerEvents->contains($timer)) {
- $this->timerEvents[$timer]->free();
- $this->timerEvents->detach($timer);
- }
- }
-
- public function futureTick($listener)
- {
- $this->futureTickQueue->add($listener);
- }
-
- public function addSignal($signal, $listener)
- {
- $this->signals->add($signal, $listener);
-
- if (!isset($this->signalEvents[$signal])) {
- $this->signalEvents[$signal] = Event::signal($this->eventBase, $signal, array($this->signals, 'call'));
- $this->signalEvents[$signal]->add();
- }
- }
-
- public function removeSignal($signal, $listener)
- {
- $this->signals->remove($signal, $listener);
-
- if (isset($this->signalEvents[$signal]) && $this->signals->count($signal) === 0) {
- $this->signalEvents[$signal]->free();
- unset($this->signalEvents[$signal]);
- }
- }
-
- public function run()
- {
- $this->running = true;
-
- while ($this->running) {
- $this->futureTickQueue->tick();
-
- $flags = EventBase::LOOP_ONCE;
- if (!$this->running || !$this->futureTickQueue->isEmpty()) {
- $flags |= EventBase::LOOP_NONBLOCK;
- } elseif (!$this->readEvents && !$this->writeEvents && !$this->timerEvents->count() && $this->signals->isEmpty()) {
- break;
- }
-
- $this->eventBase->loop($flags);
- }
- }
-
- public function stop()
- {
- $this->running = false;
- }
-
- /**
- * Schedule a timer for execution.
- *
- * @param TimerInterface $timer
- */
- private function scheduleTimer(TimerInterface $timer)
- {
- $flags = Event::TIMEOUT;
-
- if ($timer->isPeriodic()) {
- $flags |= Event::PERSIST;
- }
-
- $event = new Event($this->eventBase, -1, $flags, $this->timerCallback, $timer);
- $this->timerEvents[$timer] = $event;
-
- $event->add($timer->getInterval());
- }
-
- /**
- * Create a callback used as the target of timer events.
- *
- * A reference is kept to the callback for the lifetime of the loop
- * to prevent "Cannot destroy active lambda function" fatal error from
- * the event extension.
- */
- private function createTimerCallback()
- {
- $timers = $this->timerEvents;
- $this->timerCallback = function ($_, $__, $timer) use ($timers) {
- call_user_func($timer->getCallback(), $timer);
-
- if (!$timer->isPeriodic() && $timers->contains($timer)) {
- $this->cancelTimer($timer);
- }
- };
- }
-
- /**
- * Create a callback used as the target of stream events.
- *
- * A reference is kept to the callback for the lifetime of the loop
- * to prevent "Cannot destroy active lambda function" fatal error from
- * the event extension.
- */
- private function createStreamCallback()
- {
- $read =& $this->readListeners;
- $write =& $this->writeListeners;
- $this->streamCallback = function ($stream, $flags) use (&$read, &$write) {
- $key = (int) $stream;
-
- if (Event::READ === (Event::READ & $flags) && isset($read[$key])) {
- call_user_func($read[$key], $stream);
- }
-
- if (Event::WRITE === (Event::WRITE & $flags) && isset($write[$key])) {
- call_user_func($write[$key], $stream);
- }
- };
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/ExtLibevLoop.php b/assets/php/vendor/react/event-loop/src/ExtLibevLoop.php
deleted file mode 100755
index d3b0df8..0000000
--- a/assets/php/vendor/react/event-loop/src/ExtLibevLoop.php
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-use BadMethodCallException;
-use libev\EventLoop;
-use libev\IOEvent;
-use libev\SignalEvent;
-use libev\TimerEvent;
-use React\EventLoop\Tick\FutureTickQueue;
-use React\EventLoop\Timer\Timer;
-use SplObjectStorage;
-
-/**
- * An `ext-libev` based event loop.
- *
- * This uses an [unofficial `libev` extension](https://github.com/m4rw3r/php-libev).
- * It supports the same backends as libevent.
- *
- * This loop does only work with PHP 5.
- * An update for PHP 7 is [unlikely](https://github.com/m4rw3r/php-libev/issues/8)
- * to happen any time soon.
- *
- * @see https://github.com/m4rw3r/php-libev
- * @see https://gist.github.com/1688204
- */
-final class ExtLibevLoop implements LoopInterface
-{
- private $loop;
- private $futureTickQueue;
- private $timerEvents;
- private $readEvents = array();
- private $writeEvents = array();
- private $running;
- private $signals;
- private $signalEvents = array();
-
- public function __construct()
- {
- if (!class_exists('libev\EventLoop', false)) {
- throw new BadMethodCallException('Cannot create ExtLibevLoop, ext-libev extension missing');
- }
-
- $this->loop = new EventLoop();
- $this->futureTickQueue = new FutureTickQueue();
- $this->timerEvents = new SplObjectStorage();
- $this->signals = new SignalsHandler();
- }
-
- public function addReadStream($stream, $listener)
- {
- if (isset($this->readEvents[(int) $stream])) {
- return;
- }
-
- $callback = function () use ($stream, $listener) {
- call_user_func($listener, $stream);
- };
-
- $event = new IOEvent($callback, $stream, IOEvent::READ);
- $this->loop->add($event);
-
- $this->readEvents[(int) $stream] = $event;
- }
-
- public function addWriteStream($stream, $listener)
- {
- if (isset($this->writeEvents[(int) $stream])) {
- return;
- }
-
- $callback = function () use ($stream, $listener) {
- call_user_func($listener, $stream);
- };
-
- $event = new IOEvent($callback, $stream, IOEvent::WRITE);
- $this->loop->add($event);
-
- $this->writeEvents[(int) $stream] = $event;
- }
-
- public function removeReadStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->readEvents[$key])) {
- $this->readEvents[$key]->stop();
- $this->loop->remove($this->readEvents[$key]);
- unset($this->readEvents[$key]);
- }
- }
-
- public function removeWriteStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->writeEvents[$key])) {
- $this->writeEvents[$key]->stop();
- $this->loop->remove($this->writeEvents[$key]);
- unset($this->writeEvents[$key]);
- }
- }
-
- public function addTimer($interval, $callback)
- {
- $timer = new Timer( $interval, $callback, false);
-
- $that = $this;
- $timers = $this->timerEvents;
- $callback = function () use ($timer, $timers, $that) {
- call_user_func($timer->getCallback(), $timer);
-
- if ($timers->contains($timer)) {
- $that->cancelTimer($timer);
- }
- };
-
- $event = new TimerEvent($callback, $timer->getInterval());
- $this->timerEvents->attach($timer, $event);
- $this->loop->add($event);
-
- return $timer;
- }
-
- public function addPeriodicTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, true);
-
- $callback = function () use ($timer) {
- call_user_func($timer->getCallback(), $timer);
- };
-
- $event = new TimerEvent($callback, $interval, $interval);
- $this->timerEvents->attach($timer, $event);
- $this->loop->add($event);
-
- return $timer;
- }
-
- public function cancelTimer(TimerInterface $timer)
- {
- if (isset($this->timerEvents[$timer])) {
- $this->loop->remove($this->timerEvents[$timer]);
- $this->timerEvents->detach($timer);
- }
- }
-
- public function futureTick($listener)
- {
- $this->futureTickQueue->add($listener);
- }
-
- public function addSignal($signal, $listener)
- {
- $this->signals->add($signal, $listener);
-
- if (!isset($this->signalEvents[$signal])) {
- $signals = $this->signals;
- $this->signalEvents[$signal] = new SignalEvent(function () use ($signals, $signal) {
- $signals->call($signal);
- }, $signal);
- $this->loop->add($this->signalEvents[$signal]);
- }
- }
-
- public function removeSignal($signal, $listener)
- {
- $this->signals->remove($signal, $listener);
-
- if (isset($this->signalEvents[$signal]) && $this->signals->count($signal) === 0) {
- $this->signalEvents[$signal]->stop();
- $this->loop->remove($this->signalEvents[$signal]);
- unset($this->signalEvents[$signal]);
- }
- }
-
- public function run()
- {
- $this->running = true;
-
- while ($this->running) {
- $this->futureTickQueue->tick();
-
- $flags = EventLoop::RUN_ONCE;
- if (!$this->running || !$this->futureTickQueue->isEmpty()) {
- $flags |= EventLoop::RUN_NOWAIT;
- } elseif (!$this->readEvents && !$this->writeEvents && !$this->timerEvents->count() && $this->signals->isEmpty()) {
- break;
- }
-
- $this->loop->run($flags);
- }
- }
-
- public function stop()
- {
- $this->running = false;
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/ExtLibeventLoop.php b/assets/php/vendor/react/event-loop/src/ExtLibeventLoop.php
deleted file mode 100755
index 427f8db..0000000
--- a/assets/php/vendor/react/event-loop/src/ExtLibeventLoop.php
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-use BadMethodCallException;
-use Event;
-use EventBase;
-use React\EventLoop\Tick\FutureTickQueue;
-use React\EventLoop\Timer\Timer;
-use SplObjectStorage;
-
-/**
- * An `ext-libevent` based event loop.
- *
- * This uses the [`libevent` PECL extension](https://pecl.php.net/package/libevent).
- * `libevent` itself supports a number of system-specific backends (epoll, kqueue).
- *
- * This event loop does only work with PHP 5.
- * An [unofficial update](https://github.com/php/pecl-event-libevent/pull/2) for
- * PHP 7 does exist, but it is known to cause regular crashes due to `SEGFAULT`s.
- * To reiterate: Using this event loop on PHP 7 is not recommended.
- * Accordingly, the [`Factory`](#factory) will not try to use this event loop on
- * PHP 7.
- *
- * This event loop is known to trigger a readable listener only if
- * the stream *becomes* readable (edge-triggered) and may not trigger if the
- * stream has already been readable from the beginning.
- * This also implies that a stream may not be recognized as readable when data
- * is still left in PHP's internal stream buffers.
- * As such, it's recommended to use `stream_set_read_buffer($stream, 0);`
- * to disable PHP's internal read buffer in this case.
- * See also [`addReadStream()`](#addreadstream) for more details.
- *
- * @link https://pecl.php.net/package/libevent
- */
-final class ExtLibeventLoop implements LoopInterface
-{
- /** @internal */
- const MICROSECONDS_PER_SECOND = 1000000;
-
- private $eventBase;
- private $futureTickQueue;
- private $timerCallback;
- private $timerEvents;
- private $streamCallback;
- private $readEvents = array();
- private $writeEvents = array();
- private $readListeners = array();
- private $writeListeners = array();
- private $running;
- private $signals;
- private $signalEvents = array();
-
- public function __construct()
- {
- if (!function_exists('event_base_new')) {
- throw new BadMethodCallException('Cannot create ExtLibeventLoop, ext-libevent extension missing');
- }
-
- $this->eventBase = event_base_new();
- $this->futureTickQueue = new FutureTickQueue();
- $this->timerEvents = new SplObjectStorage();
- $this->signals = new SignalsHandler();
-
- $this->createTimerCallback();
- $this->createStreamCallback();
- }
-
- public function addReadStream($stream, $listener)
- {
- $key = (int) $stream;
- if (isset($this->readListeners[$key])) {
- return;
- }
-
- $event = event_new();
- event_set($event, $stream, EV_PERSIST | EV_READ, $this->streamCallback);
- event_base_set($event, $this->eventBase);
- event_add($event);
-
- $this->readEvents[$key] = $event;
- $this->readListeners[$key] = $listener;
- }
-
- public function addWriteStream($stream, $listener)
- {
- $key = (int) $stream;
- if (isset($this->writeListeners[$key])) {
- return;
- }
-
- $event = event_new();
- event_set($event, $stream, EV_PERSIST | EV_WRITE, $this->streamCallback);
- event_base_set($event, $this->eventBase);
- event_add($event);
-
- $this->writeEvents[$key] = $event;
- $this->writeListeners[$key] = $listener;
- }
-
- public function removeReadStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->readListeners[$key])) {
- $event = $this->readEvents[$key];
- event_del($event);
- event_free($event);
-
- unset(
- $this->readEvents[$key],
- $this->readListeners[$key]
- );
- }
- }
-
- public function removeWriteStream($stream)
- {
- $key = (int) $stream;
-
- if (isset($this->writeListeners[$key])) {
- $event = $this->writeEvents[$key];
- event_del($event);
- event_free($event);
-
- unset(
- $this->writeEvents[$key],
- $this->writeListeners[$key]
- );
- }
- }
-
- public function addTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, false);
-
- $this->scheduleTimer($timer);
-
- return $timer;
- }
-
- public function addPeriodicTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, true);
-
- $this->scheduleTimer($timer);
-
- return $timer;
- }
-
- public function cancelTimer(TimerInterface $timer)
- {
- if ($this->timerEvents->contains($timer)) {
- $event = $this->timerEvents[$timer];
- event_del($event);
- event_free($event);
-
- $this->timerEvents->detach($timer);
- }
- }
-
- public function futureTick($listener)
- {
- $this->futureTickQueue->add($listener);
- }
-
- public function addSignal($signal, $listener)
- {
- $this->signals->add($signal, $listener);
-
- if (!isset($this->signalEvents[$signal])) {
- $this->signalEvents[$signal] = event_new();
- event_set($this->signalEvents[$signal], $signal, EV_PERSIST | EV_SIGNAL, array($this->signals, 'call'));
- event_base_set($this->signalEvents[$signal], $this->eventBase);
- event_add($this->signalEvents[$signal]);
- }
- }
-
- public function removeSignal($signal, $listener)
- {
- $this->signals->remove($signal, $listener);
-
- if (isset($this->signalEvents[$signal]) && $this->signals->count($signal) === 0) {
- event_del($this->signalEvents[$signal]);
- event_free($this->signalEvents[$signal]);
- unset($this->signalEvents[$signal]);
- }
- }
-
- public function run()
- {
- $this->running = true;
-
- while ($this->running) {
- $this->futureTickQueue->tick();
-
- $flags = EVLOOP_ONCE;
- if (!$this->running || !$this->futureTickQueue->isEmpty()) {
- $flags |= EVLOOP_NONBLOCK;
- } elseif (!$this->readEvents && !$this->writeEvents && !$this->timerEvents->count() && $this->signals->isEmpty()) {
- break;
- }
-
- event_base_loop($this->eventBase, $flags);
- }
- }
-
- public function stop()
- {
- $this->running = false;
- }
-
- /**
- * Schedule a timer for execution.
- *
- * @param TimerInterface $timer
- */
- private function scheduleTimer(TimerInterface $timer)
- {
- $this->timerEvents[$timer] = $event = event_timer_new();
-
- event_timer_set($event, $this->timerCallback, $timer);
- event_base_set($event, $this->eventBase);
- event_add($event, $timer->getInterval() * self::MICROSECONDS_PER_SECOND);
- }
-
- /**
- * Create a callback used as the target of timer events.
- *
- * A reference is kept to the callback for the lifetime of the loop
- * to prevent "Cannot destroy active lambda function" fatal error from
- * the event extension.
- */
- private function createTimerCallback()
- {
- $that = $this;
- $timers = $this->timerEvents;
- $this->timerCallback = function ($_, $__, $timer) use ($timers, $that) {
- call_user_func($timer->getCallback(), $timer);
-
- // Timer already cancelled ...
- if (!$timers->contains($timer)) {
- return;
- }
-
- // Reschedule periodic timers ...
- if ($timer->isPeriodic()) {
- event_add(
- $timers[$timer],
- $timer->getInterval() * ExtLibeventLoop::MICROSECONDS_PER_SECOND
- );
-
- // Clean-up one shot timers ...
- } else {
- $that->cancelTimer($timer);
- }
- };
- }
-
- /**
- * Create a callback used as the target of stream events.
- *
- * A reference is kept to the callback for the lifetime of the loop
- * to prevent "Cannot destroy active lambda function" fatal error from
- * the event extension.
- */
- private function createStreamCallback()
- {
- $read =& $this->readListeners;
- $write =& $this->writeListeners;
- $this->streamCallback = function ($stream, $flags) use (&$read, &$write) {
- $key = (int) $stream;
-
- if (EV_READ === (EV_READ & $flags) && isset($read[$key])) {
- call_user_func($read[$key], $stream);
- }
-
- if (EV_WRITE === (EV_WRITE & $flags) && isset($write[$key])) {
- call_user_func($write[$key], $stream);
- }
- };
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/Factory.php b/assets/php/vendor/react/event-loop/src/Factory.php
deleted file mode 100755
index b46fc07..0000000
--- a/assets/php/vendor/react/event-loop/src/Factory.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-/**
- * The `Factory` class exists as a convenient way to pick the best available event loop implementation.
- */
-final class Factory
-{
- /**
- * Creates a new event loop instance
- *
- * ```php
- * $loop = React\EventLoop\Factory::create();
- * ```
- *
- * This method always returns an instance implementing `LoopInterface`,
- * the actual event loop implementation is an implementation detail.
- *
- * This method should usually only be called once at the beginning of the program.
- *
- * @return LoopInterface
- */
- public static function create()
- {
- // @codeCoverageIgnoreStart
- if (class_exists('libev\EventLoop', false)) {
- return new ExtLibevLoop();
- } elseif (class_exists('EvLoop', false)) {
- return new ExtEvLoop();
- } elseif (class_exists('EventBase', false)) {
- return new ExtEventLoop();
- } elseif (function_exists('event_base_new') && PHP_VERSION_ID < 70000) {
- // only use ext-libevent on PHP < 7 for now
- return new ExtLibeventLoop();
- }
-
- return new StreamSelectLoop();
- // @codeCoverageIgnoreEnd
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/LoopInterface.php b/assets/php/vendor/react/event-loop/src/LoopInterface.php
deleted file mode 100755
index 1cc8640..0000000
--- a/assets/php/vendor/react/event-loop/src/LoopInterface.php
+++ /dev/null
@@ -1,463 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-interface LoopInterface
-{
- /**
- * [Advanced] Register a listener to be notified when a stream is ready to read.
- *
- * Note that this low-level API is considered advanced usage.
- * Most use cases should probably use the higher-level
- * [readable Stream API](https://github.com/reactphp/stream#readablestreaminterface)
- * instead.
- *
- * The first parameter MUST be a valid stream resource that supports
- * checking whether it is ready to read by this loop implementation.
- * A single stream resource MUST NOT be added more than once.
- * Instead, either call [`removeReadStream()`](#removereadstream) first or
- * react to this event with a single listener and then dispatch from this
- * listener. This method MAY throw an `Exception` if the given resource type
- * is not supported by this loop implementation.
- *
- * The listener callback function MUST be able to accept a single parameter,
- * the stream resource added by this method or you MAY use a function which
- * has no parameters at all.
- *
- * The listener callback function MUST NOT throw an `Exception`.
- * The return value of the listener callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * If you want to access any variables within your callback function, you
- * can bind arbitrary data to a callback closure like this:
- *
- * ```php
- * $loop->addReadStream($stream, function ($stream) use ($name) {
- * echo $name . ' said: ' . fread($stream);
- * });
- * ```
- *
- * See also [example #11](examples).
- *
- * You can invoke [`removeReadStream()`](#removereadstream) to remove the
- * read event listener for this stream.
- *
- * The execution order of listeners when multiple streams become ready at
- * the same time is not guaranteed.
- *
- * @param resource $stream The PHP stream resource to check.
- * @param callable $listener Invoked when the stream is ready.
- * @throws \Exception if the given resource type is not supported by this loop implementation
- * @see self::removeReadStream()
- */
- public function addReadStream($stream, $listener);
-
- /**
- * [Advanced] Register a listener to be notified when a stream is ready to write.
- *
- * Note that this low-level API is considered advanced usage.
- * Most use cases should probably use the higher-level
- * [writable Stream API](https://github.com/reactphp/stream#writablestreaminterface)
- * instead.
- *
- * The first parameter MUST be a valid stream resource that supports
- * checking whether it is ready to write by this loop implementation.
- * A single stream resource MUST NOT be added more than once.
- * Instead, either call [`removeWriteStream()`](#removewritestream) first or
- * react to this event with a single listener and then dispatch from this
- * listener. This method MAY throw an `Exception` if the given resource type
- * is not supported by this loop implementation.
- *
- * The listener callback function MUST be able to accept a single parameter,
- * the stream resource added by this method or you MAY use a function which
- * has no parameters at all.
- *
- * The listener callback function MUST NOT throw an `Exception`.
- * The return value of the listener callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * If you want to access any variables within your callback function, you
- * can bind arbitrary data to a callback closure like this:
- *
- * ```php
- * $loop->addWriteStream($stream, function ($stream) use ($name) {
- * fwrite($stream, 'Hello ' . $name);
- * });
- * ```
- *
- * See also [example #12](examples).
- *
- * You can invoke [`removeWriteStream()`](#removewritestream) to remove the
- * write event listener for this stream.
- *
- * The execution order of listeners when multiple streams become ready at
- * the same time is not guaranteed.
- *
- * Some event loop implementations are known to only trigger the listener if
- * the stream *becomes* readable (edge-triggered) and may not trigger if the
- * stream has already been readable from the beginning.
- * This also implies that a stream may not be recognized as readable when data
- * is still left in PHP's internal stream buffers.
- * As such, it's recommended to use `stream_set_read_buffer($stream, 0);`
- * to disable PHP's internal read buffer in this case.
- *
- * @param resource $stream The PHP stream resource to check.
- * @param callable $listener Invoked when the stream is ready.
- * @throws \Exception if the given resource type is not supported by this loop implementation
- * @see self::removeWriteStream()
- */
- public function addWriteStream($stream, $listener);
-
- /**
- * Remove the read event listener for the given stream.
- *
- * Removing a stream from the loop that has already been removed or trying
- * to remove a stream that was never added or is invalid has no effect.
- *
- * @param resource $stream The PHP stream resource.
- */
- public function removeReadStream($stream);
-
- /**
- * Remove the write event listener for the given stream.
- *
- * Removing a stream from the loop that has already been removed or trying
- * to remove a stream that was never added or is invalid has no effect.
- *
- * @param resource $stream The PHP stream resource.
- */
- public function removeWriteStream($stream);
-
- /**
- * Enqueue a callback to be invoked once after the given interval.
- *
- * The timer callback function MUST be able to accept a single parameter,
- * the timer instance as also returned by this method or you MAY use a
- * function which has no parameters at all.
- *
- * The timer callback function MUST NOT throw an `Exception`.
- * The return value of the timer callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * Unlike [`addPeriodicTimer()`](#addperiodictimer), this method will ensure
- * the callback will be invoked only once after the given interval.
- * You can invoke [`cancelTimer`](#canceltimer) to cancel a pending timer.
- *
- * ```php
- * $loop->addTimer(0.8, function () {
- * echo 'world!' . PHP_EOL;
- * });
- *
- * $loop->addTimer(0.3, function () {
- * echo 'hello ';
- * });
- * ```
- *
- * See also [example #1](examples).
- *
- * If you want to access any variables within your callback function, you
- * can bind arbitrary data to a callback closure like this:
- *
- * ```php
- * function hello($name, LoopInterface $loop)
- * {
- * $loop->addTimer(1.0, function () use ($name) {
- * echo "hello $name\n";
- * });
- * }
- *
- * hello('Tester', $loop);
- * ```
- *
- * This interface does not enforce any particular timer resolution, so
- * special care may have to be taken if you rely on very high precision with
- * millisecond accuracy or below. Event loop implementations SHOULD work on
- * a best effort basis and SHOULD provide at least millisecond accuracy
- * unless otherwise noted. Many existing event loop implementations are
- * known to provide microsecond accuracy, but it's generally not recommended
- * to rely on this high precision.
- *
- * Similarly, the execution order of timers scheduled to execute at the
- * same time (within its possible accuracy) is not guaranteed.
- *
- * This interface suggests that event loop implementations SHOULD use a
- * monotonic time source if available. Given that a monotonic time source is
- * not available on PHP by default, event loop implementations MAY fall back
- * to using wall-clock time.
- * While this does not affect many common use cases, this is an important
- * distinction for programs that rely on a high time precision or on systems
- * that are subject to discontinuous time adjustments (time jumps).
- * This means that if you schedule a timer to trigger in 30s and then adjust
- * your system time forward by 20s, the timer SHOULD still trigger in 30s.
- * See also [event loop implementations](#loop-implementations) for more details.
- *
- * @param int|float $interval The number of seconds to wait before execution.
- * @param callable $callback The callback to invoke.
- *
- * @return TimerInterface
- */
- public function addTimer($interval, $callback);
-
- /**
- * Enqueue a callback to be invoked repeatedly after the given interval.
- *
- * The timer callback function MUST be able to accept a single parameter,
- * the timer instance as also returned by this method or you MAY use a
- * function which has no parameters at all.
- *
- * The timer callback function MUST NOT throw an `Exception`.
- * The return value of the timer callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * Unlike [`addTimer()`](#addtimer), this method will ensure the the
- * callback will be invoked infinitely after the given interval or until you
- * invoke [`cancelTimer`](#canceltimer).
- *
- * ```php
- * $timer = $loop->addPeriodicTimer(0.1, function () {
- * echo 'tick!' . PHP_EOL;
- * });
- *
- * $loop->addTimer(1.0, function () use ($loop, $timer) {
- * $loop->cancelTimer($timer);
- * echo 'Done' . PHP_EOL;
- * });
- * ```
- *
- * See also [example #2](examples).
- *
- * If you want to limit the number of executions, you can bind
- * arbitrary data to a callback closure like this:
- *
- * ```php
- * function hello($name, LoopInterface $loop)
- * {
- * $n = 3;
- * $loop->addPeriodicTimer(1.0, function ($timer) use ($name, $loop, &$n) {
- * if ($n > 0) {
- * --$n;
- * echo "hello $name\n";
- * } else {
- * $loop->cancelTimer($timer);
- * }
- * });
- * }
- *
- * hello('Tester', $loop);
- * ```
- *
- * This interface does not enforce any particular timer resolution, so
- * special care may have to be taken if you rely on very high precision with
- * millisecond accuracy or below. Event loop implementations SHOULD work on
- * a best effort basis and SHOULD provide at least millisecond accuracy
- * unless otherwise noted. Many existing event loop implementations are
- * known to provide microsecond accuracy, but it's generally not recommended
- * to rely on this high precision.
- *
- * Similarly, the execution order of timers scheduled to execute at the
- * same time (within its possible accuracy) is not guaranteed.
- *
- * This interface suggests that event loop implementations SHOULD use a
- * monotonic time source if available. Given that a monotonic time source is
- * not available on PHP by default, event loop implementations MAY fall back
- * to using wall-clock time.
- * While this does not affect many common use cases, this is an important
- * distinction for programs that rely on a high time precision or on systems
- * that are subject to discontinuous time adjustments (time jumps).
- * This means that if you schedule a timer to trigger in 30s and then adjust
- * your system time forward by 20s, the timer SHOULD still trigger in 30s.
- * See also [event loop implementations](#loop-implementations) for more details.
- *
- * Additionally, periodic timers may be subject to timer drift due to
- * re-scheduling after each invocation. As such, it's generally not
- * recommended to rely on this for high precision intervals with millisecond
- * accuracy or below.
- *
- * @param int|float $interval The number of seconds to wait before execution.
- * @param callable $callback The callback to invoke.
- *
- * @return TimerInterface
- */
- public function addPeriodicTimer($interval, $callback);
-
- /**
- * Cancel a pending timer.
- *
- * See also [`addPeriodicTimer()`](#addperiodictimer) and [example #2](examples).
- *
- * Calling this method on a timer instance that has not been added to this
- * loop instance or on a timer that has already been cancelled has no effect.
- *
- * @param TimerInterface $timer The timer to cancel.
- *
- * @return void
- */
- public function cancelTimer(TimerInterface $timer);
-
- /**
- * Schedule a callback to be invoked on a future tick of the event loop.
- *
- * This works very much similar to timers with an interval of zero seconds,
- * but does not require the overhead of scheduling a timer queue.
- *
- * The tick callback function MUST be able to accept zero parameters.
- *
- * The tick callback function MUST NOT throw an `Exception`.
- * The return value of the tick callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * If you want to access any variables within your callback function, you
- * can bind arbitrary data to a callback closure like this:
- *
- * ```php
- * function hello($name, LoopInterface $loop)
- * {
- * $loop->futureTick(function () use ($name) {
- * echo "hello $name\n";
- * });
- * }
- *
- * hello('Tester', $loop);
- * ```
- *
- * Unlike timers, tick callbacks are guaranteed to be executed in the order
- * they are enqueued.
- * Also, once a callback is enqueued, there's no way to cancel this operation.
- *
- * This is often used to break down bigger tasks into smaller steps (a form
- * of cooperative multitasking).
- *
- * ```php
- * $loop->futureTick(function () {
- * echo 'b';
- * });
- * $loop->futureTick(function () {
- * echo 'c';
- * });
- * echo 'a';
- * ```
- *
- * See also [example #3](examples).
- *
- * @param callable $listener The callback to invoke.
- *
- * @return void
- */
- public function futureTick($listener);
-
- /**
- * Register a listener to be notified when a signal has been caught by this process.
- *
- * This is useful to catch user interrupt signals or shutdown signals from
- * tools like `supervisor` or `systemd`.
- *
- * The listener callback function MUST be able to accept a single parameter,
- * the signal added by this method or you MAY use a function which
- * has no parameters at all.
- *
- * The listener callback function MUST NOT throw an `Exception`.
- * The return value of the listener callback function will be ignored and has
- * no effect, so for performance reasons you're recommended to not return
- * any excessive data structures.
- *
- * ```php
- * $loop->addSignal(SIGINT, function (int $signal) {
- * echo 'Caught user interrupt signal' . PHP_EOL;
- * });
- * ```
- *
- * See also [example #4](examples).
- *
- * Signaling is only available on Unix-like platform, Windows isn't
- * supported due to operating system limitations.
- * This method may throw a `BadMethodCallException` if signals aren't
- * supported on this platform, for example when required extensions are
- * missing.
- *
- * **Note: A listener can only be added once to the same signal, any
- * attempts to add it more then once will be ignored.**
- *
- * @param int $signal
- * @param callable $listener
- *
- * @throws \BadMethodCallException when signals aren't supported on this
- * platform, for example when required extensions are missing.
- *
- * @return void
- */
- public function addSignal($signal, $listener);
-
- /**
- * Removes a previously added signal listener.
- *
- * ```php
- * $loop->removeSignal(SIGINT, $listener);
- * ```
- *
- * Any attempts to remove listeners that aren't registered will be ignored.
- *
- * @param int $signal
- * @param callable $listener
- *
- * @return void
- */
- public function removeSignal($signal, $listener);
-
- /**
- * Run the event loop until there are no more tasks to perform.
- *
- * For many applications, this method is the only directly visible
- * invocation on the event loop.
- * As a rule of thumb, it is usally recommended to attach everything to the
- * same loop instance and then run the loop once at the bottom end of the
- * application.
- *
- * ```php
- * $loop->run();
- * ```
- *
- * This method will keep the loop running until there are no more tasks
- * to perform. In other words: This method will block until the last
- * timer, stream and/or signal has been removed.
- *
- * Likewise, it is imperative to ensure the application actually invokes
- * this method once. Adding listeners to the loop and missing to actually
- * run it will result in the application exiting without actually waiting
- * for any of the attached listeners.
- *
- * This method MUST NOT be called while the loop is already running.
- * This method MAY be called more than once after it has explicity been
- * [`stop()`ped](#stop) or after it automatically stopped because it
- * previously did no longer have anything to do.
- *
- * @return void
- */
- public function run();
-
- /**
- * Instruct a running event loop to stop.
- *
- * This method is considered advanced usage and should be used with care.
- * As a rule of thumb, it is usually recommended to let the loop stop
- * only automatically when it no longer has anything to do.
- *
- * This method can be used to explicitly instruct the event loop to stop:
- *
- * ```php
- * $loop->addTimer(3.0, function () use ($loop) {
- * $loop->stop();
- * });
- * ```
- *
- * Calling this method on a loop instance that is not currently running or
- * on a loop instance that has already been stopped has no effect.
- *
- * @return void
- */
- public function stop();
-}
diff --git a/assets/php/vendor/react/event-loop/src/SignalsHandler.php b/assets/php/vendor/react/event-loop/src/SignalsHandler.php
deleted file mode 100755
index 523e1ca..0000000
--- a/assets/php/vendor/react/event-loop/src/SignalsHandler.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-/**
- * @internal
- */
-final class SignalsHandler
-{
- private $signals = array();
-
- public function add($signal, $listener)
- {
- if (!isset($this->signals[$signal])) {
- $this->signals[$signal] = array();
- }
-
- if (in_array($listener, $this->signals[$signal])) {
- return;
- }
-
- $this->signals[$signal][] = $listener;
- }
-
- public function remove($signal, $listener)
- {
- if (!isset($this->signals[$signal])) {
- return;
- }
-
- $index = \array_search($listener, $this->signals[$signal], true);
- unset($this->signals[$signal][$index]);
-
- if (isset($this->signals[$signal]) && \count($this->signals[$signal]) === 0) {
- unset($this->signals[$signal]);
- }
- }
-
- public function call($signal)
- {
- if (!isset($this->signals[$signal])) {
- return;
- }
-
- foreach ($this->signals[$signal] as $listener) {
- \call_user_func($listener, $signal);
- }
- }
-
- public function count($signal)
- {
- if (!isset($this->signals[$signal])) {
- return 0;
- }
-
- return \count($this->signals[$signal]);
- }
-
- public function isEmpty()
- {
- return !$this->signals;
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/StreamSelectLoop.php b/assets/php/vendor/react/event-loop/src/StreamSelectLoop.php
deleted file mode 100755
index e82e9e4..0000000
--- a/assets/php/vendor/react/event-loop/src/StreamSelectLoop.php
+++ /dev/null
@@ -1,275 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-use React\EventLoop\Signal\Pcntl;
-use React\EventLoop\Tick\FutureTickQueue;
-use React\EventLoop\Timer\Timer;
-use React\EventLoop\Timer\Timers;
-
-/**
- * A `stream_select()` based event loop.
- *
- * This uses the [`stream_select()`](http://php.net/manual/en/function.stream-select.php)
- * function and is the only implementation which works out of the box with PHP.
- *
- * This event loop works out of the box on PHP 5.4 through PHP 7+ and HHVM.
- * This means that no installation is required and this library works on all
- * platforms and supported PHP versions.
- * Accordingly, the [`Factory`](#factory) will use this event loop by default if
- * you do not install any of the event loop extensions listed below.
- *
- * Under the hood, it does a simple `select` system call.
- * This system call is limited to the maximum file descriptor number of
- * `FD_SETSIZE` (platform dependent, commonly 1024) and scales with `O(m)`
- * (`m` being the maximum file descriptor number passed).
- * This means that you may run into issues when handling thousands of streams
- * concurrently and you may want to look into using one of the alternative
- * event loop implementations listed below in this case.
- * If your use case is among the many common use cases that involve handling only
- * dozens or a few hundred streams at once, then this event loop implementation
- * performs really well.
- *
- * If you want to use signal handling (see also [`addSignal()`](#addsignal) below),
- * this event loop implementation requires `ext-pcntl`.
- * This extension is only available for Unix-like platforms and does not support
- * Windows.
- * It is commonly installed as part of many PHP distributions.
- * If this extension is missing (or you're running on Windows), signal handling is
- * not supported and throws a `BadMethodCallException` instead.
- *
- * This event loop is known to rely on wall-clock time to schedule future
- * timers, because a monotonic time source is not available in PHP by default.
- * While this does not affect many common use cases, this is an important
- * distinction for programs that rely on a high time precision or on systems
- * that are subject to discontinuous time adjustments (time jumps).
- * This means that if you schedule a timer to trigger in 30s and then adjust
- * your system time forward by 20s, the timer may trigger in 10s.
- * See also [`addTimer()`](#addtimer) for more details.
- *
- * @link http://php.net/manual/en/function.stream-select.php
- */
-final class StreamSelectLoop implements LoopInterface
-{
- /** @internal */
- const MICROSECONDS_PER_SECOND = 1000000;
-
- private $futureTickQueue;
- private $timers;
- private $readStreams = array();
- private $readListeners = array();
- private $writeStreams = array();
- private $writeListeners = array();
- private $running;
- private $pcntl = false;
- private $signals;
-
- public function __construct()
- {
- $this->futureTickQueue = new FutureTickQueue();
- $this->timers = new Timers();
- $this->pcntl = extension_loaded('pcntl');
- $this->signals = new SignalsHandler();
- }
-
- public function addReadStream($stream, $listener)
- {
- $key = (int) $stream;
-
- if (!isset($this->readStreams[$key])) {
- $this->readStreams[$key] = $stream;
- $this->readListeners[$key] = $listener;
- }
- }
-
- public function addWriteStream($stream, $listener)
- {
- $key = (int) $stream;
-
- if (!isset($this->writeStreams[$key])) {
- $this->writeStreams[$key] = $stream;
- $this->writeListeners[$key] = $listener;
- }
- }
-
- public function removeReadStream($stream)
- {
- $key = (int) $stream;
-
- unset(
- $this->readStreams[$key],
- $this->readListeners[$key]
- );
- }
-
- public function removeWriteStream($stream)
- {
- $key = (int) $stream;
-
- unset(
- $this->writeStreams[$key],
- $this->writeListeners[$key]
- );
- }
-
- public function addTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, false);
-
- $this->timers->add($timer);
-
- return $timer;
- }
-
- public function addPeriodicTimer($interval, $callback)
- {
- $timer = new Timer($interval, $callback, true);
-
- $this->timers->add($timer);
-
- return $timer;
- }
-
- public function cancelTimer(TimerInterface $timer)
- {
- $this->timers->cancel($timer);
- }
-
- public function futureTick($listener)
- {
- $this->futureTickQueue->add($listener);
- }
-
- public function addSignal($signal, $listener)
- {
- if ($this->pcntl === false) {
- throw new \BadMethodCallException('Event loop feature "signals" isn\'t supported by the "StreamSelectLoop"');
- }
-
- $first = $this->signals->count($signal) === 0;
- $this->signals->add($signal, $listener);
-
- if ($first) {
- \pcntl_signal($signal, array($this->signals, 'call'));
- }
- }
-
- public function removeSignal($signal, $listener)
- {
- if (!$this->signals->count($signal)) {
- return;
- }
-
- $this->signals->remove($signal, $listener);
-
- if ($this->signals->count($signal) === 0) {
- \pcntl_signal($signal, SIG_DFL);
- }
- }
-
- public function run()
- {
- $this->running = true;
-
- while ($this->running) {
- $this->futureTickQueue->tick();
-
- $this->timers->tick();
-
- // Future-tick queue has pending callbacks ...
- if (!$this->running || !$this->futureTickQueue->isEmpty()) {
- $timeout = 0;
-
- // There is a pending timer, only block until it is due ...
- } elseif ($scheduledAt = $this->timers->getFirst()) {
- $timeout = $scheduledAt - $this->timers->getTime();
- if ($timeout < 0) {
- $timeout = 0;
- } else {
- // Convert float seconds to int microseconds.
- // Ensure we do not exceed maximum integer size, which may
- // cause the loop to tick once every ~35min on 32bit systems.
- $timeout *= self::MICROSECONDS_PER_SECOND;
- $timeout = $timeout > PHP_INT_MAX ? PHP_INT_MAX : (int)$timeout;
- }
-
- // The only possible event is stream or signal activity, so wait forever ...
- } elseif ($this->readStreams || $this->writeStreams || !$this->signals->isEmpty()) {
- $timeout = null;
-
- // There's nothing left to do ...
- } else {
- break;
- }
-
- $this->waitForStreamActivity($timeout);
- }
- }
-
- public function stop()
- {
- $this->running = false;
- }
-
- /**
- * Wait/check for stream activity, or until the next timer is due.
- *
- * @param integer|null $timeout Activity timeout in microseconds, or null to wait forever.
- */
- private function waitForStreamActivity($timeout)
- {
- $read = $this->readStreams;
- $write = $this->writeStreams;
-
- $available = $this->streamSelect($read, $write, $timeout);
- if ($this->pcntl) {
- \pcntl_signal_dispatch();
- }
- if (false === $available) {
- // if a system call has been interrupted,
- // we cannot rely on it's outcome
- return;
- }
-
- foreach ($read as $stream) {
- $key = (int) $stream;
-
- if (isset($this->readListeners[$key])) {
- call_user_func($this->readListeners[$key], $stream);
- }
- }
-
- foreach ($write as $stream) {
- $key = (int) $stream;
-
- if (isset($this->writeListeners[$key])) {
- call_user_func($this->writeListeners[$key], $stream);
- }
- }
- }
-
- /**
- * Emulate a stream_select() implementation that does not break when passed
- * empty stream arrays.
- *
- * @param array &$read An array of read streams to select upon.
- * @param array &$write An array of write streams to select upon.
- * @param integer|null $timeout Activity timeout in microseconds, or null to wait forever.
- *
- * @return integer|false The total number of streams that are ready for read/write.
- * Can return false if stream_select() is interrupted by a signal.
- */
- private function streamSelect(array &$read, array &$write, $timeout)
- {
- if ($read || $write) {
- $except = null;
-
- // suppress warnings that occur, when stream_select is interrupted by a signal
- return @stream_select($read, $write, $except, $timeout === null ? null : 0, $timeout);
- }
-
- $timeout && usleep($timeout);
-
- return 0;
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/Tick/FutureTickQueue.php b/assets/php/vendor/react/event-loop/src/Tick/FutureTickQueue.php
deleted file mode 100755
index c79afc5..0000000
--- a/assets/php/vendor/react/event-loop/src/Tick/FutureTickQueue.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace React\EventLoop\Tick;
-
-use SplQueue;
-
-/**
- * A tick queue implementation that can hold multiple callback functions
- *
- * This class should only be used internally, see LoopInterface instead.
- *
- * @see LoopInterface
- * @internal
- */
-final class FutureTickQueue
-{
- private $queue;
-
- public function __construct()
- {
- $this->queue = new SplQueue();
- }
-
- /**
- * Add a callback to be invoked on a future tick of the event loop.
- *
- * Callbacks are guaranteed to be executed in the order they are enqueued.
- *
- * @param callable $listener The callback to invoke.
- */
- public function add($listener)
- {
- $this->queue->enqueue($listener);
- }
-
- /**
- * Flush the callback queue.
- */
- public function tick()
- {
- // Only invoke as many callbacks as were on the queue when tick() was called.
- $count = $this->queue->count();
-
- while ($count--) {
- call_user_func(
- $this->queue->dequeue()
- );
- }
- }
-
- /**
- * Check if the next tick queue is empty.
- *
- * @return boolean
- */
- public function isEmpty()
- {
- return $this->queue->isEmpty();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/Timer/Timer.php b/assets/php/vendor/react/event-loop/src/Timer/Timer.php
deleted file mode 100755
index da3602a..0000000
--- a/assets/php/vendor/react/event-loop/src/Timer/Timer.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace React\EventLoop\Timer;
-
-use React\EventLoop\TimerInterface;
-
-/**
- * The actual connection implementation for TimerInterface
- *
- * This class should only be used internally, see TimerInterface instead.
- *
- * @see TimerInterface
- * @internal
- */
-final class Timer implements TimerInterface
-{
- const MIN_INTERVAL = 0.000001;
-
- private $interval;
- private $callback;
- private $periodic;
-
- /**
- * Constructor initializes the fields of the Timer
- *
- * @param float $interval The interval after which this timer will execute, in seconds
- * @param callable $callback The callback that will be executed when this timer elapses
- * @param bool $periodic Whether the time is periodic
- */
- public function __construct($interval, $callback, $periodic = false)
- {
- if ($interval < self::MIN_INTERVAL) {
- $interval = self::MIN_INTERVAL;
- }
-
- $this->interval = (float) $interval;
- $this->callback = $callback;
- $this->periodic = (bool) $periodic;
- }
-
- public function getInterval()
- {
- return $this->interval;
- }
-
- public function getCallback()
- {
- return $this->callback;
- }
-
- public function isPeriodic()
- {
- return $this->periodic;
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/Timer/Timers.php b/assets/php/vendor/react/event-loop/src/Timer/Timers.php
deleted file mode 100755
index 17bbdac..0000000
--- a/assets/php/vendor/react/event-loop/src/Timer/Timers.php
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-
-namespace React\EventLoop\Timer;
-
-use React\EventLoop\TimerInterface;
-use SplObjectStorage;
-use SplPriorityQueue;
-
-/**
- * A scheduler implementation that can hold multiple timer instances
- *
- * This class should only be used internally, see TimerInterface instead.
- *
- * @see TimerInterface
- * @internal
- */
-final class Timers
-{
- private $time;
- private $timers;
- private $scheduler;
-
- public function __construct()
- {
- $this->timers = new SplObjectStorage();
- $this->scheduler = new SplPriorityQueue();
- }
-
- public function updateTime()
- {
- return $this->time = microtime(true);
- }
-
- public function getTime()
- {
- return $this->time ?: $this->updateTime();
- }
-
- public function add(TimerInterface $timer)
- {
- $interval = $timer->getInterval();
- $scheduledAt = $interval + microtime(true);
-
- $this->timers->attach($timer, $scheduledAt);
- $this->scheduler->insert($timer, -$scheduledAt);
- }
-
- public function contains(TimerInterface $timer)
- {
- return $this->timers->contains($timer);
- }
-
- public function cancel(TimerInterface $timer)
- {
- $this->timers->detach($timer);
- }
-
- public function getFirst()
- {
- while ($this->scheduler->count()) {
- $timer = $this->scheduler->top();
-
- if ($this->timers->contains($timer)) {
- return $this->timers[$timer];
- }
-
- $this->scheduler->extract();
- }
-
- return null;
- }
-
- public function isEmpty()
- {
- return count($this->timers) === 0;
- }
-
- public function tick()
- {
- $time = $this->updateTime();
- $timers = $this->timers;
- $scheduler = $this->scheduler;
-
- while (!$scheduler->isEmpty()) {
- $timer = $scheduler->top();
-
- if (!isset($timers[$timer])) {
- $scheduler->extract();
- $timers->detach($timer);
-
- continue;
- }
-
- if ($timers[$timer] >= $time) {
- break;
- }
-
- $scheduler->extract();
- call_user_func($timer->getCallback(), $timer);
-
- if ($timer->isPeriodic() && isset($timers[$timer])) {
- $timers[$timer] = $scheduledAt = $timer->getInterval() + $time;
- $scheduler->insert($timer, -$scheduledAt);
- } else {
- $timers->detach($timer);
- }
- }
- }
-}
diff --git a/assets/php/vendor/react/event-loop/src/TimerInterface.php b/assets/php/vendor/react/event-loop/src/TimerInterface.php
deleted file mode 100755
index cdcf773..0000000
--- a/assets/php/vendor/react/event-loop/src/TimerInterface.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace React\EventLoop;
-
-interface TimerInterface
-{
- /**
- * Get the interval after which this timer will execute, in seconds
- *
- * @return float
- */
- public function getInterval();
-
- /**
- * Get the callback that will be executed when this timer elapses
- *
- * @return callable
- */
- public function getCallback();
-
- /**
- * Determine whether the time is periodic
- *
- * @return bool
- */
- public function isPeriodic();
-}
diff --git a/assets/php/vendor/react/event-loop/tests/AbstractLoopTest.php b/assets/php/vendor/react/event-loop/tests/AbstractLoopTest.php
deleted file mode 100755
index dbfc91e..0000000
--- a/assets/php/vendor/react/event-loop/tests/AbstractLoopTest.php
+++ /dev/null
@@ -1,621 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-abstract class AbstractLoopTest extends TestCase
-{
- /**
- * @var \React\EventLoop\LoopInterface
- */
- protected $loop;
-
- private $tickTimeout;
-
- const PHP_DEFAULT_CHUNK_SIZE = 8192;
-
- public function setUp()
- {
- // It's a timeout, don't set it too low. Travis and other CI systems are slow.
- $this->tickTimeout = 0.02;
- $this->loop = $this->createLoop();
- }
-
- abstract public function createLoop();
-
- public function createSocketPair()
- {
- $domain = (DIRECTORY_SEPARATOR === '\\') ? STREAM_PF_INET : STREAM_PF_UNIX;
- $sockets = stream_socket_pair($domain, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
-
- foreach ($sockets as $socket) {
- if (function_exists('stream_set_read_buffer')) {
- stream_set_read_buffer($socket, 0);
- }
- }
-
- return $sockets;
- }
-
- public function testAddReadStream()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $this->loop->addReadStream($input, $this->expectCallableExactly(2));
-
- fwrite($output, "foo\n");
- $this->tickLoop($this->loop);
-
- fwrite($output, "bar\n");
- $this->tickLoop($this->loop);
- }
-
- public function testAddReadStreamIgnoresSecondCallable()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $this->loop->addReadStream($input, $this->expectCallableExactly(2));
- $this->loop->addReadStream($input, $this->expectCallableNever());
-
- fwrite($output, "foo\n");
- $this->tickLoop($this->loop);
-
- fwrite($output, "bar\n");
- $this->tickLoop($this->loop);
- }
-
- public function testAddReadStreamReceivesDataFromStreamReference()
- {
- $this->received = '';
- $this->subAddReadStreamReceivesDataFromStreamReference();
- $this->assertEquals('', $this->received);
-
- $this->assertRunFasterThan($this->tickTimeout * 2);
- $this->assertEquals('[hello]X', $this->received);
- }
-
- /**
- * Helper for above test. This happens in another helper method to verify
- * the loop keeps track of assigned stream resources (refcount).
- */
- private function subAddReadStreamReceivesDataFromStreamReference()
- {
- list ($input, $output) = $this->createSocketPair();
-
- fwrite($input, 'hello');
- fclose($input);
-
- $loop = $this->loop;
- $received =& $this->received;
- $loop->addReadStream($output, function ($output) use ($loop, &$received) {
- $chunk = fread($output, 1024);
- if ($chunk === '') {
- $received .= 'X';
- $loop->removeReadStream($output);
- fclose($output);
- } else {
- $received .= '[' . $chunk . ']';
- }
- });
- }
-
- public function testAddWriteStream()
- {
- list ($input) = $this->createSocketPair();
-
- $this->loop->addWriteStream($input, $this->expectCallableExactly(2));
- $this->tickLoop($this->loop);
- $this->tickLoop($this->loop);
- }
-
- public function testAddWriteStreamIgnoresSecondCallable()
- {
- list ($input) = $this->createSocketPair();
-
- $this->loop->addWriteStream($input, $this->expectCallableExactly(2));
- $this->loop->addWriteStream($input, $this->expectCallableNever());
- $this->tickLoop($this->loop);
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveReadStreamInstantly()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $this->loop->addReadStream($input, $this->expectCallableNever());
- $this->loop->removeReadStream($input);
-
- fwrite($output, "bar\n");
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveReadStreamAfterReading()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $this->loop->addReadStream($input, $this->expectCallableOnce());
-
- fwrite($output, "foo\n");
- $this->tickLoop($this->loop);
-
- $this->loop->removeReadStream($input);
-
- fwrite($output, "bar\n");
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveWriteStreamInstantly()
- {
- list ($input) = $this->createSocketPair();
-
- $this->loop->addWriteStream($input, $this->expectCallableNever());
- $this->loop->removeWriteStream($input);
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveWriteStreamAfterWriting()
- {
- list ($input) = $this->createSocketPair();
-
- $this->loop->addWriteStream($input, $this->expectCallableOnce());
- $this->tickLoop($this->loop);
-
- $this->loop->removeWriteStream($input);
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveStreamForReadOnly()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $this->loop->addReadStream($input, $this->expectCallableNever());
- $this->loop->addWriteStream($output, $this->expectCallableOnce());
- $this->loop->removeReadStream($input);
-
- fwrite($output, "foo\n");
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveStreamForWriteOnly()
- {
- list ($input, $output) = $this->createSocketPair();
-
- fwrite($output, "foo\n");
-
- $this->loop->addReadStream($input, $this->expectCallableOnce());
- $this->loop->addWriteStream($output, $this->expectCallableNever());
- $this->loop->removeWriteStream($output);
-
- $this->tickLoop($this->loop);
- }
-
- public function testRemoveReadAndWriteStreamFromLoopOnceResourceClosesEndsLoop()
- {
- list($stream, $other) = $this->createSocketPair();
- stream_set_blocking($stream, false);
- stream_set_blocking($other, false);
-
- // dummy writable handler
- $this->loop->addWriteStream($stream, function () { });
-
- // remove stream when the stream is readable (closes)
- $loop = $this->loop;
- $loop->addReadStream($stream, function ($stream) use ($loop) {
- $loop->removeReadStream($stream);
- $loop->removeWriteStream($stream);
- fclose($stream);
- });
-
- // close other side
- fclose($other);
-
- $this->assertRunFasterThan($this->tickTimeout);
- }
-
- public function testRemoveReadAndWriteStreamFromLoopOnceResourceClosesOnEndOfFileEndsLoop()
- {
- list($stream, $other) = $this->createSocketPair();
- stream_set_blocking($stream, false);
- stream_set_blocking($other, false);
-
- // dummy writable handler
- $this->loop->addWriteStream($stream, function () { });
-
- // remove stream when the stream is readable (closes)
- $loop = $this->loop;
- $loop->addReadStream($stream, function ($stream) use ($loop) {
- $data = fread($stream, 1024);
- if ($data !== '') {
- return;
- }
-
- $loop->removeReadStream($stream);
- $loop->removeWriteStream($stream);
- fclose($stream);
- });
-
- // send data and close stream
- fwrite($other, str_repeat('.', static::PHP_DEFAULT_CHUNK_SIZE));
- $this->loop->addTimer(0.01, function () use ($other) {
- fclose($other);
- });
-
- $this->assertRunFasterThan(0.1);
- }
-
- public function testRemoveReadAndWriteStreamFromLoopWithClosingResourceEndsLoop()
- {
- // get only one part of the pair to ensure the other side will close immediately
- list($stream) = $this->createSocketPair();
- stream_set_blocking($stream, false);
-
- // dummy writable handler
- $this->loop->addWriteStream($stream, function () { });
-
- // remove stream when the stream is readable (closes)
- $loop = $this->loop;
- $loop->addReadStream($stream, function ($stream) use ($loop) {
- $loop->removeReadStream($stream);
- $loop->removeWriteStream($stream);
- fclose($stream);
- });
-
- $this->assertRunFasterThan($this->tickTimeout);
- }
-
- public function testRemoveInvalid()
- {
- list ($stream) = $this->createSocketPair();
-
- // remove a valid stream from the event loop that was never added in the first place
- $this->loop->removeReadStream($stream);
- $this->loop->removeWriteStream($stream);
-
- $this->assertTrue(true);
- }
-
- /** @test */
- public function emptyRunShouldSimplyReturn()
- {
- $this->assertRunFasterThan($this->tickTimeout);
- }
-
- /** @test */
- public function runShouldReturnWhenNoMoreFds()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $loop = $this->loop;
- $this->loop->addReadStream($input, function ($stream) use ($loop) {
- $loop->removeReadStream($stream);
- });
-
- fwrite($output, "foo\n");
-
- $this->assertRunFasterThan($this->tickTimeout * 2);
- }
-
- /** @test */
- public function stopShouldStopRunningLoop()
- {
- list ($input, $output) = $this->createSocketPair();
-
- $loop = $this->loop;
- $this->loop->addReadStream($input, function ($stream) use ($loop) {
- $loop->stop();
- });
-
- fwrite($output, "foo\n");
-
- $this->assertRunFasterThan($this->tickTimeout * 2);
- }
-
- public function testStopShouldPreventRunFromBlocking()
- {
- $that = $this;
- $this->loop->addTimer(
- 1,
- function () use ($that) {
- $that->fail('Timer was executed.');
- }
- );
-
- $loop = $this->loop;
- $this->loop->futureTick(
- function () use ($loop) {
- $loop->stop();
- }
- );
-
- $this->assertRunFasterThan($this->tickTimeout * 2);
- }
-
- public function testIgnoreRemovedCallback()
- {
- // two independent streams, both should be readable right away
- list ($input1, $output1) = $this->createSocketPair();
- list ($input2, $output2) = $this->createSocketPair();
-
- $called = false;
-
- $loop = $this->loop;
- $loop->addReadStream($input1, function ($stream) use (& $called, $loop, $input2) {
- // stream1 is readable, remove stream2 as well => this will invalidate its callback
- $loop->removeReadStream($stream);
- $loop->removeReadStream($input2);
-
- $called = true;
- });
-
- // this callback would have to be called as well, but the first stream already removed us
- $that = $this;
- $loop->addReadStream($input2, function () use (& $called, $that) {
- if ($called) {
- $that->fail('Callback 2 must not be called after callback 1 was called');
- }
- });
-
- fwrite($output1, "foo\n");
- fwrite($output2, "foo\n");
-
- $loop->run();
-
- $this->assertTrue($called);
- }
-
- public function testFutureTickEventGeneratedByFutureTick()
- {
- $loop = $this->loop;
- $this->loop->futureTick(
- function () use ($loop) {
- $loop->futureTick(
- function () {
- echo 'future-tick' . PHP_EOL;
- }
- );
- }
- );
-
- $this->expectOutputString('future-tick' . PHP_EOL);
-
- $this->loop->run();
- }
-
- public function testFutureTick()
- {
- $called = false;
-
- $callback = function () use (&$called) {
- $called = true;
- };
-
- $this->loop->futureTick($callback);
-
- $this->assertFalse($called);
-
- $this->tickLoop($this->loop);
-
- $this->assertTrue($called);
- }
-
- public function testFutureTickFiresBeforeIO()
- {
- list ($stream) = $this->createSocketPair();
-
- $this->loop->addWriteStream(
- $stream,
- function () {
- echo 'stream' . PHP_EOL;
- }
- );
-
- $this->loop->futureTick(
- function () {
- echo 'future-tick' . PHP_EOL;
- }
- );
-
- $this->expectOutputString('future-tick' . PHP_EOL . 'stream' . PHP_EOL);
-
- $this->tickLoop($this->loop);
- }
-
- public function testRecursiveFutureTick()
- {
- list ($stream) = $this->createSocketPair();
-
- $loop = $this->loop;
- $this->loop->addWriteStream(
- $stream,
- function () use ($stream, $loop) {
- echo 'stream' . PHP_EOL;
- $loop->removeWriteStream($stream);
- }
- );
-
- $this->loop->futureTick(
- function () use ($loop) {
- echo 'future-tick-1' . PHP_EOL;
- $loop->futureTick(
- function () {
- echo 'future-tick-2' . PHP_EOL;
- }
- );
- }
- );
-
- $this->expectOutputString('future-tick-1' . PHP_EOL . 'stream' . PHP_EOL . 'future-tick-2' . PHP_EOL);
-
- $this->loop->run();
- }
-
- public function testRunWaitsForFutureTickEvents()
- {
- list ($stream) = $this->createSocketPair();
-
- $loop = $this->loop;
- $this->loop->addWriteStream(
- $stream,
- function () use ($stream, $loop) {
- $loop->removeWriteStream($stream);
- $loop->futureTick(
- function () {
- echo 'future-tick' . PHP_EOL;
- }
- );
- }
- );
-
- $this->expectOutputString('future-tick' . PHP_EOL);
-
- $this->loop->run();
- }
-
- public function testFutureTickEventGeneratedByTimer()
- {
- $loop = $this->loop;
- $this->loop->addTimer(
- 0.001,
- function () use ($loop) {
- $loop->futureTick(
- function () {
- echo 'future-tick' . PHP_EOL;
- }
- );
- }
- );
-
- $this->expectOutputString('future-tick' . PHP_EOL);
-
- $this->loop->run();
- }
-
- public function testRemoveSignalNotRegisteredIsNoOp()
- {
- $this->loop->removeSignal(SIGINT, function () { });
- $this->assertTrue(true);
- }
-
- public function testSignal()
- {
- if (!function_exists('posix_kill') || !function_exists('posix_getpid')) {
- $this->markTestSkipped('Signal test skipped because functions "posix_kill" and "posix_getpid" are missing.');
- }
-
- $called = false;
- $calledShouldNot = true;
-
- $timer = $this->loop->addPeriodicTimer(1, function () {});
-
- $this->loop->addSignal(SIGUSR2, $func2 = function () use (&$calledShouldNot) {
- $calledShouldNot = false;
- });
-
- $loop = $this->loop;
- $this->loop->addSignal(SIGUSR1, $func1 = function () use (&$func1, &$func2, &$called, $timer, $loop) {
- $called = true;
- $loop->removeSignal(SIGUSR1, $func1);
- $loop->removeSignal(SIGUSR2, $func2);
- $loop->cancelTimer($timer);
- });
-
- $this->loop->futureTick(function () {
- posix_kill(posix_getpid(), SIGUSR1);
- });
-
- $this->loop->run();
-
- $this->assertTrue($called);
- $this->assertTrue($calledShouldNot);
- }
-
- public function testSignalMultipleUsagesForTheSameListener()
- {
- $funcCallCount = 0;
- $func = function () use (&$funcCallCount) {
- $funcCallCount++;
- };
- $this->loop->addTimer(1, function () {});
-
- $this->loop->addSignal(SIGUSR1, $func);
- $this->loop->addSignal(SIGUSR1, $func);
-
- $this->loop->addTimer(0.4, function () {
- posix_kill(posix_getpid(), SIGUSR1);
- });
- $loop = $this->loop;
- $this->loop->addTimer(0.9, function () use (&$func, $loop) {
- $loop->removeSignal(SIGUSR1, $func);
- });
-
- $this->loop->run();
-
- $this->assertSame(1, $funcCallCount);
- }
-
- public function testSignalsKeepTheLoopRunning()
- {
- $loop = $this->loop;
- $function = function () {};
- $this->loop->addSignal(SIGUSR1, $function);
- $this->loop->addTimer(1.5, function () use ($function, $loop) {
- $loop->removeSignal(SIGUSR1, $function);
- $loop->stop();
- });
-
- $this->assertRunSlowerThan(1.5);
- }
-
- public function testSignalsKeepTheLoopRunningAndRemovingItStopsTheLoop()
- {
- $loop = $this->loop;
- $function = function () {};
- $this->loop->addSignal(SIGUSR1, $function);
- $this->loop->addTimer(1.5, function () use ($function, $loop) {
- $loop->removeSignal(SIGUSR1, $function);
- });
-
- $this->assertRunFasterThan(1.6);
- }
-
- public function testTimerIntervalCanBeFarInFuture()
- {
- // get only one part of the pair to ensure the other side will close immediately
- list($stream) = $this->createSocketPair();
-
- // start a timer very far in the future
- $timer = $this->loop->addTimer(PHP_INT_MAX, function () { });
-
- // remove stream and timer when the stream is readable (closes)
- $loop = $this->loop;
- $this->loop->addReadStream($stream, function ($stream) use ($timer, $loop) {
- $loop->removeReadStream($stream);
- $loop->cancelTimer($timer);
- });
-
- $this->assertRunFasterThan($this->tickTimeout);
- }
-
- private function assertRunSlowerThan($minInterval)
- {
- $start = microtime(true);
-
- $this->loop->run();
-
- $end = microtime(true);
- $interval = $end - $start;
-
- $this->assertLessThan($interval, $minInterval);
- }
-
- private function assertRunFasterThan($maxInterval)
- {
- $start = microtime(true);
-
- $this->loop->run();
-
- $end = microtime(true);
- $interval = $end - $start;
-
- $this->assertLessThan($maxInterval, $interval);
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/CallableStub.php b/assets/php/vendor/react/event-loop/tests/CallableStub.php
deleted file mode 100755
index 913d403..0000000
--- a/assets/php/vendor/react/event-loop/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/ExtEvLoopTest.php b/assets/php/vendor/react/event-loop/tests/ExtEvLoopTest.php
deleted file mode 100755
index ab41c9f..0000000
--- a/assets/php/vendor/react/event-loop/tests/ExtEvLoopTest.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\ExtEvLoop;
-
-class ExtEvLoopTest extends AbstractLoopTest
-{
- public function createLoop()
- {
- if (!class_exists('EvLoop')) {
- $this->markTestSkipped('ExtEvLoop tests skipped because ext-ev extension is not installed.');
- }
-
- return new ExtEvLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/ExtEventLoopTest.php b/assets/php/vendor/react/event-loop/tests/ExtEventLoopTest.php
deleted file mode 100755
index 2f88d18..0000000
--- a/assets/php/vendor/react/event-loop/tests/ExtEventLoopTest.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\ExtEventLoop;
-
-class ExtEventLoopTest extends AbstractLoopTest
-{
- public function createLoop($readStreamCompatible = false)
- {
- if ('Linux' === PHP_OS && !extension_loaded('posix')) {
- $this->markTestSkipped('libevent tests skipped on linux due to linux epoll issues.');
- }
-
- if (!extension_loaded('event')) {
- $this->markTestSkipped('ext-event tests skipped because ext-event is not installed.');
- }
-
- return new ExtEventLoop();
- }
-
- public function createStream()
- {
- // Use a FIFO on linux to get around lack of support for disk-based file
- // descriptors when using the EPOLL back-end.
- if ('Linux' === PHP_OS) {
- $this->fifoPath = tempnam(sys_get_temp_dir(), 'react-');
-
- unlink($this->fifoPath);
-
- posix_mkfifo($this->fifoPath, 0600);
-
- $stream = fopen($this->fifoPath, 'r+');
-
- // ext-event (as of 1.8.1) does not yet support in-memory temporary
- // streams. Setting maxmemory:0 and performing a write forces PHP to
- // back this temporary stream with a real file.
- //
- // This problem is mentioned at https://bugs.php.net/bug.php?id=64652&edit=3
- // but remains unresolved (despite that issue being closed).
- } else {
- $stream = fopen('php://temp/maxmemory:0', 'r+');
-
- fwrite($stream, 'x');
- ftruncate($stream, 0);
- }
-
- return $stream;
- }
-
- public function writeToStream($stream, $content)
- {
- if ('Linux' !== PHP_OS) {
- return parent::writeToStream($stream, $content);
- }
-
- fwrite($stream, $content);
- }
-
- /**
- * @group epoll-readable-error
- */
- public function testCanUseReadableStreamWithFeatureFds()
- {
- if (PHP_VERSION_ID > 70000) {
- $this->markTestSkipped('Memory stream not supported');
- }
-
- $this->loop = $this->createLoop(true);
-
- $input = fopen('php://temp/maxmemory:0', 'r+');
-
- fwrite($input, 'x');
- ftruncate($input, 0);
-
- $this->loop->addReadStream($input, $this->expectCallableExactly(2));
-
- fwrite($input, "foo\n");
- $this->tickLoop($this->loop);
-
- fwrite($input, "bar\n");
- $this->tickLoop($this->loop);
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/ExtLibevLoopTest.php b/assets/php/vendor/react/event-loop/tests/ExtLibevLoopTest.php
deleted file mode 100755
index 19a5e87..0000000
--- a/assets/php/vendor/react/event-loop/tests/ExtLibevLoopTest.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\ExtLibevLoop;
-
-class ExtLibevLoopTest extends AbstractLoopTest
-{
- public function createLoop()
- {
- if (!class_exists('libev\EventLoop')) {
- $this->markTestSkipped('libev tests skipped because ext-libev is not installed.');
- }
-
- return new ExtLibevLoop();
- }
-
- public function testLibEvConstructor()
- {
- $loop = new ExtLibevLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/ExtLibeventLoopTest.php b/assets/php/vendor/react/event-loop/tests/ExtLibeventLoopTest.php
deleted file mode 100755
index 8497065..0000000
--- a/assets/php/vendor/react/event-loop/tests/ExtLibeventLoopTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\ExtLibeventLoop;
-
-class ExtLibeventLoopTest extends AbstractLoopTest
-{
- private $fifoPath;
-
- public function createLoop()
- {
- if ('Linux' === PHP_OS && !extension_loaded('posix')) {
- $this->markTestSkipped('libevent tests skipped on linux due to linux epoll issues.');
- }
-
- if (!function_exists('event_base_new')) {
- $this->markTestSkipped('libevent tests skipped because ext-libevent is not installed.');
- }
-
- return new ExtLibeventLoop();
- }
-
- public function tearDown()
- {
- if (file_exists($this->fifoPath)) {
- unlink($this->fifoPath);
- }
- }
-
- public function createStream()
- {
- if ('Linux' !== PHP_OS) {
- return parent::createStream();
- }
-
- $this->fifoPath = tempnam(sys_get_temp_dir(), 'react-');
-
- unlink($this->fifoPath);
-
- // Use a FIFO on linux to get around lack of support for disk-based file
- // descriptors when using the EPOLL back-end.
- posix_mkfifo($this->fifoPath, 0600);
-
- $stream = fopen($this->fifoPath, 'r+');
-
- return $stream;
- }
-
- public function writeToStream($stream, $content)
- {
- if ('Linux' !== PHP_OS) {
- return parent::writeToStream($stream, $content);
- }
-
- fwrite($stream, $content);
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/SignalsHandlerTest.php b/assets/php/vendor/react/event-loop/tests/SignalsHandlerTest.php
deleted file mode 100755
index f8b7df3..0000000
--- a/assets/php/vendor/react/event-loop/tests/SignalsHandlerTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\SignalsHandler;
-
-final class SignalsHandlerTest extends TestCase
-{
- public function testEmittedEventsAndCallHandling()
- {
- $callCount = 0;
- $func = function () use (&$callCount) {
- $callCount++;
- };
- $signals = new SignalsHandler();
-
- $this->assertSame(0, $callCount);
-
- $signals->add(SIGUSR1, $func);
- $this->assertSame(0, $callCount);
-
- $signals->add(SIGUSR1, $func);
- $this->assertSame(0, $callCount);
-
- $signals->add(SIGUSR1, $func);
- $this->assertSame(0, $callCount);
-
- $signals->call(SIGUSR1);
- $this->assertSame(1, $callCount);
-
- $signals->add(SIGUSR2, $func);
- $this->assertSame(1, $callCount);
-
- $signals->add(SIGUSR2, $func);
- $this->assertSame(1, $callCount);
-
- $signals->call(SIGUSR2);
- $this->assertSame(2, $callCount);
-
- $signals->remove(SIGUSR2, $func);
- $this->assertSame(2, $callCount);
-
- $signals->remove(SIGUSR2, $func);
- $this->assertSame(2, $callCount);
-
- $signals->call(SIGUSR2);
- $this->assertSame(2, $callCount);
-
- $signals->remove(SIGUSR1, $func);
- $this->assertSame(2, $callCount);
-
- $signals->call(SIGUSR1);
- $this->assertSame(2, $callCount);
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/StreamSelectLoopTest.php b/assets/php/vendor/react/event-loop/tests/StreamSelectLoopTest.php
deleted file mode 100755
index bd19e1c..0000000
--- a/assets/php/vendor/react/event-loop/tests/StreamSelectLoopTest.php
+++ /dev/null
@@ -1,148 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use React\EventLoop\LoopInterface;
-use React\EventLoop\StreamSelectLoop;
-
-class StreamSelectLoopTest extends AbstractLoopTest
-{
- protected function tearDown()
- {
- parent::tearDown();
- if (strncmp($this->getName(false), 'testSignal', 10) === 0 && extension_loaded('pcntl')) {
- $this->resetSignalHandlers();
- }
- }
-
- public function createLoop()
- {
- return new StreamSelectLoop();
- }
-
- public function testStreamSelectTimeoutEmulation()
- {
- $this->loop->addTimer(
- 0.05,
- $this->expectCallableOnce()
- );
-
- $start = microtime(true);
-
- $this->loop->run();
-
- $end = microtime(true);
- $interval = $end - $start;
-
- $this->assertGreaterThan(0.04, $interval);
- }
-
- public function signalProvider()
- {
- return array(
- array('SIGUSR1'),
- array('SIGHUP'),
- array('SIGTERM'),
- );
- }
-
- /**
- * Test signal interrupt when no stream is attached to the loop
- * @dataProvider signalProvider
- */
- public function testSignalInterruptNoStream($signal)
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('"pcntl" extension is required to run this test.');
- }
-
- // dispatch signal handler every 10ms for 0.1s
- $check = $this->loop->addPeriodicTimer(0.01, function() {
- pcntl_signal_dispatch();
- });
- $loop = $this->loop;
- $loop->addTimer(0.1, function () use ($check, $loop) {
- $loop->cancelTimer($check);
- });
-
- $handled = false;
- $this->assertTrue(pcntl_signal(constant($signal), function () use (&$handled) {
- $handled = true;
- }));
-
- // spawn external process to send signal to current process id
- $this->forkSendSignal($signal);
-
- $this->loop->run();
- $this->assertTrue($handled);
- }
-
- /**
- * Test signal interrupt when a stream is attached to the loop
- * @dataProvider signalProvider
- */
- public function testSignalInterruptWithStream($signal)
- {
- if (!extension_loaded('pcntl')) {
- $this->markTestSkipped('"pcntl" extension is required to run this test.');
- }
-
- // dispatch signal handler every 10ms
- $this->loop->addPeriodicTimer(0.01, function() {
- pcntl_signal_dispatch();
- });
-
- // add stream to the loop
- $loop = $this->loop;
- list($writeStream, $readStream) = $this->createSocketPair();
- $loop->addReadStream($readStream, function ($stream) use ($loop) {
- /** @var $loop LoopInterface */
- $read = fgets($stream);
- if ($read === "end loop\n") {
- $loop->stop();
- }
- });
- $this->loop->addTimer(0.1, function() use ($writeStream) {
- fwrite($writeStream, "end loop\n");
- });
-
- $handled = false;
- $this->assertTrue(pcntl_signal(constant($signal), function () use (&$handled) {
- $handled = true;
- }));
-
- // spawn external process to send signal to current process id
- $this->forkSendSignal($signal);
-
- $this->loop->run();
-
- $this->assertTrue($handled);
- }
-
- /**
- * reset all signal handlers to default
- */
- protected function resetSignalHandlers()
- {
- foreach($this->signalProvider() as $signal) {
- pcntl_signal(constant($signal[0]), SIG_DFL);
- }
- }
-
- /**
- * fork child process to send signal to current process id
- */
- protected function forkSendSignal($signal)
- {
- $currentPid = posix_getpid();
- $childPid = pcntl_fork();
- if ($childPid == -1) {
- $this->fail("Failed to fork child process!");
- } else if ($childPid === 0) {
- // this is executed in the child process
- usleep(20000);
- posix_kill($currentPid, constant($signal));
- die();
- }
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/TestCase.php b/assets/php/vendor/react/event-loop/tests/TestCase.php
deleted file mode 100755
index dbdd54c..0000000
--- a/assets/php/vendor/react/event-loop/tests/TestCase.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-use React\EventLoop\LoopInterface;
-
-class TestCase extends BaseTestCase
-{
- protected function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\EventLoop\CallableStub')->getMock();
- }
-
- protected function tickLoop(LoopInterface $loop)
- {
- $loop->futureTick(function () use ($loop) {
- $loop->stop();
- });
-
- $loop->run();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php
deleted file mode 100755
index 294e683..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/AbstractTimerTest.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\LoopInterface;
-use React\Tests\EventLoop\TestCase;
-
-abstract class AbstractTimerTest extends TestCase
-{
- /**
- * @return LoopInterface
- */
- abstract public function createLoop();
-
- public function testAddTimerReturnsNonPeriodicTimerInstance()
- {
- $loop = $this->createLoop();
-
- $timer = $loop->addTimer(0.001, $this->expectCallableNever());
-
- $this->assertInstanceOf('React\EventLoop\TimerInterface', $timer);
- $this->assertFalse($timer->isPeriodic());
- }
-
- public function testAddTimerWillBeInvokedOnceAndBlocksLoopWhenRunning()
- {
- $loop = $this->createLoop();
-
- $loop->addTimer(0.001, $this->expectCallableOnce());
-
- $start = microtime(true);
- $loop->run();
- $end = microtime(true);
-
- // make no strict assumptions about actual time interval.
- // must be at least 0.001s (1ms) and should not take longer than 0.1s
- $this->assertGreaterThanOrEqual(0.001, $end - $start);
- $this->assertLessThan(0.1, $end - $start);
- }
-
- public function testAddPeriodicTimerReturnsPeriodicTimerInstance()
- {
- $loop = $this->createLoop();
-
- $periodic = $loop->addPeriodicTimer(0.1, $this->expectCallableNever());
-
- $this->assertInstanceOf('React\EventLoop\TimerInterface', $periodic);
- $this->assertTrue($periodic->isPeriodic());
- }
-
- public function testAddPeriodicTimerWillBeInvokedUntilItIsCancelled()
- {
- $loop = $this->createLoop();
-
- $periodic = $loop->addPeriodicTimer(0.1, $this->expectCallableExactly(3));
-
- // make no strict assumptions about actual time interval.
- // leave some room to ensure this ticks exactly 3 times.
- $loop->addTimer(0.399, function () use ($loop, $periodic) {
- $loop->cancelTimer($periodic);
- });
-
- $loop->run();
- }
-
- public function testAddPeriodicTimerWillBeInvokedWithMaximumAccuracyUntilItIsCancelled()
- {
- $loop = $this->createLoop();
-
- $i = 0;
- $periodic = $loop->addPeriodicTimer(0.001, function () use (&$i) {
- ++$i;
- });
-
- $loop->addTimer(0.02, function () use ($loop, $periodic) {
- $loop->cancelTimer($periodic);
- });
-
- $loop->run();
-
- // make no strict assumptions about number of invocations.
- // we know it must be no more than 20 times and should at least be
- // invoked twice for really slow loops
- $this->assertLessThanOrEqual(20, $i);
- $this->assertGreaterThan(2, $i);
- }
-
- public function testAddPeriodicTimerCancelsItself()
- {
- $loop = $this->createLoop();
-
- $i = 0;
- $loop->addPeriodicTimer(0.001, function ($timer) use (&$i, $loop) {
- $i++;
-
- if ($i === 5) {
- $loop->cancelTimer($timer);
- }
- });
-
- $start = microtime(true);
- $loop->run();
- $end = microtime(true);
-
- $this->assertEquals(5, $i);
-
- // make no strict assumptions about time interval.
- // 5 invocations must take at least 0.005s (5ms) and should not take
- // longer than 0.1s for slower loops.
- $this->assertGreaterThanOrEqual(0.005, $end - $start);
- $this->assertLessThan(0.1, $end - $start);
- }
-
- public function testMinimumIntervalOneMicrosecond()
- {
- $loop = $this->createLoop();
-
- $timer = $loop->addTimer(0, function () {});
-
- $this->assertEquals(0.000001, $timer->getInterval());
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php
deleted file mode 100755
index bfa9186..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/ExtEvTimerTest.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\ExtEvLoop;
-
-class ExtEvTimerTest extends AbstractTimerTest
-{
- public function createLoop()
- {
- if (!class_exists('EvLoop')) {
- $this->markTestSkipped('ExtEvLoop tests skipped because ext-ev extension is not installed.');
- }
-
- return new ExtEvLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php
deleted file mode 100755
index a7a6d00..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/ExtEventTimerTest.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\ExtEventLoop;
-
-class ExtEventTimerTest extends AbstractTimerTest
-{
- public function createLoop()
- {
- if (!extension_loaded('event')) {
- $this->markTestSkipped('ext-event tests skipped because ext-event is not installed.');
- }
-
- return new ExtEventLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php
deleted file mode 100755
index 65e82be..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibevTimerTest.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\ExtLibevLoop;
-
-class ExtLibevTimerTest extends AbstractTimerTest
-{
- public function createLoop()
- {
- if (!class_exists('libev\EventLoop')) {
- $this->markTestSkipped('libev tests skipped because ext-libev is not installed.');
- }
-
- return new ExtLibevLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php
deleted file mode 100755
index 9089b9a..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/ExtLibeventTimerTest.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\ExtLibeventLoop;
-
-class ExtLibeventTimerTest extends AbstractTimerTest
-{
- public function createLoop()
- {
- if (!function_exists('event_base_new')) {
- $this->markTestSkipped('libevent tests skipped because ext-libevent is not installed.');
- }
-
- return new ExtLibeventLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php b/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php
deleted file mode 100755
index cfe1d7d..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/StreamSelectTimerTest.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\EventLoop\StreamSelectLoop;
-
-class StreamSelectTimerTest extends AbstractTimerTest
-{
- public function createLoop()
- {
- return new StreamSelectLoop();
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/Timer/TimersTest.php b/assets/php/vendor/react/event-loop/tests/Timer/TimersTest.php
deleted file mode 100755
index b279478..0000000
--- a/assets/php/vendor/react/event-loop/tests/Timer/TimersTest.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-namespace React\Tests\EventLoop\Timer;
-
-use React\Tests\EventLoop\TestCase;
-use React\EventLoop\Timer\Timer;
-use React\EventLoop\Timer\Timers;
-
-class TimersTest extends TestCase
-{
- public function testBlockedTimer()
- {
- $timers = new Timers();
- $timers->tick();
-
- // simulate a bunch of processing on stream events,
- // part of which schedules a future timer...
- sleep(1);
- $timers->add(new Timer(0.5, function () {
- $this->fail("Timer shouldn't be called");
- }));
-
- $timers->tick();
-
- $this->assertTrue(true);
- }
-}
diff --git a/assets/php/vendor/react/event-loop/tests/bootstrap.php b/assets/php/vendor/react/event-loop/tests/bootstrap.php
deleted file mode 100755
index ea7dd4c..0000000
--- a/assets/php/vendor/react/event-loop/tests/bootstrap.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-$loader = @include __DIR__ . '/../vendor/autoload.php';
-if (!$loader) {
- $loader = require __DIR__ . '/../../../../vendor/autoload.php';
-}
-$loader->addPsr4('React\\Tests\\EventLoop\\', __DIR__);
-
-if (!defined('SIGUSR1')) {
- define('SIGUSR1', 1);
-}
-
-if (!defined('SIGUSR2')) {
- define('SIGUSR2', 2);
-}
diff --git a/assets/php/vendor/react/event-loop/travis-init.sh b/assets/php/vendor/react/event-loop/travis-init.sh
deleted file mode 100755
index 29ce884..0000000
--- a/assets/php/vendor/react/event-loop/travis-init.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-set -e
-set -o pipefail
-
-if [[ "$TRAVIS_PHP_VERSION" != "hhvm" &&
- "$TRAVIS_PHP_VERSION" != "hhvm-nightly" ]]; then
-
- # install 'event' and 'ev' PHP extension
- if [[ "$TRAVIS_PHP_VERSION" != "5.3" ]]; then
- echo "yes" | pecl install event
- echo "yes" | pecl install ev
- fi
-
- # install 'libevent' PHP extension (does not support php 7)
- if [[ "$TRAVIS_PHP_VERSION" != "7.0" &&
- "$TRAVIS_PHP_VERSION" != "7.1" &&
- "$TRAVIS_PHP_VERSION" != "7.2" ]]; then
- curl http://pecl.php.net/get/libevent-0.1.0.tgz | tar -xz
- pushd libevent-0.1.0
- phpize
- ./configure
- make
- make install
- popd
- echo "extension=libevent.so" >> "$(php -r 'echo php_ini_loaded_file();')"
- fi
-
- # install 'libev' PHP extension (does not support php 7)
- if [[ "$TRAVIS_PHP_VERSION" != "7.0" &&
- "$TRAVIS_PHP_VERSION" != "7.1" &&
- "$TRAVIS_PHP_VERSION" != "7.2" ]]; then
- git clone --recursive https://github.com/m4rw3r/php-libev
- pushd php-libev
- phpize
- ./configure --with-libev
- make
- make install
- popd
- echo "extension=libev.so" >> "$(php -r 'echo php_ini_loaded_file();')"
- fi
-
-fi
diff --git a/assets/php/vendor/react/promise-timer/.gitignore b/assets/php/vendor/react/promise-timer/.gitignore
deleted file mode 100755
index de4a392..0000000
--- a/assets/php/vendor/react/promise-timer/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/vendor
-/composer.lock
diff --git a/assets/php/vendor/react/promise-timer/.travis.yml b/assets/php/vendor/react/promise-timer/.travis.yml
deleted file mode 100755
index a71864a..0000000
--- a/assets/php/vendor/react/promise-timer/.travis.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - hhvm # ignore errors, see below
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
- allow_failures:
- - php: hhvm
-
-install:
- - composer install --no-interaction
-
-script:
- - vendor/bin/phpunit --coverage-text
diff --git a/assets/php/vendor/react/promise-timer/CHANGELOG.md b/assets/php/vendor/react/promise-timer/CHANGELOG.md
deleted file mode 100755
index 0a21244..0000000
--- a/assets/php/vendor/react/promise-timer/CHANGELOG.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Changelog
-
-## 1.2.1 (2017-12-22)
-
-* README improvements
- (#28 by @jsor)
-
-* Improve test suite by adding forward compatiblity with PHPUnit 6 and
- fix test suite forward compatibility with upcoming EventLoop releases
- (#30 and #31 by @clue)
-
-## 1.2.0 (2017-08-08)
-
-* Feature: Only start timers if input Promise is still pending and
- return a settled output promise if the input is already settled.
- (#25 by @clue)
-
-* Feature: Cap minimum timer interval at 1µs across all versions
- (#23 by @clue)
-
-* Feature: Forward compatibility with EventLoop v1.0 and v0.5
- (#27 by @clue)
-
-* Improve test suite by adding PHPUnit to require-dev and
- lock Travis distro so new defaults will not break the build
- (#24 and #26 by @clue)
-
-## 1.1.1 (2016-12-27)
-
-* Improve test suite to use PSR-4 autoloader and proper namespaces.
- (#21 by @clue)
-
-## 1.1.0 (2016-02-29)
-
-* Feature: Support promise cancellation for all timer primitives
- (#18 by @clue)
-
-## 1.0.0 (2015-09-29)
-
-* First tagged release
diff --git a/assets/php/vendor/react/promise-timer/LICENSE b/assets/php/vendor/react/promise-timer/LICENSE
deleted file mode 100755
index dc09d1e..0000000
--- a/assets/php/vendor/react/promise-timer/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 Christian Lück
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/promise-timer/README.md b/assets/php/vendor/react/promise-timer/README.md
deleted file mode 100755
index 2ea94fa..0000000
--- a/assets/php/vendor/react/promise-timer/README.md
+++ /dev/null
@@ -1,372 +0,0 @@
-# PromiseTimer
-
-[![Build Status](https://travis-ci.org/reactphp/promise-timer.svg?branch=master)](https://travis-ci.org/reactphp/promise-timer)
-
-A trivial implementation of timeouts for `Promise`s, built on top of [ReactPHP](https://reactphp.org/).
-
-**Table of contents**
-
-* [Usage](#usage)
- * [timeout()](#timeout)
- * [Timeout cancellation](#timeout-cancellation)
- * [Cancellation handler](#cancellation-handler)
- * [Input cancellation](#input-cancellation)
- * [Output cancellation](#output-cancellation)
- * [Collections](#collections)
- * [resolve()](#resolve)
- * [Resolve cancellation](#resolve-cancellation)
- * [reject()](#reject)
- * [Reject cancellation](#reject-cancellation)
- * [TimeoutException](#timeoutexception)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-
-## Usage
-
-This lightweight library consists only of a few simple functions.
-All functions reside under the `React\Promise\Timer` namespace.
-
-The below examples assume you use an import statement similar to this:
-
-```php
-use React\Promise\Timer;
-
-Timer\timeout(…);
-```
-
-Alternatively, you can also refer to them with their fully-qualified name:
-
-```php
-\React\Promise\Timer\timeout(…);
-```
-
-### timeout()
-
-The `timeout(PromiseInterface $promise, $time, LoopInterface $loop)` function
-can be used to *cancel* operations that take *too long*.
-You need to pass in an input `$promise` that represents a pending operation and timeout parameters.
-It returns a new `Promise` with the following resolution behavior:
-
-* If the input `$promise` resolves before `$time` seconds, resolve the resulting promise with its fulfillment value.
-* If the input `$promise` rejects before `$time` seconds, reject the resulting promise with its rejection value.
-* If the input `$promise` does not settle before `$time` seconds, *cancel* the operation and reject the resulting promise with a [`TimeoutException`](#timeoutexception).
-
-Internally, the given `$time` value will be used to start a timer that will
-*cancel* the pending operation once it triggers.
-This implies that if you pass a really small (or negative) value, it will still
-start a timer and will thus trigger at the earliest possible time in the future.
-
-If the input `$promise` is already settled, then the resulting promise will
-resolve or reject immediately without starting a timer at all.
-
-A common use case for handling only resolved values looks like this:
-
-```php
-$promise = accessSomeRemoteResource();
-Timer\timeout($promise, 10.0, $loop)->then(function ($value) {
- // the operation finished within 10.0 seconds
-});
-```
-
-A more complete example could look like this:
-
-```php
-$promise = accessSomeRemoteResource();
-Timer\timeout($promise, 10.0, $loop)->then(
- function ($value) {
- // the operation finished within 10.0 seconds
- },
- function ($error) {
- if ($error instanceof Timer\TimeoutException) {
- // the operation has failed due to a timeout
- } else {
- // the input operation has failed due to some other error
- }
- }
-);
-```
-
-Or if you're using [react/promise v2.2.0](https://github.com/reactphp/promise) or up:
-
-```php
-Timer\timeout($promise, 10.0, $loop)
- ->then(function ($value) {
- // the operation finished within 10.0 seconds
- })
- ->otherwise(function (Timer\TimeoutException $error) {
- // the operation has failed due to a timeout
- })
- ->otherwise(function ($error) {
- // the input operation has failed due to some other error
- })
-;
-```
-
-#### Timeout cancellation
-
-As discussed above, the [`timeout()`](#timeout) function will *cancel* the
-underlying operation if it takes *too long*.
-This means that you can be sure the resulting promise will then be rejected
-with a [`TimeoutException`](#timeoutexception).
-
-However, what happens to the underlying input `$promise` is a bit more tricky:
-Once the timer fires, we will try to call
-[`$promise->cancel()`](https://github.com/reactphp/promise#cancellablepromiseinterfacecancel)
-on the input `$promise` which in turn invokes its [cancellation handler](#cancellation-handler).
-
-This means that it's actually up the input `$promise` to handle
-[cancellation support](https://github.com/reactphp/promise#cancellablepromiseinterface).
-
-* A common use case involves cleaning up any resources like open network sockets or
- file handles or terminating external processes or timers.
-
-* If the given input `$promise` does not support cancellation, then this is a NO-OP.
- This means that while the resulting promise will still be rejected, the underlying
- input `$promise` may still be pending and can hence continue consuming resources.
-
-See the following chapter for more details on the cancellation handler.
-
-#### Cancellation handler
-
-For example, an implementation for the above operation could look like this:
-
-```php
-function accessSomeRemoteResource()
-{
- return new Promise(
- function ($resolve, $reject) use (&$socket) {
- // this will be called once the promise is created
- // a common use case involves opening any resources and eventually resolving
- $socket = createSocket();
- $socket->on('data', function ($data) use ($resolve) {
- $resolve($data);
- });
- },
- function ($resolve, $reject) use (&$socket) {
- // this will be called once calling `cancel()` on this promise
- // a common use case involves cleaning any resources and then rejecting
- $socket->close();
- $reject(new \RuntimeException('Operation cancelled'));
- }
- );
-}
-```
-
-In this example, calling `$promise->cancel()` will invoke the registered cancellation
-handler which then closes the network socket and rejects the `Promise` instance.
-
-If no cancellation handler is passed to the `Promise` constructor, then invoking
-its `cancel()` method it is effectively a NO-OP.
-This means that it may still be pending and can hence continue consuming resources.
-
-For more details on the promise cancellation, please refer to the
-[Promise documentation](https://github.com/reactphp/promise#cancellablepromiseinterface).
-
-#### Input cancellation
-
-Irrespective of the timout handling, you can also explicitly `cancel()` the
-input `$promise` at any time.
-This means that the `timeout()` handling does not affect cancellation of the
-input `$promise`, as demonstrated in the following example:
-
-```php
-$promise = accessSomeRemoteResource();
-$timeout = Timer\timeout($promise, 10.0, $loop);
-
-$promise->cancel();
-```
-
-The registered [cancellation handler](#cancellation-handler) is responsible for
-handling the `cancel()` call:
-
-* A described above, a common use involves resource cleanup and will then *reject*
- the `Promise`.
- If the input `$promise` is being rejected, then the timeout will be aborted
- and the resulting promise will also be rejected.
-* If the input `$promise` is still pending, then the timout will continue
- running until the timer expires.
- The same happens if the input `$promise` does not register a
- [cancellation handler](#cancellation-handler).
-
-#### Output cancellation
-
-Similarily, you can also explicitly `cancel()` the resulting promise like this:
-
-```php
-$promise = accessSomeRemoteResource();
-$timeout = Timer\timeout($promise, 10.0, $loop);
-
-$timeout->cancel();
-```
-
-Note how this looks very similar to the above [input cancellation](#input-cancellation)
-example. Accordingly, it also behaves very similar.
-
-Calling `cancel()` on the resulting promise will merely try
-to `cancel()` the input `$promise`.
-This means that we do not take over responsibility of the outcome and it's
-entirely up to the input `$promise` to handle cancellation support.
-
-The registered [cancellation handler](#cancellation-handler) is responsible for
-handling the `cancel()` call:
-
-* As described above, a common use involves resource cleanup and will then *reject*
- the `Promise`.
- If the input `$promise` is being rejected, then the timeout will be aborted
- and the resulting promise will also be rejected.
-* If the input `$promise` is still pending, then the timout will continue
- running until the timer expires.
- The same happens if the input `$promise` does not register a
- [cancellation handler](#cancellation-handler).
-
-To re-iterate, note that calling `cancel()` on the resulting promise will merely
-try to cancel the input `$promise` only.
-It is then up to the cancellation handler of the input promise to settle the promise.
-If the input promise is still pending when the timeout occurs, then the normal
-[timeout cancellation](#timeout-cancellation) handling will trigger, effectively rejecting
-the output promise with a [`TimeoutException`](#timeoutexception).
-
-This is done for consistency with the [timeout cancellation](#timeout-cancellation)
-handling and also because it is assumed this is often used like this:
-
-```php
-$timeout = Timer\timeout(accessSomeRemoteResource(), 10.0, $loop);
-
-$timeout->cancel();
-```
-
-As described above, this example works as expected and cleans up any resources
-allocated for the input `$promise`.
-
-Note that if the given input `$promise` does not support cancellation, then this
-is a NO-OP.
-This means that while the resulting promise will still be rejected after the
-timeout, the underlying input `$promise` may still be pending and can hence
-continue consuming resources.
-
-#### Collections
-
-If you want to wait for multiple promises to resolve, you can use the normal promise primitives like this:
-
-```php
-$promises = array(
- accessSomeRemoteResource(),
- accessSomeRemoteResource(),
- accessSomeRemoteResource()
-);
-
-$promise = \React\Promise\all($promises);
-
-Timer\timeout($promise, 10, $loop)->then(function ($values) {
- // *all* promises resolved
-});
-```
-
-The applies to all promise collection primitives alike, i.e. `all()`, `race()`, `any()`, `some()` etc.
-
-For more details on the promise primitives, please refer to the
-[Promise documentation](https://github.com/reactphp/promise#functions).
-
-### resolve()
-
-The `resolve($time, LoopInterface $loop)` function can be used to create a new Promise that
-resolves in `$time` seconds with the `$time` as the fulfillment value.
-
-```php
-Timer\resolve(1.5, $loop)->then(function ($time) {
- echo 'Thanks for waiting ' . $time . ' seconds' . PHP_EOL;
-});
-```
-
-Internally, the given `$time` value will be used to start a timer that will
-resolve the promise once it triggers.
-This implies that if you pass a really small (or negative) value, it will still
-start a timer and will thus trigger at the earliest possible time in the future.
-
-#### Resolve cancellation
-
-You can explicitly `cancel()` the resulting timer promise at any time:
-
-```php
-$timer = Timer\resolve(2.0, $loop);
-
-$timer->cancel();
-```
-
-This will abort the timer and *reject* with a `RuntimeException`.
-
-### reject()
-
-The `reject($time, LoopInterface $loop)` function can be used to create a new Promise
-which rejects in `$time` seconds with a `TimeoutException`.
-
-```php
-Timer\reject(2.0, $loop)->then(null, function (TimeoutException $e) {
- echo 'Rejected after ' . $e->getTimeout() . ' seconds ' . PHP_EOL;
-});
-```
-
-Internally, the given `$time` value will be used to start a timer that will
-reject the promise once it triggers.
-This implies that if you pass a really small (or negative) value, it will still
-start a timer and will thus trigger at the earliest possible time in the future.
-
-This function complements the [`resolve()`](#resolve) function
-and can be used as a basic building block for higher-level promise consumers.
-
-#### Reject cancellation
-
-You can explicitly `cancel()` the resulting timer promise at any time:
-
-```php
-$timer = Timer\reject(2.0, $loop);
-
-$timer->cancel();
-```
-
-This will abort the timer and *reject* with a `RuntimeException`.
-
-### TimeoutException
-
-The `TimeoutException` extends PHP's built-in `RuntimeException`.
-
-The `getTimeout()` method can be used to get the timeout value in seconds.
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This project follows [SemVer](http://semver.org/).
-This will install the latest supported version:
-
-```bash
-$ composer require react/promise-timer:^1.2.1
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
-HHVM.
-It's *highly recommended to use PHP 7+* for this project.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
diff --git a/assets/php/vendor/react/promise-timer/composer.json b/assets/php/vendor/react/promise-timer/composer.json
deleted file mode 100755
index e425dc6..0000000
--- a/assets/php/vendor/react/promise-timer/composer.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "react/promise-timer",
- "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.",
- "keywords": ["Promise", "timeout", "timer", "event-loop", "ReactPHP", "async"],
- "homepage": "https://github.com/react/promise-timer",
- "license": "MIT",
- "authors": [
- {
- "name": "Christian Lück",
- "email": "christian@lueck.tv"
- }
- ],
- "autoload": {
- "psr-4": { "React\\Promise\\Timer\\": "src/" },
- "files": [ "src/functions.php" ]
- },
- "autoload-dev": {
- "psr-4": { "React\\Tests\\Promise\\Timer\\": "tests/" }
- },
- "require": {
- "php": ">=5.3",
- "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
- "react/promise": "~2.1|~1.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/phpunit.xml.dist b/assets/php/vendor/react/promise-timer/phpunit.xml.dist
deleted file mode 100755
index bb79fba..0000000
--- a/assets/php/vendor/react/promise-timer/phpunit.xml.dist
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit bootstrap="vendor/autoload.php"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
->
- <testsuites>
- <testsuite name="Promise Timer Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit> \ No newline at end of file
diff --git a/assets/php/vendor/react/promise-timer/src/TimeoutException.php b/assets/php/vendor/react/promise-timer/src/TimeoutException.php
deleted file mode 100755
index 18ea72f..0000000
--- a/assets/php/vendor/react/promise-timer/src/TimeoutException.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-namespace React\Promise\Timer;
-
-use RuntimeException;
-
-class TimeoutException extends RuntimeException
-{
- private $timeout;
-
- public function __construct($timeout, $message = null, $code = null, $previous = null)
- {
- parent::__construct($message, $code, $previous);
-
- $this->timeout = $timeout;
- }
-
- public function getTimeout()
- {
- return $this->timeout;
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/src/functions.php b/assets/php/vendor/react/promise-timer/src/functions.php
deleted file mode 100755
index 6ad9867..0000000
--- a/assets/php/vendor/react/promise-timer/src/functions.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-namespace React\Promise\Timer;
-
-use React\Promise\CancellablePromiseInterface;
-use React\EventLoop\LoopInterface;
-use React\Promise\PromiseInterface;
-use React\Promise\Promise;
-
-function timeout(PromiseInterface $promise, $time, LoopInterface $loop)
-{
- // cancelling this promise will only try to cancel the input promise,
- // thus leaving responsibility to the input promise.
- $canceller = null;
- if ($promise instanceof CancellablePromiseInterface) {
- $canceller = array($promise, 'cancel');
- }
-
- return new Promise(function ($resolve, $reject) use ($loop, $time, $promise) {
- $timer = null;
- $promise->then(function ($v) use (&$timer, $loop, $resolve) {
- if ($timer) {
- $loop->cancelTimer($timer);
- }
- $timer = false;
- $resolve($v);
- }, function ($v) use (&$timer, $loop, $reject) {
- if ($timer) {
- $loop->cancelTimer($timer);
- }
- $timer = false;
- $reject($v);
- });
-
- // promise already resolved => no need to start timer
- if ($timer === false) {
- return;
- }
-
- // start timeout timer which will cancel the input promise
- $timer = $loop->addTimer($time, function () use ($time, $promise, $reject) {
- $reject(new TimeoutException($time, 'Timed out after ' . $time . ' seconds'));
-
- if ($promise instanceof CancellablePromiseInterface) {
- $promise->cancel();
- }
- });
- }, $canceller);
-}
-
-function resolve($time, LoopInterface $loop)
-{
- return new Promise(function ($resolve) use ($loop, $time, &$timer) {
- // resolve the promise when the timer fires in $time seconds
- $timer = $loop->addTimer($time, function () use ($time, $resolve) {
- $resolve($time);
- });
- }, function ($resolveUnused, $reject) use (&$timer, $loop) {
- // cancelling this promise will cancel the timer and reject
- $loop->cancelTimer($timer);
- $reject(new \RuntimeException('Timer cancelled'));
- });
-}
-
-function reject($time, LoopInterface $loop)
-{
- return resolve($time, $loop)->then(function ($time) {
- throw new TimeoutException($time, 'Timer expired after ' . $time . ' seconds');
- });
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/CallableStub.php b/assets/php/vendor/react/promise-timer/tests/CallableStub.php
deleted file mode 100755
index a391aa5..0000000
--- a/assets/php/vendor/react/promise-timer/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/FunctionRejectTest.php b/assets/php/vendor/react/promise-timer/tests/FunctionRejectTest.php
deleted file mode 100755
index 6153fcc..0000000
--- a/assets/php/vendor/react/promise-timer/tests/FunctionRejectTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-use React\Promise\Timer;
-
-class FunctionRejectTest extends TestCase
-{
- public function testPromiseIsPendingWithoutRunningLoop()
- {
- $promise = Timer\reject(0.01, $this->loop);
-
- $this->expectPromisePending($promise);
- }
-
- public function testPromiseExpiredIsPendingWithoutRunningLoop()
- {
- $promise = Timer\reject(-1, $this->loop);
-
- $this->expectPromisePending($promise);
- }
-
- public function testPromiseWillBeRejectedOnTimeout()
- {
- $promise = Timer\reject(0.01, $this->loop);
-
- $this->loop->run();
-
- $this->expectPromiseRejected($promise);
- }
-
- public function testPromiseExpiredWillBeRejectedOnTimeout()
- {
- $promise = Timer\reject(-1, $this->loop);
-
- $this->loop->run();
-
- $this->expectPromiseRejected($promise);
- }
-
- public function testCancelingPromiseWillRejectTimer()
- {
- $promise = Timer\reject(0.01, $this->loop);
-
- $promise->cancel();
-
- $this->expectPromiseRejected($promise);
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/FunctionResolveTest.php b/assets/php/vendor/react/promise-timer/tests/FunctionResolveTest.php
deleted file mode 100755
index 0bfdc21..0000000
--- a/assets/php/vendor/react/promise-timer/tests/FunctionResolveTest.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-use React\Promise\Timer;
-
-class FunctionResolveTest extends TestCase
-{
- public function testPromiseIsPendingWithoutRunningLoop()
- {
- $promise = Timer\resolve(0.01, $this->loop);
-
- $this->expectPromisePending($promise);
- }
-
- public function testPromiseExpiredIsPendingWithoutRunningLoop()
- {
- $promise = Timer\resolve(-1, $this->loop);
-
- $this->expectPromisePending($promise);
- }
-
- public function testPromiseWillBeResolvedOnTimeout()
- {
- $promise = Timer\resolve(0.01, $this->loop);
-
- $this->loop->run();
-
- $this->expectPromiseResolved($promise);
- }
-
- public function testPromiseExpiredWillBeResolvedOnTimeout()
- {
- $promise = Timer\resolve(-1, $this->loop);
-
- $this->loop->run();
-
- $this->expectPromiseResolved($promise);
- }
-
- public function testWillStartLoopTimer()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addTimer')->with($this->equalTo(0.01));
-
- Timer\resolve(0.01, $loop);
- }
-
- public function testCancellingPromiseWillCancelLoopTimer()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $timer = $this->getMockBuilder(interface_exists('React\EventLoop\TimerInterface') ? 'React\EventLoop\TimerInterface' : 'React\EventLoop\Timer\TimerInterface')->getMock();
- $loop->expects($this->once())->method('addTimer')->will($this->returnValue($timer));
-
- $promise = Timer\resolve(0.01, $loop);
-
- $loop->expects($this->once())->method('cancelTimer')->with($this->equalTo($timer));
-
- $promise->cancel();
- }
-
- public function testCancelingPromiseWillRejectTimer()
- {
- $promise = Timer\resolve(0.01, $this->loop);
-
- $promise->cancel();
-
- $this->expectPromiseRejected($promise);
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/FunctionTimeoutTest.php b/assets/php/vendor/react/promise-timer/tests/FunctionTimeoutTest.php
deleted file mode 100755
index aaca2da..0000000
--- a/assets/php/vendor/react/promise-timer/tests/FunctionTimeoutTest.php
+++ /dev/null
@@ -1,169 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-use React\Promise\Timer;
-use React\Promise;
-
-class FunctionTimerTest extends TestCase
-{
- public function testResolvedWillResolveRightAway()
- {
- $promise = Promise\resolve();
-
- $promise = Timer\timeout($promise, 3, $this->loop);
-
- $this->expectPromiseResolved($promise);
- }
-
- public function testResolvedExpiredWillResolveRightAway()
- {
- $promise = Promise\resolve();
-
- $promise = Timer\timeout($promise, -1, $this->loop);
-
- $this->expectPromiseResolved($promise);
- }
-
- public function testResolvedWillNotStartTimer()
- {
- $promise = Promise\resolve();
-
- Timer\timeout($promise, 3, $this->loop);
-
- $time = microtime(true);
- $this->loop->run();
- $time = microtime(true) - $time;
-
- $this->assertLessThan(0.5, $time);
- }
-
- public function testRejectedWillRejectRightAway()
- {
- $promise = Promise\reject();
-
- $promise = Timer\timeout($promise, 3, $this->loop);
-
- $this->expectPromiseRejected($promise);
- }
-
- public function testRejectedWillNotStartTimer()
- {
- $promise = Promise\reject();
-
- Timer\timeout($promise, 3, $this->loop);
-
- $time = microtime(true);
- $this->loop->run();
- $time = microtime(true) - $time;
-
- $this->assertLessThan(0.5, $time);
- }
-
- public function testPendingWillRejectOnTimeout()
- {
- $promise = $this->getMockBuilder('React\Promise\PromiseInterface')->getMock();
-
- $promise = Timer\timeout($promise, 0.01, $this->loop);
-
- $this->loop->run();
-
- $this->expectPromiseRejected($promise);
- }
-
- public function testPendingCancellableWillBeCancelledOnTimeout()
- {
- $promise = $this->getMockBuilder('React\Promise\CancellablePromiseInterface')->getMock();
- $promise->expects($this->once())->method('cancel');
-
- Timer\timeout($promise, 0.01, $this->loop);
-
- $this->loop->run();
- }
-
- public function testCancelTimeoutWithoutCancellationhandlerWillNotCancelTimerAndWillNotReject()
- {
- $promise = new \React\Promise\Promise(function () { });
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $timer = $this->getMockBuilder('React\EventLoop\Timer\TimerInterface')->getMock();
- $loop->expects($this->once())->method('addTimer')->will($this->returnValue($timer));
- $loop->expects($this->never())->method('cancelTimer');
-
- $timeout = Timer\timeout($promise, 0.01, $loop);
-
- $timeout->cancel();
-
- $this->expectPromisePending($timeout);
- }
-
- public function testResolvedPromiseWillNotStartTimer()
- {
- $promise = new \React\Promise\Promise(function ($resolve) { $resolve(true); });
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->never())->method('addTimer');
-
- $timeout = Timer\timeout($promise, 0.01, $loop);
-
- $this->expectPromiseResolved($timeout);
- }
-
- public function testRejectedPromiseWillNotStartTimer()
- {
- $promise = Promise\reject(new \RuntimeException());
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->never())->method('addTimer');
-
- $timeout = Timer\timeout($promise, 0.01, $loop);
-
- $this->expectPromiseRejected($timeout);
- }
-
- public function testCancelTimeoutWillCancelGivenPromise()
- {
- $promise = new \React\Promise\Promise(function () { }, $this->expectCallableOnce());
-
- $timeout = Timer\timeout($promise, 0.01, $this->loop);
-
- $timeout->cancel();
- }
-
- public function testCancelGivenPromiseWillReject()
- {
- $promise = new \React\Promise\Promise(function () { }, function ($resolve, $reject) { $reject(); });
-
- $timeout = Timer\timeout($promise, 0.01, $this->loop);
-
- $promise->cancel();
-
- $this->expectPromiseRejected($promise);
- $this->expectPromiseRejected($timeout);
- }
-
- public function testCancelTimeoutWillRejectIfGivenPromiseWillReject()
- {
- $promise = new \React\Promise\Promise(function () { }, function ($resolve, $reject) { $reject(); });
-
- $timeout = Timer\timeout($promise, 0.01, $this->loop);
-
- $timeout->cancel();
-
- $this->expectPromiseRejected($promise);
- $this->expectPromiseRejected($timeout);
- }
-
- public function testCancelTimeoutWillResolveIfGivenPromiseWillResolve()
- {
- $promise = new \React\Promise\Promise(function () { }, function ($resolve, $reject) { $resolve(); });
-
- $timeout = Timer\timeout($promise, 0.01, $this->loop);
-
- $timeout->cancel();
-
- $this->expectPromiseResolved($promise);
- $this->expectPromiseResolved($timeout);
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/TestCase.php b/assets/php/vendor/react/promise-timer/tests/TestCase.php
deleted file mode 100755
index 9d8d49a..0000000
--- a/assets/php/vendor/react/promise-timer/tests/TestCase.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-use React\EventLoop\Factory;
-
-class TestCase extends BaseTestCase
-{
- protected $loop;
-
- public function setUp()
- {
- $this->loop = Factory::create();
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
-
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
-
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- /**
- * @link https://github.com/reactphp/react/blob/master/tests/React/Tests/Socket/TestCase.php (taken from reactphp/react)
- */
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Promise\Timer\CallableStub')->getMock();
- }
-
- protected function expectPromiseRejected($promise)
- {
- return $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-
- protected function expectPromiseResolved($promise)
- {
- return $promise->then($this->expectCallableOnce(), $this->expectCallableNever());
- }
-
- protected function expectPromisePending($promise)
- {
- return $promise->then($this->expectCallableNever(), $this->expectCallableNever());
- }
-}
diff --git a/assets/php/vendor/react/promise-timer/tests/TimeoutExceptionTest.php b/assets/php/vendor/react/promise-timer/tests/TimeoutExceptionTest.php
deleted file mode 100755
index e9bedd9..0000000
--- a/assets/php/vendor/react/promise-timer/tests/TimeoutExceptionTest.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace React\Tests\Promise\Timer;
-
-use React\Promise\Timer\TimeoutException;
-
-class TimeoutExceptionTest extends TestCase
-{
- public function testAccessTimeout()
- {
- $e = new TimeoutException(10);
-
- $this->assertEquals(10, $e->getTimeout());
- }
-}
diff --git a/assets/php/vendor/react/promise/.gitignore b/assets/php/vendor/react/promise/.gitignore
deleted file mode 100755
index 5241c60..0000000
--- a/assets/php/vendor/react/promise/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-composer.lock
-composer.phar
-phpunit.xml
-build/
-vendor/
diff --git a/assets/php/vendor/react/promise/.travis.yml b/assets/php/vendor/react/promise/.travis.yml
deleted file mode 100755
index 5d0c6ab..0000000
--- a/assets/php/vendor/react/promise/.travis.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-language: php
-
-php:
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - nightly
- - hhvm
-
-before_install:
- - composer self-update
-
-install:
- - composer install
-
-script:
- - ./vendor/bin/phpunit -v --coverage-text --coverage-clover=./build/logs/clover.xml
-
-after_script:
- - if [ -f ./build/logs/clover.xml ]; then travis_retry composer require satooshi/php-coveralls --no-interaction --update-with-dependencies; fi
- - if [ -f ./build/logs/clover.xml ]; then php vendor/bin/coveralls -v; fi
diff --git a/assets/php/vendor/react/promise/CHANGELOG.md b/assets/php/vendor/react/promise/CHANGELOG.md
deleted file mode 100755
index 484e542..0000000
--- a/assets/php/vendor/react/promise/CHANGELOG.md
+++ /dev/null
@@ -1,96 +0,0 @@
-CHANGELOG for 2.x
-=================
-
-* 2.5.1 (2017-03-25)
-
- * Fix circular references when resolving with a promise which follows
- itself (#94).
-
-* 2.5.0 (2016-12-22)
-
- * Revert automatic cancellation of pending collection promises once the
- output promise resolves. This was introduced in 42d86b7 (PR #36, released
- in [v2.3.0](https://github.com/reactphp/promise/releases/tag/v2.3.0)) and
- was both unintended and backward incompatible.
-
- If you need automatic cancellation, you can use something like:
-
- ```php
- function allAndCancel(array $promises)
- {
- return \React\Promise\all($promises)
- ->always(function() use ($promises) {
- foreach ($promises as $promise) {
- if ($promise instanceof \React\Promise\CancellablePromiseInterface) {
- $promise->cancel();
- }
- }
- });
- }
- ```
- * `all()` and `map()` functions now preserve the order of the array (#77).
- * Fix circular references when resolving a promise with itself (#71).
-
-* 2.4.1 (2016-05-03)
-
- * Fix `some()` not cancelling pending promises when too much input promises
- reject (16ff799).
-
-* 2.4.0 (2016-03-31)
-
- * Support foreign thenables in `resolve()`.
- Any object that provides a `then()` method is now assimilated to a trusted
- promise that follows the state of this thenable (#52).
- * Fix `some()` and `any()` for input arrays containing not enough items
- (#34).
-
-* 2.3.0 (2016-03-24)
-
- * Allow cancellation of promises returned by functions working on promise
- collections (#36).
- * Handle `\Throwable` in the same way as `\Exception` (#51 by @joshdifabio).
-
-* 2.2.2 (2016-02-26)
-
- * Fix cancellation handlers called multiple times (#47 by @clue).
-
-* 2.2.1 (2015-07-03)
-
- * Fix stack error when resolving a promise in its own fulfillment or
- rejection handlers.
-
-* 2.2.0 (2014-12-30)
-
- * Introduce new `ExtendedPromiseInterface` implemented by all promises.
- * Add new `done()` method (part of the `ExtendedPromiseInterface`).
- * Add new `otherwise()` method (part of the `ExtendedPromiseInterface`).
- * Add new `always()` method (part of the `ExtendedPromiseInterface`).
- * Add new `progress()` method (part of the `ExtendedPromiseInterface`).
- * Rename `Deferred::progress` to `Deferred::notify` to avoid confusion with
- `ExtendedPromiseInterface::progress` (a `Deferred::progress` alias is
- still available for backward compatibility)
- * `resolve()` now always returns a `ExtendedPromiseInterface`.
-
-* 2.1.0 (2014-10-15)
-
- * Introduce new `CancellablePromiseInterface` implemented by all promises.
- * Add new `cancel()` method (part of the `CancellablePromiseInterface`).
-
-* 2.0.0 (2013-12-10)
-
- New major release. The goal is to streamline the API and to make it more
- compliant with other promise libraries and especially with the new upcoming
- [ES6 promises specification](https://github.com/domenic/promises-unwrapping/).
-
- * Add standalone Promise class.
- * Add new `race()` function.
- * BC break: Bump minimum PHP version to PHP 5.4.
- * BC break: Remove `ResolverInterface` and `PromiseInterface` from
- `Deferred`.
- * BC break: Change signature of `PromiseInterface`.
- * BC break: Remove `When` and `Util` classes and move static methods to
- functions.
- * BC break: `FulfilledPromise` and `RejectedPromise` now throw an exception
- when initialized with a promise instead of a value/reason.
- * BC break: `Deferred::resolve()` and `Deferred::reject()` no longer return
- a promise.
diff --git a/assets/php/vendor/react/promise/LICENSE b/assets/php/vendor/react/promise/LICENSE
deleted file mode 100755
index 5919d20..0000000
--- a/assets/php/vendor/react/promise/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright (c) 2012-2016 Jan Sorgalla
-
-Permission is hereby granted, free of charge, to any person
-obtaining a copy of this software and associated documentation
-files (the "Software"), to deal in the Software without
-restriction, including without limitation the rights to use,
-copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following
-conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
diff --git a/assets/php/vendor/react/promise/README.md b/assets/php/vendor/react/promise/README.md
deleted file mode 100755
index 9c0558c..0000000
--- a/assets/php/vendor/react/promise/README.md
+++ /dev/null
@@ -1,840 +0,0 @@
-React/Promise
-=============
-
-A lightweight implementation of
-[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
-
-[![Build Status](https://travis-ci.org/reactphp/promise.svg?branch=master)](http://travis-ci.org/reactphp/promise)
-[![Coverage Status](https://coveralls.io/repos/github/reactphp/promise/badge.svg?branch=master)](https://coveralls.io/github/reactphp/promise?branch=master)
-
-Table of Contents
------------------
-
-1. [Introduction](#introduction)
-2. [Concepts](#concepts)
- * [Deferred](#deferred)
- * [Promise](#promise)
-3. [API](#api)
- * [Deferred](#deferred-1)
- * [Deferred::promise()](#deferredpromise)
- * [Deferred::resolve()](#deferredresolve)
- * [Deferred::reject()](#deferredreject)
- * [Deferred::notify()](#deferrednotify)
- * [PromiseInterface](#promiseinterface)
- * [PromiseInterface::then()](#promiseinterfacethen)
- * [ExtendedPromiseInterface](#extendedpromiseinterface)
- * [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone)
- * [ExtendedPromiseInterface::otherwise()](#extendedpromiseinterfaceotherwise)
- * [ExtendedPromiseInterface::always()](#extendedpromiseinterfacealways)
- * [ExtendedPromiseInterface::progress()](#extendedpromiseinterfaceprogress)
- * [CancellablePromiseInterface](#cancellablepromiseinterface)
- * [CancellablePromiseInterface::cancel()](#cancellablepromiseinterfacecancel)
- * [Promise](#promise-1)
- * [FulfilledPromise](#fulfilledpromise)
- * [RejectedPromise](#rejectedpromise)
- * [LazyPromise](#lazypromise)
- * [Functions](#functions)
- * [resolve()](#resolve)
- * [reject()](#reject)
- * [all()](#all)
- * [race()](#race)
- * [any()](#any)
- * [some()](#some)
- * [map()](#map)
- * [reduce()](#reduce)
- * [PromisorInterface](#promisorinterface)
-4. [Examples](#examples)
- * [How to use Deferred](#how-to-use-deferred)
- * [How promise forwarding works](#how-promise-forwarding-works)
- * [Resolution forwarding](#resolution-forwarding)
- * [Rejection forwarding](#rejection-forwarding)
- * [Mixed resolution and rejection forwarding](#mixed-resolution-and-rejection-forwarding)
- * [Progress event forwarding](#progress-event-forwarding)
- * [done() vs. then()](#done-vs-then)
-5. [Credits](#credits)
-6. [License](#license)
-
-Introduction
-------------
-
-React/Promise is a library implementing
-[CommonJS Promises/A](http://wiki.commonjs.org/wiki/Promises/A) for PHP.
-
-It also provides several other useful promise-related concepts, such as joining
-multiple promises and mapping and reducing collections of promises.
-
-If you've never heard about promises before,
-[read this first](https://gist.github.com/3889970).
-
-Concepts
---------
-
-### Deferred
-
-A **Deferred** represents a computation or unit of work that may not have
-completed yet. Typically (but not always), that computation will be something
-that executes asynchronously and completes at some point in the future.
-
-### Promise
-
-While a deferred represents the computation itself, a **Promise** represents
-the result of that computation. Thus, each deferred has a promise that acts as
-a placeholder for its actual result.
-
-API
----
-
-### Deferred
-
-A deferred represents an operation whose resolution is pending. It has separate
-promise and resolver parts.
-
-```php
-$deferred = new React\Promise\Deferred();
-
-$promise = $deferred->promise();
-
-$deferred->resolve(mixed $value = null);
-$deferred->reject(mixed $reason = null);
-$deferred->notify(mixed $update = null);
-```
-
-The `promise` method returns the promise of the deferred.
-
-The `resolve` and `reject` methods control the state of the deferred.
-
-The `notify` method is for progress notification.
-
-The constructor of the `Deferred` accepts an optional `$canceller` argument.
-See [Promise](#promise-1) for more information.
-
-#### Deferred::promise()
-
-```php
-$promise = $deferred->promise();
-```
-
-Returns the promise of the deferred, which you can hand out to others while
-keeping the authority to modify its state to yourself.
-
-#### Deferred::resolve()
-
-```php
-$deferred->resolve(mixed $value = null);
-```
-
-Resolves the promise returned by `promise()`. All consumers are notified by
-having `$onFulfilled` (which they registered via `$promise->then()`) called with
-`$value`.
-
-If `$value` itself is a promise, the promise will transition to the state of
-this promise once it is resolved.
-
-#### Deferred::reject()
-
-```php
-$deferred->reject(mixed $reason = null);
-```
-
-Rejects the promise returned by `promise()`, signalling that the deferred's
-computation failed.
-All consumers are notified by having `$onRejected` (which they registered via
-`$promise->then()`) called with `$reason`.
-
-If `$reason` itself is a promise, the promise will be rejected with the outcome
-of this promise regardless whether it fulfills or rejects.
-
-#### Deferred::notify()
-
-```php
-$deferred->notify(mixed $update = null);
-```
-
-Triggers progress notifications, to indicate to consumers that the computation
-is making progress toward its result.
-
-All consumers are notified by having `$onProgress` (which they registered via
-`$promise->then()`) called with `$update`.
-
-### PromiseInterface
-
-The promise interface provides the common interface for all promise
-implementations.
-
-A promise represents an eventual outcome, which is either fulfillment (success)
-and an associated value, or rejection (failure) and an associated reason.
-
-Once in the fulfilled or rejected state, a promise becomes immutable.
-Neither its state nor its result (or error) can be modified.
-
-#### Implementations
-
-* [Promise](#promise-1)
-* [FulfilledPromise](#fulfilledpromise)
-* [RejectedPromise](#rejectedpromise)
-* [LazyPromise](#lazypromise)
-
-#### PromiseInterface::then()
-
-```php
-$transformedPromise = $promise->then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
-```
-
-Transforms a promise's value by applying a function to the promise's fulfillment
-or rejection value. Returns a new promise for the transformed result.
-
-The `then()` method registers new fulfilled, rejection and progress handlers
-with a promise (all parameters are optional):
-
- * `$onFulfilled` will be invoked once the promise is fulfilled and passed
- the result as the first argument.
- * `$onRejected` will be invoked once the promise is rejected and passed the
- reason as the first argument.
- * `$onProgress` will be invoked whenever the producer of the promise
- triggers progress notifications and passed a single argument (whatever it
- wants) to indicate progress.
-
-It returns a new promise that will fulfill with the return value of either
-`$onFulfilled` or `$onRejected`, whichever is called, or will reject with
-the thrown exception if either throws.
-
-A promise makes the following guarantees about handlers registered in
-the same call to `then()`:
-
- 1. Only one of `$onFulfilled` or `$onRejected` will be called,
- never both.
- 2. `$onFulfilled` and `$onRejected` will never be called more
- than once.
- 3. `$onProgress` may be called multiple times.
-
-#### See also
-
-* [resolve()](#resolve) - Creating a resolved promise
-* [reject()](#reject) - Creating a rejected promise
-* [ExtendedPromiseInterface::done()](#extendedpromiseinterfacedone)
-* [done() vs. then()](#done-vs-then)
-
-### ExtendedPromiseInterface
-
-The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut
-and utility methods which are not part of the Promises/A specification.
-
-#### Implementations
-
-* [Promise](#promise-1)
-* [FulfilledPromise](#fulfilledpromise)
-* [RejectedPromise](#rejectedpromise)
-* [LazyPromise](#lazypromise)
-
-#### ExtendedPromiseInterface::done()
-
-```php
-$promise->done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
-```
-
-Consumes the promise's ultimate value if the promise fulfills, or handles the
-ultimate error.
-
-It will cause a fatal error if either `$onFulfilled` or `$onRejected` throw or
-return a rejected promise.
-
-Since the purpose of `done()` is consumption rather than transformation,
-`done()` always returns `null`.
-
-#### See also
-
-* [PromiseInterface::then()](#promiseinterfacethen)
-* [done() vs. then()](#done-vs-then)
-
-#### ExtendedPromiseInterface::otherwise()
-
-```php
-$promise->otherwise(callable $onRejected);
-```
-
-Registers a rejection handler for promise. It is a shortcut for:
-
-```php
-$promise->then(null, $onRejected);
-```
-
-Additionally, you can type hint the `$reason` argument of `$onRejected` to catch
-only specific errors.
-
-```php
-$promise
- ->otherwise(function (\RuntimeException $reason) {
- // Only catch \RuntimeException instances
- // All other types of errors will propagate automatically
- })
- ->otherwise(function ($reason) {
- // Catch other errors
- )};
-```
-
-#### ExtendedPromiseInterface::always()
-
-```php
-$newPromise = $promise->always(callable $onFulfilledOrRejected);
-```
-
-Allows you to execute "cleanup" type tasks in a promise chain.
-
-It arranges for `$onFulfilledOrRejected` to be called, with no arguments,
-when the promise is either fulfilled or rejected.
-
-* If `$promise` fulfills, and `$onFulfilledOrRejected` returns successfully,
- `$newPromise` will fulfill with the same value as `$promise`.
-* If `$promise` fulfills, and `$onFulfilledOrRejected` throws or returns a
- rejected promise, `$newPromise` will reject with the thrown exception or
- rejected promise's reason.
-* If `$promise` rejects, and `$onFulfilledOrRejected` returns successfully,
- `$newPromise` will reject with the same reason as `$promise`.
-* If `$promise` rejects, and `$onFulfilledOrRejected` throws or returns a
- rejected promise, `$newPromise` will reject with the thrown exception or
- rejected promise's reason.
-
-`always()` behaves similarly to the synchronous finally statement. When combined
-with `otherwise()`, `always()` allows you to write code that is similar to the familiar
-synchronous catch/finally pair.
-
-Consider the following synchronous code:
-
-```php
-try {
- return doSomething();
-} catch(\Exception $e) {
- return handleError($e);
-} finally {
- cleanup();
-}
-```
-
-Similar asynchronous code (with `doSomething()` that returns a promise) can be
-written:
-
-```php
-return doSomething()
- ->otherwise('handleError')
- ->always('cleanup');
-```
-
-#### ExtendedPromiseInterface::progress()
-
-```php
-$promise->progress(callable $onProgress);
-```
-
-Registers a handler for progress updates from promise. It is a shortcut for:
-
-```php
-$promise->then(null, null, $onProgress);
-```
-
-### CancellablePromiseInterface
-
-A cancellable promise provides a mechanism for consumers to notify the creator
-of the promise that they are not longer interested in the result of an
-operation.
-
-#### CancellablePromiseInterface::cancel()
-
-``` php
-$promise->cancel();
-```
-
-The `cancel()` method notifies the creator of the promise that there is no
-further interest in the results of the operation.
-
-Once a promise is settled (either fulfilled or rejected), calling `cancel()` on
-a promise has no effect.
-
-#### Implementations
-
-* [Promise](#promise-1)
-* [FulfilledPromise](#fulfilledpromise)
-* [RejectedPromise](#rejectedpromise)
-* [LazyPromise](#lazypromise)
-
-### Promise
-
-Creates a promise whose state is controlled by the functions passed to
-`$resolver`.
-
-```php
-$resolver = function (callable $resolve, callable $reject, callable $notify) {
- // Do some work, possibly asynchronously, and then
- // resolve or reject. You can notify of progress events
- // along the way if you want/need.
-
- $resolve($awesomeResult);
- // or $resolve($anotherPromise);
- // or $reject($nastyError);
- // or $notify($progressNotification);
-};
-
-$canceller = function (callable $resolve, callable $reject, callable $progress) {
- // Cancel/abort any running operations like network connections, streams etc.
-
- $reject(new \Exception('Promise cancelled'));
-};
-
-$promise = new React\Promise\Promise($resolver, $canceller);
-```
-
-The promise constructor receives a resolver function and an optional canceller
-function which both will be called with 3 arguments:
-
- * `$resolve($value)` - Primary function that seals the fate of the
- returned promise. Accepts either a non-promise value, or another promise.
- When called with a non-promise value, fulfills promise with that value.
- When called with another promise, e.g. `$resolve($otherPromise)`, promise's
- fate will be equivalent to that of `$otherPromise`.
- * `$reject($reason)` - Function that rejects the promise.
- * `$notify($update)` - Function that issues progress events for the promise.
-
-If the resolver or canceller throw an exception, the promise will be rejected
-with that thrown exception as the rejection reason.
-
-The resolver function will be called immediately, the canceller function only
-once all consumers called the `cancel()` method of the promise.
-
-### FulfilledPromise
-
-Creates a already fulfilled promise.
-
-```php
-$promise = React\Promise\FulfilledPromise($value);
-```
-
-Note, that `$value` **cannot** be a promise. It's recommended to use
-[resolve()](#resolve) for creating resolved promises.
-
-### RejectedPromise
-
-Creates a already rejected promise.
-
-```php
-$promise = React\Promise\RejectedPromise($reason);
-```
-
-Note, that `$reason` **cannot** be a promise. It's recommended to use
-[reject()](#reject) for creating rejected promises.
-
-### LazyPromise
-
-Creates a promise which will be lazily initialized by `$factory` once a consumer
-calls the `then()` method.
-
-```php
-$factory = function () {
- $deferred = new React\Promise\Deferred();
-
- // Do some heavy stuff here and resolve the deferred once completed
-
- return $deferred->promise();
-};
-
-$promise = React\Promise\LazyPromise($factory);
-
-// $factory will only be executed once we call then()
-$promise->then(function ($value) {
-});
-```
-
-### Functions
-
-Useful functions for creating, joining, mapping and reducing collections of
-promises.
-
-All functions working on promise collections (like `all()`, `race()`, `some()`
-etc.) support cancellation. This means, if you call `cancel()` on the returned
-promise, all promises in the collection are cancelled. If the collection itself
-is a promise which resolves to an array, this promise is also cancelled.
-
-#### resolve()
-
-```php
-$promise = React\Promise\resolve(mixed $promiseOrValue);
-```
-
-Creates a promise for the supplied `$promiseOrValue`.
-
-If `$promiseOrValue` is a value, it will be the resolution value of the
-returned promise.
-
-If `$promiseOrValue` is a thenable (any object that provides a `then()` method),
-a trusted promise that follows the state of the thenable is returned.
-
-If `$promiseOrValue` is a promise, it will be returned as is.
-
-Note: The promise returned is always a promise implementing
-[ExtendedPromiseInterface](#extendedpromiseinterface). If you pass in a custom
-promise which only implements [PromiseInterface](#promiseinterface), this
-promise will be assimilated to a extended promise following `$promiseOrValue`.
-
-#### reject()
-
-```php
-$promise = React\Promise\reject(mixed $promiseOrValue);
-```
-
-Creates a rejected promise for the supplied `$promiseOrValue`.
-
-If `$promiseOrValue` is a value, it will be the rejection value of the
-returned promise.
-
-If `$promiseOrValue` is a promise, its completion value will be the rejected
-value of the returned promise.
-
-This can be useful in situations where you need to reject a promise without
-throwing an exception. For example, it allows you to propagate a rejection with
-the value of another promise.
-
-#### all()
-
-```php
-$promise = React\Promise\all(array|React\Promise\PromiseInterface $promisesOrValues);
-```
-
-Returns a promise that will resolve only once all the items in
-`$promisesOrValues` have resolved. The resolution value of the returned promise
-will be an array containing the resolution values of each of the items in
-`$promisesOrValues`.
-
-#### race()
-
-```php
-$promise = React\Promise\race(array|React\Promise\PromiseInterface $promisesOrValues);
-```
-
-Initiates a competitive race that allows one winner. Returns a promise which is
-resolved in the same way the first settled promise resolves.
-
-#### any()
-
-```php
-$promise = React\Promise\any(array|React\Promise\PromiseInterface $promisesOrValues);
-```
-
-Returns a promise that will resolve when any one of the items in
-`$promisesOrValues` resolves. The resolution value of the returned promise
-will be the resolution value of the triggering item.
-
-The returned promise will only reject if *all* items in `$promisesOrValues` are
-rejected. The rejection value will be an array of all rejection reasons.
-
-The returned promise will also reject with a `React\Promise\Exception\LengthException`
-if `$promisesOrValues` contains 0 items.
-
-#### some()
-
-```php
-$promise = React\Promise\some(array|React\Promise\PromiseInterface $promisesOrValues, integer $howMany);
-```
-
-Returns a promise that will resolve when `$howMany` of the supplied items in
-`$promisesOrValues` resolve. The resolution value of the returned promise
-will be an array of length `$howMany` containing the resolution values of the
-triggering items.
-
-The returned promise will reject if it becomes impossible for `$howMany` items
-to resolve (that is, when `(count($promisesOrValues) - $howMany) + 1` items
-reject). The rejection value will be an array of
-`(count($promisesOrValues) - $howMany) + 1` rejection reasons.
-
-The returned promise will also reject with a `React\Promise\Exception\LengthException`
-if `$promisesOrValues` contains less items than `$howMany`.
-
-#### map()
-
-```php
-$promise = React\Promise\map(array|React\Promise\PromiseInterface $promisesOrValues, callable $mapFunc);
-```
-
-Traditional map function, similar to `array_map()`, but allows input to contain
-promises and/or values, and `$mapFunc` may return either a value or a promise.
-
-The map function receives each item as argument, where item is a fully resolved
-value of a promise or value in `$promisesOrValues`.
-
-#### reduce()
-
-```php
-$promise = React\Promise\reduce(array|React\Promise\PromiseInterface $promisesOrValues, callable $reduceFunc , $initialValue = null);
-```
-
-Traditional reduce function, similar to `array_reduce()`, but input may contain
-promises and/or values, and `$reduceFunc` may return either a value or a
-promise, *and* `$initialValue` may be a promise or a value for the starting
-value.
-
-### PromisorInterface
-
-The `React\Promise\PromisorInterface` provides a common interface for objects
-that provide a promise. `React\Promise\Deferred` implements it, but since it
-is part of the public API anyone can implement it.
-
-Examples
---------
-
-### How to use Deferred
-
-```php
-function getAwesomeResultPromise()
-{
- $deferred = new React\Promise\Deferred();
-
- // Execute a Node.js-style function using the callback pattern
- computeAwesomeResultAsynchronously(function ($error, $result) use ($deferred) {
- if ($error) {
- $deferred->reject($error);
- } else {
- $deferred->resolve($result);
- }
- });
-
- // Return the promise
- return $deferred->promise();
-}
-
-getAwesomeResultPromise()
- ->then(
- function ($value) {
- // Deferred resolved, do something with $value
- },
- function ($reason) {
- // Deferred rejected, do something with $reason
- },
- function ($update) {
- // Progress notification triggered, do something with $update
- }
- );
-```
-
-### How promise forwarding works
-
-A few simple examples to show how the mechanics of Promises/A forwarding works.
-These examples are contrived, of course, and in real usage, promise chains will
-typically be spread across several function calls, or even several levels of
-your application architecture.
-
-#### Resolution forwarding
-
-Resolved promises forward resolution values to the next promise.
-The first promise, `$deferred->promise()`, will resolve with the value passed
-to `$deferred->resolve()` below.
-
-Each call to `then()` returns a new promise that will resolve with the return
-value of the previous handler. This creates a promise "pipeline".
-
-```php
-$deferred = new React\Promise\Deferred();
-
-$deferred->promise()
- ->then(function ($x) {
- // $x will be the value passed to $deferred->resolve() below
- // and returns a *new promise* for $x + 1
- return $x + 1;
- })
- ->then(function ($x) {
- // $x === 2
- // This handler receives the return value of the
- // previous handler.
- return $x + 1;
- })
- ->then(function ($x) {
- // $x === 3
- // This handler receives the return value of the
- // previous handler.
- return $x + 1;
- })
- ->then(function ($x) {
- // $x === 4
- // This handler receives the return value of the
- // previous handler.
- echo 'Resolve ' . $x;
- });
-
-$deferred->resolve(1); // Prints "Resolve 4"
-```
-
-#### Rejection forwarding
-
-Rejected promises behave similarly, and also work similarly to try/catch:
-When you catch an exception, you must rethrow for it to propagate.
-
-Similarly, when you handle a rejected promise, to propagate the rejection,
-"rethrow" it by either returning a rejected promise, or actually throwing
-(since promise translates thrown exceptions into rejections)
-
-```php
-$deferred = new React\Promise\Deferred();
-
-$deferred->promise()
- ->then(function ($x) {
- throw new \Exception($x + 1);
- })
- ->otherwise(function (\Exception $x) {
- // Propagate the rejection
- throw $x;
- })
- ->otherwise(function (\Exception $x) {
- // Can also propagate by returning another rejection
- return React\Promise\reject(
- new \Exception($x->getMessage() + 1)
- );
- })
- ->otherwise(function ($x) {
- echo 'Reject ' . $x->getMessage(); // 3
- });
-
-$deferred->resolve(1); // Prints "Reject 3"
-```
-
-#### Mixed resolution and rejection forwarding
-
-Just like try/catch, you can choose to propagate or not. Mixing resolutions and
-rejections will still forward handler results in a predictable way.
-
-```php
-$deferred = new React\Promise\Deferred();
-
-$deferred->promise()
- ->then(function ($x) {
- return $x + 1;
- })
- ->then(function ($x) {
- throw new \Exception($x + 1);
- })
- ->otherwise(function (\Exception $x) {
- // Handle the rejection, and don't propagate.
- // This is like catch without a rethrow
- return $x->getMessage() + 1;
- })
- ->then(function ($x) {
- echo 'Mixed ' . $x; // 4
- });
-
-$deferred->resolve(1); // Prints "Mixed 4"
-```
-
-#### Progress event forwarding
-
-In the same way as resolution and rejection handlers, your progress handler
-**MUST** return a progress event to be propagated to the next link in the chain.
-If you return nothing, `null` will be propagated.
-
-Also in the same way as resolutions and rejections, if you don't register a
-progress handler, the update will be propagated through.
-
-If your progress handler throws an exception, the exception will be propagated
-to the next link in the chain. The best thing to do is to ensure your progress
-handlers do not throw exceptions.
-
-This gives you the opportunity to transform progress events at each step in the
-chain so that they are meaningful to the next step. It also allows you to choose
-not to transform them, and simply let them propagate untransformed, by not
-registering a progress handler.
-
-```php
-$deferred = new React\Promise\Deferred();
-
-$deferred->promise()
- ->progress(function ($update) {
- return $update + 1;
- })
- ->progress(function ($update) {
- echo 'Progress ' . $update; // 2
- });
-
-$deferred->notify(1); // Prints "Progress 2"
-```
-
-### done() vs. then()
-
-The golden rule is:
-
- Either return your promise, or call done() on it.
-
-At a first glance, `then()` and `done()` seem very similar. However, there are
-important distinctions.
-
-The intent of `then()` is to transform a promise's value and to pass or return
-a new promise for the transformed value along to other parts of your code.
-
-The intent of `done()` is to consume a promise's value, transferring
-responsibility for the value to your code.
-
-In addition to transforming a value, `then()` allows you to recover from, or
-propagate intermediate errors. Any errors that are not handled will be caught
-by the promise machinery and used to reject the promise returned by `then()`.
-
-Calling `done()` transfers all responsibility for errors to your code. If an
-error (either a thrown exception or returned rejection) escapes the
-`$onFulfilled` or `$onRejected` callbacks you provide to done, it will be
-rethrown in an uncatchable way causing a fatal error.
-
-```php
-function getJsonResult()
-{
- return queryApi()
- ->then(
- // Transform API results to an object
- function ($jsonResultString) {
- return json_decode($jsonResultString);
- },
- // Transform API errors to an exception
- function ($jsonErrorString) {
- $object = json_decode($jsonErrorString);
- throw new ApiErrorException($object->errorMessage);
- }
- );
-}
-
-// Here we provide no rejection handler. If the promise returned has been
-// rejected, the ApiErrorException will be thrown
-getJsonResult()
- ->done(
- // Consume transformed object
- function ($jsonResultObject) {
- // Do something with $jsonResultObject
- }
- );
-
-// Here we provide a rejection handler which will either throw while debugging
-// or log the exception
-getJsonResult()
- ->done(
- function ($jsonResultObject) {
- // Do something with $jsonResultObject
- },
- function (ApiErrorException $exception) {
- if (isDebug()) {
- throw $exception;
- } else {
- logException($exception);
- }
- }
- );
-```
-
-Note that if a rejection value is not an instance of `\Exception`, it will be
-wrapped in an exception of the type `React\Promise\UnhandledRejectionException`.
-
-You can get the original rejection reason by calling `$exception->getReason()`.
-
-Credits
--------
-
-React/Promise is a port of [when.js](https://github.com/cujojs/when)
-by [Brian Cavalier](https://github.com/briancavalier).
-
-Also, large parts of the documentation have been ported from the when.js
-[Wiki](https://github.com/cujojs/when/wiki) and the
-[API docs](https://github.com/cujojs/when/blob/master/docs/api.md).
-
-License
--------
-
-React/Promise is released under the [MIT](https://github.com/reactphp/promise/blob/master/LICENSE) license.
diff --git a/assets/php/vendor/react/promise/composer.json b/assets/php/vendor/react/promise/composer.json
deleted file mode 100755
index 2fc4809..0000000
--- a/assets/php/vendor/react/promise/composer.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "react/promise",
- "description": "A lightweight implementation of CommonJS Promises/A for PHP",
- "license": "MIT",
- "authors": [
- {"name": "Jan Sorgalla", "email": "jsorgalla@gmail.com"}
- ],
- "require": {
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8"
- },
- "autoload": {
- "psr-4": {
- "React\\Promise\\": "src/"
- },
- "files": ["src/functions_include.php"]
- },
- "autoload-dev": {
- "psr-4": {
- "React\\Promise\\": "tests/fixtures"
- }
- },
- "keywords": [
- "promise",
- "promises"
- ]
-}
diff --git a/assets/php/vendor/react/promise/phpunit.xml.dist b/assets/php/vendor/react/promise/phpunit.xml.dist
deleted file mode 100755
index b9a689d..0000000
--- a/assets/php/vendor/react/promise/phpunit.xml.dist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false"
- bootstrap="tests/bootstrap.php"
->
- <testsuites>
- <testsuite name="Promise Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- <exclude>
- <file>./src/functions_include.php</file>
- </exclude>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/promise/src/CancellablePromiseInterface.php b/assets/php/vendor/react/promise/src/CancellablePromiseInterface.php
deleted file mode 100755
index 896db2d..0000000
--- a/assets/php/vendor/react/promise/src/CancellablePromiseInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-interface CancellablePromiseInterface extends PromiseInterface
-{
- /**
- * @return void
- */
- public function cancel();
-}
diff --git a/assets/php/vendor/react/promise/src/CancellationQueue.php b/assets/php/vendor/react/promise/src/CancellationQueue.php
deleted file mode 100755
index a366994..0000000
--- a/assets/php/vendor/react/promise/src/CancellationQueue.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class CancellationQueue
-{
- private $started = false;
- private $queue = [];
-
- public function __invoke()
- {
- if ($this->started) {
- return;
- }
-
- $this->started = true;
- $this->drain();
- }
-
- public function enqueue($cancellable)
- {
- if (!method_exists($cancellable, 'then') || !method_exists($cancellable, 'cancel')) {
- return;
- }
-
- $length = array_push($this->queue, $cancellable);
-
- if ($this->started && 1 === $length) {
- $this->drain();
- }
- }
-
- private function drain()
- {
- for ($i = key($this->queue); isset($this->queue[$i]); $i++) {
- $cancellable = $this->queue[$i];
-
- $exception = null;
-
- try {
- $cancellable->cancel();
- } catch (\Throwable $exception) {
- } catch (\Exception $exception) {
- }
-
- unset($this->queue[$i]);
-
- if ($exception) {
- throw $exception;
- }
- }
-
- $this->queue = [];
- }
-}
diff --git a/assets/php/vendor/react/promise/src/Deferred.php b/assets/php/vendor/react/promise/src/Deferred.php
deleted file mode 100755
index f23980c..0000000
--- a/assets/php/vendor/react/promise/src/Deferred.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class Deferred implements PromisorInterface
-{
- private $promise;
- private $resolveCallback;
- private $rejectCallback;
- private $notifyCallback;
- private $canceller;
-
- public function __construct(callable $canceller = null)
- {
- $this->canceller = $canceller;
- }
-
- public function promise()
- {
- if (null === $this->promise) {
- $this->promise = new Promise(function ($resolve, $reject, $notify) {
- $this->resolveCallback = $resolve;
- $this->rejectCallback = $reject;
- $this->notifyCallback = $notify;
- }, $this->canceller);
- }
-
- return $this->promise;
- }
-
- public function resolve($value = null)
- {
- $this->promise();
-
- call_user_func($this->resolveCallback, $value);
- }
-
- public function reject($reason = null)
- {
- $this->promise();
-
- call_user_func($this->rejectCallback, $reason);
- }
-
- public function notify($update = null)
- {
- $this->promise();
-
- call_user_func($this->notifyCallback, $update);
- }
-
- /**
- * @deprecated 2.2.0
- * @see Deferred::notify()
- */
- public function progress($update = null)
- {
- $this->notify($update);
- }
-}
diff --git a/assets/php/vendor/react/promise/src/Exception/LengthException.php b/assets/php/vendor/react/promise/src/Exception/LengthException.php
deleted file mode 100755
index 775c48d..0000000
--- a/assets/php/vendor/react/promise/src/Exception/LengthException.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-namespace React\Promise\Exception;
-
-class LengthException extends \LengthException
-{
-}
diff --git a/assets/php/vendor/react/promise/src/ExtendedPromiseInterface.php b/assets/php/vendor/react/promise/src/ExtendedPromiseInterface.php
deleted file mode 100755
index 9cb6435..0000000
--- a/assets/php/vendor/react/promise/src/ExtendedPromiseInterface.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-interface ExtendedPromiseInterface extends PromiseInterface
-{
- /**
- * @return void
- */
- public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
-
- /**
- * @return ExtendedPromiseInterface
- */
- public function otherwise(callable $onRejected);
-
- /**
- * @return ExtendedPromiseInterface
- */
- public function always(callable $onFulfilledOrRejected);
-
- /**
- * @return ExtendedPromiseInterface
- */
- public function progress(callable $onProgress);
-}
diff --git a/assets/php/vendor/react/promise/src/FulfilledPromise.php b/assets/php/vendor/react/promise/src/FulfilledPromise.php
deleted file mode 100755
index 914bb5c..0000000
--- a/assets/php/vendor/react/promise/src/FulfilledPromise.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FulfilledPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
-{
- private $value;
-
- public function __construct($value = null)
- {
- if ($value instanceof PromiseInterface) {
- throw new \InvalidArgumentException('You cannot create React\Promise\FulfilledPromise with a promise. Use React\Promise\resolve($promiseOrValue) instead.');
- }
-
- $this->value = $value;
- }
-
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null === $onFulfilled) {
- return $this;
- }
-
- try {
- return resolve($onFulfilled($this->value));
- } catch (\Throwable $exception) {
- return new RejectedPromise($exception);
- } catch (\Exception $exception) {
- return new RejectedPromise($exception);
- }
- }
-
- public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null === $onFulfilled) {
- return;
- }
-
- $result = $onFulfilled($this->value);
-
- if ($result instanceof ExtendedPromiseInterface) {
- $result->done();
- }
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this;
- }
-
- public function always(callable $onFulfilledOrRejected)
- {
- return $this->then(function ($value) use ($onFulfilledOrRejected) {
- return resolve($onFulfilledOrRejected())->then(function () use ($value) {
- return $value;
- });
- });
- }
-
- public function progress(callable $onProgress)
- {
- return $this;
- }
-
- public function cancel()
- {
- }
-}
diff --git a/assets/php/vendor/react/promise/src/LazyPromise.php b/assets/php/vendor/react/promise/src/LazyPromise.php
deleted file mode 100755
index 7e3a3d3..0000000
--- a/assets/php/vendor/react/promise/src/LazyPromise.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class LazyPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
-{
- private $factory;
- private $promise;
-
- public function __construct(callable $factory)
- {
- $this->factory = $factory;
- }
-
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- return $this->promise()->then($onFulfilled, $onRejected, $onProgress);
- }
-
- public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- return $this->promise()->done($onFulfilled, $onRejected, $onProgress);
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->promise()->otherwise($onRejected);
- }
-
- public function always(callable $onFulfilledOrRejected)
- {
- return $this->promise()->always($onFulfilledOrRejected);
- }
-
- public function progress(callable $onProgress)
- {
- return $this->promise()->progress($onProgress);
- }
-
- public function cancel()
- {
- return $this->promise()->cancel();
- }
-
- /**
- * @internal
- * @see Promise::settle()
- */
- public function promise()
- {
- if (null === $this->promise) {
- try {
- $this->promise = resolve(call_user_func($this->factory));
- } catch (\Throwable $exception) {
- $this->promise = new RejectedPromise($exception);
- } catch (\Exception $exception) {
- $this->promise = new RejectedPromise($exception);
- }
- }
-
- return $this->promise;
- }
-}
diff --git a/assets/php/vendor/react/promise/src/Promise.php b/assets/php/vendor/react/promise/src/Promise.php
deleted file mode 100755
index 0261eb3..0000000
--- a/assets/php/vendor/react/promise/src/Promise.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class Promise implements ExtendedPromiseInterface, CancellablePromiseInterface
-{
- private $canceller;
- private $result;
-
- private $handlers = [];
- private $progressHandlers = [];
-
- private $requiredCancelRequests = 0;
- private $cancelRequests = 0;
-
- public function __construct(callable $resolver, callable $canceller = null)
- {
- $this->canceller = $canceller;
- $this->call($resolver);
- }
-
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null !== $this->result) {
- return $this->result->then($onFulfilled, $onRejected, $onProgress);
- }
-
- if (null === $this->canceller) {
- return new static($this->resolver($onFulfilled, $onRejected, $onProgress));
- }
-
- $this->requiredCancelRequests++;
-
- return new static($this->resolver($onFulfilled, $onRejected, $onProgress), function () {
- if (++$this->cancelRequests < $this->requiredCancelRequests) {
- return;
- }
-
- $this->cancel();
- });
- }
-
- public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null !== $this->result) {
- return $this->result->done($onFulfilled, $onRejected, $onProgress);
- }
-
- $this->handlers[] = function (ExtendedPromiseInterface $promise) use ($onFulfilled, $onRejected) {
- $promise
- ->done($onFulfilled, $onRejected);
- };
-
- if ($onProgress) {
- $this->progressHandlers[] = $onProgress;
- }
- }
-
- public function otherwise(callable $onRejected)
- {
- return $this->then(null, function ($reason) use ($onRejected) {
- if (!_checkTypehint($onRejected, $reason)) {
- return new RejectedPromise($reason);
- }
-
- return $onRejected($reason);
- });
- }
-
- public function always(callable $onFulfilledOrRejected)
- {
- return $this->then(function ($value) use ($onFulfilledOrRejected) {
- return resolve($onFulfilledOrRejected())->then(function () use ($value) {
- return $value;
- });
- }, function ($reason) use ($onFulfilledOrRejected) {
- return resolve($onFulfilledOrRejected())->then(function () use ($reason) {
- return new RejectedPromise($reason);
- });
- });
- }
-
- public function progress(callable $onProgress)
- {
- return $this->then(null, null, $onProgress);
- }
-
- public function cancel()
- {
- if (null === $this->canceller || null !== $this->result) {
- return;
- }
-
- $canceller = $this->canceller;
- $this->canceller = null;
-
- $this->call($canceller);
- }
-
- private function resolver(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- return function ($resolve, $reject, $notify) use ($onFulfilled, $onRejected, $onProgress) {
- if ($onProgress) {
- $progressHandler = function ($update) use ($notify, $onProgress) {
- try {
- $notify($onProgress($update));
- } catch (\Throwable $e) {
- $notify($e);
- } catch (\Exception $e) {
- $notify($e);
- }
- };
- } else {
- $progressHandler = $notify;
- }
-
- $this->handlers[] = function (ExtendedPromiseInterface $promise) use ($onFulfilled, $onRejected, $resolve, $reject, $progressHandler) {
- $promise
- ->then($onFulfilled, $onRejected)
- ->done($resolve, $reject, $progressHandler);
- };
-
- $this->progressHandlers[] = $progressHandler;
- };
- }
-
- private function resolve($value = null)
- {
- if (null !== $this->result) {
- return;
- }
-
- $this->settle(resolve($value));
- }
-
- private function reject($reason = null)
- {
- if (null !== $this->result) {
- return;
- }
-
- $this->settle(reject($reason));
- }
-
- private function notify($update = null)
- {
- if (null !== $this->result) {
- return;
- }
-
- foreach ($this->progressHandlers as $handler) {
- $handler($update);
- }
- }
-
- private function settle(ExtendedPromiseInterface $promise)
- {
- $promise = $this->unwrap($promise);
-
- $handlers = $this->handlers;
-
- $this->progressHandlers = $this->handlers = [];
- $this->result = $promise;
-
- foreach ($handlers as $handler) {
- $handler($promise);
- }
- }
-
- private function unwrap($promise)
- {
- $promise = $this->extract($promise);
-
- while ($promise instanceof self && null !== $promise->result) {
- $promise = $this->extract($promise->result);
- }
-
- return $promise;
- }
-
- private function extract($promise)
- {
- if ($promise instanceof LazyPromise) {
- $promise = $promise->promise();
- }
-
- if ($promise === $this) {
- return new RejectedPromise(
- new \LogicException('Cannot resolve a promise with itself.')
- );
- }
-
- return $promise;
- }
-
- private function call(callable $callback)
- {
- try {
- $callback(
- function ($value = null) {
- $this->resolve($value);
- },
- function ($reason = null) {
- $this->reject($reason);
- },
- function ($update = null) {
- $this->notify($update);
- }
- );
- } catch (\Throwable $e) {
- $this->reject($e);
- } catch (\Exception $e) {
- $this->reject($e);
- }
- }
-}
diff --git a/assets/php/vendor/react/promise/src/PromiseInterface.php b/assets/php/vendor/react/promise/src/PromiseInterface.php
deleted file mode 100755
index d80d114..0000000
--- a/assets/php/vendor/react/promise/src/PromiseInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-interface PromiseInterface
-{
- /**
- * @return PromiseInterface
- */
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
-}
diff --git a/assets/php/vendor/react/promise/src/PromisorInterface.php b/assets/php/vendor/react/promise/src/PromisorInterface.php
deleted file mode 100755
index 9341a4f..0000000
--- a/assets/php/vendor/react/promise/src/PromisorInterface.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-interface PromisorInterface
-{
- /**
- * @return PromiseInterface
- */
- public function promise();
-}
diff --git a/assets/php/vendor/react/promise/src/RejectedPromise.php b/assets/php/vendor/react/promise/src/RejectedPromise.php
deleted file mode 100755
index 479a746..0000000
--- a/assets/php/vendor/react/promise/src/RejectedPromise.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class RejectedPromise implements ExtendedPromiseInterface, CancellablePromiseInterface
-{
- private $reason;
-
- public function __construct($reason = null)
- {
- if ($reason instanceof PromiseInterface) {
- throw new \InvalidArgumentException('You cannot create React\Promise\RejectedPromise with a promise. Use React\Promise\reject($promiseOrValue) instead.');
- }
-
- $this->reason = $reason;
- }
-
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null === $onRejected) {
- return $this;
- }
-
- try {
- return resolve($onRejected($this->reason));
- } catch (\Throwable $exception) {
- return new RejectedPromise($exception);
- } catch (\Exception $exception) {
- return new RejectedPromise($exception);
- }
- }
-
- public function done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- if (null === $onRejected) {
- throw UnhandledRejectionException::resolve($this->reason);
- }
-
- $result = $onRejected($this->reason);
-
- if ($result instanceof self) {
- throw UnhandledRejectionException::resolve($result->reason);
- }
-
- if ($result instanceof ExtendedPromiseInterface) {
- $result->done();
- }
- }
-
- public function otherwise(callable $onRejected)
- {
- if (!_checkTypehint($onRejected, $this->reason)) {
- return $this;
- }
-
- return $this->then(null, $onRejected);
- }
-
- public function always(callable $onFulfilledOrRejected)
- {
- return $this->then(null, function ($reason) use ($onFulfilledOrRejected) {
- return resolve($onFulfilledOrRejected())->then(function () use ($reason) {
- return new RejectedPromise($reason);
- });
- });
- }
-
- public function progress(callable $onProgress)
- {
- return $this;
- }
-
- public function cancel()
- {
- }
-}
diff --git a/assets/php/vendor/react/promise/src/UnhandledRejectionException.php b/assets/php/vendor/react/promise/src/UnhandledRejectionException.php
deleted file mode 100755
index a44b7a1..0000000
--- a/assets/php/vendor/react/promise/src/UnhandledRejectionException.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class UnhandledRejectionException extends \RuntimeException
-{
- private $reason;
-
- public static function resolve($reason)
- {
- if ($reason instanceof \Exception || $reason instanceof \Throwable) {
- return $reason;
- }
-
- return new static($reason);
- }
-
- public function __construct($reason)
- {
- $this->reason = $reason;
-
- $message = sprintf('Unhandled Rejection: %s', json_encode($reason));
-
- parent::__construct($message, 0);
- }
-
- public function getReason()
- {
- return $this->reason;
- }
-}
diff --git a/assets/php/vendor/react/promise/src/functions.php b/assets/php/vendor/react/promise/src/functions.php
deleted file mode 100755
index 70c0eb7..0000000
--- a/assets/php/vendor/react/promise/src/functions.php
+++ /dev/null
@@ -1,244 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-function resolve($promiseOrValue = null)
-{
- if ($promiseOrValue instanceof ExtendedPromiseInterface) {
- return $promiseOrValue;
- }
-
- if (method_exists($promiseOrValue, 'then')) {
- $canceller = null;
-
- if (method_exists($promiseOrValue, 'cancel')) {
- $canceller = [$promiseOrValue, 'cancel'];
- }
-
- return new Promise(function ($resolve, $reject, $notify) use ($promiseOrValue) {
- $promiseOrValue->then($resolve, $reject, $notify);
- }, $canceller);
- }
-
- return new FulfilledPromise($promiseOrValue);
-}
-
-function reject($promiseOrValue = null)
-{
- if ($promiseOrValue instanceof PromiseInterface) {
- return resolve($promiseOrValue)->then(function ($value) {
- return new RejectedPromise($value);
- });
- }
-
- return new RejectedPromise($promiseOrValue);
-}
-
-function all($promisesOrValues)
-{
- return map($promisesOrValues, function ($val) {
- return $val;
- });
-}
-
-function race($promisesOrValues)
-{
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($promisesOrValues);
-
- return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $cancellationQueue) {
- resolve($promisesOrValues)
- ->done(function ($array) use ($cancellationQueue, $resolve, $reject, $notify) {
- if (!is_array($array) || !$array) {
- $resolve();
- return;
- }
-
- foreach ($array as $promiseOrValue) {
- $cancellationQueue->enqueue($promiseOrValue);
-
- resolve($promiseOrValue)
- ->done($resolve, $reject, $notify);
- }
- }, $reject, $notify);
- }, $cancellationQueue);
-}
-
-function any($promisesOrValues)
-{
- return some($promisesOrValues, 1)
- ->then(function ($val) {
- return array_shift($val);
- });
-}
-
-function some($promisesOrValues, $howMany)
-{
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($promisesOrValues);
-
- return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $howMany, $cancellationQueue) {
- resolve($promisesOrValues)
- ->done(function ($array) use ($howMany, $cancellationQueue, $resolve, $reject, $notify) {
- if (!is_array($array) || $howMany < 1) {
- $resolve([]);
- return;
- }
-
- $len = count($array);
-
- if ($len < $howMany) {
- throw new Exception\LengthException(
- sprintf(
- 'Input array must contain at least %d item%s but contains only %s item%s.',
- $howMany,
- 1 === $howMany ? '' : 's',
- $len,
- 1 === $len ? '' : 's'
- )
- );
- }
-
- $toResolve = $howMany;
- $toReject = ($len - $toResolve) + 1;
- $values = [];
- $reasons = [];
-
- foreach ($array as $i => $promiseOrValue) {
- $fulfiller = function ($val) use ($i, &$values, &$toResolve, $toReject, $resolve) {
- if ($toResolve < 1 || $toReject < 1) {
- return;
- }
-
- $values[$i] = $val;
-
- if (0 === --$toResolve) {
- $resolve($values);
- }
- };
-
- $rejecter = function ($reason) use ($i, &$reasons, &$toReject, $toResolve, $reject) {
- if ($toResolve < 1 || $toReject < 1) {
- return;
- }
-
- $reasons[$i] = $reason;
-
- if (0 === --$toReject) {
- $reject($reasons);
- }
- };
-
- $cancellationQueue->enqueue($promiseOrValue);
-
- resolve($promiseOrValue)
- ->done($fulfiller, $rejecter, $notify);
- }
- }, $reject, $notify);
- }, $cancellationQueue);
-}
-
-function map($promisesOrValues, callable $mapFunc)
-{
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($promisesOrValues);
-
- return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $mapFunc, $cancellationQueue) {
- resolve($promisesOrValues)
- ->done(function ($array) use ($mapFunc, $cancellationQueue, $resolve, $reject, $notify) {
- if (!is_array($array) || !$array) {
- $resolve([]);
- return;
- }
-
- $toResolve = count($array);
- $values = [];
-
- foreach ($array as $i => $promiseOrValue) {
- $cancellationQueue->enqueue($promiseOrValue);
- $values[$i] = null;
-
- resolve($promiseOrValue)
- ->then($mapFunc)
- ->done(
- function ($mapped) use ($i, &$values, &$toResolve, $resolve) {
- $values[$i] = $mapped;
-
- if (0 === --$toResolve) {
- $resolve($values);
- }
- },
- $reject,
- $notify
- );
- }
- }, $reject, $notify);
- }, $cancellationQueue);
-}
-
-function reduce($promisesOrValues, callable $reduceFunc, $initialValue = null)
-{
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($promisesOrValues);
-
- return new Promise(function ($resolve, $reject, $notify) use ($promisesOrValues, $reduceFunc, $initialValue, $cancellationQueue) {
- resolve($promisesOrValues)
- ->done(function ($array) use ($reduceFunc, $initialValue, $cancellationQueue, $resolve, $reject, $notify) {
- if (!is_array($array)) {
- $array = [];
- }
-
- $total = count($array);
- $i = 0;
-
- // Wrap the supplied $reduceFunc with one that handles promises and then
- // delegates to the supplied.
- $wrappedReduceFunc = function ($current, $val) use ($reduceFunc, $cancellationQueue, $total, &$i) {
- $cancellationQueue->enqueue($val);
-
- return $current
- ->then(function ($c) use ($reduceFunc, $total, &$i, $val) {
- return resolve($val)
- ->then(function ($value) use ($reduceFunc, $total, &$i, $c) {
- return $reduceFunc($c, $value, $i++, $total);
- });
- });
- };
-
- $cancellationQueue->enqueue($initialValue);
-
- array_reduce($array, $wrappedReduceFunc, resolve($initialValue))
- ->done($resolve, $reject, $notify);
- }, $reject, $notify);
- }, $cancellationQueue);
-}
-
-// Internal functions
-function _checkTypehint(callable $callback, $object)
-{
- if (!is_object($object)) {
- return true;
- }
-
- if (is_array($callback)) {
- $callbackReflection = new \ReflectionMethod($callback[0], $callback[1]);
- } elseif (is_object($callback) && !$callback instanceof \Closure) {
- $callbackReflection = new \ReflectionMethod($callback, '__invoke');
- } else {
- $callbackReflection = new \ReflectionFunction($callback);
- }
-
- $parameters = $callbackReflection->getParameters();
-
- if (!isset($parameters[0])) {
- return true;
- }
-
- $expectedException = $parameters[0];
-
- if (!$expectedException->getClass()) {
- return true;
- }
-
- return $expectedException->getClass()->isInstance($object);
-}
diff --git a/assets/php/vendor/react/promise/src/functions_include.php b/assets/php/vendor/react/promise/src/functions_include.php
deleted file mode 100755
index c71decb..0000000
--- a/assets/php/vendor/react/promise/src/functions_include.php
+++ /dev/null
@@ -1,5 +0,0 @@
-<?php
-
-if (!function_exists('React\Promise\resolve')) {
- require __DIR__.'/functions.php';
-}
diff --git a/assets/php/vendor/react/promise/tests/CancellationQueueTest.php b/assets/php/vendor/react/promise/tests/CancellationQueueTest.php
deleted file mode 100755
index 32cedf4..0000000
--- a/assets/php/vendor/react/promise/tests/CancellationQueueTest.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class CancellationQueueTest extends TestCase
-{
- /** @test */
- public function acceptsSimpleCancellableThenable()
- {
- $p = new SimpleTestCancellableThenable();
-
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($p);
-
- $cancellationQueue();
-
- $this->assertTrue($p->cancelCalled);
- }
-
- /** @test */
- public function ignoresSimpleCancellable()
- {
- $p = new SimpleTestCancellable();
-
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($p);
-
- $cancellationQueue();
-
- $this->assertFalse($p->cancelCalled);
- }
-
- /** @test */
- public function callsCancelOnPromisesEnqueuedBeforeStart()
- {
- $d1 = $this->getCancellableDeferred();
- $d2 = $this->getCancellableDeferred();
-
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($d1->promise());
- $cancellationQueue->enqueue($d2->promise());
-
- $cancellationQueue();
- }
-
- /** @test */
- public function callsCancelOnPromisesEnqueuedAfterStart()
- {
- $d1 = $this->getCancellableDeferred();
- $d2 = $this->getCancellableDeferred();
-
- $cancellationQueue = new CancellationQueue();
-
- $cancellationQueue();
-
- $cancellationQueue->enqueue($d2->promise());
- $cancellationQueue->enqueue($d1->promise());
- }
-
- /** @test */
- public function doesNotCallCancelTwiceWhenStartedTwice()
- {
- $d = $this->getCancellableDeferred();
-
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($d->promise());
-
- $cancellationQueue();
- $cancellationQueue();
- }
-
- /** @test */
- public function rethrowsExceptionsThrownFromCancel()
- {
- $this->setExpectedException('\Exception', 'test');
-
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel')
- ->will($this->throwException(new \Exception('test')));
-
- $cancellationQueue = new CancellationQueue();
- $cancellationQueue->enqueue($mock);
-
- $cancellationQueue();
- }
-
- private function getCancellableDeferred()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return new Deferred($mock);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/DeferredTest.php b/assets/php/vendor/react/promise/tests/DeferredTest.php
deleted file mode 100755
index 16212e9..0000000
--- a/assets/php/vendor/react/promise/tests/DeferredTest.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
-
-class DeferredTest extends TestCase
-{
- use PromiseTest\FullTestTrait;
-
- public function getPromiseTestAdapter(callable $canceller = null)
- {
- $d = new Deferred($canceller);
-
- return new CallbackPromiseAdapter([
- 'promise' => [$d, 'promise'],
- 'resolve' => [$d, 'resolve'],
- 'reject' => [$d, 'reject'],
- 'notify' => [$d, 'progress'],
- 'settle' => [$d, 'resolve'],
- ]);
- }
-
- /** @test */
- public function progressIsAnAliasForNotify()
- {
- $deferred = new Deferred();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $deferred->promise()
- ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
-
- $deferred->progress($sentinel);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FulfilledPromiseTest.php b/assets/php/vendor/react/promise/tests/FulfilledPromiseTest.php
deleted file mode 100755
index 97fc8f6..0000000
--- a/assets/php/vendor/react/promise/tests/FulfilledPromiseTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
-
-class FulfilledPromiseTest extends TestCase
-{
- use PromiseTest\PromiseSettledTestTrait,
- PromiseTest\PromiseFulfilledTestTrait;
-
- public function getPromiseTestAdapter(callable $canceller = null)
- {
- $promise = null;
-
- return new CallbackPromiseAdapter([
- 'promise' => function () use (&$promise) {
- if (!$promise) {
- throw new \LogicException('FulfilledPromise must be resolved before obtaining the promise');
- }
-
- return $promise;
- },
- 'resolve' => function ($value = null) use (&$promise) {
- if (!$promise) {
- $promise = new FulfilledPromise($value);
- }
- },
- 'reject' => function () {
- throw new \LogicException('You cannot call reject() for React\Promise\FulfilledPromise');
- },
- 'notify' => function () {
- // no-op
- },
- 'settle' => function ($value = null) use (&$promise) {
- if (!$promise) {
- $promise = new FulfilledPromise($value);
- }
- },
- ]);
- }
-
- /** @test */
- public function shouldThrowExceptionIfConstructedWithAPromise()
- {
- $this->setExpectedException('\InvalidArgumentException');
-
- return new FulfilledPromise(new FulfilledPromise());
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionAllTest.php b/assets/php/vendor/react/promise/tests/FunctionAllTest.php
deleted file mode 100755
index 74c1d7c..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionAllTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionAllTest extends TestCase
-{
- /** @test */
- public function shouldResolveEmptyInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- all([])
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveValuesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2, 3]));
-
- all([1, 2, 3])
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolvePromisesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2, 3]));
-
- all([resolve(1), resolve(2), resolve(3)])
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveSparseArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([null, 1, null, 1, 1]));
-
- all([null, 1, null, 1, 1])
- ->then($mock);
- }
-
- /** @test */
- public function shouldRejectIfAnyInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- all([resolve(1), reject(2), resolve(3)])
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2, 3]));
-
- all(resolve([1, 2, 3]))
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- all(resolve(1))
- ->then($mock);
- }
-
- /** @test */
- public function shouldPreserveTheOrderOfArrayWhenResolvingAsyncPromises()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2, 3]));
-
- $deferred = new Deferred();
-
- all([resolve(1), $deferred->promise(), resolve(3)])
- ->then($mock);
-
- $deferred->resolve(2);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionAnyTest.php b/assets/php/vendor/react/promise/tests/FunctionAnyTest.php
deleted file mode 100755
index 140b551..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionAnyTest.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\Exception\LengthException;
-
-class FunctionAnyTest extends TestCase
-{
- /** @test */
- public function shouldRejectWithLengthExceptionWithEmptyInputArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(
- $this->callback(function($exception){
- return $exception instanceof LengthException &&
- 'Input array must contain at least 1 item but contains only 0 items.' === $exception->getMessage();
- })
- );
-
- any([])
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldResolveToNullWithNonArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- any(null)
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveWithAnInputValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- any([1, 2, 3])
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveWithAPromisedInputValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- any([resolve(1), resolve(2), resolve(3)])
- ->then($mock);
- }
-
- /** @test */
- public function shouldRejectWithAllRejectedInputValuesIfAllInputsAreRejected()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([0 => 1, 1 => 2, 2 => 3]));
-
- any([reject(1), reject(2), reject(3)])
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldResolveWhenFirstInputPromiseResolves()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- any([resolve(1), reject(2), reject(3)])
- ->then($mock);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- any(resolve([1, 2, 3]))
- ->then($mock);
- }
-
- /** @test */
- public function shouldResolveToNullArrayWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- any(resolve(1))
- ->then($mock);
- }
-
- /** @test */
- public function shouldNotRelyOnArryIndexesWhenUnwrappingToASingleResolutionValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $d1 = new Deferred();
- $d2 = new Deferred();
-
- any(['abc' => $d1->promise(), 1 => $d2->promise()])
- ->then($mock);
-
- $d2->resolve(2);
- $d1->resolve(1);
- }
-
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- any(reject())
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
-
- any($mock)->cancel();
- }
-
- /** @test */
- public function shouldCancelInputArrayPromises()
- {
- $mock1 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock1
- ->expects($this->once())
- ->method('cancel');
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->once())
- ->method('cancel');
-
- any([$mock1, $mock2])->cancel();
- }
-
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseFulfills()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
-
- $deferred = New Deferred($mock);
- $deferred->resolve();
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
-
- some([$deferred->promise(), $mock2], 1)->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionCheckTypehintTest.php b/assets/php/vendor/react/promise/tests/FunctionCheckTypehintTest.php
deleted file mode 100755
index 8449bc1..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionCheckTypehintTest.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionCheckTypehintTest extends TestCase
-{
- /** @test */
- public function shouldAcceptClosureCallbackWithTypehint()
- {
- $this->assertTrue(_checkTypehint(function (\InvalidArgumentException $e) {
- }, new \InvalidArgumentException()));
- $this->assertfalse(_checkTypehint(function (\InvalidArgumentException $e) {
- }, new \Exception()));
- }
-
- /** @test */
- public function shouldAcceptFunctionStringCallbackWithTypehint()
- {
- $this->assertTrue(_checkTypehint('React\Promise\testCallbackWithTypehint', new \InvalidArgumentException()));
- $this->assertfalse(_checkTypehint('React\Promise\testCallbackWithTypehint', new \Exception()));
- }
-
- /** @test */
- public function shouldAcceptInvokableObjectCallbackWithTypehint()
- {
- $this->assertTrue(_checkTypehint(new TestCallbackWithTypehintClass(), new \InvalidArgumentException()));
- $this->assertfalse(_checkTypehint(new TestCallbackWithTypehintClass(), new \Exception()));
- }
-
- /** @test */
- public function shouldAcceptObjectMethodCallbackWithTypehint()
- {
- $this->assertTrue(_checkTypehint([new TestCallbackWithTypehintClass(), 'testCallback'], new \InvalidArgumentException()));
- $this->assertfalse(_checkTypehint([new TestCallbackWithTypehintClass(), 'testCallback'], new \Exception()));
- }
-
- /** @test */
- public function shouldAcceptStaticClassCallbackWithTypehint()
- {
- $this->assertTrue(_checkTypehint(['React\Promise\TestCallbackWithTypehintClass', 'testCallbackStatic'], new \InvalidArgumentException()));
- $this->assertfalse(_checkTypehint(['React\Promise\TestCallbackWithTypehintClass', 'testCallbackStatic'], new \Exception()));
- }
-
- /** @test */
- public function shouldAcceptClosureCallbackWithoutTypehint()
- {
- $this->assertTrue(_checkTypehint(function (\InvalidArgumentException $e) {
- }, new \InvalidArgumentException()));
- }
-
- /** @test */
- public function shouldAcceptFunctionStringCallbackWithoutTypehint()
- {
- $this->assertTrue(_checkTypehint('React\Promise\testCallbackWithoutTypehint', new \InvalidArgumentException()));
- }
-
- /** @test */
- public function shouldAcceptInvokableObjectCallbackWithoutTypehint()
- {
- $this->assertTrue(_checkTypehint(new TestCallbackWithoutTypehintClass(), new \InvalidArgumentException()));
- }
-
- /** @test */
- public function shouldAcceptObjectMethodCallbackWithoutTypehint()
- {
- $this->assertTrue(_checkTypehint([new TestCallbackWithoutTypehintClass(), 'testCallback'], new \InvalidArgumentException()));
- }
-
- /** @test */
- public function shouldAcceptStaticClassCallbackWithoutTypehint()
- {
- $this->assertTrue(_checkTypehint(['React\Promise\TestCallbackWithoutTypehintClass', 'testCallbackStatic'], new \InvalidArgumentException()));
- }
-}
-
-function testCallbackWithTypehint(\InvalidArgumentException $e)
-{
-}
-
-function testCallbackWithoutTypehint()
-{
-}
-
-class TestCallbackWithTypehintClass
-{
- public function __invoke(\InvalidArgumentException $e)
- {
-
- }
-
- public function testCallback(\InvalidArgumentException $e)
- {
-
- }
-
- public static function testCallbackStatic(\InvalidArgumentException $e)
- {
-
- }
-}
-
-class TestCallbackWithoutTypehintClass
-{
- public function __invoke()
- {
-
- }
-
- public function testCallback()
- {
-
- }
-
- public static function testCallbackStatic()
- {
-
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionMapTest.php b/assets/php/vendor/react/promise/tests/FunctionMapTest.php
deleted file mode 100755
index 1ea560a..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionMapTest.php
+++ /dev/null
@@ -1,198 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionMapTest extends TestCase
-{
- protected function mapper()
- {
- return function ($val) {
- return $val * 2;
- };
- }
-
- protected function promiseMapper()
- {
- return function ($val) {
- return resolve($val * 2);
- };
- }
-
- /** @test */
- public function shouldMapInputValuesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- map(
- [1, 2, 3],
- $this->mapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldMapInputPromisesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- map(
- [resolve(1), resolve(2), resolve(3)],
- $this->mapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldMapMixedInputArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- map(
- [1, resolve(2), 3],
- $this->mapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldMapInputWhenMapperReturnsAPromise()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- map(
- [1, 2, 3],
- $this->promiseMapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- map(
- resolve([1, resolve(2), 3]),
- $this->mapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- map(
- resolve(1),
- $this->mapper()
- )->then($mock);
- }
-
- /** @test */
- public function shouldPreserveTheOrderOfArrayWhenResolvingAsyncPromises()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([2, 4, 6]));
-
- $deferred = new Deferred();
-
- map(
- [resolve(1), $deferred->promise(), resolve(3)],
- $this->mapper()
- )->then($mock);
-
- $deferred->resolve(2);
- }
-
- /** @test */
- public function shouldRejectWhenInputContainsRejection()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- map(
- [resolve(1), reject(2), resolve(3)],
- $this->mapper()
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- map(
- reject(),
- $this->mapper()
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
-
- map(
- $mock,
- $this->mapper()
- )->cancel();
- }
-
- /** @test */
- public function shouldCancelInputArrayPromises()
- {
- $mock1 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock1
- ->expects($this->once())
- ->method('cancel');
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->once())
- ->method('cancel');
-
- map(
- [$mock1, $mock2],
- $this->mapper()
- )->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionRaceTest.php b/assets/php/vendor/react/promise/tests/FunctionRaceTest.php
deleted file mode 100755
index 83770ec..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionRaceTest.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionRaceTest extends TestCase
-{
- /** @test */
- public function shouldResolveEmptyInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- race(
- []
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveValuesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- race(
- [1, 2, 3]
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolvePromisesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $d1 = new Deferred();
- $d2 = new Deferred();
- $d3 = new Deferred();
-
- race(
- [$d1->promise(), $d2->promise(), $d3->promise()]
- )->then($mock);
-
- $d2->resolve(2);
-
- $d1->resolve(1);
- $d3->resolve(3);
- }
-
- /** @test */
- public function shouldResolveSparseArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- race(
- [null, 1, null, 2, 3]
- )->then($mock);
- }
-
- /** @test */
- public function shouldRejectIfFirstSettledPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $d1 = new Deferred();
- $d2 = new Deferred();
- $d3 = new Deferred();
-
- race(
- [$d1->promise(), $d2->promise(), $d3->promise()]
- )->then($this->expectCallableNever(), $mock);
-
- $d2->reject(2);
-
- $d1->resolve(1);
- $d3->resolve(3);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- race(
- resolve([1, 2, 3])
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveToNullWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- race(
- resolve(1)
- )->then($mock);
- }
-
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- race(
- reject()
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
-
- race($mock)->cancel();
- }
-
- /** @test */
- public function shouldCancelInputArrayPromises()
- {
- $mock1 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock1
- ->expects($this->once())
- ->method('cancel');
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->once())
- ->method('cancel');
-
- race([$mock1, $mock2])->cancel();
- }
-
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseFulfills()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- $deferred = New Deferred($mock);
- $deferred->resolve();
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
-
- race([$deferred->promise(), $mock2])->cancel();
- }
-
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfOnePromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- $deferred = New Deferred($mock);
- $deferred->reject();
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
-
- race([$deferred->promise(), $mock2])->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionReduceTest.php b/assets/php/vendor/react/promise/tests/FunctionReduceTest.php
deleted file mode 100755
index 8b43a87..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionReduceTest.php
+++ /dev/null
@@ -1,347 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionReduceTest extends TestCase
-{
- protected function plus()
- {
- return function ($sum, $val) {
- return $sum + $val;
- };
- }
-
- protected function append()
- {
- return function ($sum, $val) {
- return $sum . $val;
- };
- }
-
- /** @test */
- public function shouldReduceValuesWithoutInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(6));
-
- reduce(
- [1, 2, 3],
- $this->plus()
- )->then($mock);
- }
-
- /** @test */
- public function shouldReduceValuesWithInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(7));
-
- reduce(
- [1, 2, 3],
- $this->plus(),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldReduceValuesWithInitialPromise()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(7));
-
- reduce(
- [1, 2, 3],
- $this->plus(),
- resolve(1)
- )->then($mock);
- }
-
- /** @test */
- public function shouldReducePromisedValuesWithoutInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(6));
-
- reduce(
- [resolve(1), resolve(2), resolve(3)],
- $this->plus()
- )->then($mock);
- }
-
- /** @test */
- public function shouldReducePromisedValuesWithInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(7));
-
- reduce(
- [resolve(1), resolve(2), resolve(3)],
- $this->plus(),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldReducePromisedValuesWithInitialPromise()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(7));
-
- reduce(
- [resolve(1), resolve(2), resolve(3)],
- $this->plus(),
- resolve(1)
- )->then($mock);
- }
-
- /** @test */
- public function shouldReduceEmptyInputWithInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- reduce(
- [],
- $this->plus(),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldReduceEmptyInputWithInitialPromise()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- reduce(
- [],
- $this->plus(),
- resolve(1)
- )->then($mock);
- }
-
- /** @test */
- public function shouldRejectWhenInputContainsRejection()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- reduce(
- [resolve(1), reject(2), resolve(3)],
- $this->plus(),
- resolve(1)
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldResolveWithNullWhenInputIsEmptyAndNoInitialValueOrPromiseProvided()
- {
- // Note: this is different from when.js's behavior!
- // In when.reduce(), this rejects with a TypeError exception (following
- // JavaScript's [].reduce behavior.
- // We're following PHP's array_reduce behavior and resolve with NULL.
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- reduce(
- [],
- $this->plus()
- )->then($mock);
- }
-
- /** @test */
- public function shouldAllowSparseArrayInputWithoutInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(3));
-
- reduce(
- [null, null, 1, null, 1, 1],
- $this->plus()
- )->then($mock);
- }
-
- /** @test */
- public function shouldAllowSparseArrayInputWithInitialValue()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(4));
-
- reduce(
- [null, null, 1, null, 1, 1],
- $this->plus(),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldReduceInInputOrder()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('123'));
-
- reduce(
- [1, 2, 3],
- $this->append(),
- ''
- )->then($mock);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('123'));
-
- reduce(
- resolve([1, 2, 3]),
- $this->append(),
- ''
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveToInitialValueWhenInputPromiseDoesNotResolveToAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- reduce(
- resolve(1),
- $this->plus(),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldProvideCorrectBasisValue()
- {
- $insertIntoArray = function ($arr, $val, $i) {
- $arr[$i] = $val;
-
- return $arr;
- };
-
- $d1 = new Deferred();
- $d2 = new Deferred();
- $d3 = new Deferred();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2, 3]));
-
- reduce(
- [$d1->promise(), $d2->promise(), $d3->promise()],
- $insertIntoArray,
- []
- )->then($mock);
-
- $d3->resolve(3);
- $d1->resolve(1);
- $d2->resolve(2);
- }
-
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- reduce(
- reject(),
- $this->plus(),
- 1
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
-
- reduce(
- $mock,
- $this->plus(),
- 1
- )->cancel();
- }
-
- /** @test */
- public function shouldCancelInputArrayPromises()
- {
- $mock1 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock1
- ->expects($this->once())
- ->method('cancel');
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->once())
- ->method('cancel');
-
- reduce(
- [$mock1, $mock2],
- $this->plus(),
- 1
- )->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionRejectTest.php b/assets/php/vendor/react/promise/tests/FunctionRejectTest.php
deleted file mode 100755
index 84b8ec6..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionRejectTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionRejectTest extends TestCase
-{
- /** @test */
- public function shouldRejectAnImmediateValue()
- {
- $expected = 123;
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- reject($expected)
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function shouldRejectAFulfilledPromise()
- {
- $expected = 123;
-
- $resolved = new FulfilledPromise($expected);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- reject($resolved)
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function shouldRejectARejectedPromise()
- {
- $expected = 123;
-
- $resolved = new RejectedPromise($expected);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- reject($resolved)
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionResolveTest.php b/assets/php/vendor/react/promise/tests/FunctionResolveTest.php
deleted file mode 100755
index 53126bc..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionResolveTest.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class FunctionResolveTest extends TestCase
-{
- /** @test */
- public function shouldResolveAnImmediateValue()
- {
- $expected = 123;
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- resolve($expected)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldResolveAFulfilledPromise()
- {
- $expected = 123;
-
- $resolved = new FulfilledPromise($expected);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- resolve($resolved)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldResolveAThenable()
- {
- $thenable = new SimpleFulfilledTestThenable();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('foo'));
-
- resolve($thenable)
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldResolveACancellableThenable()
- {
- $thenable = new SimpleTestCancellableThenable();
-
- $promise = resolve($thenable);
- $promise->cancel();
-
- $this->assertTrue($thenable->cancelCalled);
- }
-
- /** @test */
- public function shouldRejectARejectedPromise()
- {
- $expected = 123;
-
- $resolved = new RejectedPromise($expected);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($expected));
-
- resolve($resolved)
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function shouldSupportDeepNestingInPromiseChains()
- {
- $d = new Deferred();
- $d->resolve(false);
-
- $result = resolve(resolve($d->promise()->then(function ($val) {
- $d = new Deferred();
- $d->resolve($val);
-
- $identity = function ($val) {
- return $val;
- };
-
- return resolve($d->promise()->then($identity))->then(
- function ($val) {
- return !$val;
- }
- );
- })));
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(true));
-
- $result->then($mock);
- }
-
- /** @test */
- public function shouldSupportVeryDeepNestedPromises()
- {
- $deferreds = [];
-
- // @TODO Increase count once global-queue is merged
- for ($i = 0; $i < 10; $i++) {
- $deferreds[] = $d = new Deferred();
- $p = $d->promise();
-
- $last = $p;
- for ($j = 0; $j < 10; $j++) {
- $last = $last->then(function($result) {
- return $result;
- });
- }
- }
-
- $p = null;
- foreach ($deferreds as $d) {
- if ($p) {
- $d->resolve($p);
- }
-
- $p = $d->promise();
- }
-
- $deferreds[0]->resolve(true);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(true));
-
- $deferreds[0]->promise()->then($mock);
- }
-
- /** @test */
- public function returnsExtendePromiseForSimplePromise()
- {
- $promise = $this
- ->getMockBuilder('React\Promise\PromiseInterface')
- ->getMock();
-
- $this->assertInstanceOf('React\Promise\ExtendedPromiseInterface', resolve($promise));
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/FunctionSomeTest.php b/assets/php/vendor/react/promise/tests/FunctionSomeTest.php
deleted file mode 100755
index 276b54b..0000000
--- a/assets/php/vendor/react/promise/tests/FunctionSomeTest.php
+++ /dev/null
@@ -1,258 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\Exception\LengthException;
-
-class FunctionSomeTest extends TestCase
-{
- /** @test */
- public function shouldRejectWithLengthExceptionWithEmptyInputArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(
- $this->callback(function($exception){
- return $exception instanceof LengthException &&
- 'Input array must contain at least 1 item but contains only 0 items.' === $exception->getMessage();
- })
- );
-
- some(
- [],
- 1
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldRejectWithLengthExceptionWithInputArrayContainingNotEnoughItems()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(
- $this->callback(function($exception){
- return $exception instanceof LengthException &&
- 'Input array must contain at least 4 items but contains only 3 items.' === $exception->getMessage();
- })
- );
-
- some(
- [1, 2, 3],
- 4
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldResolveToEmptyArrayWithNonArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- some(
- null,
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveValuesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2]));
-
- some(
- [1, 2, 3],
- 2
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolvePromisesArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2]));
-
- some(
- [resolve(1), resolve(2), resolve(3)],
- 2
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveSparseArrayInput()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([null, 1]));
-
- some(
- [null, 1, null, 2, 3],
- 2
- )->then($mock);
- }
-
- /** @test */
- public function shouldRejectIfAnyInputPromiseRejectsBeforeDesiredNumberOfInputsAreResolved()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1 => 2, 2 => 3]));
-
- some(
- [resolve(1), reject(2), reject(3)],
- 2
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldAcceptAPromiseForAnArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([1, 2]));
-
- some(
- resolve([1, 2, 3]),
- 2
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveWithEmptyArrayIfHowManyIsLessThanOne()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- some(
- [1],
- 0
- )->then($mock);
- }
-
- /** @test */
- public function shouldResolveToEmptyArrayWhenInputPromiseDoesNotResolveToArray()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo([]));
-
- some(
- resolve(1),
- 1
- )->then($mock);
- }
-
- /** @test */
- public function shouldRejectWhenInputPromiseRejects()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(null));
-
- some(
- reject(),
- 1
- )->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldCancelInputPromise()
- {
- $mock = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock
- ->expects($this->once())
- ->method('cancel');
-
- some($mock, 1)->cancel();
- }
-
- /** @test */
- public function shouldCancelInputArrayPromises()
- {
- $mock1 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock1
- ->expects($this->once())
- ->method('cancel');
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->once())
- ->method('cancel');
-
- some([$mock1, $mock2], 1)->cancel();
- }
-
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfEnoughPromisesFulfill()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- $deferred = New Deferred($mock);
- $deferred->resolve();
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
-
- some([$deferred->promise(), $mock2], 1);
- }
-
- /** @test */
- public function shouldNotCancelOtherPendingInputArrayPromisesIfEnoughPromisesReject()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- $deferred = New Deferred($mock);
- $deferred->reject();
-
- $mock2 = $this
- ->getMockBuilder('React\Promise\CancellablePromiseInterface')
- ->getMock();
- $mock2
- ->expects($this->never())
- ->method('cancel');
-
- some([$deferred->promise(), $mock2], 2);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/LazyPromiseTest.php b/assets/php/vendor/react/promise/tests/LazyPromiseTest.php
deleted file mode 100755
index b630881..0000000
--- a/assets/php/vendor/react/promise/tests/LazyPromiseTest.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
-
-class LazyPromiseTest extends TestCase
-{
- use PromiseTest\FullTestTrait;
-
- public function getPromiseTestAdapter(callable $canceller = null)
- {
- $d = new Deferred($canceller);
-
- $factory = function () use ($d) {
- return $d->promise();
- };
-
- return new CallbackPromiseAdapter([
- 'promise' => function () use ($factory) {
- return new LazyPromise($factory);
- },
- 'resolve' => [$d, 'resolve'],
- 'reject' => [$d, 'reject'],
- 'notify' => [$d, 'progress'],
- 'settle' => [$d, 'resolve'],
- ]);
- }
-
- /** @test */
- public function shouldNotCallFactoryIfThenIsNotInvoked()
- {
- $factory = $this->createCallableMock();
- $factory
- ->expects($this->never())
- ->method('__invoke');
-
- new LazyPromise($factory);
- }
-
- /** @test */
- public function shouldCallFactoryIfThenIsInvoked()
- {
- $factory = $this->createCallableMock();
- $factory
- ->expects($this->once())
- ->method('__invoke');
-
- $p = new LazyPromise($factory);
- $p->then();
- }
-
- /** @test */
- public function shouldReturnPromiseFromFactory()
- {
- $factory = $this->createCallableMock();
- $factory
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnValue(new FulfilledPromise(1)));
-
- $onFulfilled = $this->createCallableMock();
- $onFulfilled
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $p = new LazyPromise($factory);
-
- $p->then($onFulfilled);
- }
-
- /** @test */
- public function shouldReturnPromiseIfFactoryReturnsNull()
- {
- $factory = $this->createCallableMock();
- $factory
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnValue(null));
-
- $p = new LazyPromise($factory);
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $p->then());
- }
-
- /** @test */
- public function shouldReturnRejectedPromiseIfFactoryThrowsException()
- {
- $exception = new \Exception();
-
- $factory = $this->createCallableMock();
- $factory
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->throwException($exception));
-
- $onRejected = $this->createCallableMock();
- $onRejected
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $p = new LazyPromise($factory);
-
- $p->then($this->expectCallableNever(), $onRejected);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php b/assets/php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
deleted file mode 100755
index bdedf46..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseAdapter/CallbackPromiseAdapter.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseAdapter;
-
-use React\Promise;
-
-class CallbackPromiseAdapter implements PromiseAdapterInterface
-{
- private $callbacks;
-
- public function __construct(array $callbacks)
- {
- $this->callbacks = $callbacks;
- }
-
- public function promise()
- {
- return call_user_func_array($this->callbacks['promise'], func_get_args());
- }
-
- public function resolve()
- {
- return call_user_func_array($this->callbacks['resolve'], func_get_args());
- }
-
- public function reject()
- {
- return call_user_func_array($this->callbacks['reject'], func_get_args());
- }
-
- public function notify()
- {
- return call_user_func_array($this->callbacks['notify'], func_get_args());
- }
-
- public function settle()
- {
- return call_user_func_array($this->callbacks['settle'], func_get_args());
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php b/assets/php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
deleted file mode 100755
index 9157cd4..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseAdapter/PromiseAdapterInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseAdapter;
-
-use React\Promise;
-
-interface PromiseAdapterInterface
-{
- public function promise();
- public function resolve();
- public function reject();
- public function notify();
- public function settle();
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest.php b/assets/php/vendor/react/promise/tests/PromiseTest.php
deleted file mode 100755
index dc7b733..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
-
-class PromiseTest extends TestCase
-{
- use PromiseTest\FullTestTrait;
-
- public function getPromiseTestAdapter(callable $canceller = null)
- {
- $resolveCallback = $rejectCallback = $progressCallback = null;
-
- $promise = new Promise(function ($resolve, $reject, $progress) use (&$resolveCallback, &$rejectCallback, &$progressCallback) {
- $resolveCallback = $resolve;
- $rejectCallback = $reject;
- $progressCallback = $progress;
- }, $canceller);
-
- return new CallbackPromiseAdapter([
- 'promise' => function () use ($promise) {
- return $promise;
- },
- 'resolve' => $resolveCallback,
- 'reject' => $rejectCallback,
- 'notify' => $progressCallback,
- 'settle' => $resolveCallback,
- ]);
- }
-
- /** @test */
- public function shouldRejectIfResolverThrowsException()
- {
- $exception = new \Exception('foo');
-
- $promise = new Promise(function () use ($exception) {
- throw $exception;
- });
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $promise
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldFulfillIfFullfilledWithSimplePromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('foo'));
-
- $adapter->promise()
- ->then($mock);
-
- $adapter->resolve(new SimpleFulfilledTestPromise());
- }
-
- /** @test */
- public function shouldRejectIfRejectedWithSimplePromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo('foo'));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->resolve(new SimpleRejectedTestPromise());
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
deleted file mode 100755
index d722d75..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/CancelTestTrait.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-use React\Promise;
-
-trait CancelTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function cancelShouldCallCancellerWithResolverArguments()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->isType('callable'), $this->isType('callable'), $this->isType('callable'));
-
- $adapter = $this->getPromiseTestAdapter($mock);
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldFulfillPromiseIfCancellerFulfills()
- {
- $adapter = $this->getPromiseTestAdapter(function ($resolve) {
- $resolve(1);
- });
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($mock, $this->expectCallableNever());
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldRejectPromiseIfCancellerRejects()
- {
- $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject) {
- $reject(1);
- });
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldRejectPromiseWithExceptionIfCancellerThrows()
- {
- $e = new \Exception();
-
- $adapter = $this->getPromiseTestAdapter(function () use ($e) {
- throw $e;
- });
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($e));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldProgressPromiseIfCancellerNotifies()
- {
- $adapter = $this->getPromiseTestAdapter(function ($resolve, $reject, $progress) {
- $progress(1);
- });
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldCallCancellerOnlyOnceIfCancellerResolves()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnCallback(function ($resolve) {
- $resolve();
- }));
-
- $adapter = $this->getPromiseTestAdapter($mock);
-
- $adapter->promise()->cancel();
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldHaveNoEffectIfCancellerDoesNothing()
- {
- $adapter = $this->getPromiseTestAdapter(function () {});
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $this->expectCallableNever());
-
- $adapter->promise()->cancel();
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldCallCancellerFromDeepNestedPromiseChain()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- $adapter = $this->getPromiseTestAdapter($mock);
-
- $promise = $adapter->promise()
- ->then(function () {
- return new Promise\Promise(function () {});
- })
- ->then(function () {
- $d = new Promise\Deferred();
-
- return $d->promise();
- })
- ->then(function () {
- return new Promise\Promise(function () {});
- });
-
- $promise->cancel();
- }
-
- /** @test */
- public function cancelCalledOnChildrenSouldOnlyCancelWhenAllChildrenCancelled()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
-
- $child1 = $adapter->promise()
- ->then()
- ->then();
-
- $adapter->promise()
- ->then();
-
- $child1->cancel();
- }
-
- /** @test */
- public function cancelShouldTriggerCancellerWhenAllChildrenCancel()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
-
- $child1 = $adapter->promise()
- ->then()
- ->then();
-
- $child2 = $adapter->promise()
- ->then();
-
- $child1->cancel();
- $child2->cancel();
- }
-
- /** @test */
- public function cancelShouldNotTriggerCancellerWhenCancellingOneChildrenMultipleTimes()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
-
- $child1 = $adapter->promise()
- ->then()
- ->then();
-
- $child2 = $adapter->promise()
- ->then();
-
- $child1->cancel();
- $child1->cancel();
- }
-
- /** @test */
- public function cancelShouldTriggerCancellerOnlyOnceWhenCancellingMultipleTimes()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
-
- $adapter->promise()->cancel();
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function cancelShouldAlwaysTriggerCancellerWhenCalledOnRootPromise()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableOnce());
-
- $adapter->promise()
- ->then()
- ->then();
-
- $adapter->promise()
- ->then();
-
- $adapter->promise()->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
deleted file mode 100755
index 3ce45d6..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/FullTestTrait.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-trait FullTestTrait
-{
- use PromisePendingTestTrait,
- PromiseSettledTestTrait,
- PromiseFulfilledTestTrait,
- PromiseRejectedTestTrait,
- ResolveTestTrait,
- RejectTestTrait,
- NotifyTestTrait,
- CancelTestTrait;
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php
deleted file mode 100755
index 4501df6..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/NotifyTestTrait.php
+++ /dev/null
@@ -1,336 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-trait NotifyTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function notifyShouldProgress()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $this->expectCallableNever(), $mock);
-
- $adapter->notify($sentinel);
- }
-
- /** @test */
- public function notifyShouldPropagateProgressToDownstreamPromises()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnArgument(0));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- )
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock2
- );
-
- $adapter->notify($sentinel);
- }
-
- /** @test */
- public function notifyShouldPropagateTransformedProgressToDownstreamPromises()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnValue($sentinel));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- )
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock2
- );
-
- $adapter->notify(1);
- }
-
- /** @test */
- public function notifyShouldPropagateCaughtExceptionValueAsProgress()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->throwException($exception));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- )
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock2
- );
-
- $adapter->notify(1);
- }
-
- /** @test */
- public function notifyShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAResolvedPromiseReturnsAPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
- $adapter2 = $this->getPromiseTestAdapter();
-
- $promise2 = $adapter2->promise();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- // resolve BEFORE attaching progress handler
- $adapter->resolve();
-
- $adapter->promise()
- ->then(function () use ($promise2) {
- return $promise2;
- })
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter2->notify($sentinel);
- }
-
- /** @test */
- public function notifyShouldForwardProgressEventsWhenIntermediaryCallbackTiedToAnUnresolvedPromiseReturnsAPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
- $adapter2 = $this->getPromiseTestAdapter();
-
- $promise2 = $adapter2->promise();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $adapter->promise()
- ->then(function () use ($promise2) {
- return $promise2;
- })
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- );
-
- // resolve AFTER attaching progress handler
- $adapter->resolve();
- $adapter2->notify($sentinel);
- }
-
- /** @test */
- public function notifyShouldForwardProgressWhenResolvedWithAnotherPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
- $adapter2 = $this->getPromiseTestAdapter();
-
- $sentinel = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->returnValue($sentinel));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($sentinel);
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock
- )
- ->then(
- $this->expectCallableNever(),
- $this->expectCallableNever(),
- $mock2
- );
-
- $adapter->resolve($adapter2->promise());
- $adapter2->notify($sentinel);
- }
-
- /** @test */
- public function notifyShouldAllowResolveAfterProgress()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->at(0))
- ->method('__invoke')
- ->with($this->identicalTo(1));
- $mock
- ->expects($this->at(1))
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->promise()
- ->then(
- $mock,
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter->notify(1);
- $adapter->resolve(2);
- }
-
- /** @test */
- public function notifyShouldAllowRejectAfterProgress()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->at(0))
- ->method('__invoke')
- ->with($this->identicalTo(1));
- $mock
- ->expects($this->at(1))
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $mock,
- $mock
- );
-
- $adapter->notify(1);
- $adapter->reject(2);
- }
-
- /** @test */
- public function notifyShouldReturnSilentlyOnProgressWhenAlreadyRejected()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->reject(1);
-
- $this->assertNull($adapter->notify());
- }
-
- /** @test */
- public function notifyShouldInvokeProgressHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()->progress($mock);
- $adapter->notify(1);
- }
-
- /** @test */
- public function notifyShouldInvokeProgressHandlerFromDone()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $this->assertNull($adapter->promise()->done(null, null, $mock));
- $adapter->notify(1);
- }
-
- /** @test */
- public function notifyShouldThrowExceptionThrownProgressHandlerFromDone()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(null, null, function () {
- throw new \Exception('UnhandledRejectionException');
- }));
- $adapter->notify(1);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
deleted file mode 100755
index 428230b..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseFulfilledTestTrait.php
+++ /dev/null
@@ -1,351 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-trait PromiseFulfilledTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function fulfilledPromiseShouldBeImmutable()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->resolve(1);
- $adapter->resolve(2);
-
- $adapter->promise()
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function fulfilledPromiseShouldInvokeNewlyAddedCallback()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->resolve(1);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($mock, $this->expectCallableNever());
- }
-
- /** @test */
- public function thenShouldForwardResultWhenCallbackIsNull()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->then(
- null,
- $this->expectCallableNever()
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function thenShouldForwardCallbackResultToNextCallback()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->then(
- function ($val) {
- return $val + 1;
- },
- $this->expectCallableNever()
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function thenShouldForwardPromisedCallbackResultValueToNextCallback()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->then(
- function ($val) {
- return \React\Promise\resolve($val + 1);
- },
- $this->expectCallableNever()
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackReturnsARejection()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->then(
- function ($val) {
- return \React\Promise\reject($val + 1);
- },
- $this->expectCallableNever()
- )
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function thenShouldSwitchFromCallbacksToErrbacksWhenCallbackThrows()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->throwException($exception));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->then(
- $mock,
- $this->expectCallableNever()
- )
- ->then(
- $this->expectCallableNever(),
- $mock2
- );
- }
-
- /** @test */
- public function cancelShouldReturnNullForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->resolve();
-
- $this->assertNull($adapter->promise()->cancel());
- }
-
- /** @test */
- public function cancelShouldHaveNoEffectForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
-
- $adapter->resolve();
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function doneShouldInvokeFulfillmentHandlerForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->resolve(1);
- $this->assertNull($adapter->promise()->done($mock));
- }
-
- /** @test */
- public function doneShouldThrowExceptionThrownFulfillmentHandlerForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $adapter->resolve(1);
- $this->assertNull($adapter->promise()->done(function () {
- throw new \Exception('UnhandledRejectionException');
- }));
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenFulfillmentHandlerRejectsForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $adapter->resolve(1);
- $this->assertNull($adapter->promise()->done(function () {
- return \React\Promise\reject();
- }));
- }
-
- /** @test */
- public function otherwiseShouldNotInvokeRejectionHandlerForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->resolve(1);
- $adapter->promise()->otherwise($this->expectCallableNever());
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValueForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->resolve($value);
- $adapter->promise()
- ->always(function () {})
- ->then($mock);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValueWhenHandlerReturnsANonPromiseForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->resolve($value);
- $adapter->promise()
- ->always(function () {
- return 1;
- })
- ->then($mock);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValueWhenHandlerReturnsAPromiseForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->resolve($value);
- $adapter->promise()
- ->always(function () {
- return \React\Promise\resolve(1);
- })
- ->then($mock);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerThrowsForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->always(function () use ($exception) {
- throw $exception;
- })
- ->then(null, $mock);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerRejectsForFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->resolve(1);
- $adapter->promise()
- ->always(function () use ($exception) {
- return \React\Promise\reject($exception);
- })
- ->then(null, $mock);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
deleted file mode 100755
index a4f48ee..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/PromisePendingTestTrait.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-trait PromisePendingTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function thenShouldReturnAPromiseForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
- }
-
- /** @test */
- public function thenShouldReturnAllowNullForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
- }
-
- /** @test */
- public function cancelShouldReturnNullForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertNull($adapter->promise()->cancel());
- }
-
- /** @test */
- public function doneShouldReturnNullForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertNull($adapter->promise()->done());
- }
-
- /** @test */
- public function doneShouldReturnAllowNullForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertNull($adapter->promise()->done(null, null, null));
- }
-
- /** @test */
- public function otherwiseShouldNotInvokeRejectionHandlerForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $adapter->promise()->otherwise($this->expectCallableNever());
- }
-
- /** @test */
- public function alwaysShouldReturnAPromiseForPendingPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->always(function () {}));
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
deleted file mode 100755
index 98d1dcf..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseRejectedTestTrait.php
+++ /dev/null
@@ -1,512 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-use React\Promise\Deferred;
-use React\Promise\UnhandledRejectionException;
-
-trait PromiseRejectedTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function rejectedPromiseShouldBeImmutable()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->reject(1);
- $adapter->reject(2);
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function rejectedPromiseShouldInvokeNewlyAddedCallback()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->reject(1);
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
- }
-
- /** @test */
- public function shouldForwardUndefinedRejectionValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(null);
-
- $adapter->reject(1);
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- function () {
- // Presence of rejection handler is enough to switch back
- // to resolve mode, even though it returns undefined.
- // The ONLY way to propagate a rejection is to re-throw or
- // return a rejected promise;
- }
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldSwitchFromErrbacksToCallbacksWhenErrbackDoesNotExplicitlyPropagate()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->reject(1);
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- function ($val) {
- return $val + 1;
- }
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldSwitchFromErrbacksToCallbacksWhenErrbackReturnsAResolution()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->reject(1);
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- function ($val) {
- return \React\Promise\resolve($val + 1);
- }
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
- }
-
- /** @test */
- public function shouldPropagateRejectionsWhenErrbackThrows()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->will($this->throwException($exception));
-
- $mock2 = $this->createCallableMock();
- $mock2
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject(1);
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $mock
- )
- ->then(
- $this->expectCallableNever(),
- $mock2
- );
- }
-
- /** @test */
- public function shouldPropagateRejectionsWhenErrbackReturnsARejection()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(2));
-
- $adapter->reject(1);
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- function ($val) {
- return \React\Promise\reject($val + 1);
- }
- )
- ->then(
- $this->expectCallableNever(),
- $mock
- );
- }
-
- /** @test */
- public function doneShouldInvokeRejectionHandlerForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->reject(1);
- $this->assertNull($adapter->promise()->done(null, $mock));
- }
-
- /** @test */
- public function doneShouldThrowExceptionThrownByRejectionHandlerForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $adapter->reject(1);
- $this->assertNull($adapter->promise()->done(null, function () {
- throw new \Exception('UnhandledRejectionException');
- }));
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenRejectedWithNonExceptionForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $adapter->reject(1);
- $this->assertNull($adapter->promise()->done());
- }
-
- /** @test */
- public function unhandledRejectionExceptionThrownByDoneHoldsRejectionValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $expected = new \stdClass();
-
- $adapter->reject($expected);
-
- try {
- $adapter->promise()->done();
- } catch (UnhandledRejectionException $e) {
- $this->assertSame($expected, $e->getReason());
- return;
- }
-
- $this->fail();
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRejectsForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $adapter->reject(1);
- $this->assertNull($adapter->promise()->done(null, function () {
- return \React\Promise\reject();
- }));
- }
-
- /** @test */
- public function doneShouldThrowRejectionExceptionWhenRejectionHandlerRejectsWithExceptionForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $adapter->reject(1);
- $this->assertNull($adapter->promise()->done(null, function () {
- return \React\Promise\reject(new \Exception('UnhandledRejectionException'));
- }));
- }
-
- /** @test */
- public function doneShouldThrowExceptionProvidedAsRejectionValueForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $adapter->reject(new \Exception('UnhandledRejectionException'));
- $this->assertNull($adapter->promise()->done());
- }
-
- /** @test */
- public function doneShouldThrowWithDeepNestingPromiseChainsForRejectedPromise()
- {
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $exception = new \Exception('UnhandledRejectionException');
-
- $d = new Deferred();
- $d->resolve();
-
- $result = \React\Promise\resolve(\React\Promise\resolve($d->promise()->then(function () use ($exception) {
- $d = new Deferred();
- $d->resolve();
-
- return \React\Promise\resolve($d->promise()->then(function () {}))->then(
- function () use ($exception) {
- throw $exception;
- }
- );
- })));
-
- $result->done();
- }
-
- /** @test */
- public function doneShouldRecoverWhenRejectionHandlerCatchesExceptionForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->reject(new \Exception('UnhandledRejectionException'));
- $this->assertNull($adapter->promise()->done(null, function (\Exception $e) {
-
- }));
- }
-
- /** @test */
- public function otherwiseShouldInvokeRejectionHandlerForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->reject(1);
- $adapter->promise()->otherwise($mock);
- }
-
- /** @test */
- public function otherwiseShouldInvokeNonTypeHintedRejectionHandlerIfReasonIsAnExceptionForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject($exception);
- $adapter->promise()
- ->otherwise(function ($reason) use ($mock) {
- $mock($reason);
- });
- }
-
- /** @test */
- public function otherwiseShouldInvokeRejectionHandlerIfReasonMatchesTypehintForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \InvalidArgumentException();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject($exception);
- $adapter->promise()
- ->otherwise(function (\InvalidArgumentException $reason) use ($mock) {
- $mock($reason);
- });
- }
-
- /** @test */
- public function otherwiseShouldNotInvokeRejectionHandlerIfReaonsDoesNotMatchTypehintForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->expectCallableNever();
-
- $adapter->reject($exception);
- $adapter->promise()
- ->otherwise(function (\InvalidArgumentException $reason) use ($mock) {
- $mock($reason);
- });
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejectionForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject($exception);
- $adapter->promise()
- ->always(function () {})
- ->then(null, $mock);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsANonPromiseForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject($exception);
- $adapter->promise()
- ->always(function () {
- return 1;
- })
- ->then(null, $mock);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsAPromiseForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->reject($exception);
- $adapter->promise()
- ->always(function () {
- return \React\Promise\resolve(1);
- })
- ->then(null, $mock);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerThrowsForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception1 = new \Exception();
- $exception2 = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception2));
-
- $adapter->reject($exception1);
- $adapter->promise()
- ->always(function () use ($exception2) {
- throw $exception2;
- })
- ->then(null, $mock);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerRejectsForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception1 = new \Exception();
- $exception2 = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception2));
-
- $adapter->reject($exception1);
- $adapter->promise()
- ->always(function () use ($exception2) {
- return \React\Promise\reject($exception2);
- })
- ->then(null, $mock);
- }
-
- /** @test */
- public function cancelShouldReturnNullForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->reject();
-
- $this->assertNull($adapter->promise()->cancel());
- }
-
- /** @test */
- public function cancelShouldHaveNoEffectForRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
-
- $adapter->reject();
-
- $adapter->promise()->cancel();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
deleted file mode 100755
index e363b6d..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/PromiseSettledTestTrait.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-trait PromiseSettledTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function thenShouldReturnAPromiseForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then());
- }
-
- /** @test */
- public function thenShouldReturnAllowNullForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->then(null, null, null));
- }
-
- /** @test */
- public function cancelShouldReturnNullForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
-
- $this->assertNull($adapter->promise()->cancel());
- }
-
- /** @test */
- public function cancelShouldHaveNoEffectForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter($this->expectCallableNever());
-
- $adapter->settle();
-
- $adapter->promise()->cancel();
- }
-
- /** @test */
- public function doneShouldReturnNullForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $this->assertNull($adapter->promise()->done(null, function () {}));
- }
-
- /** @test */
- public function doneShouldReturnAllowNullForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $this->assertNull($adapter->promise()->done(null, function () {}, null));
- }
-
- /** @test */
- public function progressShouldNotInvokeProgressHandlerForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $adapter->promise()->progress($this->expectCallableNever());
- $adapter->notify();
- }
-
- /** @test */
- public function alwaysShouldReturnAPromiseForSettledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $adapter->settle();
- $this->assertInstanceOf('React\\Promise\\PromiseInterface', $adapter->promise()->always(function () {}));
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
deleted file mode 100755
index 063f178..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/RejectTestTrait.php
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-use React\Promise;
-use React\Promise\Deferred;
-
-trait RejectTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function rejectShouldRejectWithAnImmediateValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->reject(1);
- }
-
- /** @test */
- public function rejectShouldRejectWithFulfilledPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->reject(Promise\resolve(1));
- }
-
- /** @test */
- public function rejectShouldRejectWithRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->reject(Promise\reject(1));
- }
-
- /** @test */
- public function rejectShouldForwardReasonWhenCallbackIsNull()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever()
- )
- ->then(
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter->reject(1);
- }
-
- /** @test */
- public function rejectShouldMakePromiseImmutable()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then(null, function ($value) use ($adapter) {
- $adapter->reject(3);
-
- return Promise\reject($value);
- })
- ->then(
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter->reject(1);
- $adapter->reject(2);
- }
-
- /** @test */
- public function notifyShouldInvokeOtherwiseHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->otherwise($mock);
-
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldInvokeRejectionHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $this->assertNull($adapter->promise()->done(null, $mock));
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowExceptionThrownByRejectionHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(null, function () {
- throw new \Exception('UnhandledRejectionException');
- }));
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenRejectedWithNonException()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done());
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRejects()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(null, function () {
- return \React\Promise\reject();
- }));
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowRejectionExceptionWhenRejectionHandlerRejectsWithException()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(null, function () {
- return \React\Promise\reject(new \Exception('UnhandledRejectionException'));
- }));
- $adapter->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRetunsPendingPromiseWhichRejectsLater()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $d = new Deferred();
- $promise = $d->promise();
-
- $this->assertNull($adapter->promise()->done(null, function () use ($promise) {
- return $promise;
- }));
- $adapter->reject(1);
- $d->reject(1);
- }
-
- /** @test */
- public function doneShouldThrowExceptionProvidedAsRejectionValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done());
- $adapter->reject(new \Exception('UnhandledRejectionException'));
- }
-
- /** @test */
- public function doneShouldThrowWithDeepNestingPromiseChains()
- {
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $exception = new \Exception('UnhandledRejectionException');
-
- $d = new Deferred();
-
- $result = \React\Promise\resolve(\React\Promise\resolve($d->promise()->then(function () use ($exception) {
- $d = new Deferred();
- $d->resolve();
-
- return \React\Promise\resolve($d->promise()->then(function () {}))->then(
- function () use ($exception) {
- throw $exception;
- }
- );
- })));
-
- $result->done();
-
- $d->resolve();
- }
-
- /** @test */
- public function doneShouldRecoverWhenRejectionHandlerCatchesException()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->assertNull($adapter->promise()->done(null, function (\Exception $e) {
-
- }));
- $adapter->reject(new \Exception('UnhandledRejectionException'));
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejection()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () {})
- ->then(null, $mock);
-
- $adapter->reject($exception);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsANonPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () {
- return 1;
- })
- ->then(null, $mock);
-
- $adapter->reject($exception);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressRejectionWhenHandlerReturnsAPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () {
- return \React\Promise\resolve(1);
- })
- ->then(null, $mock);
-
- $adapter->reject($exception);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerThrowsForRejection()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () use ($exception) {
- throw $exception;
- })
- ->then(null, $mock);
-
- $adapter->reject($exception);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerRejectsForRejection()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () use ($exception) {
- return \React\Promise\reject($exception);
- })
- ->then(null, $mock);
-
- $adapter->reject($exception);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php b/assets/php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
deleted file mode 100755
index 0736d35..0000000
--- a/assets/php/vendor/react/promise/tests/PromiseTest/ResolveTestTrait.php
+++ /dev/null
@@ -1,312 +0,0 @@
-<?php
-
-namespace React\Promise\PromiseTest;
-
-use React\Promise;
-
-trait ResolveTestTrait
-{
- /**
- * @return \React\Promise\PromiseAdapter\PromiseAdapterInterface
- */
- abstract public function getPromiseTestAdapter(callable $canceller = null);
-
- /** @test */
- public function resolveShouldResolve()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($mock);
-
- $adapter->resolve(1);
- }
-
- /** @test */
- public function resolveShouldResolveWithPromisedValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($mock);
-
- $adapter->resolve(Promise\resolve(1));
- }
-
- /** @test */
- public function resolveShouldRejectWhenResolvedWithRejectedPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then($this->expectCallableNever(), $mock);
-
- $adapter->resolve(Promise\reject(1));
- }
-
- /** @test */
- public function resolveShouldForwardValueWhenCallbackIsNull()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then(
- null,
- $this->expectCallableNever()
- )
- ->then(
- $mock,
- $this->expectCallableNever()
- );
-
- $adapter->resolve(1);
- }
-
- /** @test */
- public function resolveShouldMakePromiseImmutable()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $adapter->promise()
- ->then(function ($value) use ($adapter) {
- $adapter->resolve(3);
-
- return $value;
- })
- ->then(
- $mock,
- $this->expectCallableNever()
- );
-
- $adapter->resolve(1);
- $adapter->resolve(2);
- }
-
- /**
- * @test
- */
- public function resolveShouldRejectWhenResolvedWithItself()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(new \LogicException('Cannot resolve a promise with itself.'));
-
- $adapter->promise()
- ->then(
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter->resolve($adapter->promise());
- }
-
- /**
- * @test
- */
- public function resolveShouldRejectWhenResolvedWithAPromiseWhichFollowsItself()
- {
- $adapter1 = $this->getPromiseTestAdapter();
- $adapter2 = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with(new \LogicException('Cannot resolve a promise with itself.'));
-
- $promise1 = $adapter1->promise();
-
- $promise2 = $adapter2->promise();
-
- $promise2->then(
- $this->expectCallableNever(),
- $mock
- );
-
- $adapter1->resolve($promise2);
- $adapter2->resolve($promise1);
- }
-
- /** @test */
- public function doneShouldInvokeFulfillmentHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo(1));
-
- $this->assertNull($adapter->promise()->done($mock));
- $adapter->resolve(1);
- }
-
- /** @test */
- public function doneShouldThrowExceptionThrownFulfillmentHandler()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('\Exception', 'UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(function () {
- throw new \Exception('UnhandledRejectionException');
- }));
- $adapter->resolve(1);
- }
-
- /** @test */
- public function doneShouldThrowUnhandledRejectionExceptionWhenFulfillmentHandlerRejects()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $this->setExpectedException('React\\Promise\\UnhandledRejectionException');
-
- $this->assertNull($adapter->promise()->done(function () {
- return \React\Promise\reject();
- }));
- $adapter->resolve(1);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValue()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->promise()
- ->always(function () {})
- ->then($mock);
-
- $adapter->resolve($value);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValueWhenHandlerReturnsANonPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->promise()
- ->always(function () {
- return 1;
- })
- ->then($mock);
-
- $adapter->resolve($value);
- }
-
- /** @test */
- public function alwaysShouldNotSuppressValueWhenHandlerReturnsAPromise()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $value = new \stdClass();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($value));
-
- $adapter->promise()
- ->always(function () {
- return \React\Promise\resolve(1);
- })
- ->then($mock);
-
- $adapter->resolve($value);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerThrowsForFulfillment()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () use ($exception) {
- throw $exception;
- })
- ->then(null, $mock);
-
- $adapter->resolve(1);
- }
-
- /** @test */
- public function alwaysShouldRejectWhenHandlerRejectsForFulfillment()
- {
- $adapter = $this->getPromiseTestAdapter();
-
- $exception = new \Exception();
-
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($this->identicalTo($exception));
-
- $adapter->promise()
- ->always(function () use ($exception) {
- return \React\Promise\reject($exception);
- })
- ->then(null, $mock);
-
- $adapter->resolve(1);
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/RejectedPromiseTest.php b/assets/php/vendor/react/promise/tests/RejectedPromiseTest.php
deleted file mode 100755
index c886b00..0000000
--- a/assets/php/vendor/react/promise/tests/RejectedPromiseTest.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-use React\Promise\PromiseAdapter\CallbackPromiseAdapter;
-
-class RejectedPromiseTest extends TestCase
-{
- use PromiseTest\PromiseSettledTestTrait,
- PromiseTest\PromiseRejectedTestTrait;
-
- public function getPromiseTestAdapter(callable $canceller = null)
- {
- $promise = null;
-
- return new CallbackPromiseAdapter([
- 'promise' => function () use (&$promise) {
- if (!$promise) {
- throw new \LogicException('RejectedPromise must be rejected before obtaining the promise');
- }
-
- return $promise;
- },
- 'resolve' => function () {
- throw new \LogicException('You cannot call resolve() for React\Promise\RejectedPromise');
- },
- 'reject' => function ($reason = null) use (&$promise) {
- if (!$promise) {
- $promise = new RejectedPromise($reason);
- }
- },
- 'notify' => function () {
- // no-op
- },
- 'settle' => function ($reason = null) use (&$promise) {
- if (!$promise) {
- $promise = new RejectedPromise($reason);
- }
- },
- ]);
- }
-
- /** @test */
- public function shouldThrowExceptionIfConstructedWithAPromise()
- {
- $this->setExpectedException('\InvalidArgumentException');
-
- return new RejectedPromise(new RejectedPromise());
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/Stub/CallableStub.php b/assets/php/vendor/react/promise/tests/Stub/CallableStub.php
deleted file mode 100755
index 0120893..0000000
--- a/assets/php/vendor/react/promise/tests/Stub/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Promise\Stub;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/TestCase.php b/assets/php/vendor/react/promise/tests/TestCase.php
deleted file mode 100755
index c9274f4..0000000
--- a/assets/php/vendor/react/promise/tests/TestCase.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class TestCase extends \PHPUnit_Framework_TestCase
-{
- public function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- public function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- public function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- public function createCallableMock()
- {
- return $this
- ->getMockBuilder('React\\Promise\Stub\CallableStub')
- ->getMock();
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/bootstrap.php b/assets/php/vendor/react/promise/tests/bootstrap.php
deleted file mode 100755
index 9b7f872..0000000
--- a/assets/php/vendor/react/promise/tests/bootstrap.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-
-$loader = @include __DIR__.'/../vendor/autoload.php';
-if (!$loader) {
- $loader = require __DIR__.'/../../../../vendor/autoload.php';
-}
-$loader->addPsr4('React\\Promise\\', __DIR__);
diff --git a/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php b/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php
deleted file mode 100755
index ef4d530..0000000
--- a/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestPromise.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class SimpleFulfilledTestPromise implements PromiseInterface
-{
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- try {
- if ($onFulfilled) {
- $onFulfilled('foo');
- }
-
- return new self();
- } catch (\Throwable $exception) {
- return new RejectedPromise($exception);
- } catch (\Exception $exception) {
- return new RejectedPromise($exception);
- }
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php b/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php
deleted file mode 100755
index 3f66f63..0000000
--- a/assets/php/vendor/react/promise/tests/fixtures/SimpleFulfilledTestThenable.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class SimpleFulfilledTestThenable
-{
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- try {
- if ($onFulfilled) {
- $onFulfilled('foo');
- }
-
- return new self();
- } catch (\Throwable $exception) {
- return new RejectedPromise($exception);
- } catch (\Exception $exception) {
- return new RejectedPromise($exception);
- }
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php b/assets/php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php
deleted file mode 100755
index b30a226..0000000
--- a/assets/php/vendor/react/promise/tests/fixtures/SimpleRejectedTestPromise.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class SimpleRejectedTestPromise implements PromiseInterface
-{
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- try {
- if ($onRejected) {
- $onRejected('foo');
- }
-
- return new self();
- } catch (\Throwable $exception) {
- return new RejectedPromise($exception);
- } catch (\Exception $exception) {
- return new RejectedPromise($exception);
- }
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php b/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php
deleted file mode 100755
index f232a68..0000000
--- a/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellable.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class SimpleTestCancellable
-{
- public $cancelCalled = false;
-
- public function cancel()
- {
- $this->cancelCalled = true;
- }
-}
diff --git a/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php b/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php
deleted file mode 100755
index c0f1593..0000000
--- a/assets/php/vendor/react/promise/tests/fixtures/SimpleTestCancellableThenable.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace React\Promise;
-
-class SimpleTestCancellableThenable
-{
- public $cancelCalled = false;
-
- public function then(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null)
- {
- return new self();
- }
-
- public function cancel()
- {
- $this->cancelCalled = true;
- }
-}
diff --git a/assets/php/vendor/react/socket/.gitignore b/assets/php/vendor/react/socket/.gitignore
deleted file mode 100755
index 987e2a2..0000000
--- a/assets/php/vendor/react/socket/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor
diff --git a/assets/php/vendor/react/socket/.travis.yml b/assets/php/vendor/react/socket/.travis.yml
deleted file mode 100755
index 917dc0c..0000000
--- a/assets/php/vendor/react/socket/.travis.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7.0
- - 7.1
- - 7.2
-# - 7.0 # Mac OS X, ignore errors, see below
- - hhvm # ignore errors, see below
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
- include:
- - os: osx
- language: generic
- php: 7.0 # just to look right on travis
- env:
- - PACKAGE: php70
- allow_failures:
- - php: hhvm
- - os: osx
-
-sudo: false
-
-install:
- # OSX install inspired by https://github.com/kiler129/TravisCI-OSX-PHP
- - |
- if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
- brew tap homebrew/homebrew-php
- echo "Installing PHP ..."
- brew install "${PACKAGE}"
- brew install "${PACKAGE}"-xdebug
- brew link "${PACKAGE}"
- echo "Installing composer ..."
- curl -s http://getcomposer.org/installer | php
- mv composer.phar /usr/local/bin/composer
- fi
- - composer install --no-interaction
-
-script:
- - ./vendor/bin/phpunit --coverage-text
diff --git a/assets/php/vendor/react/socket/CHANGELOG.md b/assets/php/vendor/react/socket/CHANGELOG.md
deleted file mode 100755
index 03c2eec..0000000
--- a/assets/php/vendor/react/socket/CHANGELOG.md
+++ /dev/null
@@ -1,451 +0,0 @@
-# Changelog
-
-## 0.8.10 (2018-02-28)
-
-* Feature: Update DNS dependency to support loading system default DNS
- nameserver config on all supported platforms
- (`/etc/resolv.conf` on Unix/Linux/Mac/Docker/WSL and WMIC on Windows)
- (#152 by @clue)
-
- This means that connecting to hosts that are managed by a local DNS server,
- such as a corporate DNS server or when using Docker containers, will now
- work as expected across all platforms with no changes required:
-
- ```php
- $connector = new Connector($loop);
- $connector->connect('intranet.example:80')->then(function ($connection) {
- // …
- });
- ```
-
-## 0.8.9 (2018-01-18)
-
-* Feature: Support explicitly choosing TLS version to negotiate with remote side
- by respecting `crypto_method` context parameter for all classes.
- (#149 by @clue)
-
- By default, all connector and server classes support TLSv1.0+ and exclude
- support for legacy SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly
- choose the TLS version you want to negotiate with the remote side:
-
- ```php
- // new: now supports 'crypto_method` context parameter for all classes
- $connector = new Connector($loop, array(
- 'tls' => array(
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
- )
- ));
- ```
-
-* Minor internal clean up to unify class imports
- (#148 by @clue)
-
-## 0.8.8 (2018-01-06)
-
-* Improve test suite by adding test group to skip integration tests relying on
- internet connection and fix minor documentation typo.
- (#146 by @clue and #145 by @cn007b)
-
-## 0.8.7 (2017-12-24)
-
-* Fix: Fix closing socket resource before removing from loop
- (#141 by @clue)
-
- This fixes the root cause of an uncaught `Exception` that only manifested
- itself after the recent Stream v0.7.4 component update and only if you're
- using `ext-event` (`ExtEventLoop`).
-
-* Improve test suite by testing against PHP 7.2
- (#140 by @carusogabriel)
-
-## 0.8.6 (2017-11-18)
-
-* Feature: Add Unix domain socket (UDS) support to `Server` with `unix://` URI scheme
- and add advanced `UnixServer` class.
- (#120 by @andig)
-
- ```php
- // new: Server now supports "unix://" scheme
- $server = new Server('unix:///tmp/server.sock', $loop);
-
- // new: advanced usage
- $server = new UnixServer('/tmp/server.sock', $loop);
- ```
-
-* Restructure examples to ease getting started
- (#136 by @clue)
-
-* Improve test suite by adding forward compatibility with PHPUnit 6 and
- ignore Mac OS X test failures for now until Travis tests work again
- (#133 by @gabriel-caruso and #134 by @clue)
-
-## 0.8.5 (2017-10-23)
-
-* Fix: Work around PHP bug with Unix domain socket (UDS) paths for Mac OS X
- (#123 by @andig)
-
-* Fix: Fix `SecureServer` to return `null` URI if server socket is already closed
- (#129 by @clue)
-
-* Improve test suite by adding forward compatibility with PHPUnit v5 and
- forward compatibility with upcoming EventLoop releases in tests and
- test Mac OS X on Travis
- (#122 by @andig and #125, #127 and #130 by @clue)
-
-* Readme improvements
- (#118 by @jsor)
-
-## 0.8.4 (2017-09-16)
-
-* Feature: Add `FixedUriConnector` decorator to use fixed, preconfigured URI instead
- (#117 by @clue)
-
- This can be useful for consumers that do not support certain URIs, such as
- when you want to explicitly connect to a Unix domain socket (UDS) path
- instead of connecting to a default address assumed by an higher-level API:
-
- ```php
- $connector = new FixedUriConnector(
- 'unix:///var/run/docker.sock',
- new UnixConnector($loop)
- );
-
- // destination will be ignored, actually connects to Unix domain socket
- $promise = $connector->connect('localhost:80');
- ```
-
-## 0.8.3 (2017-09-08)
-
-* Feature: Reduce memory consumption for failed connections
- (#113 by @valga)
-
-* Fix: Work around write chunk size for TLS streams for PHP < 7.1.14
- (#114 by @clue)
-
-## 0.8.2 (2017-08-25)
-
-* Feature: Update DNS dependency to support hosts file on all platforms
- (#112 by @clue)
-
- This means that connecting to hosts such as `localhost` will now work as
- expected across all platforms with no changes required:
-
- ```php
- $connector = new Connector($loop);
- $connector->connect('localhost:8080')->then(function ($connection) {
- // …
- });
- ```
-
-## 0.8.1 (2017-08-15)
-
-* Feature: Forward compatibility with upcoming EventLoop v1.0 and v0.5 and
- target evenement 3.0 a long side 2.0 and 1.0
- (#104 by @clue and #111 by @WyriHaximus)
-
-* Improve test suite by locking Travis distro so new defaults will not break the build and
- fix HHVM build for now again and ignore future HHVM build errors
- (#109 and #110 by @clue)
-
-* Minor documentation fixes
- (#103 by @christiaan and #108 by @hansott)
-
-## 0.8.0 (2017-05-09)
-
-* Feature: New `Server` class now acts as a facade for existing server classes
- and renamed old `Server` to `TcpServer` for advanced usage.
- (#96 and #97 by @clue)
-
- The `Server` class is now the main class in this package that implements the
- `ServerInterface` and allows you to accept incoming streaming connections,
- such as plaintext TCP/IP or secure TLS connection streams.
-
- > This is not a BC break and consumer code does not have to be updated.
-
-* Feature / BC break: All addresses are now URIs that include the URI scheme
- (#98 by @clue)
-
- ```diff
- - $parts = parse_url('tcp://' . $conn->getRemoteAddress());
- + $parts = parse_url($conn->getRemoteAddress());
- ```
-
-* Fix: Fix `unix://` addresses for Unix domain socket (UDS) paths
- (#100 by @clue)
-
-* Feature: Forward compatibility with Stream v1.0 and v0.7
- (#99 by @clue)
-
-## 0.7.2 (2017-04-24)
-
-* Fix: Work around latest PHP 7.0.18 and 7.1.4 no longer accepting full URIs
- (#94 by @clue)
-
-## 0.7.1 (2017-04-10)
-
-* Fix: Ignore HHVM errors when closing connection that is already closing
- (#91 by @clue)
-
-## 0.7.0 (2017-04-10)
-
-* Feature: Merge SocketClient component into this component
- (#87 by @clue)
-
- This means that this package now provides async, streaming plaintext TCP/IP
- and secure TLS socket server and client connections for ReactPHP.
-
- ```
- $connector = new React\Socket\Connector($loop);
- $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) {
- $connection->write('…');
- });
- ```
-
- Accordingly, the `ConnectionInterface` is now used to represent both incoming
- server side connections as well as outgoing client side connections.
-
- If you've previously used the SocketClient component to establish outgoing
- client connections, upgrading should take no longer than a few minutes.
- All classes have been merged as-is from the latest `v0.7.0` release with no
- other changes, so you can simply update your code to use the updated namespace
- like this:
-
- ```php
- // old from SocketClient component and namespace
- $connector = new React\SocketClient\Connector($loop);
- $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) {
- $connection->write('…');
- });
-
- // new
- $connector = new React\Socket\Connector($loop);
- $connector->connect('google.com:80')->then(function (ConnectionInterface $conn) {
- $connection->write('…');
- });
- ```
-
-## 0.6.0 (2017-04-04)
-
-* Feature: Add `LimitingServer` to limit and keep track of open connections
- (#86 by @clue)
-
- ```php
- $server = new Server(0, $loop);
- $server = new LimitingServer($server, 100);
-
- $server->on('connection', function (ConnectionInterface $connection) {
- $connection->write('hello there!' . PHP_EOL);
- …
- });
- ```
-
-* Feature / BC break: Add `pause()` and `resume()` methods to limit active
- connections
- (#84 by @clue)
-
- ```php
- $server = new Server(0, $loop);
- $server->pause();
-
- $loop->addTimer(1.0, function() use ($server) {
- $server->resume();
- });
- ```
-
-## 0.5.1 (2017-03-09)
-
-* Feature: Forward compatibility with Stream v0.5 and upcoming v0.6
- (#79 by @clue)
-
-## 0.5.0 (2017-02-14)
-
-* Feature / BC break: Replace `listen()` call with URIs passed to constructor
- and reject listening on hostnames with `InvalidArgumentException`
- and replace `ConnectionException` with `RuntimeException` for consistency
- (#61, #66 and #72 by @clue)
-
- ```php
- // old
- $server = new Server($loop);
- $server->listen(8080);
-
- // new
- $server = new Server(8080, $loop);
- ```
-
- Similarly, you can now pass a full listening URI to the constructor to change
- the listening host:
-
- ```php
- // old
- $server = new Server($loop);
- $server->listen(8080, '127.0.0.1');
-
- // new
- $server = new Server('127.0.0.1:8080', $loop);
- ```
-
- Trying to start listening on (DNS) host names will now throw an
- `InvalidArgumentException`, use IP addresses instead:
-
- ```php
- // old
- $server = new Server($loop);
- $server->listen(8080, 'localhost');
-
- // new
- $server = new Server('127.0.0.1:8080', $loop);
- ```
-
- If trying to listen fails (such as if port is already in use or port below
- 1024 may require root access etc.), it will now throw a `RuntimeException`,
- the `ConnectionException` class has been removed:
-
- ```php
- // old: throws React\Socket\ConnectionException
- $server = new Server($loop);
- $server->listen(80);
-
- // new: throws RuntimeException
- $server = new Server(80, $loop);
- ```
-
-* Feature / BC break: Rename `shutdown()` to `close()` for consistency throughout React
- (#62 by @clue)
-
- ```php
- // old
- $server->shutdown();
-
- // new
- $server->close();
- ```
-
-* Feature / BC break: Replace `getPort()` with `getAddress()`
- (#67 by @clue)
-
- ```php
- // old
- echo $server->getPort(); // 8080
-
- // new
- echo $server->getAddress(); // 127.0.0.1:8080
- ```
-
-* Feature / BC break: `getRemoteAddress()` returns full address instead of only IP
- (#65 by @clue)
-
- ```php
- // old
- echo $connection->getRemoteAddress(); // 192.168.0.1
-
- // new
- echo $connection->getRemoteAddress(); // 192.168.0.1:51743
- ```
-
-* Feature / BC break: Add `getLocalAddress()` method
- (#68 by @clue)
-
- ```php
- echo $connection->getLocalAddress(); // 127.0.0.1:8080
- ```
-
-* BC break: The `Server` and `SecureServer` class are now marked `final`
- and you can no longer `extend` them
- (which was never documented or recommended anyway).
- Public properties and event handlers are now internal only.
- Please use composition instead of extension.
- (#71, #70 and #69 by @clue)
-
-## 0.4.6 (2017-01-26)
-
-* Feature: Support socket context options passed to `Server`
- (#64 by @clue)
-
-* Fix: Properly return `null` for unknown addresses
- (#63 by @clue)
-
-* Improve documentation for `ServerInterface` and lock test suite requirements
- (#60 by @clue, #57 by @shaunbramley)
-
-## 0.4.5 (2017-01-08)
-
-* Feature: Add `SecureServer` for secure TLS connections
- (#55 by @clue)
-
-* Add functional integration tests
- (#54 by @clue)
-
-## 0.4.4 (2016-12-19)
-
-* Feature / Fix: `ConnectionInterface` should extend `DuplexStreamInterface` + documentation
- (#50 by @clue)
-
-* Feature / Fix: Improve test suite and switch to normal stream handler
- (#51 by @clue)
-
-* Feature: Add examples
- (#49 by @clue)
-
-## 0.4.3 (2016-03-01)
-
-* Bug fix: Suppress errors on stream_socket_accept to prevent PHP from crashing
-* Support for PHP7 and HHVM
-* Support PHP 5.3 again
-
-## 0.4.2 (2014-05-25)
-
-* Verify stream is a valid resource in Connection
-
-## 0.4.1 (2014-04-13)
-
-* Bug fix: Check read buffer for data before shutdown signal and end emit (@ArtyDev)
-* Bug fix: v0.3.4 changes merged for v0.4.1
-
-## 0.3.4 (2014-03-30)
-
-* Bug fix: Reset socket to non-blocking after shutting down (PHP bug)
-
-## 0.4.0 (2014-02-02)
-
-* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks
-* BC break: Update to React/Promise 2.0
-* BC break: Update to Evenement 2.0
-* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0
-* Bump React dependencies to v0.4
-
-## 0.3.3 (2013-07-08)
-
-* Version bump
-
-## 0.3.2 (2013-05-10)
-
-* Version bump
-
-## 0.3.1 (2013-04-21)
-
-* Feature: Support binding to IPv6 addresses (@clue)
-
-## 0.3.0 (2013-04-14)
-
-* Bump React dependencies to v0.3
-
-## 0.2.6 (2012-12-26)
-
-* Version bump
-
-## 0.2.3 (2012-11-14)
-
-* Version bump
-
-## 0.2.0 (2012-09-10)
-
-* Bump React dependencies to v0.2
-
-## 0.1.1 (2012-07-12)
-
-* Version bump
-
-## 0.1.0 (2012-07-11)
-
-* First tagged release
diff --git a/assets/php/vendor/react/socket/LICENSE b/assets/php/vendor/react/socket/LICENSE
deleted file mode 100755
index a808108..0000000
--- a/assets/php/vendor/react/socket/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Igor Wiedler, Chris Boden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/socket/README.md b/assets/php/vendor/react/socket/README.md
deleted file mode 100755
index e8b53a0..0000000
--- a/assets/php/vendor/react/socket/README.md
+++ /dev/null
@@ -1,1419 +0,0 @@
-# Socket
-
-[![Build Status](https://travis-ci.org/reactphp/socket.svg?branch=master)](https://travis-ci.org/reactphp/socket)
-
-Async, streaming plaintext TCP/IP and secure TLS socket server and client
-connections for [ReactPHP](https://reactphp.org/).
-
-The socket library provides re-usable interfaces for a socket-layer
-server and client based on the [`EventLoop`](https://github.com/reactphp/event-loop)
-and [`Stream`](https://github.com/reactphp/stream) components.
-Its server component allows you to build networking servers that accept incoming
-connections from networking clients (such as an HTTP server).
-Its client component allows you to build networking clients that establish
-outgoing connections to networking servers (such as an HTTP or database client).
-This library provides async, streaming means for all of this, so you can
-handle multiple concurrent connections without blocking.
-
-**Table of Contents**
-
-* [Quickstart example](#quickstart-example)
-* [Connection usage](#connection-usage)
- * [ConnectionInterface](#connectioninterface)
- * [getRemoteAddress()](#getremoteaddress)
- * [getLocalAddress()](#getlocaladdress)
-* [Server usage](#server-usage)
- * [ServerInterface](#serverinterface)
- * [connection event](#connection-event)
- * [error event](#error-event)
- * [getAddress()](#getaddress)
- * [pause()](#pause)
- * [resume()](#resume)
- * [close()](#close)
- * [Server](#server)
- * [Advanced server usage](#advanced-server-usage)
- * [TcpServer](#tcpserver)
- * [SecureServer](#secureserver)
- * [UnixServer](#unixserver)
- * [LimitingServer](#limitingserver)
- * [getConnections()](#getconnections)
-* [Client usage](#client-usage)
- * [ConnectorInterface](#connectorinterface)
- * [connect()](#connect)
- * [Connector](#connector)
- * [Advanced client usage](#advanced-client-usage)
- * [TcpConnector](#tcpconnector)
- * [DnsConnector](#dnsconnector)
- * [SecureConnector](#secureconnector)
- * [TimeoutConnector](#timeoutconnector)
- * [UnixConnector](#unixconnector)
- * [FixUriConnector](#fixeduriconnector)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-
-## Quickstart example
-
-Here is a server that closes the connection if you send it anything:
-
-```php
-$loop = React\EventLoop\Factory::create();
-$socket = new React\Socket\Server('127.0.0.1:8080', $loop);
-
-$socket->on('connection', function (ConnectionInterface $conn) {
- $conn->write("Hello " . $conn->getRemoteAddress() . "!\n");
- $conn->write("Welcome to this amazing server!\n");
- $conn->write("Here's a tip: don't say anything.\n");
-
- $conn->on('data', function ($data) use ($conn) {
- $conn->close();
- });
-});
-
-$loop->run();
-```
-
-See also the [examples](examples).
-
-Here's a client that outputs the output of said server and then attempts to
-send it a string:
-
-```php
-$loop = React\EventLoop\Factory::create();
-$connector = new React\Socket\Connector($loop);
-
-$connector->connect('127.0.0.1:8080')->then(function (ConnectionInterface $conn) use ($loop) {
- $conn->pipe(new React\Stream\WritableResourceStream(STDOUT, $loop));
- $conn->write("Hello World!\n");
-});
-
-$loop->run();
-```
-
-## Connection usage
-
-### ConnectionInterface
-
-The `ConnectionInterface` is used to represent any incoming and outgoing
-connection, such as a normal TCP/IP connection.
-
-An incoming or outgoing connection is a duplex stream (both readable and
-writable) that implements React's
-[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
-It contains additional properties for the local and remote address (client IP)
-where this connection has been established to/from.
-
-Most commonly, instances implementing this `ConnectionInterface` are emitted
-by all classes implementing the [`ServerInterface`](#serverinterface) and
-used by all classes implementing the [`ConnectorInterface`](#connectorinterface).
-
-Because the `ConnectionInterface` implements the underlying
-[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface)
-you can use any of its events and methods as usual:
-
-```php
-$connection->on('data', function ($chunk) {
- echo $chunk;
-});
-
-$connection->on('end', function () {
- echo 'ended';
-});
-
-$connection->on('error', function (Exception $e) {
- echo 'error: ' . $e->getMessage();
-});
-
-$connection->on('close', function () {
- echo 'closed';
-});
-
-$connection->write($data);
-$connection->end($data = null);
-$connection->close();
-// …
-```
-
-For more details, see the
-[`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
-
-#### getRemoteAddress()
-
-The `getRemoteAddress(): ?string` method returns the full remote address
-(URI) where this connection has been established with.
-
-```php
-$address = $connection->getRemoteAddress();
-echo 'Connection with ' . $address . PHP_EOL;
-```
-
-If the remote address can not be determined or is unknown at this time (such as
-after the connection has been closed), it MAY return a `NULL` value instead.
-
-Otherwise, it will return the full address (URI) as a string value, such
-as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
-`unix://example.sock` or `unix:///path/to/example.sock`.
-Note that individual URI components are application specific and depend
-on the underlying transport protocol.
-
-If this is a TCP/IP based connection and you only want the remote IP, you may
-use something like this:
-
-```php
-$address = $connection->getRemoteAddress();
-$ip = trim(parse_url($address, PHP_URL_HOST), '[]');
-echo 'Connection with ' . $ip . PHP_EOL;
-```
-
-#### getLocalAddress()
-
-The `getLocalAddress(): ?string` method returns the full local address
-(URI) where this connection has been established with.
-
-```php
-$address = $connection->getLocalAddress();
-echo 'Connection with ' . $address . PHP_EOL;
-```
-
-If the local address can not be determined or is unknown at this time (such as
-after the connection has been closed), it MAY return a `NULL` value instead.
-
-Otherwise, it will return the full address (URI) as a string value, such
-as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
-`unix://example.sock` or `unix:///path/to/example.sock`.
-Note that individual URI components are application specific and depend
-on the underlying transport protocol.
-
-This method complements the [`getRemoteAddress()`](#getremoteaddress) method,
-so they should not be confused.
-
-If your `TcpServer` instance is listening on multiple interfaces (e.g. using
-the address `0.0.0.0`), you can use this method to find out which interface
-actually accepted this connection (such as a public or local interface).
-
-If your system has multiple interfaces (e.g. a WAN and a LAN interface),
-you can use this method to find out which interface was actually
-used for this connection.
-
-## Server usage
-
-### ServerInterface
-
-The `ServerInterface` is responsible for providing an interface for accepting
-incoming streaming connections, such as a normal TCP/IP connection.
-
-Most higher-level components (such as a HTTP server) accept an instance
-implementing this interface to accept incoming streaming connections.
-This is usually done via dependency injection, so it's fairly simple to actually
-swap this implementation against any other implementation of this interface.
-This means that you SHOULD typehint against this interface instead of a concrete
-implementation of this interface.
-
-Besides defining a few methods, this interface also implements the
-[`EventEmitterInterface`](https://github.com/igorw/evenement)
-which allows you to react to certain events.
-
-#### connection event
-
-The `connection` event will be emitted whenever a new connection has been
-established, i.e. a new client connects to this server socket:
-
-```php
-$server->on('connection', function (ConnectionInterface $connection) {
- echo 'new connection' . PHP_EOL;
-});
-```
-
-See also the [`ConnectionInterface`](#connectioninterface) for more details
-about handling the incoming connection.
-
-#### error event
-
-The `error` event will be emitted whenever there's an error accepting a new
-connection from a client.
-
-```php
-$server->on('error', function (Exception $e) {
- echo 'error: ' . $e->getMessage() . PHP_EOL;
-});
-```
-
-Note that this is not a fatal error event, i.e. the server keeps listening for
-new connections even after this event.
-
-
-#### getAddress()
-
-The `getAddress(): ?string` method can be used to
-return the full address (URI) this server is currently listening on.
-
-```php
-$address = $server->getAddress();
-echo 'Server listening on ' . $address . PHP_EOL;
-```
-
-If the address can not be determined or is unknown at this time (such as
-after the socket has been closed), it MAY return a `NULL` value instead.
-
-Otherwise, it will return the full address (URI) as a string value, such
-as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`
-`unix://example.sock` or `unix:///path/to/example.sock`.
-Note that individual URI components are application specific and depend
-on the underlying transport protocol.
-
-If this is a TCP/IP based server and you only want the local port, you may
-use something like this:
-
-```php
-$address = $server->getAddress();
-$port = parse_url($address, PHP_URL_PORT);
-echo 'Server listening on port ' . $port . PHP_EOL;
-```
-
-#### pause()
-
-The `pause(): void` method can be used to
-pause accepting new incoming connections.
-
-Removes the socket resource from the EventLoop and thus stop accepting
-new connections. Note that the listening socket stays active and is not
-closed.
-
-This means that new incoming connections will stay pending in the
-operating system backlog until its configurable backlog is filled.
-Once the backlog is filled, the operating system may reject further
-incoming connections until the backlog is drained again by resuming
-to accept new connections.
-
-Once the server is paused, no futher `connection` events SHOULD
-be emitted.
-
-```php
-$server->pause();
-
-$server->on('connection', assertShouldNeverCalled());
-```
-
-This method is advisory-only, though generally not recommended, the
-server MAY continue emitting `connection` events.
-
-Unless otherwise noted, a successfully opened server SHOULD NOT start
-in paused state.
-
-You can continue processing events by calling `resume()` again.
-
-Note that both methods can be called any number of times, in particular
-calling `pause()` more than once SHOULD NOT have any effect.
-Similarly, calling this after `close()` is a NO-OP.
-
-#### resume()
-
-The `resume(): void` method can be used to
-resume accepting new incoming connections.
-
-Re-attach the socket resource to the EventLoop after a previous `pause()`.
-
-```php
-$server->pause();
-
-$loop->addTimer(1.0, function () use ($server) {
- $server->resume();
-});
-```
-
-Note that both methods can be called any number of times, in particular
-calling `resume()` without a prior `pause()` SHOULD NOT have any effect.
-Similarly, calling this after `close()` is a NO-OP.
-
-#### close()
-
-The `close(): void` method can be used to
-shut down this listening socket.
-
-This will stop listening for new incoming connections on this socket.
-
-```php
-echo 'Shutting down server socket' . PHP_EOL;
-$server->close();
-```
-
-Calling this method more than once on the same instance is a NO-OP.
-
-### Server
-
-The `Server` class is the main class in this package that implements the
-[`ServerInterface`](#serverinterface) and allows you to accept incoming
-streaming connections, such as plaintext TCP/IP or secure TLS connection streams.
-Connections can also be accepted on Unix domain sockets.
-
-```php
-$server = new Server(8080, $loop);
-```
-
-As above, the `$uri` parameter can consist of only a port, in which case the
-server will default to listening on the localhost address `127.0.0.1`,
-which means it will not be reachable from outside of this system.
-
-In order to use a random port assignment, you can use the port `0`:
-
-```php
-$server = new Server(0, $loop);
-$address = $server->getAddress();
-```
-
-In order to change the host the socket is listening on, you can provide an IP
-address through the first parameter provided to the constructor, optionally
-preceded by the `tcp://` scheme:
-
-```php
-$server = new Server('192.168.0.1:8080', $loop);
-```
-
-If you want to listen on an IPv6 address, you MUST enclose the host in square
-brackets:
-
-```php
-$server = new Server('[::1]:8080', $loop);
-```
-
-To listen on a Unix domain socket (UDS) path, you MUST prefix the URI with the
-`unix://` scheme:
-
-```php
-$server = new Server('unix:///tmp/server.sock', $loop);
-```
-
-If the given URI is invalid, does not contain a port, any other scheme or if it
-contains a hostname, it will throw an `InvalidArgumentException`:
-
-```php
-// throws InvalidArgumentException due to missing port
-$server = new Server('127.0.0.1', $loop);
-```
-
-If the given URI appears to be valid, but listening on it fails (such as if port
-is already in use or port below 1024 may require root access etc.), it will
-throw a `RuntimeException`:
-
-```php
-$first = new Server(8080, $loop);
-
-// throws RuntimeException because port is already in use
-$second = new Server(8080, $loop);
-```
-
-> Note that these error conditions may vary depending on your system and/or
- configuration.
- See the exception message and code for more details about the actual error
- condition.
-
-Optionally, you can specify [TCP socket context options](http://php.net/manual/en/context.socket.php)
-for the underlying stream socket resource like this:
-
-```php
-$server = new Server('[::1]:8080', $loop, array(
- 'tcp' => array(
- 'backlog' => 200,
- 'so_reuseport' => true,
- 'ipv6_v6only' => true
- )
-));
-```
-
-> Note that available [socket context options](http://php.net/manual/en/context.socket.php),
- their defaults and effects of changing these may vary depending on your system
- and/or PHP version.
- Passing unknown context options has no effect.
- For BC reasons, you can also pass the TCP socket context options as a simple
- array without wrapping this in another array under the `tcp` key.
-
-You can start a secure TLS (formerly known as SSL) server by simply prepending
-the `tls://` URI scheme.
-Internally, it will wait for plaintext TCP/IP connections and then performs a
-TLS handshake for each connection.
-It thus requires valid [TLS context options](http://php.net/manual/en/context.ssl.php),
-which in its most basic form may look something like this if you're using a
-PEM encoded certificate file:
-
-```php
-$server = new Server('tls://127.0.0.1:8080', $loop, array(
- 'tls' => array(
- 'local_cert' => 'server.pem'
- )
-));
-```
-
-> Note that the certificate file will not be loaded on instantiation but when an
- incoming connection initializes its TLS context.
- This implies that any invalid certificate file paths or contents will only cause
- an `error` event at a later time.
-
-If your private key is encrypted with a passphrase, you have to specify it
-like this:
-
-```php
-$server = new Server('tls://127.0.0.1:8000', $loop, array(
- 'tls' => array(
- 'local_cert' => 'server.pem',
- 'passphrase' => 'secret'
- )
-));
-```
-
-By default, this server supports TLSv1.0+ and excludes support for legacy
-SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
-want to negotiate with the remote side:
-
-```php
-$server = new Server('tls://127.0.0.1:8000', $loop, array(
- 'tls' => array(
- 'local_cert' => 'server.pem',
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER
- )
-));
-```
-
-> Note that available [TLS context options](http://php.net/manual/en/context.ssl.php),
- their defaults and effects of changing these may vary depending on your system
- and/or PHP version.
- The outer context array allows you to also use `tcp` (and possibly more)
- context options at the same time.
- Passing unknown context options has no effect.
- If you do not use the `tls://` scheme, then passing `tls` context options
- has no effect.
-
-Whenever a client connects, it will emit a `connection` event with a connection
-instance implementing [`ConnectionInterface`](#connectioninterface):
-
-```php
-$server->on('connection', function (ConnectionInterface $connection) {
- echo 'Plaintext connection from ' . $connection->getRemoteAddress() . PHP_EOL;
-
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-See also the [`ServerInterface`](#serverinterface) for more details.
-
-> Note that the `Server` class is a concrete implementation for TCP/IP sockets.
- If you want to typehint in your higher-level protocol implementation, you SHOULD
- use the generic [`ServerInterface`](#serverinterface) instead.
-
-### Advanced server usage
-
-#### TcpServer
-
-The `TcpServer` class implements the [`ServerInterface`](#serverinterface) and
-is responsible for accepting plaintext TCP/IP connections.
-
-```php
-$server = new TcpServer(8080, $loop);
-```
-
-As above, the `$uri` parameter can consist of only a port, in which case the
-server will default to listening on the localhost address `127.0.0.1`,
-which means it will not be reachable from outside of this system.
-
-In order to use a random port assignment, you can use the port `0`:
-
-```php
-$server = new TcpServer(0, $loop);
-$address = $server->getAddress();
-```
-
-In order to change the host the socket is listening on, you can provide an IP
-address through the first parameter provided to the constructor, optionally
-preceded by the `tcp://` scheme:
-
-```php
-$server = new TcpServer('192.168.0.1:8080', $loop);
-```
-
-If you want to listen on an IPv6 address, you MUST enclose the host in square
-brackets:
-
-```php
-$server = new TcpServer('[::1]:8080', $loop);
-```
-
-If the given URI is invalid, does not contain a port, any other scheme or if it
-contains a hostname, it will throw an `InvalidArgumentException`:
-
-```php
-// throws InvalidArgumentException due to missing port
-$server = new TcpServer('127.0.0.1', $loop);
-```
-
-If the given URI appears to be valid, but listening on it fails (such as if port
-is already in use or port below 1024 may require root access etc.), it will
-throw a `RuntimeException`:
-
-```php
-$first = new TcpServer(8080, $loop);
-
-// throws RuntimeException because port is already in use
-$second = new TcpServer(8080, $loop);
-```
-
-> Note that these error conditions may vary depending on your system and/or
-configuration.
-See the exception message and code for more details about the actual error
-condition.
-
-Optionally, you can specify [socket context options](http://php.net/manual/en/context.socket.php)
-for the underlying stream socket resource like this:
-
-```php
-$server = new TcpServer('[::1]:8080', $loop, array(
- 'backlog' => 200,
- 'so_reuseport' => true,
- 'ipv6_v6only' => true
-));
-```
-
-> Note that available [socket context options](http://php.net/manual/en/context.socket.php),
-their defaults and effects of changing these may vary depending on your system
-and/or PHP version.
-Passing unknown context options has no effect.
-
-Whenever a client connects, it will emit a `connection` event with a connection
-instance implementing [`ConnectionInterface`](#connectioninterface):
-
-```php
-$server->on('connection', function (ConnectionInterface $connection) {
- echo 'Plaintext connection from ' . $connection->getRemoteAddress() . PHP_EOL;
-
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-See also the [`ServerInterface`](#serverinterface) for more details.
-
-#### SecureServer
-
-The `SecureServer` class implements the [`ServerInterface`](#serverinterface)
-and is responsible for providing a secure TLS (formerly known as SSL) server.
-
-It does so by wrapping a [`TcpServer`](#tcpserver) instance which waits for plaintext
-TCP/IP connections and then performs a TLS handshake for each connection.
-It thus requires valid [TLS context options](http://php.net/manual/en/context.ssl.php),
-which in its most basic form may look something like this if you're using a
-PEM encoded certificate file:
-
-```php
-$server = new TcpServer(8000, $loop);
-$server = new SecureServer($server, $loop, array(
- 'local_cert' => 'server.pem'
-));
-```
-
-> Note that the certificate file will not be loaded on instantiation but when an
-incoming connection initializes its TLS context.
-This implies that any invalid certificate file paths or contents will only cause
-an `error` event at a later time.
-
-If your private key is encrypted with a passphrase, you have to specify it
-like this:
-
-```php
-$server = new TcpServer(8000, $loop);
-$server = new SecureServer($server, $loop, array(
- 'local_cert' => 'server.pem',
- 'passphrase' => 'secret'
-));
-```
-
-By default, this server supports TLSv1.0+ and excludes support for legacy
-SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
-want to negotiate with the remote side:
-
-```php
-$server = new TcpServer(8000, $loop);
-$server = new SecureServer($server, $loop, array(
- 'local_cert' => 'server.pem',
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_SERVER
-));
-```
-
-> Note that available [TLS context options](http://php.net/manual/en/context.ssl.php),
-their defaults and effects of changing these may vary depending on your system
-and/or PHP version.
-Passing unknown context options has no effect.
-
-Whenever a client completes the TLS handshake, it will emit a `connection` event
-with a connection instance implementing [`ConnectionInterface`](#connectioninterface):
-
-```php
-$server->on('connection', function (ConnectionInterface $connection) {
- echo 'Secure connection from' . $connection->getRemoteAddress() . PHP_EOL;
-
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-Whenever a client fails to perform a successful TLS handshake, it will emit an
-`error` event and then close the underlying TCP/IP connection:
-
-```php
-$server->on('error', function (Exception $e) {
- echo 'Error' . $e->getMessage() . PHP_EOL;
-});
-```
-
-See also the [`ServerInterface`](#serverinterface) for more details.
-
-Note that the `SecureServer` class is a concrete implementation for TLS sockets.
-If you want to typehint in your higher-level protocol implementation, you SHOULD
-use the generic [`ServerInterface`](#serverinterface) instead.
-
-> Advanced usage: Despite allowing any `ServerInterface` as first parameter,
-you SHOULD pass a `TcpServer` instance as first parameter, unless you
-know what you're doing.
-Internally, the `SecureServer` has to set the required TLS context options on
-the underlying stream resources.
-These resources are not exposed through any of the interfaces defined in this
-package, but only through the internal `Connection` class.
-The `TcpServer` class is guaranteed to emit connections that implement
-the `ConnectionInterface` and uses the internal `Connection` class in order to
-expose these underlying resources.
-If you use a custom `ServerInterface` and its `connection` event does not
-meet this requirement, the `SecureServer` will emit an `error` event and
-then close the underlying connection.
-
-#### UnixServer
-
-The `UnixServer` class implements the [`ServerInterface`](#serverinterface) and
-is responsible for accepting connections on Unix domain sockets (UDS).
-
-```php
-$server = new UnixServer('/tmp/server.sock', $loop);
-```
-
-As above, the `$uri` parameter can consist of only a socket path or socket path
-prefixed by the `unix://` scheme.
-
-If the given URI appears to be valid, but listening on it fails (such as if the
-socket is already in use or the file not accessible etc.), it will throw a
-`RuntimeException`:
-
-```php
-$first = new UnixServer('/tmp/same.sock', $loop);
-
-// throws RuntimeException because socket is already in use
-$second = new UnixServer('/tmp/same.sock', $loop);
-```
-
-Whenever a client connects, it will emit a `connection` event with a connection
-instance implementing [`ConnectionInterface`](#connectioninterface):
-
-```php
-$server->on('connection', function (ConnectionInterface $connection) {
- echo 'New connection' . PHP_EOL;
-
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-See also the [`ServerInterface`](#serverinterface) for more details.
-
-#### LimitingServer
-
-The `LimitingServer` decorator wraps a given `ServerInterface` and is responsible
-for limiting and keeping track of open connections to this server instance.
-
-Whenever the underlying server emits a `connection` event, it will check its
-limits and then either
- - keep track of this connection by adding it to the list of
- open connections and then forward the `connection` event
- - or reject (close) the connection when its limits are exceeded and will
- forward an `error` event instead.
-
-Whenever a connection closes, it will remove this connection from the list of
-open connections.
-
-```php
-$server = new LimitingServer($server, 100);
-$server->on('connection', function (ConnectionInterface $connection) {
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-See also the [second example](examples) for more details.
-
-You have to pass a maximum number of open connections to ensure
-the server will automatically reject (close) connections once this limit
-is exceeded. In this case, it will emit an `error` event to inform about
-this and no `connection` event will be emitted.
-
-```php
-$server = new LimitingServer($server, 100);
-$server->on('connection', function (ConnectionInterface $connection) {
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-You MAY pass a `null` limit in order to put no limit on the number of
-open connections and keep accepting new connection until you run out of
-operating system resources (such as open file handles). This may be
-useful if you do not want to take care of applying a limit but still want
-to use the `getConnections()` method.
-
-You can optionally configure the server to pause accepting new
-connections once the connection limit is reached. In this case, it will
-pause the underlying server and no longer process any new connections at
-all, thus also no longer closing any excessive connections.
-The underlying operating system is responsible for keeping a backlog of
-pending connections until its limit is reached, at which point it will
-start rejecting further connections.
-Once the server is below the connection limit, it will continue consuming
-connections from the backlog and will process any outstanding data on
-each connection.
-This mode may be useful for some protocols that are designed to wait for
-a response message (such as HTTP), but may be less useful for other
-protocols that demand immediate responses (such as a "welcome" message in
-an interactive chat).
-
-```php
-$server = new LimitingServer($server, 100, true);
-$server->on('connection', function (ConnectionInterface $connection) {
- $connection->write('hello there!' . PHP_EOL);
- …
-});
-```
-
-##### getConnections()
-
-The `getConnections(): ConnectionInterface[]` method can be used to
-return an array with all currently active connections.
-
-```php
-foreach ($server->getConnection() as $connection) {
- $connection->write('Hi!');
-}
-```
-
-## Client usage
-
-### ConnectorInterface
-
-The `ConnectorInterface` is responsible for providing an interface for
-establishing streaming connections, such as a normal TCP/IP connection.
-
-This is the main interface defined in this package and it is used throughout
-React's vast ecosystem.
-
-Most higher-level components (such as HTTP, database or other networking
-service clients) accept an instance implementing this interface to create their
-TCP/IP connection to the underlying networking service.
-This is usually done via dependency injection, so it's fairly simple to actually
-swap this implementation against any other implementation of this interface.
-
-The interface only offers a single method:
-
-#### connect()
-
-The `connect(string $uri): PromiseInterface<ConnectionInterface, Exception>` method
-can be used to create a streaming connection to the given remote address.
-
-It returns a [Promise](https://github.com/reactphp/promise) which either
-fulfills with a stream implementing [`ConnectionInterface`](#connectioninterface)
-on success or rejects with an `Exception` if the connection is not successful:
-
-```php
-$connector->connect('google.com:443')->then(
- function (ConnectionInterface $connection) {
- // connection successfully established
- },
- function (Exception $error) {
- // failed to connect due to $error
- }
-);
-```
-
-See also [`ConnectionInterface`](#connectioninterface) for more details.
-
-The returned Promise MUST be implemented in such a way that it can be
-cancelled when it is still pending. Cancelling a pending promise MUST
-reject its value with an `Exception`. It SHOULD clean up any underlying
-resources and references as applicable:
-
-```php
-$promise = $connector->connect($uri);
-
-$promise->cancel();
-```
-
-### Connector
-
-The `Connector` class is the main class in this package that implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to create streaming connections.
-
-You can use this connector to create any kind of streaming connections, such
-as plaintext TCP/IP, secure TLS or local Unix connection streams.
-
-It binds to the main event loop and can be used like this:
-
-```php
-$loop = React\EventLoop\Factory::create();
-$connector = new Connector($loop);
-
-$connector->connect($uri)->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-
-$loop->run();
-```
-
-In order to create a plaintext TCP/IP connection, you can simply pass a host
-and port combination like this:
-
-```php
-$connector->connect('www.google.com:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-> If you do no specify a URI scheme in the destination URI, it will assume
- `tcp://` as a default and establish a plaintext TCP/IP connection.
- Note that TCP/IP connections require a host and port part in the destination
- URI like above, all other URI components are optional.
-
-In order to create a secure TLS connection, you can use the `tls://` URI scheme
-like this:
-
-```php
-$connector->connect('tls://www.google.com:443')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-In order to create a local Unix domain socket connection, you can use the
-`unix://` URI scheme like this:
-
-```php
-$connector->connect('unix:///tmp/demo.sock')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-> The [`getRemoteAddress()`](#getremoteaddress) method will return the target
- Unix domain socket (UDS) path as given to the `connect()` method, including
- the `unix://` scheme, for example `unix:///tmp/demo.sock`.
- The [`getLocalAddress()`](#getlocaladdress) method will most likely return a
- `null` value as this value is not applicable to UDS connections here.
-
-Under the hood, the `Connector` is implemented as a *higher-level facade*
-for the lower-level connectors implemented in this package. This means it
-also shares all of their features and implementation details.
-If you want to typehint in your higher-level protocol implementation, you SHOULD
-use the generic [`ConnectorInterface`](#connectorinterface) instead.
-
-The `Connector` class will try to detect your system DNS settings (and uses
-Google's public DNS server `8.8.8.8` as a fallback if unable to determine your
-system settings) to resolve all public hostnames into underlying IP addresses by
-default.
-If you explicitly want to use a custom DNS server (such as a local DNS relay or
-a company wide DNS server), you can set up the `Connector` like this:
-
-```php
-$connector = new Connector($loop, array(
- 'dns' => '127.0.1.1'
-));
-
-$connector->connect('localhost:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-If you do not want to use a DNS resolver at all and want to connect to IP
-addresses only, you can also set up your `Connector` like this:
-
-```php
-$connector = new Connector($loop, array(
- 'dns' => false
-));
-
-$connector->connect('127.0.0.1:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-Advanced: If you need a custom DNS `Resolver` instance, you can also set up
-your `Connector` like this:
-
-```php
-$dnsResolverFactory = new React\Dns\Resolver\Factory();
-$resolver = $dnsResolverFactory->createCached('127.0.1.1', $loop);
-
-$connector = new Connector($loop, array(
- 'dns' => $resolver
-));
-
-$connector->connect('localhost:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-By default, the `tcp://` and `tls://` URI schemes will use timeout value that
-repects your `default_socket_timeout` ini setting (which defaults to 60s).
-If you want a custom timeout value, you can simply pass this like this:
-
-```php
-$connector = new Connector($loop, array(
- 'timeout' => 10.0
-));
-```
-
-Similarly, if you do not want to apply a timeout at all and let the operating
-system handle this, you can pass a boolean flag like this:
-
-```php
-$connector = new Connector($loop, array(
- 'timeout' => false
-));
-```
-
-By default, the `Connector` supports the `tcp://`, `tls://` and `unix://`
-URI schemes. If you want to explicitly prohibit any of these, you can simply
-pass boolean flags like this:
-
-```php
-// only allow secure TLS connections
-$connector = new Connector($loop, array(
- 'tcp' => false,
- 'tls' => true,
- 'unix' => false,
-));
-
-$connector->connect('tls://google.com:443')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-The `tcp://` and `tls://` also accept additional context options passed to
-the underlying connectors.
-If you want to explicitly pass additional context options, you can simply
-pass arrays of context options like this:
-
-```php
-// allow insecure TLS connections
-$connector = new Connector($loop, array(
- 'tcp' => array(
- 'bindto' => '192.168.0.1:0'
- ),
- 'tls' => array(
- 'verify_peer' => false,
- 'verify_peer_name' => false
- ),
-));
-
-$connector->connect('tls://localhost:443')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-By default, this connector supports TLSv1.0+ and excludes support for legacy
-SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
-want to negotiate with the remote side:
-
-```php
-$connector = new Connector($loop, array(
- 'tls' => array(
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
- )
-));
-```
-
-> For more details about context options, please refer to the PHP documentation
- about [socket context options](http://php.net/manual/en/context.socket.php)
- and [SSL context options](http://php.net/manual/en/context.ssl.php).
-
-Advanced: By default, the `Connector` supports the `tcp://`, `tls://` and
-`unix://` URI schemes.
-For this, it sets up the required connector classes automatically.
-If you want to explicitly pass custom connectors for any of these, you can simply
-pass an instance implementing the `ConnectorInterface` like this:
-
-```php
-$dnsResolverFactory = new React\Dns\Resolver\Factory();
-$resolver = $dnsResolverFactory->createCached('127.0.1.1', $loop);
-$tcp = new DnsConnector(new TcpConnector($loop), $resolver);
-
-$tls = new SecureConnector($tcp, $loop);
-
-$unix = new UnixConnector($loop);
-
-$connector = new Connector($loop, array(
- 'tcp' => $tcp,
- 'tls' => $tls,
- 'unix' => $unix,
-
- 'dns' => false,
- 'timeout' => false,
-));
-
-$connector->connect('google.com:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-```
-
-> Internally, the `tcp://` connector will always be wrapped by the DNS resolver,
- unless you disable DNS like in the above example. In this case, the `tcp://`
- connector receives the actual hostname instead of only the resolved IP address
- and is thus responsible for performing the lookup.
- Internally, the automatically created `tls://` connector will always wrap the
- underlying `tcp://` connector for establishing the underlying plaintext
- TCP/IP connection before enabling secure TLS mode. If you want to use a custom
- underlying `tcp://` connector for secure TLS connections only, you may
- explicitly pass a `tls://` connector like above instead.
- Internally, the `tcp://` and `tls://` connectors will always be wrapped by
- `TimeoutConnector`, unless you disable timeouts like in the above example.
-
-### Advanced client usage
-
-#### TcpConnector
-
-The `React\Socket\TcpConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to create plaintext
-TCP/IP connections to any IP-port-combination:
-
-```php
-$tcpConnector = new React\Socket\TcpConnector($loop);
-
-$tcpConnector->connect('127.0.0.1:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-
-$loop->run();
-```
-
-See also the [examples](examples).
-
-Pending connection attempts can be cancelled by cancelling its pending promise like so:
-
-```php
-$promise = $tcpConnector->connect('127.0.0.1:80');
-
-$promise->cancel();
-```
-
-Calling `cancel()` on a pending promise will close the underlying socket
-resource, thus cancelling the pending TCP/IP connection, and reject the
-resulting promise.
-
-You can optionally pass additional
-[socket context options](http://php.net/manual/en/context.socket.php)
-to the constructor like this:
-
-```php
-$tcpConnector = new React\Socket\TcpConnector($loop, array(
- 'bindto' => '192.168.0.1:0'
-));
-```
-
-Note that this class only allows you to connect to IP-port-combinations.
-If the given URI is invalid, does not contain a valid IP address and port
-or contains any other scheme, it will reject with an
-`InvalidArgumentException`:
-
-If the given URI appears to be valid, but connecting to it fails (such as if
-the remote host rejects the connection etc.), it will reject with a
-`RuntimeException`.
-
-If you want to connect to hostname-port-combinations, see also the following chapter.
-
-> Advanced usage: Internally, the `TcpConnector` allocates an empty *context*
-resource for each stream resource.
-If the destination URI contains a `hostname` query parameter, its value will
-be used to set up the TLS peer name.
-This is used by the `SecureConnector` and `DnsConnector` to verify the peer
-name and can also be used if you want a custom TLS peer name.
-
-#### DnsConnector
-
-The `DnsConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to create plaintext
-TCP/IP connections to any hostname-port-combination.
-
-It does so by decorating a given `TcpConnector` instance so that it first
-looks up the given domain name via DNS (if applicable) and then establishes the
-underlying TCP/IP connection to the resolved target IP address.
-
-Make sure to set up your DNS resolver and underlying TCP connector like this:
-
-```php
-$dnsResolverFactory = new React\Dns\Resolver\Factory();
-$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
-
-$dnsConnector = new React\Socket\DnsConnector($tcpConnector, $dns);
-
-$dnsConnector->connect('www.google.com:80')->then(function (ConnectionInterface $connection) {
- $connection->write('...');
- $connection->end();
-});
-
-$loop->run();
-```
-
-See also the [examples](examples).
-
-Pending connection attempts can be cancelled by cancelling its pending promise like so:
-
-```php
-$promise = $dnsConnector->connect('www.google.com:80');
-
-$promise->cancel();
-```
-
-Calling `cancel()` on a pending promise will cancel the underlying DNS lookup
-and/or the underlying TCP/IP connection and reject the resulting promise.
-
-> Advanced usage: Internally, the `DnsConnector` relies on a `Resolver` to
-look up the IP address for the given hostname.
-It will then replace the hostname in the destination URI with this IP and
-append a `hostname` query parameter and pass this updated URI to the underlying
-connector.
-The underlying connector is thus responsible for creating a connection to the
-target IP address, while this query parameter can be used to check the original
-hostname and is used by the `TcpConnector` to set up the TLS peer name.
-If a `hostname` is given explicitly, this query parameter will not be modified,
-which can be useful if you want a custom TLS peer name.
-
-#### SecureConnector
-
-The `SecureConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to create secure
-TLS (formerly known as SSL) connections to any hostname-port-combination.
-
-It does so by decorating a given `DnsConnector` instance so that it first
-creates a plaintext TCP/IP connection and then enables TLS encryption on this
-stream.
-
-```php
-$secureConnector = new React\Socket\SecureConnector($dnsConnector, $loop);
-
-$secureConnector->connect('www.google.com:443')->then(function (ConnectionInterface $connection) {
- $connection->write("GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n");
- ...
-});
-
-$loop->run();
-```
-
-See also the [examples](examples).
-
-Pending connection attempts can be cancelled by cancelling its pending promise like so:
-
-```php
-$promise = $secureConnector->connect('www.google.com:443');
-
-$promise->cancel();
-```
-
-Calling `cancel()` on a pending promise will cancel the underlying TCP/IP
-connection and/or the SSL/TLS negotiation and reject the resulting promise.
-
-You can optionally pass additional
-[SSL context options](http://php.net/manual/en/context.ssl.php)
-to the constructor like this:
-
-```php
-$secureConnector = new React\Socket\SecureConnector($dnsConnector, $loop, array(
- 'verify_peer' => false,
- 'verify_peer_name' => false
-));
-```
-
-By default, this connector supports TLSv1.0+ and excludes support for legacy
-SSLv2/SSLv3. As of PHP 5.6+ you can also explicitly choose the TLS version you
-want to negotiate with the remote side:
-
-```php
-$secureConnector = new React\Socket\SecureConnector($dnsConnector, $loop, array(
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
-));
-```
-
-> Advanced usage: Internally, the `SecureConnector` relies on setting up the
-required *context options* on the underlying stream resource.
-It should therefor be used with a `TcpConnector` somewhere in the connector
-stack so that it can allocate an empty *context* resource for each stream
-resource and verify the peer name.
-Failing to do so may result in a TLS peer name mismatch error or some hard to
-trace race conditions, because all stream resources will use a single, shared
-*default context* resource otherwise.
-
-#### TimeoutConnector
-
-The `TimeoutConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to add timeout
-handling to any existing connector instance.
-
-It does so by decorating any given [`ConnectorInterface`](#connectorinterface)
-instance and starting a timer that will automatically reject and abort any
-underlying connection attempt if it takes too long.
-
-```php
-$timeoutConnector = new React\Socket\TimeoutConnector($connector, 3.0, $loop);
-
-$timeoutConnector->connect('google.com:80')->then(function (ConnectionInterface $connection) {
- // connection succeeded within 3.0 seconds
-});
-```
-
-See also any of the [examples](examples).
-
-Pending connection attempts can be cancelled by cancelling its pending promise like so:
-
-```php
-$promise = $timeoutConnector->connect('google.com:80');
-
-$promise->cancel();
-```
-
-Calling `cancel()` on a pending promise will cancel the underlying connection
-attempt, abort the timer and reject the resulting promise.
-
-#### UnixConnector
-
-The `UnixConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and allows you to connect to
-Unix domain socket (UDS) paths like this:
-
-```php
-$connector = new React\Socket\UnixConnector($loop);
-
-$connector->connect('/tmp/demo.sock')->then(function (ConnectionInterface $connection) {
- $connection->write("HELLO\n");
-});
-
-$loop->run();
-```
-
-Connecting to Unix domain sockets is an atomic operation, i.e. its promise will
-settle (either resolve or reject) immediately.
-As such, calling `cancel()` on the resulting promise has no effect.
-
-> The [`getRemoteAddress()`](#getremoteaddress) method will return the target
- Unix domain socket (UDS) path as given to the `connect()` method, prepended
- with the `unix://` scheme, for example `unix:///tmp/demo.sock`.
- The [`getLocalAddress()`](#getlocaladdress) method will most likely return a
- `null` value as this value is not applicable to UDS connections here.
-
-#### FixedUriConnector
-
-The `FixedUriConnector` class implements the
-[`ConnectorInterface`](#connectorinterface) and decorates an existing Connector
-to always use a fixed, preconfigured URI.
-
-This can be useful for consumers that do not support certain URIs, such as
-when you want to explicitly connect to a Unix domain socket (UDS) path
-instead of connecting to a default address assumed by an higher-level API:
-
-```php
-$connector = new FixedUriConnector(
- 'unix:///var/run/docker.sock',
- new UnixConnector($loop)
-);
-
-// destination will be ignored, actually connects to Unix domain socket
-$promise = $connector->connect('localhost:80');
-```
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This will install the latest supported version:
-
-```bash
-$ composer require react/socket:^0.8.10
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and HHVM.
-It's *highly recommended to use PHP 7+* for this project, partly due to its vast
-performance improvements and partly because legacy PHP versions require several
-workarounds as described below.
-
-Secure TLS connections received some major upgrades starting with PHP 5.6, with
-the defaults now being more secure, while older versions required explicit
-context options.
-This library does not take responsibility over these context options, so it's
-up to consumers of this library to take care of setting appropriate context
-options as described above.
-
-All versions of PHP prior to 5.6.8 suffered from a buffering issue where reading
-from a streaming TLS connection could be one `data` event behind.
-This library implements a work-around to try to flush the complete incoming
-data buffers on these legacy PHP versions, which has a penalty of around 10% of
-throughput on all connections.
-With this work-around, we have not been able to reproduce this issue anymore,
-but we have seen reports of people saying this could still affect some of the
-older PHP versions (`5.5.23`, `5.6.7`, and `5.6.8`).
-Note that this only affects *some* higher-level streaming protocols, such as
-IRC over TLS, but should not affect HTTP over TLS (HTTPS).
-Further investigation of this issue is needed.
-For more insights, this issue is also covered by our test suite.
-
-PHP < 7.1.4 (and PHP < 7.0.18) suffers from a bug when writing big
-chunks of data over TLS streams at once.
-We try to work around this by limiting the write chunk size to 8192
-bytes for older PHP versions only.
-This is only a work-around and has a noticable performance penalty on
-affected versions.
-
-This project also supports running on HHVM.
-Note that really old HHVM < 3.8 does not support secure TLS connections, as it
-lacks the required `stream_socket_enable_crypto()` function.
-As such, trying to create a secure TLS connections on affected versions will
-return a rejected promise instead.
-This issue is also covered by our test suite, which will skip related tests
-on affected versions.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-The test suite also contains a number of functional integration tests that rely
-on a stable internet connection.
-If you do not want to run these, they can simply be skipped like this:
-
-```bash
-$ php vendor/bin/phpunit --exclude-group internet
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
diff --git a/assets/php/vendor/react/socket/composer.json b/assets/php/vendor/react/socket/composer.json
deleted file mode 100755
index bc85aab..0000000
--- a/assets/php/vendor/react/socket/composer.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "react/socket",
- "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
- "keywords": ["async", "socket", "stream", "connection", "ReactPHP"],
- "license": "MIT",
- "require": {
- "php": ">=5.3.0",
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "react/dns": "^0.4.13",
- "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
- "react/stream": "^1.0 || ^0.7.1",
- "react/promise": "^2.1 || ^1.2",
- "react/promise-timer": "~1.0"
- },
- "require-dev": {
- "clue/block-react": "^1.2",
- "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35"
- },
- "autoload": {
- "psr-4": {
- "React\\Socket\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "React\\Tests\\Socket\\": "tests"
- }
- }
-}
diff --git a/assets/php/vendor/react/socket/examples/01-echo-server.php b/assets/php/vendor/react/socket/examples/01-echo-server.php
deleted file mode 100755
index 2c0be57..0000000
--- a/assets/php/vendor/react/socket/examples/01-echo-server.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-// Just start this server and connect to it. Everything you send to it will be
-// sent back to you.
-//
-// $ php examples/01-echo-server.php 8000
-// $ telnet localhost 8000
-//
-// You can also run a secure TLS echo server like this:
-//
-// $ php examples/01-echo-server.php tls://127.0.0.1:8000 examples/localhost.pem
-// $ openssl s_client -connect localhost:8000
-//
-// You can also run a Unix domain socket (UDS) server like this:
-//
-// $ php examples/01-echo-server.php unix:///tmp/server.sock
-// $ nc -U /tmp/server.sock
-
-use React\EventLoop\Factory;
-use React\Socket\Server;
-use React\Socket\ConnectionInterface;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$server = new Server(isset($argv[1]) ? $argv[1] : 0, $loop, array(
- 'tls' => array(
- 'local_cert' => isset($argv[2]) ? $argv[2] : (__DIR__ . '/localhost.pem')
- )
-));
-
-$server->on('connection', function (ConnectionInterface $conn) {
- echo '[' . $conn->getRemoteAddress() . ' connected]' . PHP_EOL;
- $conn->pipe($conn);
-});
-
-$server->on('error', 'printf');
-
-echo 'Listening on ' . $server->getAddress() . PHP_EOL;
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/02-chat-server.php b/assets/php/vendor/react/socket/examples/02-chat-server.php
deleted file mode 100755
index 46439e0..0000000
--- a/assets/php/vendor/react/socket/examples/02-chat-server.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-// Just start this server and connect with any number of clients to it.
-// Everything a client sends will be broadcasted to all connected clients.
-//
-// $ php examples/02-chat-server.php 8000
-// $ telnet localhost 8000
-//
-// You can also run a secure TLS chat server like this:
-//
-// $ php examples/02-chat-server.php tls://127.0.0.1:8000 examples/localhost.pem
-// $ openssl s_client -connect localhost:8000
-//
-// You can also run a Unix domain socket (UDS) server like this:
-//
-// $ php examples/02-chat-server.php unix:///tmp/server.sock
-// $ nc -U /tmp/server.sock
-
-use React\EventLoop\Factory;
-use React\Socket\Server;
-use React\Socket\ConnectionInterface;
-use React\Socket\LimitingServer;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$server = new Server(isset($argv[1]) ? $argv[1] : 0, $loop, array(
- 'tls' => array(
- 'local_cert' => isset($argv[2]) ? $argv[2] : (__DIR__ . '/localhost.pem')
- )
-));
-
-$server = new LimitingServer($server, null);
-
-$server->on('connection', function (ConnectionInterface $client) use ($server) {
- // whenever a new message comes in
- $client->on('data', function ($data) use ($client, $server) {
- // remove any non-word characters (just for the demo)
- $data = trim(preg_replace('/[^\w\d \.\,\-\!\?]/u', '', $data));
-
- // ignore empty messages
- if ($data === '') {
- return;
- }
-
- // prefix with client IP and broadcast to all connected clients
- $data = trim(parse_url($client->getRemoteAddress(), PHP_URL_HOST), '[]') . ': ' . $data . PHP_EOL;
- foreach ($server->getConnections() as $connection) {
- $connection->write($data);
- }
- });
-});
-
-$server->on('error', 'printf');
-
-echo 'Listening on ' . $server->getAddress() . PHP_EOL;
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/03-http-server.php b/assets/php/vendor/react/socket/examples/03-http-server.php
deleted file mode 100755
index eb6d454..0000000
--- a/assets/php/vendor/react/socket/examples/03-http-server.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-// Simple HTTP server example (for illustration purposes only).
-// This shows how a plaintext TCP/IP connection is accepted to then receive an
-// application level protocol message (HTTP request) and reply with an
-// application level protocol message (HTTP response) in return.
-//
-// This example exists for illustraion purposes only. It does not actually
-// parse incoming HTTP requests, so you can actually send *anything* and will
-// still respond with a valid HTTP response.
-// Real applications should use react/http instead!
-//
-// Just start this server and send a request to it:
-//
-// $ php examples/03-http-server.php 8000
-// $ curl -v http://localhost:8000/
-// $ ab -n1000 -c10 http://localhost:8000/
-// $ docker run -it --rm --net=host jordi/ab ab -n1000 -c10 http://localhost:8000/
-//
-// You can also run a secure HTTPS echo server like this:
-//
-// $ php examples/03-http-server.php tls://127.0.0.1:8000 examples/localhost.pem
-// $ curl -v --insecure https://localhost:8000/
-// $ ab -n1000 -c10 https://localhost:8000/
-// $ docker run -it --rm --net=host jordi/ab ab -n1000 -c10 https://localhost:8000/
-//
-// You can also run a Unix domain socket (UDS) server like this:
-//
-// $ php examples/03-http-server.php unix:///tmp/server.sock
-// $ nc -U /tmp/server.sock
-
-use React\EventLoop\Factory;
-use React\Socket\Server;
-use React\Socket\ConnectionInterface;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$server = new Server(isset($argv[1]) ? $argv[1] : 0, $loop, array(
- 'tls' => array(
- 'local_cert' => isset($argv[2]) ? $argv[2] : (__DIR__ . '/localhost.pem')
- )
-));
-
-$server->on('connection', function (ConnectionInterface $conn) {
- $conn->once('data', function () use ($conn) {
- $body = "<html><h1>Hello world!</h1></html>\r\n";
- $conn->end("HTTP/1.1 200 OK\r\nContent-Length: " . strlen($body) . "\r\nConnection: close\r\n\r\n" . $body);
- });
-});
-
-$server->on('error', 'printf');
-
-echo 'Listening on ' . strtr($server->getAddress(), array('tcp:' => 'http:', 'tls:' => 'https:')) . PHP_EOL;
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/11-http-client.php b/assets/php/vendor/react/socket/examples/11-http-client.php
deleted file mode 100755
index 2b64a43..0000000
--- a/assets/php/vendor/react/socket/examples/11-http-client.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-// Simple plaintext HTTP client example (for illustration purposes only).
-// This shows how a plaintext TCP/IP connection is established to then send an
-// application level protocol message (HTTP).
-// Real applications should use react/http-client instead!
-//
-// This simple example only accepts an optional host parameter to send the
-// request to. See also example #22 for proper URI parsing.
-//
-// $ php examples/11-http-client.php
-// $ php examples/11-http-client.php reactphp.org
-
-use React\EventLoop\Factory;
-use React\Socket\Connector;
-use React\Socket\ConnectionInterface;
-
-$host = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-$connector = new Connector($loop);
-
-$connector->connect($host. ':80')->then(function (ConnectionInterface $connection) use ($host) {
- $connection->on('data', function ($data) {
- echo $data;
- });
- $connection->on('close', function () {
- echo '[CLOSED]' . PHP_EOL;
- });
-
- $connection->write("GET / HTTP/1.0\r\nHost: $host\r\n\r\n");
-}, 'printf');
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/12-https-client.php b/assets/php/vendor/react/socket/examples/12-https-client.php
deleted file mode 100755
index 6e3f279..0000000
--- a/assets/php/vendor/react/socket/examples/12-https-client.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-// Simple secure HTTPS client example (for illustration purposes only).
-// This shows how a secure TLS connection is established to then send an
-// application level protocol message (HTTP).
-// Real applications should use react/http-client instead
-//
-// This simple example only accepts an optional host parameter to send the
-// request to. See also example #22 for proper URI parsing.
-//
-// $ php examples/12-https-client.php
-// $ php examples/12-https-client.php reactphp.org
-
-use React\EventLoop\Factory;
-use React\Socket\Connector;
-use React\Socket\ConnectionInterface;
-
-$host = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-$connector = new Connector($loop);
-
-$connector->connect('tls://' . $host . ':443')->then(function (ConnectionInterface $connection) use ($host) {
- $connection->on('data', function ($data) {
- echo $data;
- });
- $connection->on('close', function () {
- echo '[CLOSED]' . PHP_EOL;
- });
-
- $connection->write("GET / HTTP/1.0\r\nHost: $host\r\n\r\n");
-}, 'printf');
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/21-netcat-client.php b/assets/php/vendor/react/socket/examples/21-netcat-client.php
deleted file mode 100755
index 9140e2c..0000000
--- a/assets/php/vendor/react/socket/examples/21-netcat-client.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-
-// Simple plaintext TCP/IP and secure TLS client example that pipes console I/O.
-// This shows how a plaintext TCP/IP or secure TLS connection is established and
-// then everything you type on STDIN will be sent and everything the server
-// sends will be piped to your STDOUT.
-//
-// $ php examples/21-netcat-client.php www.google.com:80
-// $ php examples/21-netcat-client.php tls://www.google.com:443
-
-use React\EventLoop\Factory;
-use React\Socket\Connector;
-use React\Socket\ConnectionInterface;
-use React\Stream\ReadableResourceStream;
-use React\Stream\WritableResourceStream;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-if (!defined('STDIN')) {
- echo 'STDIO streams require CLI SAPI' . PHP_EOL;
- exit(1);
-}
-
-if (DIRECTORY_SEPARATOR === '\\') {
- fwrite(STDERR, 'Non-blocking console I/O not supported on Microsoft Windows' . PHP_EOL);
- exit(1);
-}
-
-if (!isset($argv[1])) {
- fwrite(STDERR, 'Usage error: required argument <host:port>' . PHP_EOL);
- exit(1);
-}
-
-$loop = Factory::create();
-$connector = new Connector($loop);
-
-$stdin = new ReadableResourceStream(STDIN, $loop);
-$stdin->pause();
-$stdout = new WritableResourceStream(STDOUT, $loop);
-$stderr = new WritableResourceStream(STDERR, $loop);
-
-$stderr->write('Connecting' . PHP_EOL);
-
-$connector->connect($argv[1])->then(function (ConnectionInterface $connection) use ($stdin, $stdout, $stderr) {
- // pipe everything from STDIN into connection
- $stdin->resume();
- $stdin->pipe($connection);
-
- // pipe everything from connection to STDOUT
- $connection->pipe($stdout);
-
- // report errors to STDERR
- $connection->on('error', function ($error) use ($stderr) {
- $stderr->write('Stream ERROR: ' . $error . PHP_EOL);
- });
-
- // report closing and stop reading from input
- $connection->on('close', function () use ($stderr, $stdin) {
- $stderr->write('[CLOSED]' . PHP_EOL);
- $stdin->close();
- });
-
- $stderr->write('Connected' . PHP_EOL);
-}, function ($error) use ($stderr) {
- $stderr->write('Connection ERROR: ' . $error . PHP_EOL);
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/22-http-client.php b/assets/php/vendor/react/socket/examples/22-http-client.php
deleted file mode 100755
index fcb8107..0000000
--- a/assets/php/vendor/react/socket/examples/22-http-client.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-// Simple plaintext HTTP and secure HTTPS client example (for illustration purposes only).
-// This shows how an URI parameter can parsed to decide whether to establish
-// a plaintext TCP/IP or secure TLS connection and then send an
-// application level protocol message (HTTP).
-// Real applications should use react/http-client instead!
-//
-// Unlike examples #11 and #12, this example will actually take an optional URI
-// parameter and parse it to connect to the correct default port and use the
-// correct transport protocol.
-//
-// $ php examples/22-http-client.php
-// $ php examples/22-http-client.php https://reactphp.org/
-
-use React\EventLoop\Factory;
-use React\Socket\ConnectionInterface;
-use React\Socket\Connector;
-use React\Stream\WritableResourceStream;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$uri = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-if (strpos($uri, '://') === false) {
- $uri = 'http://' . $uri;
-}
-$parts = parse_url($uri);
-
-if (!$parts || !isset($parts['scheme'], $parts['host'])) {
- fwrite(STDERR, 'Usage error: required argument <host:port>' . PHP_EOL);
- exit(1);
-}
-
-$loop = Factory::create();
-$connector = new Connector($loop);
-
-if (!isset($parts['port'])) {
- $parts['port'] = $parts['scheme'] === 'https' ? 443 : 80;
-}
-
-$host = $parts['host'];
-if (($parts['scheme'] === 'http' && $parts['port'] !== 80) || ($parts['scheme'] === 'https' && $parts['port'] !== 443)) {
- $host .= ':' . $parts['port'];
-}
-$target = ($parts['scheme'] === 'https' ? 'tls' : 'tcp') . '://' . $parts['host'] . ':' . $parts['port'];
-$resource = isset($parts['path']) ? $parts['path'] : '/';
-if (isset($parts['query'])) {
- $resource .= '?' . $parts['query'];
-}
-
-$stdout = new WritableResourceStream(STDOUT, $loop);
-
-$connector->connect($target)->then(function (ConnectionInterface $connection) use ($resource, $host, $stdout) {
- $connection->pipe($stdout);
-
- $connection->write("GET $resource HTTP/1.0\r\nHost: $host\r\n\r\n");
-}, 'printf');
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/91-benchmark-server.php b/assets/php/vendor/react/socket/examples/91-benchmark-server.php
deleted file mode 100755
index 420d474..0000000
--- a/assets/php/vendor/react/socket/examples/91-benchmark-server.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-// Just start the server and connect to it. It will count the number of bytes
-// sent for each connection and will print the average throughput once the
-// connection closes.
-//
-// $ php examples/91-benchmark-server.php 8000
-// $ telnet localhost 8000
-// $ echo hello world | nc -N localhost 8000
-// $ dd if=/dev/zero bs=1M count=1000 | nc -N localhost 8000
-//
-// You can also run a secure TLS benchmarking server like this:
-//
-// $ php examples/91-benchmark-server.php tls://127.0.0.1:8000 examples/localhost.pem
-// $ openssl s_client -connect localhost:8000
-// $ echo hello world | openssl s_client -connect localhost:8000
-// $ dd if=/dev/zero bs=1M count=1000 | openssl s_client -connect localhost:8000
-//
-// You can also run a Unix domain socket (UDS) server benchmark like this:
-//
-// $ php examples/91-benchmark-server.php unix:///tmp/server.sock
-// $ nc -N -U /tmp/server.sock
-// $ dd if=/dev/zero bs=1M count=1000 | nc -N -U /tmp/server.sock
-
-use React\EventLoop\Factory;
-use React\Socket\Server;
-use React\Socket\ConnectionInterface;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$loop = Factory::create();
-
-$server = new Server(isset($argv[1]) ? $argv[1] : 0, $loop, array(
- 'tls' => array(
- 'local_cert' => isset($argv[2]) ? $argv[2] : (__DIR__ . '/localhost.pem')
- )
-));
-
-$server->on('connection', function (ConnectionInterface $conn) use ($loop) {
- echo '[connected]' . PHP_EOL;
-
- // count the number of bytes received from this connection
- $bytes = 0;
- $conn->on('data', function ($chunk) use (&$bytes) {
- $bytes += strlen($chunk);
- });
-
- // report average throughput once client disconnects
- $t = microtime(true);
- $conn->on('close', function () use ($conn, $t, &$bytes) {
- $t = microtime(true) - $t;
- echo '[disconnected after receiving ' . $bytes . ' bytes in ' . round($t, 3) . 's => ' . round($bytes / $t / 1024 / 1024, 1) . ' MiB/s]' . PHP_EOL;
- });
-});
-
-$server->on('error', 'printf');
-
-echo 'Listening on ' . $server->getAddress() . PHP_EOL;
-
-$loop->run();
diff --git a/assets/php/vendor/react/socket/examples/99-generate-self-signed.php b/assets/php/vendor/react/socket/examples/99-generate-self-signed.php
deleted file mode 100755
index 00f9314..0000000
--- a/assets/php/vendor/react/socket/examples/99-generate-self-signed.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-// A very simple helper script used to generate self-signed certificates.
-// Accepts the CN and an optional passphrase to encrypt the private key.
-//
-// $ php 10-generate-self-signed.php localhost swordfish > secret.pem
-
-// certificate details (Distinguished Name)
-// (OpenSSL applies defaults to missing fields)
-$dn = array(
- "commonName" => isset($argv[1]) ? $argv[1] : "localhost",
-// "countryName" => "AU",
-// "stateOrProvinceName" => "Some-State",
-// "localityName" => "London",
-// "organizationName" => "Internet Widgits Pty Ltd",
-// "organizationalUnitName" => "R&D",
-// "emailAddress" => "admin@example.com"
-);
-
-// create certificate which is valid for ~10 years
-$privkey = openssl_pkey_new();
-$cert = openssl_csr_new($dn, $privkey);
-$cert = openssl_csr_sign($cert, null, $privkey, 3650);
-
-// export public and (optionally encrypted) private key in PEM format
-openssl_x509_export($cert, $out);
-echo $out;
-
-$passphrase = isset($argv[2]) ? $argv[2] : null;
-openssl_pkey_export($privkey, $out, $passphrase);
-echo $out;
diff --git a/assets/php/vendor/react/socket/examples/localhost.pem b/assets/php/vendor/react/socket/examples/localhost.pem
deleted file mode 100755
index be69279..0000000
--- a/assets/php/vendor/react/socket/examples/localhost.pem
+++ /dev/null
@@ -1,49 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBZMRIwEAYDVQQDDAkxMjcu
-MC4wLjExCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK
-DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMwMTQ1OTA2WhcNMjYx
-MjI4MTQ1OTA2WjBZMRIwEAYDVQQDDAkxMjcuMC4wLjExCzAJBgNVBAYTAkFVMRMw
-EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0
-eSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8SZWNS+Ktg0Py
-W8dx5uXZ+ZUawd3wnzLMHW7EhoUpIrIdp3kDU9NezF68dOhPMJY/Kh+6btRCxWXN
-2OVTqS5Xi826j3TSE07iF83JRLeveW0PcodjUBd+RzdwCWWo2pfMJz4v7x1wu1c9
-zNi6JxxpDAXTFSB4GiWsI4tFu2XmMRhfm6LRK4WPfsZIJKokdiG5fKSPDn7nrVj0
-UUXr2eBsEAzdwL14U9+mwbLdaAkz3qK3fqi8sEC09lEWm95gKMOhkQf5qvXODtT4
-wdVrrKDTyehLv0xaItnUDnXzrkMBU5QS9TQzzqSW6ZaBsSxtONEFUiXiN9dtyXsY
-YCUE54G/AgMBAAGjUDBOMB0GA1UdDgQWBBQ2GRz3QsQzdXaTMnPVCKfpigA10DAf
-BgNVHSMEGDAWgBQ2GRz3QsQzdXaTMnPVCKfpigA10DAMBgNVHRMEBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQA77iZ4KrpPY18Ezjt0mngYAuAxunKddXYdLZ2khywN
-0uI/VzYnkFVtrsC7y2jLHSxlmE2/viPPGZDUplENV2acN6JNW+tlt7/bsrQHDQw3
-7VCF27EWiDxHsaghhLkqC+kcop5YR5c0oDQTdEWEKSbow2zayUXDYbRRs76SClTe
-824Yul+Ts8Mka+AX2PXDg47iZ84fJRN/nKavcJUTJ2iS1uYw0GNnFMge/uwsfMR3
-V47qN0X5emky8fcq99FlMCbcy0gHAeSWAjClgr2dd2i0LDatUbj7YmdmFcskOgII
-IwGfvuWR2yPevYGAE0QgFeLHniN3RW8zmpnX/XtrJ4a7
------END CERTIFICATE-----
------BEGIN PRIVATE KEY-----
-MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8SZWNS+Ktg0Py
-W8dx5uXZ+ZUawd3wnzLMHW7EhoUpIrIdp3kDU9NezF68dOhPMJY/Kh+6btRCxWXN
-2OVTqS5Xi826j3TSE07iF83JRLeveW0PcodjUBd+RzdwCWWo2pfMJz4v7x1wu1c9
-zNi6JxxpDAXTFSB4GiWsI4tFu2XmMRhfm6LRK4WPfsZIJKokdiG5fKSPDn7nrVj0
-UUXr2eBsEAzdwL14U9+mwbLdaAkz3qK3fqi8sEC09lEWm95gKMOhkQf5qvXODtT4
-wdVrrKDTyehLv0xaItnUDnXzrkMBU5QS9TQzzqSW6ZaBsSxtONEFUiXiN9dtyXsY
-YCUE54G/AgMBAAECggEBAKiO/3FE1CMddkCLZVtUp8ShqJgRokx9WI5ecwFApAkV
-ZHsjqDQQYRNmxhDUX/w0tOzLGyhde2xjJyZG29YviKsbHwu6zYwbeOzy/mkGOaK/
-g6DmmMmRs9Z6juifoQCu4GIFZ6il2adIL2vF7OeJh+eKudQj/7NFRSB7mXzNrQWK
-tZY3eux5zXWmio7pgZrx1HFZQiiL9NVLwT9J7oBnaoO3fREiu5J2xBpljG9Cr0j1
-LLiVLhukWJYRlHDtGt1CzI9w8iKo44PCRzpKyxpbsOrQxeSyEWUYQRv9VHA59LC7
-tVAJTbnTX1BNHkGZkOkoOpoZLwBaM2XbbDtcOGCAZMECgYEA+mTURFQ85/pxawvk
-9ndqZ+5He1u/bMLYIJDp0hdB/vgD+vw3gb2UyRwp0I6Wc6Si4FEEnbY7L0pzWsiR
-43CpLs+cyLfnD9NycuIasxs5fKb/1s1nGTkRAp7x9x/ZTtEf8v4YTmmMXFHzdo7V
-pv+czO89ppEDkxEtMf/b5SifhO8CgYEAwIDIUvXLduGhL+RPDwjc2SKdydXGV6om
-OEdt/V8oS801Z7k8l3gHXFm7zL/MpHmh9cag+F9dHK42kw2RSjDGsBlXXiAO1Z0I
-2A34OdPw/kow8fmIKWTMu3+28Kca+3RmUqeyaq0vazQ/bWMO9px+Ud3YfLo1Tn5I
-li0MecAx8DECgYEAvsLceKYYtL83c09fg2oc1ctSCCgw4WJcGAtvJ9DyRZacKbXH
-b/+H/+OF8879zmKqd+0hcCnqUzAMTCisBLPLIM+o6b45ufPkqKObpcJi/JWaKgLY
-vf2c+Psw6o4IF6T5Cz4MNIjzF06UBknxecYZpoPJ20F1kLCwVvxPgfl99l8CgYAb
-XfOcv67WTstgiJ+oroTfJamy+P5ClkDqvVTosW+EHz9ZaJ8xlXHOcj9do2LPey9I
-Rp250azmF+pQS5x9JKQKgv/FtN8HBVUtigbhCb14GUoODICMCfWFLmnumoMefnTR
-iV+3BLn6Dqp5vZxx+NuIffZ5/Or5JsDhALSGVomC8QKBgAi3Z/dNQrDHfkXMNn/L
-+EAoLuAbFgLs76r9VGgNaRQ/q5gex2bZEGoBj4Sxvs95NUIcfD9wKT7FF8HdxARv
-y3o6Bfc8Xp9So9SlFXrje+gkdEJ0rQR67d+XBuJZh86bXJHVrMwpoNL+ahLGdVSe
-81oh1uCH1YPLM29hPyaohxL8
------END PRIVATE KEY-----
diff --git a/assets/php/vendor/react/socket/examples/localhost_swordfish.pem b/assets/php/vendor/react/socket/examples/localhost_swordfish.pem
deleted file mode 100755
index 7d1ee80..0000000
--- a/assets/php/vendor/react/socket/examples/localhost_swordfish.pem
+++ /dev/null
@@ -1,51 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBZMRIwEAYDVQQDDAkxMjcu
-MC4wLjExCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQK
-DBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTYxMjMwMTQxMDQzWhcNMjYx
-MjI4MTQxMDQzWjBZMRIwEAYDVQQDDAkxMjcuMC4wLjExCzAJBgNVBAYTAkFVMRMw
-EQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0
-eSBMdGQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRXt83SrKIHr/i
-3lc8O8pz6NHE1DNHJa4xg2xalXWzCEV6m1qLd9VdaLT9cJD1afNmEMBgY6RblNL/
-paJWVoR9MOUeIoYl2PrhUCxsf7h6MRtezQQe3e+n+/0XunF0JUQIZuJqbxfRk5WT
-XmYnphqOZKEcistAYvFBjzl/D+Cl/nYsreADc+t9l5Vni89oTWEuqIrsM4WUZqqB
-VMAakd2nZJLWIrMxq9hbW1XNukOQfcmZVFTC6CUnLq8qzGbtfZYBuMBACnL1k/E/
-yPaAgR46l14VAcndDUJBtMeL2qYuNwvXQhg3KuBmpTUpH+yzxU+4T3lmv0xXmPqu
-ySH3xvW3AgMBAAGjUDBOMB0GA1UdDgQWBBRu68WTI4pVeTB7wuG9QGI3Ie441TAf
-BgNVHSMEGDAWgBRu68WTI4pVeTB7wuG9QGI3Ie441TAMBgNVHRMEBTADAQH/MA0G
-CSqGSIb3DQEBBQUAA4IBAQCc4pEjEHO47VRJkbHgC+c2gAVgxekkaA1czBA1uAvh
-ILRda0NLlvyftbjaG0zZp2ABUCfRfksl/Pf/PzWLUMEuH/9kEW2rgP43z6YgiL6k
-kBPlmAU607UjD726RPGkw8QPSXS/dWiNJ5CBpPWLpxC45pokqItYbY0ijQ5Piq09
-TchYlCX044oSRnPiP394PQ3HVdaGhJB2DnjDq3in5dVivFf8EdgzQSvp/wXy3WQs
-uFSVonSnrZGY/4AgT3psGaQ6fqKb4SBoqtf5bFQvp1XNNRkuEJnS/0dygEya0c+c
-aCe/1gXC2wDjx0/TekY5m1Nyw5SY6z7stOqL/ekwgejt
------END CERTIFICATE-----
------BEGIN ENCRYPTED PRIVATE KEY-----
-MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIG7idPRLgiHkCAggA
-MBQGCCqGSIb3DQMHBAg+MLPdepHWSwSCBMgVW9LseCjfTAmF9U1qRnKsq3kIwEnW
-6aERBqs/mnmEhrXgZYgcvRRK7kD12TdHt/Nz46Ymu0h+Lrvuwtl1fHQUARTk/gFh
-onLhc9kjMUhLRIR007vJe3HvWOb/v+SBSDB38OpUxUwJmBVBuSaYLWVuPR6J5kUj
-xOgBS049lN3E9cfrHvb3bF/epIQrU0OgfyyxEvIi5n30y+tlRn3y68PY6Qd46t4Y
-UN5VZUwvJBgoRy9TGxSkiSRjhxC2PWpLYq/HMzDbcRcFF5dVAIioUd/VZ7fdgBfA
-uMW4SFfpFLDUX0aaYe+ZdA5tM0Bc0cOtG8Z0sc9JYDNNcvjmSiGCi646h8F0D3O6
-JKAQMMxQGWiyQeJ979LVjtq4lJESXA8VEKz9rV03y5xunmFCLy6dGt+6GJwXgabn
-OH7nvEv4GqAOqKc6E9je4JM+AF/oUazrfPse1KEEtsPKarazjCB/SKYtHyDJaavD
-GGjtiU9zWwGMOgIDyNmXe3ga7/TWoGOAg5YlTr6Hbq2Y/5ycgjAgPFjuXtvnoT0+
-mF5TnNfMAqTgQsE2gjhonK1pdlOen0lN5FtoUXp3CXU0dOq0J70GiX+1YA7VDn30
-n5WNAgfOXX3l3E95jGN370pHXyli5RUNW0NZVHV+22jlNWCVtQHUh+DVswQZg+i5
-+DqaIHz2jUetMo7gWtqGn/wwSopOs87VM1rcALhZL4EsJ+Zy81I/hA32RNnGbuol
-NAiZh+0KrtTcc/fPunpd8vRtOwGphM11dKucozUufuiPG2inR3aEqt5yNx54ec/f
-J6nryWRYiHEA/rCU9MSBM9cqKFtEmy9/8oxV41/SPxhXjHwDlABWTtFuJ3pf2sOF
-ILSYYFwB0ZGvdjE5yAJFBr9efno/L9fafmGk7a3vmVgK2AmUC9VNB5XHw1GjF8OP
-aQAXe4md9Bh0jk/D/iyp7e7IWNssul/7XejhabidWgFj6EXc9YxE59+FlhDqyMhn
-V6houc+QeUXuwsAKgRJJhJtpv/QSZ5BI3esxHHUt3ayGnvhFElpAc0t7C/EiXKIv
-DAFYP2jksBqijM8YtEgPWYzEP5buYxZnf/LK7FDocLsNcdF38UaKBbeF90e7bR8j
-SHspG9aJWICu8Yawnh8zuy/vQv+h9gWyGodd2p9lQzlbRXrutbwfmPf7xP6nzT9i
-9GcugJxTaZgkCfhhHxFk/nRHS2NAzagKVib1xkUlZJg2hX0fIFUdYteL1GGTvOx5
-m3mTOino4T19z9SEdZYb2OHYh29e/T74bJiLCYdXwevSYHxfZc8pYAf0jp4UnMT2
-f7B0ctX1iXuQ2uZVuxh+U1Mcu+v0gDla1jWh7AhcePSi4xBNUCak0kQip6r5e6Oi
-r4MIyMRk/Pc5pzEKo8G6nk26rNvX3aRvECoVfmK7IVdsqZ6IXlt9kOmWx3IeKzrO
-J5DxpzW+9oIRZJgPTkc4/XRb0tFmFQYTiChiQ1AJUEiCX0GpkFf7cq61aLGYtWyn
-vL2lmQhljzjrDo15hKErvk7eBZW7GW/6j/m/PfRdcBI4ceuP9zWQXnDOd9zmaE4b
-q3bJ+IbbyVZA2WwyzN7umCKWghsiPMAolxEnYM9JRf8BcqeqQiwVZlfO5KFuN6Ze
-le4=
------END ENCRYPTED PRIVATE KEY-----
diff --git a/assets/php/vendor/react/socket/phpunit.xml.dist b/assets/php/vendor/react/socket/phpunit.xml.dist
deleted file mode 100755
index 13d3fab..0000000
--- a/assets/php/vendor/react/socket/phpunit.xml.dist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false"
- bootstrap="vendor/autoload.php"
->
- <testsuites>
- <testsuite name="React Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/socket/src/Connection.php b/assets/php/vendor/react/socket/src/Connection.php
deleted file mode 100755
index c6267cc..0000000
--- a/assets/php/vendor/react/socket/src/Connection.php
+++ /dev/null
@@ -1,178 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use React\Stream\DuplexResourceStream;
-use React\Stream\Util;
-use React\Stream\WritableResourceStream;
-use React\Stream\WritableStreamInterface;
-
-/**
- * The actual connection implementation for ConnectionInterface
- *
- * This class should only be used internally, see ConnectionInterface instead.
- *
- * @see ConnectionInterface
- * @internal
- */
-class Connection extends EventEmitter implements ConnectionInterface
-{
- /**
- * Internal flag whether this is a Unix domain socket (UDS) connection
- *
- * @internal
- */
- public $unix = false;
-
- /**
- * Internal flag whether encryption has been enabled on this connection
- *
- * Mostly used by internal StreamEncryption so that connection returns
- * `tls://` scheme for encrypted connections instead of `tcp://`.
- *
- * @internal
- */
- public $encryptionEnabled = false;
-
- /** @internal */
- public $stream;
-
- private $input;
-
- public function __construct($resource, LoopInterface $loop)
- {
- // PHP < 5.6.8 suffers from a buffer indicator bug on secure TLS connections
- // as a work-around we always read the complete buffer until its end.
- // The buffer size is limited due to TCP/IP buffers anyway, so this
- // should not affect usage otherwise.
- // See https://bugs.php.net/bug.php?id=65137
- // https://bugs.php.net/bug.php?id=41631
- // https://github.com/reactphp/socket-client/issues/24
- $clearCompleteBuffer = PHP_VERSION_ID < 50608;
-
- // PHP < 7.1.4 (and PHP < 7.0.18) suffers from a bug when writing big
- // chunks of data over TLS streams at once.
- // We try to work around this by limiting the write chunk size to 8192
- // bytes for older PHP versions only.
- // This is only a work-around and has a noticable performance penalty on
- // affected versions. Please update your PHP version.
- // This applies to all streams because TLS may be enabled later on.
- // See https://github.com/reactphp/socket/issues/105
- $limitWriteChunks = (PHP_VERSION_ID < 70018 || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70104));
-
- $this->input = new DuplexResourceStream(
- $resource,
- $loop,
- $clearCompleteBuffer ? -1 : null,
- new WritableResourceStream($resource, $loop, null, $limitWriteChunks ? 8192 : null)
- );
-
- $this->stream = $resource;
-
- Util::forwardEvents($this->input, $this, array('data', 'end', 'error', 'close', 'pipe', 'drain'));
-
- $this->input->on('close', array($this, 'close'));
- }
-
- public function isReadable()
- {
- return $this->input->isReadable();
- }
-
- public function isWritable()
- {
- return $this->input->isWritable();
- }
-
- public function pause()
- {
- $this->input->pause();
- }
-
- public function resume()
- {
- $this->input->resume();
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- return $this->input->pipe($dest, $options);
- }
-
- public function write($data)
- {
- return $this->input->write($data);
- }
-
- public function end($data = null)
- {
- $this->input->end($data);
- }
-
- public function close()
- {
- $this->input->close();
- $this->handleClose();
- $this->removeAllListeners();
- }
-
- public function handleClose()
- {
- if (!is_resource($this->stream)) {
- return;
- }
-
- // Try to cleanly shut down socket and ignore any errors in case other
- // side already closed. Shutting down may return to blocking mode on
- // some legacy versions, so reset to non-blocking just in case before
- // continuing to close the socket resource.
- // Underlying Stream implementation will take care of closing file
- // handle, so we otherwise keep this open here.
- @stream_socket_shutdown($this->stream, STREAM_SHUT_RDWR);
- stream_set_blocking($this->stream, false);
- }
-
- public function getRemoteAddress()
- {
- return $this->parseAddress(@stream_socket_get_name($this->stream, true));
- }
-
- public function getLocalAddress()
- {
- return $this->parseAddress(@stream_socket_get_name($this->stream, false));
- }
-
- private function parseAddress($address)
- {
- if ($address === false) {
- return null;
- }
-
- if ($this->unix) {
- // remove trailing colon from address for HHVM < 3.19: https://3v4l.org/5C1lo
- // note that technically ":" is a valid address, so keep this in place otherwise
- if (substr($address, -1) === ':' && defined('HHVM_VERSION_ID') && HHVM_VERSION_ID < 31900) {
- $address = (string)substr($address, 0, -1);
- }
-
- // work around unknown addresses should return null value: https://3v4l.org/5C1lo and https://bugs.php.net/bug.php?id=74556
- // PHP uses "\0" string and HHVM uses empty string (colon removed above)
- if ($address === '' || $address[0] === "\x00" ) {
- return null;
- }
-
- return 'unix://' . $address;
- }
-
- // check if this is an IPv6 address which includes multiple colons but no square brackets
- $pos = strrpos($address, ':');
- if ($pos !== false && strpos($address, ':') < $pos && substr($address, 0, 1) !== '[') {
- $port = substr($address, $pos + 1);
- $address = '[' . substr($address, 0, $pos) . ']:' . $port;
- }
-
- return ($this->encryptionEnabled ? 'tls' : 'tcp') . '://' . $address;
- }
-}
diff --git a/assets/php/vendor/react/socket/src/ConnectionInterface.php b/assets/php/vendor/react/socket/src/ConnectionInterface.php
deleted file mode 100755
index 64613b5..0000000
--- a/assets/php/vendor/react/socket/src/ConnectionInterface.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\Stream\DuplexStreamInterface;
-
-/**
- * Any incoming and outgoing connection is represented by this interface,
- * such as a normal TCP/IP connection.
- *
- * An incoming or outgoing connection is a duplex stream (both readable and
- * writable) that implements React's
- * [`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
- * It contains additional properties for the local and remote address (client IP)
- * where this connection has been established to/from.
- *
- * Most commonly, instances implementing this `ConnectionInterface` are emitted
- * by all classes implementing the [`ServerInterface`](#serverinterface) and
- * used by all classes implementing the [`ConnectorInterface`](#connectorinterface).
- *
- * Because the `ConnectionInterface` implements the underlying
- * [`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface)
- * you can use any of its events and methods as usual:
- *
- * ```php
- * $connection->on('data', function ($chunk) {
- * echo $chunk;
- * });
- *
- * $connection->on('end', function () {
- * echo 'ended';
- * });
- *
- * $connection->on('error', function (Exception $e) {
- * echo 'error: ' . $e->getMessage();
- * });
- *
- * $connection->on('close', function () {
- * echo 'closed';
- * });
- *
- * $connection->write($data);
- * $connection->end($data = null);
- * $connection->close();
- * // …
- * ```
- *
- * For more details, see the
- * [`DuplexStreamInterface`](https://github.com/reactphp/stream#duplexstreaminterface).
- *
- * @see DuplexStreamInterface
- * @see ServerInterface
- * @see ConnectorInterface
- */
-interface ConnectionInterface extends DuplexStreamInterface
-{
- /**
- * Returns the full remote address (URI) where this connection has been established with
- *
- * ```php
- * $address = $connection->getRemoteAddress();
- * echo 'Connection with ' . $address . PHP_EOL;
- * ```
- *
- * If the remote address can not be determined or is unknown at this time (such as
- * after the connection has been closed), it MAY return a `NULL` value instead.
- *
- * Otherwise, it will return the full address (URI) as a string value, such
- * as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
- * `unix://example.sock` or `unix:///path/to/example.sock`.
- * Note that individual URI components are application specific and depend
- * on the underlying transport protocol.
- *
- * If this is a TCP/IP based connection and you only want the remote IP, you may
- * use something like this:
- *
- * ```php
- * $address = $connection->getRemoteAddress();
- * $ip = trim(parse_url($address, PHP_URL_HOST), '[]');
- * echo 'Connection with ' . $ip . PHP_EOL;
- * ```
- *
- * @return ?string remote address (URI) or null if unknown
- */
- public function getRemoteAddress();
-
- /**
- * Returns the full local address (full URI with scheme, IP and port) where this connection has been established with
- *
- * ```php
- * $address = $connection->getLocalAddress();
- * echo 'Connection with ' . $address . PHP_EOL;
- * ```
- *
- * If the local address can not be determined or is unknown at this time (such as
- * after the connection has been closed), it MAY return a `NULL` value instead.
- *
- * Otherwise, it will return the full address (URI) as a string value, such
- * as `tcp://127.0.0.1:8080`, `tcp://[::1]:80`, `tls://127.0.0.1:443`,
- * `unix://example.sock` or `unix:///path/to/example.sock`.
- * Note that individual URI components are application specific and depend
- * on the underlying transport protocol.
- *
- * This method complements the [`getRemoteAddress()`](#getremoteaddress) method,
- * so they should not be confused.
- *
- * If your `TcpServer` instance is listening on multiple interfaces (e.g. using
- * the address `0.0.0.0`), you can use this method to find out which interface
- * actually accepted this connection (such as a public or local interface).
- *
- * If your system has multiple interfaces (e.g. a WAN and a LAN interface),
- * you can use this method to find out which interface was actually
- * used for this connection.
- *
- * @return ?string local address (URI) or null if unknown
- * @see self::getRemoteAddress()
- */
- public function getLocalAddress();
-}
diff --git a/assets/php/vendor/react/socket/src/Connector.php b/assets/php/vendor/react/socket/src/Connector.php
deleted file mode 100755
index 75276bc..0000000
--- a/assets/php/vendor/react/socket/src/Connector.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\Dns\Config\Config;
-use React\Dns\Resolver\Factory;
-use React\Dns\Resolver\Resolver;
-use React\EventLoop\LoopInterface;
-use React\Promise;
-use RuntimeException;
-
-/**
- * The `Connector` class is the main class in this package that implements the
- * `ConnectorInterface` and allows you to create streaming connections.
- *
- * You can use this connector to create any kind of streaming connections, such
- * as plaintext TCP/IP, secure TLS or local Unix connection streams.
- *
- * Under the hood, the `Connector` is implemented as a *higher-level facade*
- * or the lower-level connectors implemented in this package. This means it
- * also shares all of their features and implementation details.
- * If you want to typehint in your higher-level protocol implementation, you SHOULD
- * use the generic [`ConnectorInterface`](#connectorinterface) instead.
- *
- * @see ConnectorInterface for the base interface
- */
-final class Connector implements ConnectorInterface
-{
- private $connectors = array();
-
- public function __construct(LoopInterface $loop, array $options = array())
- {
- // apply default options if not explicitly given
- $options += array(
- 'tcp' => true,
- 'tls' => true,
- 'unix' => true,
-
- 'dns' => true,
- 'timeout' => true,
- );
-
- if ($options['timeout'] === true) {
- $options['timeout'] = (float)ini_get("default_socket_timeout");
- }
-
- if ($options['tcp'] instanceof ConnectorInterface) {
- $tcp = $options['tcp'];
- } else {
- $tcp = new TcpConnector(
- $loop,
- is_array($options['tcp']) ? $options['tcp'] : array()
- );
- }
-
- if ($options['dns'] !== false) {
- if ($options['dns'] instanceof Resolver) {
- $resolver = $options['dns'];
- } else {
- if ($options['dns'] !== true) {
- $server = $options['dns'];
- } else {
- // try to load nameservers from system config or default to Google's public DNS
- $config = Config::loadSystemConfigBlocking();
- $server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8';
- }
-
- $factory = new Factory();
- $resolver = $factory->create(
- $server,
- $loop
- );
- }
-
- $tcp = new DnsConnector($tcp, $resolver);
- }
-
- if ($options['tcp'] !== false) {
- $options['tcp'] = $tcp;
-
- if ($options['timeout'] !== false) {
- $options['tcp'] = new TimeoutConnector(
- $options['tcp'],
- $options['timeout'],
- $loop
- );
- }
-
- $this->connectors['tcp'] = $options['tcp'];
- }
-
- if ($options['tls'] !== false) {
- if (!$options['tls'] instanceof ConnectorInterface) {
- $options['tls'] = new SecureConnector(
- $tcp,
- $loop,
- is_array($options['tls']) ? $options['tls'] : array()
- );
- }
-
- if ($options['timeout'] !== false) {
- $options['tls'] = new TimeoutConnector(
- $options['tls'],
- $options['timeout'],
- $loop
- );
- }
-
- $this->connectors['tls'] = $options['tls'];
- }
-
- if ($options['unix'] !== false) {
- if (!$options['unix'] instanceof ConnectorInterface) {
- $options['unix'] = new UnixConnector($loop);
- }
- $this->connectors['unix'] = $options['unix'];
- }
- }
-
- public function connect($uri)
- {
- $scheme = 'tcp';
- if (strpos($uri, '://') !== false) {
- $scheme = (string)substr($uri, 0, strpos($uri, '://'));
- }
-
- if (!isset($this->connectors[$scheme])) {
- return Promise\reject(new RuntimeException(
- 'No connector available for URI scheme "' . $scheme . '"'
- ));
- }
-
- return $this->connectors[$scheme]->connect($uri);
- }
-}
-
diff --git a/assets/php/vendor/react/socket/src/ConnectorInterface.php b/assets/php/vendor/react/socket/src/ConnectorInterface.php
deleted file mode 100755
index 196d01a..0000000
--- a/assets/php/vendor/react/socket/src/ConnectorInterface.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-/**
- * The `ConnectorInterface` is responsible for providing an interface for
- * establishing streaming connections, such as a normal TCP/IP connection.
- *
- * This is the main interface defined in this package and it is used throughout
- * React's vast ecosystem.
- *
- * Most higher-level components (such as HTTP, database or other networking
- * service clients) accept an instance implementing this interface to create their
- * TCP/IP connection to the underlying networking service.
- * This is usually done via dependency injection, so it's fairly simple to actually
- * swap this implementation against any other implementation of this interface.
- *
- * The interface only offers a single `connect()` method.
- *
- * @see ConnectionInterface
- */
-interface ConnectorInterface
-{
- /**
- * Creates a streaming connection to the given remote address
- *
- * If returns a Promise which either fulfills with a stream implementing
- * `ConnectionInterface` on success or rejects with an `Exception` if the
- * connection is not successful.
- *
- * ```php
- * $connector->connect('google.com:443')->then(
- * function (ConnectionInterface $connection) {
- * // connection successfully established
- * },
- * function (Exception $error) {
- * // failed to connect due to $error
- * }
- * );
- * ```
- *
- * The returned Promise MUST be implemented in such a way that it can be
- * cancelled when it is still pending. Cancelling a pending promise MUST
- * reject its value with an Exception. It SHOULD clean up any underlying
- * resources and references as applicable.
- *
- * ```php
- * $promise = $connector->connect($uri);
- *
- * $promise->cancel();
- * ```
- *
- * @param string $uri
- * @return \React\Promise\PromiseInterface resolves with a stream implementing ConnectionInterface on success or rejects with an Exception on error
- * @see ConnectionInterface
- */
- public function connect($uri);
-}
diff --git a/assets/php/vendor/react/socket/src/DnsConnector.php b/assets/php/vendor/react/socket/src/DnsConnector.php
deleted file mode 100755
index 90170e5..0000000
--- a/assets/php/vendor/react/socket/src/DnsConnector.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\Dns\Resolver\Resolver;
-use React\Promise;
-use React\Promise\CancellablePromiseInterface;
-use InvalidArgumentException;
-use RuntimeException;
-
-final class DnsConnector implements ConnectorInterface
-{
- private $connector;
- private $resolver;
-
- public function __construct(ConnectorInterface $connector, Resolver $resolver)
- {
- $this->connector = $connector;
- $this->resolver = $resolver;
- }
-
- public function connect($uri)
- {
- if (strpos($uri, '://') === false) {
- $parts = parse_url('tcp://' . $uri);
- unset($parts['scheme']);
- } else {
- $parts = parse_url($uri);
- }
-
- if (!$parts || !isset($parts['host'])) {
- return Promise\reject(new InvalidArgumentException('Given URI "' . $uri . '" is invalid'));
- }
-
- $host = trim($parts['host'], '[]');
- $connector = $this->connector;
-
- return $this
- ->resolveHostname($host)
- ->then(function ($ip) use ($connector, $host, $parts) {
- $uri = '';
-
- // prepend original scheme if known
- if (isset($parts['scheme'])) {
- $uri .= $parts['scheme'] . '://';
- }
-
- if (strpos($ip, ':') !== false) {
- // enclose IPv6 addresses in square brackets before appending port
- $uri .= '[' . $ip . ']';
- } else {
- $uri .= $ip;
- }
-
- // append original port if known
- if (isset($parts['port'])) {
- $uri .= ':' . $parts['port'];
- }
-
- // append orignal path if known
- if (isset($parts['path'])) {
- $uri .= $parts['path'];
- }
-
- // append original query if known
- if (isset($parts['query'])) {
- $uri .= '?' . $parts['query'];
- }
-
- // append original hostname as query if resolved via DNS and if
- // destination URI does not contain "hostname" query param already
- $args = array();
- parse_str(isset($parts['query']) ? $parts['query'] : '', $args);
- if ($host !== $ip && !isset($args['hostname'])) {
- $uri .= (isset($parts['query']) ? '&' : '?') . 'hostname=' . rawurlencode($host);
- }
-
- // append original fragment if known
- if (isset($parts['fragment'])) {
- $uri .= '#' . $parts['fragment'];
- }
-
- return $connector->connect($uri);
- });
- }
-
- private function resolveHostname($host)
- {
- if (false !== filter_var($host, FILTER_VALIDATE_IP)) {
- return Promise\resolve($host);
- }
-
- $promise = $this->resolver->resolve($host);
-
- return new Promise\Promise(
- function ($resolve, $reject) use ($promise) {
- // resolve/reject with result of DNS lookup
- $promise->then($resolve, $reject);
- },
- function ($_, $reject) use ($promise) {
- // cancellation should reject connection attempt
- $reject(new RuntimeException('Connection attempt cancelled during DNS lookup'));
-
- // (try to) cancel pending DNS lookup
- if ($promise instanceof CancellablePromiseInterface) {
- $promise->cancel();
- }
- }
- );
- }
-}
diff --git a/assets/php/vendor/react/socket/src/FixedUriConnector.php b/assets/php/vendor/react/socket/src/FixedUriConnector.php
deleted file mode 100755
index 057bcdf..0000000
--- a/assets/php/vendor/react/socket/src/FixedUriConnector.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-/**
- * Decorates an existing Connector to always use a fixed, preconfigured URI
- *
- * This can be useful for consumers that do not support certain URIs, such as
- * when you want to explicitly connect to a Unix domain socket (UDS) path
- * instead of connecting to a default address assumed by an higher-level API:
- *
- * ```php
- * $connector = new FixedUriConnector(
- * 'unix:///var/run/docker.sock',
- * new UnixConnector($loop)
- * );
- *
- * // destination will be ignored, actually connects to Unix domain socket
- * $promise = $connector->connect('localhost:80');
- * ```
- */
-class FixedUriConnector implements ConnectorInterface
-{
- private $uri;
- private $connector;
-
- /**
- * @param string $uri
- * @param ConnectorInterface $connector
- */
- public function __construct($uri, ConnectorInterface $connector)
- {
- $this->uri = $uri;
- $this->connector = $connector;
- }
-
- public function connect($_)
- {
- return $this->connector->connect($this->uri);
- }
-}
diff --git a/assets/php/vendor/react/socket/src/LimitingServer.php b/assets/php/vendor/react/socket/src/LimitingServer.php
deleted file mode 100755
index c7874ee..0000000
--- a/assets/php/vendor/react/socket/src/LimitingServer.php
+++ /dev/null
@@ -1,203 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use Exception;
-use OverflowException;
-
-/**
- * The `LimitingServer` decorator wraps a given `ServerInterface` and is responsible
- * for limiting and keeping track of open connections to this server instance.
- *
- * Whenever the underlying server emits a `connection` event, it will check its
- * limits and then either
- * - keep track of this connection by adding it to the list of
- * open connections and then forward the `connection` event
- * - or reject (close) the connection when its limits are exceeded and will
- * forward an `error` event instead.
- *
- * Whenever a connection closes, it will remove this connection from the list of
- * open connections.
- *
- * ```php
- * $server = new LimitingServer($server, 100);
- * $server->on('connection', function (ConnectionInterface $connection) {
- * $connection->write('hello there!' . PHP_EOL);
- * …
- * });
- * ```
- *
- * See also the `ServerInterface` for more details.
- *
- * @see ServerInterface
- * @see ConnectionInterface
- */
-class LimitingServer extends EventEmitter implements ServerInterface
-{
- private $connections = array();
- private $server;
- private $limit;
-
- private $pauseOnLimit = false;
- private $autoPaused = false;
- private $manuPaused = false;
-
- /**
- * Instantiates a new LimitingServer.
- *
- * You have to pass a maximum number of open connections to ensure
- * the server will automatically reject (close) connections once this limit
- * is exceeded. In this case, it will emit an `error` event to inform about
- * this and no `connection` event will be emitted.
- *
- * ```php
- * $server = new LimitingServer($server, 100);
- * $server->on('connection', function (ConnectionInterface $connection) {
- * $connection->write('hello there!' . PHP_EOL);
- * …
- * });
- * ```
- *
- * You MAY pass a `null` limit in order to put no limit on the number of
- * open connections and keep accepting new connection until you run out of
- * operating system resources (such as open file handles). This may be
- * useful if you do not want to take care of applying a limit but still want
- * to use the `getConnections()` method.
- *
- * You can optionally configure the server to pause accepting new
- * connections once the connection limit is reached. In this case, it will
- * pause the underlying server and no longer process any new connections at
- * all, thus also no longer closing any excessive connections.
- * The underlying operating system is responsible for keeping a backlog of
- * pending connections until its limit is reached, at which point it will
- * start rejecting further connections.
- * Once the server is below the connection limit, it will continue consuming
- * connections from the backlog and will process any outstanding data on
- * each connection.
- * This mode may be useful for some protocols that are designed to wait for
- * a response message (such as HTTP), but may be less useful for other
- * protocols that demand immediate responses (such as a "welcome" message in
- * an interactive chat).
- *
- * ```php
- * $server = new LimitingServer($server, 100, true);
- * $server->on('connection', function (ConnectionInterface $connection) {
- * $connection->write('hello there!' . PHP_EOL);
- * …
- * });
- * ```
- *
- * @param ServerInterface $server
- * @param int|null $connectionLimit
- * @param bool $pauseOnLimit
- */
- public function __construct(ServerInterface $server, $connectionLimit, $pauseOnLimit = false)
- {
- $this->server = $server;
- $this->limit = $connectionLimit;
- if ($connectionLimit !== null) {
- $this->pauseOnLimit = $pauseOnLimit;
- }
-
- $this->server->on('connection', array($this, 'handleConnection'));
- $this->server->on('error', array($this, 'handleError'));
- }
-
- /**
- * Returns an array with all currently active connections
- *
- * ```php
- * foreach ($server->getConnection() as $connection) {
- * $connection->write('Hi!');
- * }
- * ```
- *
- * @return ConnectionInterface[]
- */
- public function getConnections()
- {
- return $this->connections;
- }
-
- public function getAddress()
- {
- return $this->server->getAddress();
- }
-
- public function pause()
- {
- if (!$this->manuPaused) {
- $this->manuPaused = true;
-
- if (!$this->autoPaused) {
- $this->server->pause();
- }
- }
- }
-
- public function resume()
- {
- if ($this->manuPaused) {
- $this->manuPaused = false;
-
- if (!$this->autoPaused) {
- $this->server->resume();
- }
- }
- }
-
- public function close()
- {
- $this->server->close();
- }
-
- /** @internal */
- public function handleConnection(ConnectionInterface $connection)
- {
- // close connection if limit exceeded
- if ($this->limit !== null && count($this->connections) >= $this->limit) {
- $this->handleError(new OverflowException('Connection closed because server reached connection limit'));
- $connection->close();
- return;
- }
-
- $this->connections[] = $connection;
- $that = $this;
- $connection->on('close', function () use ($that, $connection) {
- $that->handleDisconnection($connection);
- });
-
- // pause accepting new connections if limit exceeded
- if ($this->pauseOnLimit && !$this->autoPaused && count($this->connections) >= $this->limit) {
- $this->autoPaused = true;
-
- if (!$this->manuPaused) {
- $this->server->pause();
- }
- }
-
- $this->emit('connection', array($connection));
- }
-
- /** @internal */
- public function handleDisconnection(ConnectionInterface $connection)
- {
- unset($this->connections[array_search($connection, $this->connections)]);
-
- // continue accepting new connection if below limit
- if ($this->autoPaused && count($this->connections) < $this->limit) {
- $this->autoPaused = false;
-
- if (!$this->manuPaused) {
- $this->server->resume();
- }
- }
- }
-
- /** @internal */
- public function handleError(Exception $error)
- {
- $this->emit('error', array($error));
- }
-}
diff --git a/assets/php/vendor/react/socket/src/SecureConnector.php b/assets/php/vendor/react/socket/src/SecureConnector.php
deleted file mode 100755
index f04183d..0000000
--- a/assets/php/vendor/react/socket/src/SecureConnector.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\EventLoop\LoopInterface;
-use React\Promise;
-use BadMethodCallException;
-use InvalidArgumentException;
-use UnexpectedValueException;
-
-final class SecureConnector implements ConnectorInterface
-{
- private $connector;
- private $streamEncryption;
- private $context;
-
- public function __construct(ConnectorInterface $connector, LoopInterface $loop, array $context = array())
- {
- $this->connector = $connector;
- $this->streamEncryption = new StreamEncryption($loop, false);
- $this->context = $context;
- }
-
- public function connect($uri)
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- return Promise\reject(new BadMethodCallException('Encryption not supported on your platform (HHVM < 3.8?)')); // @codeCoverageIgnore
- }
-
- if (strpos($uri, '://') === false) {
- $uri = 'tls://' . $uri;
- }
-
- $parts = parse_url($uri);
- if (!$parts || !isset($parts['scheme']) || $parts['scheme'] !== 'tls') {
- return Promise\reject(new InvalidArgumentException('Given URI "' . $uri . '" is invalid'));
- }
-
- $uri = str_replace('tls://', '', $uri);
- $context = $this->context;
-
- $encryption = $this->streamEncryption;
- return $this->connector->connect($uri)->then(function (ConnectionInterface $connection) use ($context, $encryption) {
- // (unencrypted) TCP/IP connection succeeded
-
- if (!$connection instanceof Connection) {
- $connection->close();
- throw new UnexpectedValueException('Base connector does not use internal Connection class exposing stream resource');
- }
-
- // set required SSL/TLS context options
- foreach ($context as $name => $value) {
- stream_context_set_option($connection->stream, 'ssl', $name, $value);
- }
-
- // try to enable encryption
- return $encryption->enable($connection)->then(null, function ($error) use ($connection) {
- // establishing encryption failed => close invalid connection and return error
- $connection->close();
- throw $error;
- });
- });
- }
-}
diff --git a/assets/php/vendor/react/socket/src/SecureServer.php b/assets/php/vendor/react/socket/src/SecureServer.php
deleted file mode 100755
index 302ae93..0000000
--- a/assets/php/vendor/react/socket/src/SecureServer.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use BadMethodCallException;
-use UnexpectedValueException;
-
-/**
- * The `SecureServer` class implements the `ServerInterface` and is responsible
- * for providing a secure TLS (formerly known as SSL) server.
- *
- * It does so by wrapping a `TcpServer` instance which waits for plaintext
- * TCP/IP connections and then performs a TLS handshake for each connection.
- *
- * ```php
- * $server = new TcpServer(8000, $loop);
- * $server = new SecureServer($server, $loop, array(
- * // tls context options here…
- * ));
- * ```
- *
- * Whenever a client completes the TLS handshake, it will emit a `connection` event
- * with a connection instance implementing [`ConnectionInterface`](#connectioninterface):
- *
- * ```php
- * $server->on('connection', function (ConnectionInterface $connection) {
- * echo 'Secure connection from' . $connection->getRemoteAddress() . PHP_EOL;
- *
- * $connection->write('hello there!' . PHP_EOL);
- * …
- * });
- * ```
- *
- * Whenever a client fails to perform a successful TLS handshake, it will emit an
- * `error` event and then close the underlying TCP/IP connection:
- *
- * ```php
- * $server->on('error', function (Exception $e) {
- * echo 'Error' . $e->getMessage() . PHP_EOL;
- * });
- * ```
- *
- * See also the `ServerInterface` for more details.
- *
- * Note that the `SecureServer` class is a concrete implementation for TLS sockets.
- * If you want to typehint in your higher-level protocol implementation, you SHOULD
- * use the generic `ServerInterface` instead.
- *
- * @see ServerInterface
- * @see ConnectionInterface
- */
-final class SecureServer extends EventEmitter implements ServerInterface
-{
- private $tcp;
- private $encryption;
- private $context;
-
- /**
- * Creates a secure TLS server and starts waiting for incoming connections
- *
- * It does so by wrapping a `TcpServer` instance which waits for plaintext
- * TCP/IP connections and then performs a TLS handshake for each connection.
- * It thus requires valid [TLS context options],
- * which in its most basic form may look something like this if you're using a
- * PEM encoded certificate file:
- *
- * ```php
- * $server = new TcpServer(8000, $loop);
- * $server = new SecureServer($server, $loop, array(
- * 'local_cert' => 'server.pem'
- * ));
- * ```
- *
- * Note that the certificate file will not be loaded on instantiation but when an
- * incoming connection initializes its TLS context.
- * This implies that any invalid certificate file paths or contents will only cause
- * an `error` event at a later time.
- *
- * If your private key is encrypted with a passphrase, you have to specify it
- * like this:
- *
- * ```php
- * $server = new TcpServer(8000, $loop);
- * $server = new SecureServer($server, $loop, array(
- * 'local_cert' => 'server.pem',
- * 'passphrase' => 'secret'
- * ));
- * ```
- *
- * Note that available [TLS context options],
- * their defaults and effects of changing these may vary depending on your system
- * and/or PHP version.
- * Passing unknown context options has no effect.
- *
- * Advanced usage: Despite allowing any `ServerInterface` as first parameter,
- * you SHOULD pass a `TcpServer` instance as first parameter, unless you
- * know what you're doing.
- * Internally, the `SecureServer` has to set the required TLS context options on
- * the underlying stream resources.
- * These resources are not exposed through any of the interfaces defined in this
- * package, but only through the internal `Connection` class.
- * The `TcpServer` class is guaranteed to emit connections that implement
- * the `ConnectionInterface` and uses the internal `Connection` class in order to
- * expose these underlying resources.
- * If you use a custom `ServerInterface` and its `connection` event does not
- * meet this requirement, the `SecureServer` will emit an `error` event and
- * then close the underlying connection.
- *
- * @param ServerInterface|TcpServer $tcp
- * @param LoopInterface $loop
- * @param array $context
- * @throws BadMethodCallException for legacy HHVM < 3.8 due to lack of support
- * @see TcpServer
- * @link http://php.net/manual/en/context.ssl.php for TLS context options
- */
- public function __construct(ServerInterface $tcp, LoopInterface $loop, array $context)
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- throw new BadMethodCallException('Encryption not supported on your platform (HHVM < 3.8?)'); // @codeCoverageIgnore
- }
-
- // default to empty passphrase to suppress blocking passphrase prompt
- $context += array(
- 'passphrase' => ''
- );
-
- $this->tcp = $tcp;
- $this->encryption = new StreamEncryption($loop);
- $this->context = $context;
-
- $that = $this;
- $this->tcp->on('connection', function ($connection) use ($that) {
- $that->handleConnection($connection);
- });
- $this->tcp->on('error', function ($error) use ($that) {
- $that->emit('error', array($error));
- });
- }
-
- public function getAddress()
- {
- $address = $this->tcp->getAddress();
- if ($address === null) {
- return null;
- }
-
- return str_replace('tcp://' , 'tls://', $address);
- }
-
- public function pause()
- {
- $this->tcp->pause();
- }
-
- public function resume()
- {
- $this->tcp->resume();
- }
-
- public function close()
- {
- return $this->tcp->close();
- }
-
- /** @internal */
- public function handleConnection(ConnectionInterface $connection)
- {
- if (!$connection instanceof Connection) {
- $this->emit('error', array(new UnexpectedValueException('Base server does not use internal Connection class exposing stream resource')));
- $connection->end();
- return;
- }
-
- foreach ($this->context as $name => $value) {
- stream_context_set_option($connection->stream, 'ssl', $name, $value);
- }
-
- $that = $this;
-
- $this->encryption->enable($connection)->then(
- function ($conn) use ($that) {
- $that->emit('connection', array($conn));
- },
- function ($error) use ($that, $connection) {
- $that->emit('error', array($error));
- $connection->end();
- }
- );
- }
-}
diff --git a/assets/php/vendor/react/socket/src/Server.php b/assets/php/vendor/react/socket/src/Server.php
deleted file mode 100755
index 72712e4..0000000
--- a/assets/php/vendor/react/socket/src/Server.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use Exception;
-
-final class Server extends EventEmitter implements ServerInterface
-{
- private $server;
-
- public function __construct($uri, LoopInterface $loop, array $context = array())
- {
- // sanitize TCP context options if not properly wrapped
- if ($context && (!isset($context['tcp']) && !isset($context['tls']) && !isset($context['unix']))) {
- $context = array('tcp' => $context);
- }
-
- // apply default options if not explicitly given
- $context += array(
- 'tcp' => array(),
- 'tls' => array(),
- 'unix' => array()
- );
-
- $scheme = 'tcp';
- $pos = strpos($uri, '://');
- if ($pos !== false) {
- $scheme = substr($uri, 0, $pos);
- }
-
- if ($scheme === 'unix') {
- $server = new UnixServer($uri, $loop, $context['unix']);
- } else {
- $server = new TcpServer(str_replace('tls://', '', $uri), $loop, $context['tcp']);
-
- if ($scheme === 'tls') {
- $server = new SecureServer($server, $loop, $context['tls']);
- }
- }
-
- $this->server = $server;
-
- $that = $this;
- $server->on('connection', function (ConnectionInterface $conn) use ($that) {
- $that->emit('connection', array($conn));
- });
- $server->on('error', function (Exception $error) use ($that) {
- $that->emit('error', array($error));
- });
- }
-
- public function getAddress()
- {
- return $this->server->getAddress();
- }
-
- public function pause()
- {
- $this->server->pause();
- }
-
- public function resume()
- {
- $this->server->resume();
- }
-
- public function close()
- {
- $this->server->close();
- }
-}
diff --git a/assets/php/vendor/react/socket/src/ServerInterface.php b/assets/php/vendor/react/socket/src/ServerInterface.php
deleted file mode 100755
index 5319678..0000000
--- a/assets/php/vendor/react/socket/src/ServerInterface.php
+++ /dev/null
@@ -1,151 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitterInterface;
-
-/**
- * The `ServerInterface` is responsible for providing an interface for accepting
- * incoming streaming connections, such as a normal TCP/IP connection.
- *
- * Most higher-level components (such as a HTTP server) accept an instance
- * implementing this interface to accept incoming streaming connections.
- * This is usually done via dependency injection, so it's fairly simple to actually
- * swap this implementation against any other implementation of this interface.
- * This means that you SHOULD typehint against this interface instead of a concrete
- * implementation of this interface.
- *
- * Besides defining a few methods, this interface also implements the
- * `EventEmitterInterface` which allows you to react to certain events:
- *
- * connection event:
- * The `connection` event will be emitted whenever a new connection has been
- * established, i.e. a new client connects to this server socket:
- *
- * ```php
- * $server->on('connection', function (ConnectionInterface $connection) {
- * echo 'new connection' . PHP_EOL;
- * });
- * ```
- *
- * See also the `ConnectionInterface` for more details about handling the
- * incoming connection.
- *
- * error event:
- * The `error` event will be emitted whenever there's an error accepting a new
- * connection from a client.
- *
- * ```php
- * $server->on('error', function (Exception $e) {
- * echo 'error: ' . $e->getMessage() . PHP_EOL;
- * });
- * ```
- *
- * Note that this is not a fatal error event, i.e. the server keeps listening for
- * new connections even after this event.
- *
- * @see ConnectionInterface
- */
-interface ServerInterface extends EventEmitterInterface
-{
- /**
- * Returns the full address (URI) this server is currently listening on
- *
- * ```php
- * $address = $server->getAddress();
- * echo 'Server listening on ' . $address . PHP_EOL;
- * ```
- *
- * If the address can not be determined or is unknown at this time (such as
- * after the socket has been closed), it MAY return a `NULL` value instead.
- *
- * Otherwise, it will return the full address (URI) as a string value, such
- * as `tcp://127.0.0.1:8080`, `tcp://[::1]:80` or `tls://127.0.0.1:443`.
- * Note that individual URI components are application specific and depend
- * on the underlying transport protocol.
- *
- * If this is a TCP/IP based server and you only want the local port, you may
- * use something like this:
- *
- * ```php
- * $address = $server->getAddress();
- * $port = parse_url($address, PHP_URL_PORT);
- * echo 'Server listening on port ' . $port . PHP_EOL;
- * ```
- *
- * @return ?string the full listening address (URI) or NULL if it is unknown (not applicable to this server socket or already closed)
- */
- public function getAddress();
-
- /**
- * Pauses accepting new incoming connections.
- *
- * Removes the socket resource from the EventLoop and thus stop accepting
- * new connections. Note that the listening socket stays active and is not
- * closed.
- *
- * This means that new incoming connections will stay pending in the
- * operating system backlog until its configurable backlog is filled.
- * Once the backlog is filled, the operating system may reject further
- * incoming connections until the backlog is drained again by resuming
- * to accept new connections.
- *
- * Once the server is paused, no futher `connection` events SHOULD
- * be emitted.
- *
- * ```php
- * $server->pause();
- *
- * $server->on('connection', assertShouldNeverCalled());
- * ```
- *
- * This method is advisory-only, though generally not recommended, the
- * server MAY continue emitting `connection` events.
- *
- * Unless otherwise noted, a successfully opened server SHOULD NOT start
- * in paused state.
- *
- * You can continue processing events by calling `resume()` again.
- *
- * Note that both methods can be called any number of times, in particular
- * calling `pause()` more than once SHOULD NOT have any effect.
- * Similarly, calling this after `close()` is a NO-OP.
- *
- * @see self::resume()
- * @return void
- */
- public function pause();
-
- /**
- * Resumes accepting new incoming connections.
- *
- * Re-attach the socket resource to the EventLoop after a previous `pause()`.
- *
- * ```php
- * $server->pause();
- *
- * $loop->addTimer(1.0, function () use ($server) {
- * $server->resume();
- * });
- * ```
- *
- * Note that both methods can be called any number of times, in particular
- * calling `resume()` without a prior `pause()` SHOULD NOT have any effect.
- * Similarly, calling this after `close()` is a NO-OP.
- *
- * @see self::pause()
- * @return void
- */
- public function resume();
-
- /**
- * Shuts down this listening socket
- *
- * This will stop listening for new incoming connections on this socket.
- *
- * Calling this method more than once on the same instance is a NO-OP.
- *
- * @return void
- */
- public function close();
-}
diff --git a/assets/php/vendor/react/socket/src/StreamEncryption.php b/assets/php/vendor/react/socket/src/StreamEncryption.php
deleted file mode 100755
index ba5d472..0000000
--- a/assets/php/vendor/react/socket/src/StreamEncryption.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\EventLoop\LoopInterface;
-use React\Promise\Deferred;
-use RuntimeException;
-use UnexpectedValueException;
-
-/**
- * This class is considered internal and its API should not be relied upon
- * outside of Socket.
- *
- * @internal
- */
-class StreamEncryption
-{
- private $loop;
- private $method;
- private $server;
-
- private $errstr;
- private $errno;
-
- public function __construct(LoopInterface $loop, $server = true)
- {
- $this->loop = $loop;
- $this->server = $server;
-
- // support TLSv1.0+ by default and exclude legacy SSLv2/SSLv3.
- // PHP 5.6+ supports bitmasks, legacy PHP only supports predefined
- // constants, so apply accordingly below.
- // Also, since PHP 5.6.7 up until before PHP 7.2.0 the main constant did
- // only support TLSv1.0, so we explicitly apply all versions.
- // @link http://php.net/manual/en/migration56.openssl.php#migration56.openssl.crypto-method
- // @link https://3v4l.org/plbFn
- if ($server) {
- $this->method = STREAM_CRYPTO_METHOD_TLS_SERVER;
-
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_0_SERVER')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_0_SERVER;
- }
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_1_SERVER')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_1_SERVER;
- }
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_SERVER')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_2_SERVER;
- }
- } else {
- $this->method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
-
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT;
- }
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
- }
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
- $this->method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
- }
- }
- }
-
- public function enable(Connection $stream)
- {
- return $this->toggle($stream, true);
- }
-
- public function disable(Connection $stream)
- {
- return $this->toggle($stream, false);
- }
-
- public function toggle(Connection $stream, $toggle)
- {
- // pause actual stream instance to continue operation on raw stream socket
- $stream->pause();
-
- // TODO: add write() event to make sure we're not sending any excessive data
-
- $deferred = new Deferred(function ($_, $reject) use ($toggle) {
- // cancelling this leaves this stream in an inconsistent state…
- $reject(new RuntimeException('Cancelled toggling encryption ' . $toggle ? 'on' : 'off'));
- });
-
- // get actual stream socket from stream instance
- $socket = $stream->stream;
-
- // get crypto method from context options or use global setting from constructor
- $method = $this->method;
- $context = stream_context_get_options($socket);
- if (isset($context['ssl']['crypto_method'])) {
- $method = $context['ssl']['crypto_method'];
- }
-
- $that = $this;
- $toggleCrypto = function () use ($socket, $deferred, $toggle, $method, $that) {
- $that->toggleCrypto($socket, $deferred, $toggle, $method);
- };
-
- $this->loop->addReadStream($socket, $toggleCrypto);
-
- if (!$this->server) {
- $toggleCrypto();
- }
-
- $loop = $this->loop;
-
- return $deferred->promise()->then(function () use ($stream, $socket, $loop, $toggle) {
- $loop->removeReadStream($socket);
-
- $stream->encryptionEnabled = $toggle;
- $stream->resume();
-
- return $stream;
- }, function($error) use ($stream, $socket, $loop) {
- $loop->removeReadStream($socket);
- $stream->resume();
- throw $error;
- });
- }
-
- public function toggleCrypto($socket, Deferred $deferred, $toggle, $method)
- {
- set_error_handler(array($this, 'handleError'));
- $result = stream_socket_enable_crypto($socket, $toggle, $method);
- restore_error_handler();
-
- if (true === $result) {
- $deferred->resolve();
- } else if (false === $result) {
- $deferred->reject(new UnexpectedValueException(
- sprintf("Unable to complete SSL/TLS handshake: %s", $this->errstr),
- $this->errno
- ));
- } else {
- // need more data, will retry
- }
- }
-
- public function handleError($errno, $errstr)
- {
- $this->errstr = str_replace(array("\r", "\n"), ' ', $errstr);
- $this->errno = $errno;
- }
-}
diff --git a/assets/php/vendor/react/socket/src/TcpConnector.php b/assets/php/vendor/react/socket/src/TcpConnector.php
deleted file mode 100755
index 90d7df1..0000000
--- a/assets/php/vendor/react/socket/src/TcpConnector.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\EventLoop\LoopInterface;
-use React\Promise;
-use InvalidArgumentException;
-use RuntimeException;
-
-final class TcpConnector implements ConnectorInterface
-{
- private $loop;
- private $context;
-
- public function __construct(LoopInterface $loop, array $context = array())
- {
- $this->loop = $loop;
- $this->context = $context;
- }
-
- public function connect($uri)
- {
- if (strpos($uri, '://') === false) {
- $uri = 'tcp://' . $uri;
- }
-
- $parts = parse_url($uri);
- if (!$parts || !isset($parts['scheme'], $parts['host'], $parts['port']) || $parts['scheme'] !== 'tcp') {
- return Promise\reject(new InvalidArgumentException('Given URI "' . $uri . '" is invalid'));
- }
-
- $ip = trim($parts['host'], '[]');
- if (false === filter_var($ip, FILTER_VALIDATE_IP)) {
- return Promise\reject(new InvalidArgumentException('Given URI "' . $ip . '" does not contain a valid host IP'));
- }
-
- // use context given in constructor
- $context = array(
- 'socket' => $this->context
- );
-
- // parse arguments from query component of URI
- $args = array();
- if (isset($parts['query'])) {
- parse_str($parts['query'], $args);
- }
-
- // If an original hostname has been given, use this for TLS setup.
- // This can happen due to layers of nested connectors, such as a
- // DnsConnector reporting its original hostname.
- // These context options are here in case TLS is enabled later on this stream.
- // If TLS is not enabled later, this doesn't hurt either.
- if (isset($args['hostname'])) {
- $context['ssl'] = array(
- 'SNI_enabled' => true,
- 'peer_name' => $args['hostname']
- );
-
- // Legacy PHP < 5.6 ignores peer_name and requires legacy context options instead.
- // The SNI_server_name context option has to be set here during construction,
- // as legacy PHP ignores any values set later.
- if (PHP_VERSION_ID < 50600) {
- $context['ssl'] += array(
- 'SNI_server_name' => $args['hostname'],
- 'CN_match' => $args['hostname']
- );
- }
- }
-
- // latest versions of PHP no longer accept any other URI components and
- // HHVM fails to parse URIs with a query but no path, so let's simplify our URI here
- $remote = 'tcp://' . $parts['host'] . ':' . $parts['port'];
-
- $socket = @stream_socket_client(
- $remote,
- $errno,
- $errstr,
- 0,
- STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT,
- stream_context_create($context)
- );
-
- if (false === $socket) {
- return Promise\reject(new RuntimeException(
- sprintf("Connection to %s failed: %s", $uri, $errstr),
- $errno
- ));
- }
-
- stream_set_blocking($socket, 0);
-
- // wait for connection
-
- return $this->waitForStreamOnce($socket);
- }
-
- private function waitForStreamOnce($stream)
- {
- $loop = $this->loop;
-
- return new Promise\Promise(function ($resolve, $reject) use ($loop, $stream) {
- $loop->addWriteStream($stream, function ($stream) use ($loop, $resolve, $reject) {
- $loop->removeWriteStream($stream);
-
- // The following hack looks like the only way to
- // detect connection refused errors with PHP's stream sockets.
- if (false === stream_socket_get_name($stream, true)) {
- fclose($stream);
-
- $reject(new RuntimeException('Connection refused'));
- } else {
- $resolve(new Connection($stream, $loop));
- }
- });
- }, function () use ($loop, $stream) {
- $loop->removeWriteStream($stream);
- fclose($stream);
-
- throw new RuntimeException('Cancelled while waiting for TCP/IP connection to be established');
- });
- }
-}
diff --git a/assets/php/vendor/react/socket/src/TcpServer.php b/assets/php/vendor/react/socket/src/TcpServer.php
deleted file mode 100755
index 119e177..0000000
--- a/assets/php/vendor/react/socket/src/TcpServer.php
+++ /dev/null
@@ -1,236 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use InvalidArgumentException;
-use RuntimeException;
-
-/**
- * The `TcpServer` class implements the `ServerInterface` and
- * is responsible for accepting plaintext TCP/IP connections.
- *
- * ```php
- * $server = new TcpServer(8080, $loop);
- * ```
- *
- * Whenever a client connects, it will emit a `connection` event with a connection
- * instance implementing `ConnectionInterface`:
- *
- * ```php
- * $server->on('connection', function (ConnectionInterface $connection) {
- * echo 'Plaintext connection from ' . $connection->getRemoteAddress() . PHP_EOL;
- * $connection->write('hello there!' . PHP_EOL);
- * …
- * });
- * ```
- *
- * See also the `ServerInterface` for more details.
- *
- * @see ServerInterface
- * @see ConnectionInterface
- */
-final class TcpServer extends EventEmitter implements ServerInterface
-{
- private $master;
- private $loop;
- private $listening = false;
-
- /**
- * Creates a plaintext TCP/IP socket server and starts listening on the given address
- *
- * This starts accepting new incoming connections on the given address.
- * See also the `connection event` documented in the `ServerInterface`
- * for more details.
- *
- * ```php
- * $server = new TcpServer(8080, $loop);
- * ```
- *
- * As above, the `$uri` parameter can consist of only a port, in which case the
- * server will default to listening on the localhost address `127.0.0.1`,
- * which means it will not be reachable from outside of this system.
- *
- * In order to use a random port assignment, you can use the port `0`:
- *
- * ```php
- * $server = new TcpServer(0, $loop);
- * $address = $server->getAddress();
- * ```
- *
- * In order to change the host the socket is listening on, you can provide an IP
- * address through the first parameter provided to the constructor, optionally
- * preceded by the `tcp://` scheme:
- *
- * ```php
- * $server = new TcpServer('192.168.0.1:8080', $loop);
- * ```
- *
- * If you want to listen on an IPv6 address, you MUST enclose the host in square
- * brackets:
- *
- * ```php
- * $server = new TcpServer('[::1]:8080', $loop);
- * ```
- *
- * If the given URI is invalid, does not contain a port, any other scheme or if it
- * contains a hostname, it will throw an `InvalidArgumentException`:
- *
- * ```php
- * // throws InvalidArgumentException due to missing port
- * $server = new TcpServer('127.0.0.1', $loop);
- * ```
- *
- * If the given URI appears to be valid, but listening on it fails (such as if port
- * is already in use or port below 1024 may require root access etc.), it will
- * throw a `RuntimeException`:
- *
- * ```php
- * $first = new TcpServer(8080, $loop);
- *
- * // throws RuntimeException because port is already in use
- * $second = new TcpServer(8080, $loop);
- * ```
- *
- * Note that these error conditions may vary depending on your system and/or
- * configuration.
- * See the exception message and code for more details about the actual error
- * condition.
- *
- * Optionally, you can specify [socket context options](http://php.net/manual/en/context.socket.php)
- * for the underlying stream socket resource like this:
- *
- * ```php
- * $server = new TcpServer('[::1]:8080', $loop, array(
- * 'backlog' => 200,
- * 'so_reuseport' => true,
- * 'ipv6_v6only' => true
- * ));
- * ```
- *
- * Note that available [socket context options](http://php.net/manual/en/context.socket.php),
- * their defaults and effects of changing these may vary depending on your system
- * and/or PHP version.
- * Passing unknown context options has no effect.
- *
- * @param string|int $uri
- * @param LoopInterface $loop
- * @param array $context
- * @throws InvalidArgumentException if the listening address is invalid
- * @throws RuntimeException if listening on this address fails (already in use etc.)
- */
- public function __construct($uri, LoopInterface $loop, array $context = array())
- {
- $this->loop = $loop;
-
- // a single port has been given => assume localhost
- if ((string)(int)$uri === (string)$uri) {
- $uri = '127.0.0.1:' . $uri;
- }
-
- // assume default scheme if none has been given
- if (strpos($uri, '://') === false) {
- $uri = 'tcp://' . $uri;
- }
-
- // parse_url() does not accept null ports (random port assignment) => manually remove
- if (substr($uri, -2) === ':0') {
- $parts = parse_url(substr($uri, 0, -2));
- if ($parts) {
- $parts['port'] = 0;
- }
- } else {
- $parts = parse_url($uri);
- }
-
- // ensure URI contains TCP scheme, host and port
- if (!$parts || !isset($parts['scheme'], $parts['host'], $parts['port']) || $parts['scheme'] !== 'tcp') {
- throw new InvalidArgumentException('Invalid URI "' . $uri . '" given');
- }
-
- if (false === filter_var(trim($parts['host'], '[]'), FILTER_VALIDATE_IP)) {
- throw new InvalidArgumentException('Given URI "' . $uri . '" does not contain a valid host IP');
- }
-
- $this->master = @stream_socket_server(
- $uri,
- $errno,
- $errstr,
- STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
- stream_context_create(array('socket' => $context))
- );
- if (false === $this->master) {
- throw new RuntimeException('Failed to listen on "' . $uri . '": ' . $errstr, $errno);
- }
- stream_set_blocking($this->master, 0);
-
- $this->resume();
- }
-
- public function getAddress()
- {
- if (!is_resource($this->master)) {
- return null;
- }
-
- $address = stream_socket_get_name($this->master, false);
-
- // check if this is an IPv6 address which includes multiple colons but no square brackets
- $pos = strrpos($address, ':');
- if ($pos !== false && strpos($address, ':') < $pos && substr($address, 0, 1) !== '[') {
- $port = substr($address, $pos + 1);
- $address = '[' . substr($address, 0, $pos) . ']:' . $port;
- }
-
- return 'tcp://' . $address;
- }
-
- public function pause()
- {
- if (!$this->listening) {
- return;
- }
-
- $this->loop->removeReadStream($this->master);
- $this->listening = false;
- }
-
- public function resume()
- {
- if ($this->listening || !is_resource($this->master)) {
- return;
- }
-
- $that = $this;
- $this->loop->addReadStream($this->master, function ($master) use ($that) {
- $newSocket = @stream_socket_accept($master);
- if (false === $newSocket) {
- $that->emit('error', array(new RuntimeException('Error accepting new connection')));
-
- return;
- }
- $that->handleConnection($newSocket);
- });
- $this->listening = true;
- }
-
- public function close()
- {
- if (!is_resource($this->master)) {
- return;
- }
-
- $this->pause();
- fclose($this->master);
- $this->removeAllListeners();
- }
-
- /** @internal */
- public function handleConnection($socket)
- {
- $this->emit('connection', array(
- new Connection($socket, $this->loop)
- ));
- }
-}
diff --git a/assets/php/vendor/react/socket/src/TimeoutConnector.php b/assets/php/vendor/react/socket/src/TimeoutConnector.php
deleted file mode 100755
index d4eba2e..0000000
--- a/assets/php/vendor/react/socket/src/TimeoutConnector.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\EventLoop\LoopInterface;
-use React\Promise\Timer;
-
-final class TimeoutConnector implements ConnectorInterface
-{
- private $connector;
- private $timeout;
- private $loop;
-
- public function __construct(ConnectorInterface $connector, $timeout, LoopInterface $loop)
- {
- $this->connector = $connector;
- $this->timeout = $timeout;
- $this->loop = $loop;
- }
-
- public function connect($uri)
- {
- return Timer\timeout($this->connector->connect($uri), $this->timeout, $this->loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/src/UnixConnector.php b/assets/php/vendor/react/socket/src/UnixConnector.php
deleted file mode 100755
index 9b84ab0..0000000
--- a/assets/php/vendor/react/socket/src/UnixConnector.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use React\EventLoop\LoopInterface;
-use React\Promise;
-use InvalidArgumentException;
-use RuntimeException;
-
-/**
- * Unix domain socket connector
- *
- * Unix domain sockets use atomic operations, so we can as well emulate
- * async behavior.
- */
-final class UnixConnector implements ConnectorInterface
-{
- private $loop;
-
- public function __construct(LoopInterface $loop)
- {
- $this->loop = $loop;
- }
-
- public function connect($path)
- {
- if (strpos($path, '://') === false) {
- $path = 'unix://' . $path;
- } elseif (substr($path, 0, 7) !== 'unix://') {
- return Promise\reject(new InvalidArgumentException('Given URI "' . $path . '" is invalid'));
- }
-
- $resource = @stream_socket_client($path, $errno, $errstr, 1.0);
-
- if (!$resource) {
- return Promise\reject(new RuntimeException('Unable to connect to unix domain socket "' . $path . '": ' . $errstr, $errno));
- }
-
- $connection = new Connection($resource, $this->loop);
- $connection->unix = true;
-
- return Promise\resolve($connection);
- }
-}
diff --git a/assets/php/vendor/react/socket/src/UnixServer.php b/assets/php/vendor/react/socket/src/UnixServer.php
deleted file mode 100755
index 8f1ed98..0000000
--- a/assets/php/vendor/react/socket/src/UnixServer.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-namespace React\Socket;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use InvalidArgumentException;
-use RuntimeException;
-
-/**
- * The `UnixServer` class implements the `ServerInterface` and
- * is responsible for accepting plaintext connections on unix domain sockets.
- *
- * ```php
- * $server = new UnixServer('unix:///tmp/app.sock', $loop);
- * ```
- *
- * See also the `ServerInterface` for more details.
- *
- * @see ServerInterface
- * @see ConnectionInterface
- */
-final class UnixServer extends EventEmitter implements ServerInterface
-{
- private $master;
- private $loop;
- private $listening = false;
-
- /**
- * Creates a plaintext socket server and starts listening on the given unix socket
- *
- * This starts accepting new incoming connections on the given address.
- * See also the `connection event` documented in the `ServerInterface`
- * for more details.
- *
- * ```php
- * $server = new UnixServer('unix:///tmp/app.sock', $loop);
- * ```
- *
- * @param string $path
- * @param LoopInterface $loop
- * @param array $context
- * @throws InvalidArgumentException if the listening address is invalid
- * @throws RuntimeException if listening on this address fails (already in use etc.)
- */
- public function __construct($path, LoopInterface $loop, array $context = array())
- {
- $this->loop = $loop;
-
- if (strpos($path, '://') === false) {
- $path = 'unix://' . $path;
- } elseif (substr($path, 0, 7) !== 'unix://') {
- throw new InvalidArgumentException('Given URI "' . $path . '" is invalid');
- }
-
- $this->master = @stream_socket_server(
- $path,
- $errno,
- $errstr,
- STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
- stream_context_create(array('socket' => $context))
- );
- if (false === $this->master) {
- throw new RuntimeException('Failed to listen on unix domain socket "' . $path . '": ' . $errstr, $errno);
- }
- stream_set_blocking($this->master, 0);
-
- $this->resume();
- }
-
- public function getAddress()
- {
- if (!is_resource($this->master)) {
- return null;
- }
-
- return 'unix://' . stream_socket_get_name($this->master, false);
- }
-
- public function pause()
- {
- if (!$this->listening) {
- return;
- }
-
- $this->loop->removeReadStream($this->master);
- $this->listening = false;
- }
-
- public function resume()
- {
- if ($this->listening || !is_resource($this->master)) {
- return;
- }
-
- $that = $this;
- $this->loop->addReadStream($this->master, function ($master) use ($that) {
- $newSocket = @stream_socket_accept($master);
- if (false === $newSocket) {
- $that->emit('error', array(new RuntimeException('Error accepting new connection')));
-
- return;
- }
- $that->handleConnection($newSocket);
- });
- $this->listening = true;
- }
-
- public function close()
- {
- if (!is_resource($this->master)) {
- return;
- }
-
- $this->pause();
- fclose($this->master);
- $this->removeAllListeners();
- }
-
- /** @internal */
- public function handleConnection($socket)
- {
- $connection = new Connection($socket, $this->loop);
- $connection->unix = true;
-
- $this->emit('connection', array(
- $connection
- ));
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/ConnectionTest.php b/assets/php/vendor/react/socket/tests/ConnectionTest.php
deleted file mode 100755
index d3563df..0000000
--- a/assets/php/vendor/react/socket/tests/ConnectionTest.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\Connection;
-
-class ConnectionTest extends TestCase
-{
- public function testCloseConnectionWillCloseSocketResource()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not support socket operation on test memory stream');
- }
-
- $resource = fopen('php://memory', 'r+');
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $connection = new Connection($resource, $loop);
- $connection->close();
-
- $this->assertFalse(is_resource($resource));
- }
-
- public function testCloseConnectionWillRemoveResourceFromLoopBeforeClosingResource()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not support socket operation on test memory stream');
- }
-
- $resource = fopen('php://memory', 'r+');
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addWriteStream')->with($resource);
-
- $onRemove = null;
- $loop->expects($this->once())->method('removeWriteStream')->with($this->callback(function ($param) use (&$onRemove) {
- $onRemove = is_resource($param);
- return true;
- }));
-
- $connection = new Connection($resource, $loop);
- $connection->write('test');
- $connection->close();
-
- $this->assertTrue($onRemove);
- $this->assertFalse(is_resource($resource));
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/ConnectorTest.php b/assets/php/vendor/react/socket/tests/ConnectorTest.php
deleted file mode 100755
index c8eb19b..0000000
--- a/assets/php/vendor/react/socket/tests/ConnectorTest.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\Connector;
-use React\Promise\Promise;
-
-class ConnectorTest extends TestCase
-{
- public function testConnectorUsesTcpAsDefaultScheme()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $promise = new Promise(function () { });
- $tcp = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $tcp->expects($this->once())->method('connect')->with('127.0.0.1:80')->willReturn($promise);
-
- $connector = new Connector($loop, array(
- 'tcp' => $tcp
- ));
-
- $connector->connect('127.0.0.1:80');
- }
-
- public function testConnectorPassedThroughHostnameIfDnsIsDisabled()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $promise = new Promise(function () { });
- $tcp = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $tcp->expects($this->once())->method('connect')->with('tcp://google.com:80')->willReturn($promise);
-
- $connector = new Connector($loop, array(
- 'tcp' => $tcp,
- 'dns' => false
- ));
-
- $connector->connect('tcp://google.com:80');
- }
-
- public function testConnectorWithUnknownSchemeAlwaysFails()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new Connector($loop);
-
- $promise = $connector->connect('unknown://google.com:80');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testConnectorWithDisabledTcpDefaultSchemeAlwaysFails()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new Connector($loop, array(
- 'tcp' => false
- ));
-
- $promise = $connector->connect('google.com:80');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testConnectorWithDisabledTcpSchemeAlwaysFails()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new Connector($loop, array(
- 'tcp' => false
- ));
-
- $promise = $connector->connect('tcp://google.com:80');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testConnectorWithDisabledTlsSchemeAlwaysFails()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new Connector($loop, array(
- 'tls' => false
- ));
-
- $promise = $connector->connect('tls://google.com:443');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testConnectorWithDisabledUnixSchemeAlwaysFails()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new Connector($loop, array(
- 'unix' => false
- ));
-
- $promise = $connector->connect('unix://demo.sock');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testConnectorUsesGivenResolverInstance()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $promise = new Promise(function () { });
- $resolver = $this->getMockBuilder('React\Dns\Resolver\Resolver')->disableOriginalConstructor()->getMock();
- $resolver->expects($this->once())->method('resolve')->with('google.com')->willReturn($promise);
-
- $connector = new Connector($loop, array(
- 'dns' => $resolver
- ));
-
- $connector->connect('google.com:80');
- }
-
- public function testConnectorUsesResolvedHostnameIfDnsIsUsed()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $promise = new Promise(function ($resolve) { $resolve('127.0.0.1'); });
- $resolver = $this->getMockBuilder('React\Dns\Resolver\Resolver')->disableOriginalConstructor()->getMock();
- $resolver->expects($this->once())->method('resolve')->with('google.com')->willReturn($promise);
-
- $promise = new Promise(function () { });
- $tcp = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $tcp->expects($this->once())->method('connect')->with('tcp://127.0.0.1:80?hostname=google.com')->willReturn($promise);
-
- $connector = new Connector($loop, array(
- 'tcp' => $tcp,
- 'dns' => $resolver
- ));
-
- $connector->connect('tcp://google.com:80');
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/DnsConnectorTest.php b/assets/php/vendor/react/socket/tests/DnsConnectorTest.php
deleted file mode 100755
index 3c94c39..0000000
--- a/assets/php/vendor/react/socket/tests/DnsConnectorTest.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\DnsConnector;
-use React\Promise;
-
-class DnsConnectorTest extends TestCase
-{
- private $tcp;
- private $resolver;
- private $connector;
-
- public function setUp()
- {
- $this->tcp = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $this->resolver = $this->getMockBuilder('React\Dns\Resolver\Resolver')->disableOriginalConstructor()->getMock();
-
- $this->connector = new DnsConnector($this->tcp, $this->resolver);
- }
-
- public function testPassByResolverIfGivenIp()
- {
- $this->resolver->expects($this->never())->method('resolve');
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('127.0.0.1:80'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('127.0.0.1:80');
- }
-
- public function testPassThroughResolverIfGivenHost()
- {
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('google.com'))->will($this->returnValue(Promise\resolve('1.2.3.4')));
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('1.2.3.4:80?hostname=google.com'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('google.com:80');
- }
-
- public function testPassThroughResolverIfGivenHostWhichResolvesToIpv6()
- {
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('google.com'))->will($this->returnValue(Promise\resolve('::1')));
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('[::1]:80?hostname=google.com'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('google.com:80');
- }
-
- public function testPassByResolverIfGivenCompleteUri()
- {
- $this->resolver->expects($this->never())->method('resolve');
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('scheme://127.0.0.1:80/path?query#fragment'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('scheme://127.0.0.1:80/path?query#fragment');
- }
-
- public function testPassThroughResolverIfGivenCompleteUri()
- {
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('google.com'))->will($this->returnValue(Promise\resolve('1.2.3.4')));
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('scheme://1.2.3.4:80/path?query&hostname=google.com#fragment'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('scheme://google.com:80/path?query#fragment');
- }
-
- public function testPassThroughResolverIfGivenExplicitHost()
- {
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('google.com'))->will($this->returnValue(Promise\resolve('1.2.3.4')));
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('scheme://1.2.3.4:80/?hostname=google.de'))->will($this->returnValue(Promise\reject()));
-
- $this->connector->connect('scheme://google.com:80/?hostname=google.de');
- }
-
- public function testRejectsImmediatelyIfUriIsInvalid()
- {
- $this->resolver->expects($this->never())->method('resolve');
- $this->tcp->expects($this->never())->method('connect');
-
- $promise = $this->connector->connect('////');
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-
- public function testSkipConnectionIfDnsFails()
- {
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('example.invalid'))->will($this->returnValue(Promise\reject()));
- $this->tcp->expects($this->never())->method('connect');
-
- $this->connector->connect('example.invalid:80');
- }
-
- public function testCancelDuringDnsCancelsDnsAndDoesNotStartTcpConnection()
- {
- $pending = new Promise\Promise(function () { }, $this->expectCallableOnce());
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('example.com'))->will($this->returnValue($pending));
- $this->tcp->expects($this->never())->method('connect');
-
- $promise = $this->connector->connect('example.com:80');
- $promise->cancel();
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-
- public function testCancelDuringTcpConnectionCancelsTcpConnection()
- {
- $pending = new Promise\Promise(function () { }, function () { throw new \Exception(); });
- $this->resolver->expects($this->once())->method('resolve')->with($this->equalTo('example.com'))->will($this->returnValue(Promise\resolve('1.2.3.4')));
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('1.2.3.4:80?hostname=example.com'))->will($this->returnValue($pending));
-
- $promise = $this->connector->connect('example.com:80');
- $promise->cancel();
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/FixedUriConnectorTest.php b/assets/php/vendor/react/socket/tests/FixedUriConnectorTest.php
deleted file mode 100755
index f42d74f..0000000
--- a/assets/php/vendor/react/socket/tests/FixedUriConnectorTest.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\FixedUriConnector;
-use React\Tests\Socket\TestCase;
-
-class FixedUriConnectorTest extends TestCase
-{
- public function testWillInvokeGivenConnector()
- {
- $base = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $base->expects($this->once())->method('connect')->with('test')->willReturn('ret');
-
- $connector = new FixedUriConnector('test', $base);
-
- $this->assertEquals('ret', $connector->connect('ignored'));
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/FunctionalConnectorTest.php b/assets/php/vendor/react/socket/tests/FunctionalConnectorTest.php
deleted file mode 100755
index 6611352..0000000
--- a/assets/php/vendor/react/socket/tests/FunctionalConnectorTest.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use Clue\React\Block;
-use React\EventLoop\Factory;
-use React\Socket\Connector;
-use React\Socket\TcpServer;
-
-class FunctionalConnectorTest extends TestCase
-{
- const TIMEOUT = 1.0;
-
- /** @test */
- public function connectionToTcpServerShouldSucceedWithLocalhost()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(9998, $loop);
- $server->on('connection', $this->expectCallableOnce());
- $server->on('connection', array($server, 'close'));
-
- $connector = new Connector($loop);
-
- $connection = Block\await($connector->connect('localhost:9998'), $loop, self::TIMEOUT);
-
- $this->assertInstanceOf('React\Socket\ConnectionInterface', $connection);
-
- $connection->close();
- $server->close();
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/FunctionalSecureServerTest.php b/assets/php/vendor/react/socket/tests/FunctionalSecureServerTest.php
deleted file mode 100755
index 78a59d0..0000000
--- a/assets/php/vendor/react/socket/tests/FunctionalSecureServerTest.php
+++ /dev/null
@@ -1,438 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\EventLoop\Factory;
-use React\Socket\SecureServer;
-use React\Socket\ConnectionInterface;
-use React\Socket\TcpServer;
-use React\Socket\TcpConnector;
-use React\Socket\SecureConnector;
-use Clue\React\Block;
-
-class FunctionalSecureServerTest extends TestCase
-{
- const TIMEOUT = 0.5;
-
- public function setUp()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
- }
-
- public function testEmitsConnectionForNewConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testWritesDataToConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $server->on('connection', function (ConnectionInterface $conn) {
- $conn->write('foo');
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local ConnectionInterface */
-
- $local->on('data', $this->expectCallableOnceWith('foo'));
-
- Block\sleep(self::TIMEOUT, $loop);
- }
-
- public function testWritesDataInMultipleChunksToConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $server->on('connection', function (ConnectionInterface $conn) {
- $conn->write(str_repeat('*', 400000));
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local React\Stream\Stream */
-
- $received = 0;
- $local->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
-
- Block\sleep(self::TIMEOUT, $loop);
-
- $this->assertEquals(400000, $received);
- }
-
- public function testWritesMoreDataInMultipleChunksToConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $server->on('connection', function (ConnectionInterface $conn) {
- $conn->write(str_repeat('*', 2000000));
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local React\Stream\Stream */
-
- $received = 0;
- $local->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
-
- Block\sleep(self::TIMEOUT, $loop);
-
- $this->assertEquals(2000000, $received);
- }
-
- public function testEmitsDataFromConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $once = $this->expectCallableOnceWith('foo');
- $server->on('connection', function (ConnectionInterface $conn) use ($once) {
- $conn->on('data', $once);
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local React\Stream\Stream */
-
- $local->write("foo");
-
- Block\sleep(self::TIMEOUT, $loop);
- }
-
- public function testEmitsDataInMultipleChunksFromConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $received = 0;
- $server->on('connection', function (ConnectionInterface $conn) use (&$received) {
- $conn->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local React\Stream\Stream */
-
- $local->write(str_repeat('*', 400000));
-
- Block\sleep(self::TIMEOUT, $loop);
-
- $this->assertEquals(400000, $received);
- }
-
- public function testPipesDataBackInMultipleChunksFromConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $server->on('connection', function (ConnectionInterface $conn) use (&$received) {
- $conn->pipe($conn);
- });
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $local = Block\await($promise, $loop, self::TIMEOUT);
- /* @var $local React\Stream\Stream */
-
- $received = 0;
- $local->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
-
- $local->write(str_repeat('*', 400000));
-
- Block\sleep(self::TIMEOUT, $loop);
-
- $this->assertEquals(400000, $received);
- }
-
- /**
- * @requires PHP 5.6
- */
- public function testEmitsConnectionForNewTlsv11Connection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem',
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_SERVER
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false,
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
- ));
- $promise = $connector->connect($server->getAddress());
-
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- /**
- * @requires PHP 5.6
- */
- public function testEmitsErrorForClientWithTlsVersionMismatch()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem',
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_SERVER|STREAM_CRYPTO_METHOD_TLSv1_2_SERVER
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false,
- 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
- ));
- $promise = $connector->connect($server->getAddress());
-
- $this->setExpectedException('RuntimeException', 'handshake');
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testEmitsConnectionForNewConnectionWithEncryptedCertificate()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost_swordfish.pem',
- 'passphrase' => 'swordfish'
- ));
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testEmitsErrorForServerWithInvalidCertificate()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => 'invalid.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $this->setExpectedException('RuntimeException', 'handshake');
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testEmitsErrorForServerWithEncryptedCertificateMissingPassphrase()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost_swordfish.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $this->setExpectedException('RuntimeException', 'handshake');
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testEmitsErrorForServerWithEncryptedCertificateWithInvalidPassphrase()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost_swordfish.pem',
- 'passphrase' => 'nope'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
-
- $this->setExpectedException('RuntimeException', 'handshake');
- Block\await($promise, $loop, self::TIMEOUT);
- }
-
- public function testEmitsErrorForConnectionWithPeerVerification()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => true
- ));
- $promise = $connector->connect($server->getAddress());
-
- $promise->then(null, $this->expectCallableOnce());
- Block\sleep(self::TIMEOUT, $loop);
- }
-
- public function testEmitsErrorIfConnectionIsCancelled()
- {
- if (PHP_OS !== 'Linux') {
- $this->markTestSkipped('Linux only (OS is ' . PHP_OS . ')');
- }
-
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new SecureConnector(new TcpConnector($loop), $loop, array(
- 'verify_peer' => false
- ));
- $promise = $connector->connect($server->getAddress());
- $promise->cancel();
-
- $promise->then(null, $this->expectCallableOnce());
- Block\sleep(self::TIMEOUT, $loop);
- }
-
- public function testEmitsNothingIfConnectionIsIdle()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableNever());
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect(str_replace('tls://', '', $server->getAddress()));
-
- $promise->then($this->expectCallableOnce());
- Block\sleep(self::TIMEOUT, $loop);
- }
-
- public function testEmitsErrorIfConnectionIsNotSecureHandshake()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new SecureServer($server, $loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $server->on('connection', $this->expectCallableNever());
- $server->on('error', $this->expectCallableOnce());
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect(str_replace('tls://', '', $server->getAddress()));
-
- $promise->then(function (ConnectionInterface $stream) {
- $stream->write("GET / HTTP/1.0\r\n\r\n");
- });
-
- Block\sleep(self::TIMEOUT, $loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/FunctionalTcpServerTest.php b/assets/php/vendor/react/socket/tests/FunctionalTcpServerTest.php
deleted file mode 100755
index ec7855e..0000000
--- a/assets/php/vendor/react/socket/tests/FunctionalTcpServerTest.php
+++ /dev/null
@@ -1,324 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\EventLoop\Factory;
-use React\Socket\TcpServer;
-use React\Socket\ConnectionInterface;
-use React\Socket\TcpConnector;
-use Clue\React\Block;
-
-class FunctionalTcpServerTest extends TestCase
-{
- public function testEmitsConnectionForNewConnection()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testEmitsNoConnectionForNewConnectionWhenPaused()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server->on('connection', $this->expectCallableNever());
- $server->pause();
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testEmitsConnectionForNewConnectionWhenResumedAfterPause()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server->on('connection', $this->expectCallableOnce());
- $server->pause();
- $server->resume();
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testEmitsConnectionWithRemoteIp()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $peer = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$peer) {
- $peer = $conn->getRemoteAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('127.0.0.1:', $peer);
- }
-
- public function testEmitsConnectionWithLocalIp()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $local = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$local) {
- $local = $conn->getLocalAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('127.0.0.1:', $local);
- $this->assertEquals($server->getAddress(), $local);
- }
-
- public function testEmitsConnectionWithLocalIpDespiteListeningOnAll()
- {
- $loop = Factory::create();
-
- $server = new TcpServer('0.0.0.0:0', $loop);
- $local = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$local) {
- $local = $conn->getLocalAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('127.0.0.1:', $local);
- }
-
- public function testEmitsConnectionWithRemoteIpAfterConnectionIsClosedByPeer()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $peer = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$peer) {
- $conn->on('close', function () use ($conn, &$peer) {
- $peer = $conn->getRemoteAddress();
- });
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $client = Block\await($promise, $loop, 0.1);
- $client->end();
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('127.0.0.1:', $peer);
- }
-
- public function testEmitsConnectionWithRemoteNullAddressAfterConnectionIsClosedLocally()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $peer = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$peer) {
- $conn->close();
- $peer = $conn->getRemoteAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertNull($peer);
- }
-
- public function testEmitsConnectionEvenIfConnectionIsCancelled()
- {
- if (PHP_OS !== 'Linux') {
- $this->markTestSkipped('Linux only (OS is ' . PHP_OS . ')');
- }
-
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
- $promise->cancel();
-
- $promise->then(null, $this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testEmitsConnectionForNewIpv6Connection()
- {
- $loop = Factory::create();
-
- try {
- $server = new TcpServer('[::1]:0', $loop);
- } catch (\RuntimeException $e) {
- $this->markTestSkipped('Unable to start IPv6 server socket (not available on your platform?)');
- }
-
- $server->on('connection', $this->expectCallableOnce());
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testEmitsConnectionWithRemoteIpv6()
- {
- $loop = Factory::create();
-
- try {
- $server = new TcpServer('[::1]:0', $loop);
- } catch (\RuntimeException $e) {
- $this->markTestSkipped('Unable to start IPv6 server socket (not available on your platform?)');
- }
-
- $peer = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$peer) {
- $peer = $conn->getRemoteAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('[::1]:', $peer);
- }
-
- public function testEmitsConnectionWithLocalIpv6()
- {
- $loop = Factory::create();
-
- try {
- $server = new TcpServer('[::1]:0', $loop);
- } catch (\RuntimeException $e) {
- $this->markTestSkipped('Unable to start IPv6 server socket (not available on your platform?)');
- }
-
- $local = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$local) {
- $local = $conn->getLocalAddress();
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertContains('[::1]:', $local);
- $this->assertEquals($server->getAddress(), $local);
- }
-
- public function testEmitsConnectionWithInheritedContextOptions()
- {
- if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.13', '<')) {
- // https://3v4l.org/hB4Tc
- $this->markTestSkipped('Not supported on legacy HHVM < 3.13');
- }
-
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop, array(
- 'backlog' => 4
- ));
-
- $all = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$all) {
- $all = stream_context_get_options($conn->stream);
- });
-
- $connector = new TcpConnector($loop);
- $promise = $connector->connect($server->getAddress());
-
- $promise->then($this->expectCallableOnce());
-
- Block\sleep(0.1, $loop);
-
- $this->assertEquals(array('socket' => array('backlog' => 4)), $all);
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testFailsToListenOnInvalidUri()
- {
- $loop = Factory::create();
-
- new TcpServer('///', $loop);
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testFailsToListenOnUriWithoutPort()
- {
- $loop = Factory::create();
-
- new TcpServer('127.0.0.1', $loop);
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testFailsToListenOnUriWithWrongScheme()
- {
- $loop = Factory::create();
-
- new TcpServer('udp://127.0.0.1:0', $loop);
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testFailsToListenOnUriWIthHostname()
- {
- $loop = Factory::create();
-
- new TcpServer('localhost:8080', $loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/IntegrationTest.php b/assets/php/vendor/react/socket/tests/IntegrationTest.php
deleted file mode 100755
index 24dbe37..0000000
--- a/assets/php/vendor/react/socket/tests/IntegrationTest.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use Clue\React\Block;
-use React\Dns\Resolver\Factory as ResolverFactory;
-use React\EventLoop\Factory;
-use React\Socket\Connector;
-use React\Socket\DnsConnector;
-use React\Socket\SecureConnector;
-use React\Socket\TcpConnector;
-
-/** @group internet */
-class IntegrationTest extends TestCase
-{
- const TIMEOUT = 5.0;
-
- /** @test */
- public function gettingStuffFromGoogleShouldWork()
- {
- $loop = Factory::create();
- $connector = new Connector($loop);
-
- $conn = Block\await($connector->connect('google.com:80'), $loop);
-
- $this->assertContains(':80', $conn->getRemoteAddress());
- $this->assertNotEquals('google.com:80', $conn->getRemoteAddress());
-
- $conn->write("GET / HTTP/1.0\r\n\r\n");
-
- $response = $this->buffer($conn, $loop, self::TIMEOUT);
-
- $this->assertRegExp('#^HTTP/1\.0#', $response);
- }
-
- /** @test */
- public function gettingEncryptedStuffFromGoogleShouldWork()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
- $secureConnector = new Connector($loop);
-
- $conn = Block\await($secureConnector->connect('tls://google.com:443'), $loop);
-
- $conn->write("GET / HTTP/1.0\r\n\r\n");
-
- $response = $this->buffer($conn, $loop, self::TIMEOUT);
-
- $this->assertRegExp('#^HTTP/1\.0#', $response);
- }
-
- /** @test */
- public function gettingEncryptedStuffFromGoogleShouldWorkIfHostIsResolvedFirst()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
-
- $factory = new ResolverFactory();
- $dns = $factory->create('8.8.8.8', $loop);
-
- $connector = new DnsConnector(
- new SecureConnector(
- new TcpConnector($loop),
- $loop
- ),
- $dns
- );
-
- $conn = Block\await($connector->connect('google.com:443'), $loop);
-
- $conn->write("GET / HTTP/1.0\r\n\r\n");
-
- $response = $this->buffer($conn, $loop, self::TIMEOUT);
-
- $this->assertRegExp('#^HTTP/1\.0#', $response);
- }
-
- /** @test */
- public function gettingPlaintextStuffFromEncryptedGoogleShouldNotWork()
- {
- $loop = Factory::create();
- $connector = new Connector($loop);
-
- $conn = Block\await($connector->connect('google.com:443'), $loop);
-
- $this->assertContains(':443', $conn->getRemoteAddress());
- $this->assertNotEquals('google.com:443', $conn->getRemoteAddress());
-
- $conn->write("GET / HTTP/1.0\r\n\r\n");
-
- $response = $this->buffer($conn, $loop, self::TIMEOUT);
-
- $this->assertNotRegExp('#^HTTP/1\.0#', $response);
- }
-
- public function testConnectingFailsIfDnsUsesInvalidResolver()
- {
- $loop = Factory::create();
-
- $factory = new ResolverFactory();
- $dns = $factory->create('demo.invalid', $loop);
-
- $connector = new Connector($loop, array(
- 'dns' => $dns
- ));
-
- $this->setExpectedException('RuntimeException');
- Block\await($connector->connect('google.com:80'), $loop, self::TIMEOUT);
- }
-
- public function testConnectingFailsIfTimeoutIsTooSmall()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
-
- $connector = new Connector($loop, array(
- 'timeout' => 0.001
- ));
-
- $this->setExpectedException('RuntimeException');
- Block\await($connector->connect('google.com:80'), $loop, self::TIMEOUT);
- }
-
- public function testSelfSignedRejectsIfVerificationIsEnabled()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
-
- $connector = new Connector($loop, array(
- 'tls' => array(
- 'verify_peer' => true
- )
- ));
-
- $this->setExpectedException('RuntimeException');
- Block\await($connector->connect('tls://self-signed.badssl.com:443'), $loop, self::TIMEOUT);
- }
-
- public function testSelfSignedResolvesIfVerificationIsDisabled()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
-
- $connector = new Connector($loop, array(
- 'tls' => array(
- 'verify_peer' => false
- )
- ));
-
- $conn = Block\await($connector->connect('tls://self-signed.badssl.com:443'), $loop, self::TIMEOUT);
- $conn->close();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/LimitingServerTest.php b/assets/php/vendor/react/socket/tests/LimitingServerTest.php
deleted file mode 100755
index 2cc9a58..0000000
--- a/assets/php/vendor/react/socket/tests/LimitingServerTest.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\LimitingServer;
-use React\Socket\TcpServer;
-use React\EventLoop\Factory;
-use Clue\React\Block;
-
-class LimitingServerTest extends TestCase
-{
- public function testGetAddressWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('getAddress')->willReturn('127.0.0.1:1234');
-
- $server = new LimitingServer($tcp, 100);
-
- $this->assertEquals('127.0.0.1:1234', $server->getAddress());
- }
-
- public function testPauseWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('pause');
-
- $server = new LimitingServer($tcp, 100);
-
- $server->pause();
- }
-
- public function testPauseTwiceWillBePassedThroughToTcpServerOnce()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('pause');
-
- $server = new LimitingServer($tcp, 100);
-
- $server->pause();
- $server->pause();
- }
-
- public function testResumeWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('resume');
-
- $server = new LimitingServer($tcp, 100);
-
- $server->pause();
- $server->resume();
- }
-
- public function testResumeTwiceWillBePassedThroughToTcpServerOnce()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('resume');
-
- $server = new LimitingServer($tcp, 100);
-
- $server->pause();
- $server->resume();
- $server->resume();
- }
-
- public function testCloseWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('close');
-
- $server = new LimitingServer($tcp, 100);
-
- $server->close();
- }
-
- public function testSocketErrorWillBeForwarded()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $tcp = new TcpServer(0, $loop);
-
- $server = new LimitingServer($tcp, 100);
-
- $server->on('error', $this->expectCallableOnce());
-
- $tcp->emit('error', array(new \RuntimeException('test')));
- }
-
- public function testSocketConnectionWillBeForwarded()
- {
- $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $tcp = new TcpServer(0, $loop);
-
- $server = new LimitingServer($tcp, 100);
- $server->on('connection', $this->expectCallableOnceWith($connection));
- $server->on('error', $this->expectCallableNever());
-
- $tcp->emit('connection', array($connection));
-
- $this->assertEquals(array($connection), $server->getConnections());
- }
-
- public function testSocketConnectionWillBeClosedOnceLimitIsReached()
- {
- $first = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
- $first->expects($this->never())->method('close');
- $second = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
- $second->expects($this->once())->method('close');
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $tcp = new TcpServer(0, $loop);
-
- $server = new LimitingServer($tcp, 1);
- $server->on('connection', $this->expectCallableOnceWith($first));
- $server->on('error', $this->expectCallableOnce());
-
- $tcp->emit('connection', array($first));
- $tcp->emit('connection', array($second));
- }
-
- public function testPausingServerWillBePausedOnceLimitIsReached()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addReadStream');
- $loop->expects($this->once())->method('removeReadStream');
-
- $tcp = new TcpServer(0, $loop);
-
- $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
-
- $server = new LimitingServer($tcp, 1, true);
-
- $tcp->emit('connection', array($connection));
- }
-
- public function testSocketDisconnectionWillRemoveFromList()
- {
- $loop = Factory::create();
-
- $tcp = new TcpServer(0, $loop);
-
- $socket = stream_socket_client($tcp->getAddress());
- fclose($socket);
-
- $server = new LimitingServer($tcp, 100);
- $server->on('connection', $this->expectCallableOnce());
- $server->on('error', $this->expectCallableNever());
-
- Block\sleep(0.1, $loop);
-
- $this->assertEquals(array(), $server->getConnections());
- }
-
- public function testPausingServerWillEmitOnlyOneButAcceptTwoConnectionsDueToOperatingSystem()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(0, $loop);
- $server = new LimitingServer($server, 1, true);
- $server->on('connection', $this->expectCallableOnce());
- $server->on('error', $this->expectCallableNever());
-
- $first = stream_socket_client($server->getAddress());
- $second = stream_socket_client($server->getAddress());
-
- Block\sleep(0.1, $loop);
-
- fclose($first);
- fclose($second);
- }
-
- public function testPausingServerWillEmitTwoConnectionsFromBacklog()
- {
- $loop = Factory::create();
-
- $twice = $this->createCallableMock();
- $twice->expects($this->exactly(2))->method('__invoke');
-
- $server = new TcpServer(0, $loop);
- $server = new LimitingServer($server, 1, true);
- $server->on('connection', $twice);
- $server->on('error', $this->expectCallableNever());
-
- $first = stream_socket_client($server->getAddress());
- fclose($first);
- $second = stream_socket_client($server->getAddress());
- fclose($second);
-
- Block\sleep(0.1, $loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/SecureConnectorTest.php b/assets/php/vendor/react/socket/tests/SecureConnectorTest.php
deleted file mode 100755
index 0b3a702..0000000
--- a/assets/php/vendor/react/socket/tests/SecureConnectorTest.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Promise;
-use React\Socket\SecureConnector;
-
-class SecureConnectorTest extends TestCase
-{
- private $loop;
- private $tcp;
- private $connector;
-
- public function setUp()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $this->loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $this->tcp = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $this->connector = new SecureConnector($this->tcp, $this->loop);
- }
-
- public function testConnectionWillWaitForTcpConnection()
- {
- $pending = new Promise\Promise(function () { });
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80'))->will($this->returnValue($pending));
-
- $promise = $this->connector->connect('example.com:80');
-
- $this->assertInstanceOf('React\Promise\PromiseInterface', $promise);
- }
-
- public function testConnectionWithCompleteUriWillBePassedThroughExpectForScheme()
- {
- $pending = new Promise\Promise(function () { });
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80/path?query#fragment'))->will($this->returnValue($pending));
-
- $this->connector->connect('tls://example.com:80/path?query#fragment');
- }
-
- public function testConnectionToInvalidSchemeWillReject()
- {
- $this->tcp->expects($this->never())->method('connect');
-
- $promise = $this->connector->connect('tcp://example.com:80');
-
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testCancelDuringTcpConnectionCancelsTcpConnection()
- {
- $pending = new Promise\Promise(function () { }, function () { throw new \Exception(); });
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80'))->will($this->returnValue($pending));
-
- $promise = $this->connector->connect('example.com:80');
- $promise->cancel();
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-
- public function testConnectionWillBeClosedAndRejectedIfConnectioIsNoStream()
- {
- $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
- $connection->expects($this->once())->method('close');
-
- $this->tcp->expects($this->once())->method('connect')->with($this->equalTo('example.com:80'))->willReturn(Promise\resolve($connection));
-
- $promise = $this->connector->connect('example.com:80');
-
- $promise->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/SecureIntegrationTest.php b/assets/php/vendor/react/socket/tests/SecureIntegrationTest.php
deleted file mode 100755
index 8c9ba14..0000000
--- a/assets/php/vendor/react/socket/tests/SecureIntegrationTest.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\EventLoop\Factory as LoopFactory;
-use React\Socket\TcpServer;
-use React\Socket\SecureServer;
-use React\Socket\TcpConnector;
-use React\Socket\SecureConnector;
-use Clue\React\Block;
-use React\Promise\Promise;
-use Evenement\EventEmitterInterface;
-use React\Promise\Deferred;
-use React\Socket\ConnectionInterface;
-
-class SecureIntegrationTest extends TestCase
-{
- const TIMEOUT = 0.5;
-
- private $loop;
- private $server;
- private $connector;
- private $address;
-
- public function setUp()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $this->loop = LoopFactory::create();
- $this->server = new TcpServer(0, $this->loop);
- $this->server = new SecureServer($this->server, $this->loop, array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- ));
- $this->address = $this->server->getAddress();
- $this->connector = new SecureConnector(new TcpConnector($this->loop), $this->loop, array('verify_peer' => false));
- }
-
- public function tearDown()
- {
- if ($this->server !== null) {
- $this->server->close();
- $this->server = null;
- }
- }
-
- public function testConnectToServer()
- {
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- $client->close();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testConnectToServerEmitsConnection()
- {
- $promiseServer = $this->createPromiseForEvent($this->server, 'connection', $this->expectCallableOnce());
-
- $promiseClient = $this->connector->connect($this->address);
-
- list($_, $client) = Block\awaitAll(array($promiseServer, $promiseClient), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- $client->close();
- }
-
- public function testSendSmallDataToServerReceivesOneChunk()
- {
- // server expects one connection which emits one data event
- $received = new Deferred();
- $this->server->on('connection', function (ConnectionInterface $peer) use ($received) {
- $peer->on('data', function ($chunk) use ($received) {
- $received->resolve($chunk);
- });
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- $client->write('hello');
-
- // await server to report one "data" event
- $data = Block\await($received->promise(), $this->loop, self::TIMEOUT);
-
- $client->close();
-
- $this->assertEquals('hello', $data);
- }
-
- public function testSendDataWithEndToServerReceivesAllData()
- {
- $disconnected = new Deferred();
- $this->server->on('connection', function (ConnectionInterface $peer) use ($disconnected) {
- $received = '';
- $peer->on('data', function ($chunk) use (&$received) {
- $received .= $chunk;
- });
- $peer->on('close', function () use (&$received, $disconnected) {
- $disconnected->resolve($received);
- });
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- $data = str_repeat('a', 200000);
- $client->end($data);
-
- // await server to report connection "close" event
- $received = Block\await($disconnected->promise(), $this->loop, self::TIMEOUT);
-
- $this->assertEquals($data, $received);
- }
-
- public function testSendDataWithoutEndingToServerReceivesAllData()
- {
- $received = '';
- $this->server->on('connection', function (ConnectionInterface $peer) use (&$received) {
- $peer->on('data', function ($chunk) use (&$received) {
- $received .= $chunk;
- });
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- $data = str_repeat('d', 200000);
- $client->write($data);
-
- // buffer incoming data for 0.1s (should be plenty of time)
- Block\sleep(0.1, $this->loop);
-
- $client->close();
-
- $this->assertEquals($data, $received);
- }
-
- public function testConnectToServerWhichSendsSmallDataReceivesOneChunk()
- {
- $this->server->on('connection', function (ConnectionInterface $peer) {
- $peer->write('hello');
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- // await client to report one "data" event
- $receive = $this->createPromiseForEvent($client, 'data', $this->expectCallableOnceWith('hello'));
- Block\await($receive, $this->loop, self::TIMEOUT);
-
- $client->close();
- }
-
- public function testConnectToServerWhichSendsDataWithEndReceivesAllData()
- {
- $data = str_repeat('b', 100000);
- $this->server->on('connection', function (ConnectionInterface $peer) use ($data) {
- $peer->end($data);
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- // await data from client until it closes
- $received = $this->buffer($client, $this->loop, self::TIMEOUT);
-
- $this->assertEquals($data, $received);
- }
-
- public function testConnectToServerWhichSendsDataWithoutEndingReceivesAllData()
- {
- $data = str_repeat('c', 100000);
- $this->server->on('connection', function (ConnectionInterface $peer) use ($data) {
- $peer->write($data);
- });
-
- $client = Block\await($this->connector->connect($this->address), $this->loop, self::TIMEOUT);
- /* @var $client ConnectionInterface */
-
- // buffer incoming data for 0.1s (should be plenty of time)
- $received = '';
- $client->on('data', function ($chunk) use (&$received) {
- $received .= $chunk;
- });
- Block\sleep(0.1, $this->loop);
-
- $client->close();
-
- $this->assertEquals($data, $received);
- }
-
- private function createPromiseForEvent(EventEmitterInterface $emitter, $event, $fn)
- {
- return new Promise(function ($resolve) use ($emitter, $event, $fn) {
- $emitter->on($event, function () use ($resolve, $fn) {
- $resolve(call_user_func_array($fn, func_get_args()));
- });
- });
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/SecureServerTest.php b/assets/php/vendor/react/socket/tests/SecureServerTest.php
deleted file mode 100755
index 92c641f..0000000
--- a/assets/php/vendor/react/socket/tests/SecureServerTest.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\SecureServer;
-use React\Socket\TcpServer;
-
-class SecureServerTest extends TestCase
-{
- public function setUp()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
- }
-
- public function testGetAddressWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('getAddress')->willReturn('tcp://127.0.0.1:1234');
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new SecureServer($tcp, $loop, array());
-
- $this->assertEquals('tls://127.0.0.1:1234', $server->getAddress());
- }
-
- public function testGetAddressWillReturnNullIfTcpServerReturnsNull()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('getAddress')->willReturn(null);
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new SecureServer($tcp, $loop, array());
-
- $this->assertNull($server->getAddress());
- }
-
- public function testPauseWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('pause');
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new SecureServer($tcp, $loop, array());
-
- $server->pause();
- }
-
- public function testResumeWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('resume');
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new SecureServer($tcp, $loop, array());
-
- $server->resume();
- }
-
- public function testCloseWillBePassedThroughToTcpServer()
- {
- $tcp = $this->getMockBuilder('React\Socket\ServerInterface')->getMock();
- $tcp->expects($this->once())->method('close');
-
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new SecureServer($tcp, $loop, array());
-
- $server->close();
- }
-
- public function testConnectionWillBeEndedWithErrorIfItIsNotAStream()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $tcp = new TcpServer(0, $loop);
-
- $connection = $this->getMockBuilder('React\Socket\ConnectionInterface')->getMock();
- $connection->expects($this->once())->method('end');
-
- $server = new SecureServer($tcp, $loop, array());
-
- $server->on('error', $this->expectCallableOnce());
-
- $tcp->emit('connection', array($connection));
- }
-
- public function testSocketErrorWillBeForwarded()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $tcp = new TcpServer(0, $loop);
-
- $server = new SecureServer($tcp, $loop, array());
-
- $server->on('error', $this->expectCallableOnce());
-
- $tcp->emit('error', array(new \RuntimeException('test')));
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/ServerTest.php b/assets/php/vendor/react/socket/tests/ServerTest.php
deleted file mode 100755
index 14fdb2c..0000000
--- a/assets/php/vendor/react/socket/tests/ServerTest.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\EventLoop\Factory;
-use React\Socket\Server;
-use React\Socket\TcpConnector;
-use React\Socket\UnixConnector;
-use Clue\React\Block;
-use React\Socket\ConnectionInterface;
-
-class ServerTest extends TestCase
-{
- const TIMEOUT = 0.1;
-
- public function testCreateServerWithZeroPortAssignsRandomPort()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
- $this->assertNotEquals(0, $server->getAddress());
- $server->close();
- }
-
- /**
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsForInvalidUri()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $server = new Server('invalid URI', $loop);
- }
-
- public function testConstructorCreatesExpectedTcpServer()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
-
- $connector = new TcpConnector($loop);
- $connector->connect($server->getAddress())
- ->then($this->expectCallableOnce(), $this->expectCallableNever());
-
- $connection = Block\await($connector->connect($server->getAddress()), $loop, self::TIMEOUT);
-
- $connection->close();
- $server->close();
- }
-
- public function testConstructorCreatesExpectedUnixServer()
- {
- $loop = Factory::create();
-
- $server = new Server($this->getRandomSocketUri(), $loop);
-
- $connector = new UnixConnector($loop);
- $connector->connect($server->getAddress())
- ->then($this->expectCallableOnce(), $this->expectCallableNever());
-
- $connection = Block\await($connector->connect($server->getAddress()), $loop, self::TIMEOUT);
-
- $connection->close();
- $server->close();
- }
-
- public function testEmitsConnectionForNewConnection()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
- $server->on('connection', $this->expectCallableOnce());
-
- $client = stream_socket_client($server->getAddress());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testDoesNotEmitConnectionForNewConnectionToPausedServer()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
- $server->pause();
- $server->on('connection', $this->expectCallableNever());
-
- $client = stream_socket_client($server->getAddress());
-
- Block\sleep(0.1, $loop);
- }
-
- public function testDoesEmitConnectionForNewConnectionToResumedServer()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
- $server->pause();
- $server->on('connection', $this->expectCallableOnce());
-
- $client = stream_socket_client($server->getAddress());
-
- Block\sleep(0.1, $loop);
-
- $server->resume();
- Block\sleep(0.1, $loop);
- }
-
- public function testDoesNotAllowConnectionToClosedServer()
- {
- $loop = Factory::create();
-
- $server = new Server(0, $loop);
- $server->on('connection', $this->expectCallableNever());
- $address = $server->getAddress();
- $server->close();
-
- $client = @stream_socket_client($address);
-
- Block\sleep(0.1, $loop);
-
- $this->assertFalse($client);
- }
-
- public function testEmitsConnectionWithInheritedContextOptions()
- {
- if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.13', '<')) {
- // https://3v4l.org/hB4Tc
- $this->markTestSkipped('Not supported on legacy HHVM < 3.13');
- }
-
- $loop = Factory::create();
-
- $server = new Server(0, $loop, array(
- 'backlog' => 4
- ));
-
- $all = null;
- $server->on('connection', function (ConnectionInterface $conn) use (&$all) {
- $all = stream_context_get_options($conn->stream);
- });
-
- $client = stream_socket_client($server->getAddress());
-
- Block\sleep(0.1, $loop);
-
- $this->assertEquals(array('socket' => array('backlog' => 4)), $all);
- }
-
- public function testDoesNotEmitSecureConnectionForNewPlainConnection()
- {
- if (!function_exists('stream_socket_enable_crypto')) {
- $this->markTestSkipped('Not supported on your platform (outdated HHVM?)');
- }
-
- $loop = Factory::create();
-
- $server = new Server('tls://127.0.0.1:0', $loop, array(
- 'tls' => array(
- 'local_cert' => __DIR__ . '/../examples/localhost.pem'
- )
- ));
- $server->on('connection', $this->expectCallableNever());
-
- $client = stream_socket_client(str_replace('tls://', '', $server->getAddress()));
-
- Block\sleep(0.1, $loop);
- }
-
- private function getRandomSocketUri()
- {
- return "unix://" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid(rand(), true) . '.sock';
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/Stub/CallableStub.php b/assets/php/vendor/react/socket/tests/Stub/CallableStub.php
deleted file mode 100755
index 1b197eb..0000000
--- a/assets/php/vendor/react/socket/tests/Stub/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Socket\Stub;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/Stub/ConnectionStub.php b/assets/php/vendor/react/socket/tests/Stub/ConnectionStub.php
deleted file mode 100755
index 844b2ad..0000000
--- a/assets/php/vendor/react/socket/tests/Stub/ConnectionStub.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-namespace React\Tests\Socket\Stub;
-
-use Evenement\EventEmitter;
-use React\Socket\ConnectionInterface;
-use React\Stream\WritableStreamInterface;
-use React\Stream\Util;
-
-class ConnectionStub extends EventEmitter implements ConnectionInterface
-{
- private $data = '';
-
- public function isReadable()
- {
- return true;
- }
-
- public function isWritable()
- {
- return true;
- }
-
- public function pause()
- {
- }
-
- public function resume()
- {
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- Util::pipe($this, $dest, $options);
-
- return $dest;
- }
-
- public function write($data)
- {
- $this->data .= $data;
-
- return true;
- }
-
- public function end($data = null)
- {
- }
-
- public function close()
- {
- }
-
- public function getData()
- {
- return $this->data;
- }
-
- public function getRemoteAddress()
- {
- return '127.0.0.1';
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/Stub/ServerStub.php b/assets/php/vendor/react/socket/tests/Stub/ServerStub.php
deleted file mode 100755
index d9e74f4..0000000
--- a/assets/php/vendor/react/socket/tests/Stub/ServerStub.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-
-namespace React\Tests\Socket\Stub;
-
-use Evenement\EventEmitter;
-use React\Socket\ServerInterface;
-
-class ServerStub extends EventEmitter implements ServerInterface
-{
- public function getAddress()
- {
- return '127.0.0.1:80';
- }
-
- public function close()
- {
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/TcpConnectorTest.php b/assets/php/vendor/react/socket/tests/TcpConnectorTest.php
deleted file mode 100755
index e3575a7..0000000
--- a/assets/php/vendor/react/socket/tests/TcpConnectorTest.php
+++ /dev/null
@@ -1,255 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use Clue\React\Block;
-use React\EventLoop\Factory;
-use React\Socket\ConnectionInterface;
-use React\Socket\TcpConnector;
-use React\Socket\TcpServer;
-
-class TcpConnectorTest extends TestCase
-{
- const TIMEOUT = 0.1;
-
- /** @test */
- public function connectionToEmptyPortShouldFail()
- {
- $loop = Factory::create();
-
- $connector = new TcpConnector($loop);
- $connector->connect('127.0.0.1:9999')
- ->then($this->expectCallableNever(), $this->expectCallableOnce());
-
- $loop->run();
- }
-
- /** @test */
- public function connectionToTcpServerShouldAddResourceToLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new TcpConnector($loop);
-
- $server = new TcpServer(0, $loop);
-
- $valid = false;
- $loop->expects($this->once())->method('addWriteStream')->with($this->callback(function ($arg) use (&$valid) {
- $valid = is_resource($arg);
- return true;
- }));
- $connector->connect($server->getAddress());
-
- $this->assertTrue($valid);
- }
-
- /** @test */
- public function connectionToTcpServerShouldSucceed()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(9999, $loop);
- $server->on('connection', $this->expectCallableOnce());
- $server->on('connection', array($server, 'close'));
-
- $connector = new TcpConnector($loop);
-
- $connection = Block\await($connector->connect('127.0.0.1:9999'), $loop, self::TIMEOUT);
-
- $this->assertInstanceOf('React\Socket\ConnectionInterface', $connection);
-
- $connection->close();
- }
-
- /** @test */
- public function connectionToTcpServerShouldSucceedWithRemoteAdressSameAsTarget()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(9999, $loop);
- $server->on('connection', array($server, 'close'));
-
- $connector = new TcpConnector($loop);
-
- $connection = Block\await($connector->connect('127.0.0.1:9999'), $loop, self::TIMEOUT);
- /* @var $connection ConnectionInterface */
-
- $this->assertEquals('tcp://127.0.0.1:9999', $connection->getRemoteAddress());
-
- $connection->close();
- }
-
- /** @test */
- public function connectionToTcpServerShouldSucceedWithLocalAdressOnLocalhost()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(9999, $loop);
- $server->on('connection', array($server, 'close'));
-
- $connector = new TcpConnector($loop);
-
- $connection = Block\await($connector->connect('127.0.0.1:9999'), $loop, self::TIMEOUT);
- /* @var $connection ConnectionInterface */
-
- $this->assertContains('tcp://127.0.0.1:', $connection->getLocalAddress());
- $this->assertNotEquals('tcp://127.0.0.1:9999', $connection->getLocalAddress());
-
- $connection->close();
- }
-
- /** @test */
- public function connectionToTcpServerShouldSucceedWithNullAddressesAfterConnectionClosed()
- {
- $loop = Factory::create();
-
- $server = new TcpServer(9999, $loop);
- $server->on('connection', array($server, 'close'));
-
- $connector = new TcpConnector($loop);
-
- $connection = Block\await($connector->connect('127.0.0.1:9999'), $loop, self::TIMEOUT);
- /* @var $connection ConnectionInterface */
-
- $connection->close();
-
- $this->assertNull($connection->getRemoteAddress());
- $this->assertNull($connection->getLocalAddress());
- }
-
- /** @test */
- public function connectionToTcpServerWillCloseWhenOtherSideCloses()
- {
- $loop = Factory::create();
-
- // immediately close connection and server once connection is in
- $server = new TcpServer(0, $loop);
- $server->on('connection', function (ConnectionInterface $conn) use ($server) {
- $conn->close();
- $server->close();
- });
-
- $once = $this->expectCallableOnce();
- $connector = new TcpConnector($loop);
- $connector->connect($server->getAddress())->then(function (ConnectionInterface $conn) use ($once) {
- $conn->write('hello');
- $conn->on('close', $once);
- });
-
- $loop->run();
- }
-
- /** @test */
- public function connectionToEmptyIp6PortShouldFail()
- {
- $loop = Factory::create();
-
- $connector = new TcpConnector($loop);
- $connector
- ->connect('[::1]:9999')
- ->then($this->expectCallableNever(), $this->expectCallableOnce());
-
- $loop->run();
- }
-
- /** @test */
- public function connectionToIp6TcpServerShouldSucceed()
- {
- $loop = Factory::create();
-
- try {
- $server = new TcpServer('[::1]:9999', $loop);
- } catch (\Exception $e) {
- $this->markTestSkipped('Unable to start IPv6 server socket (IPv6 not supported on this system?)');
- }
-
- $server->on('connection', $this->expectCallableOnce());
- $server->on('connection', array($server, 'close'));
-
- $connector = new TcpConnector($loop);
-
- $connection = Block\await($connector->connect('[::1]:9999'), $loop, self::TIMEOUT);
- /* @var $connection ConnectionInterface */
-
- $this->assertEquals('tcp://[::1]:9999', $connection->getRemoteAddress());
-
- $this->assertContains('tcp://[::1]:', $connection->getLocalAddress());
- $this->assertNotEquals('tcp://[::1]:9999', $connection->getLocalAddress());
-
- $connection->close();
- }
-
- /** @test */
- public function connectionToHostnameShouldFailImmediately()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $connector = new TcpConnector($loop);
- $connector->connect('www.google.com:80')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
- }
-
- /** @test */
- public function connectionToInvalidPortShouldFailImmediately()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $connector = new TcpConnector($loop);
- $connector->connect('255.255.255.255:12345678')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
- }
-
- /** @test */
- public function connectionToInvalidSchemeShouldFailImmediately()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
-
- $connector = new TcpConnector($loop);
- $connector->connect('tls://google.com:443')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
- }
-
- /** @test */
- public function cancellingConnectionShouldRemoveResourceFromLoopAndCloseResource()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $connector = new TcpConnector($loop);
-
- $server = new TcpServer(0, $loop);
-
- $loop->expects($this->once())->method('addWriteStream');
- $promise = $connector->connect($server->getAddress());
-
- $resource = null;
- $valid = false;
- $loop->expects($this->once())->method('removeWriteStream')->with($this->callback(function ($arg) use (&$resource, &$valid) {
- $resource = $arg;
- $valid = is_resource($arg);
- return true;
- }));
- $promise->cancel();
-
- $this->assertTrue($valid);
- $this->assertFalse(is_resource($resource));
- }
-
- /** @test */
- public function cancellingConnectionShouldRejectPromise()
- {
- $loop = Factory::create();
- $connector = new TcpConnector($loop);
-
- $server = new TcpServer(0, $loop);
-
- $promise = $connector->connect($server->getAddress());
- $promise->cancel();
-
- $this->setExpectedException('RuntimeException', 'Cancelled');
- Block\await($promise, $loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/TcpServerTest.php b/assets/php/vendor/react/socket/tests/TcpServerTest.php
deleted file mode 100755
index 72b3c28..0000000
--- a/assets/php/vendor/react/socket/tests/TcpServerTest.php
+++ /dev/null
@@ -1,285 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use Clue\React\Block;
-use React\EventLoop\Factory;
-use React\Socket\TcpServer;
-use React\Stream\DuplexResourceStream;
-
-class TcpServerTest extends TestCase
-{
- private $loop;
- private $server;
- private $port;
-
- private function createLoop()
- {
- return Factory::create();
- }
-
- /**
- * @covers React\Socket\TcpServer::__construct
- * @covers React\Socket\TcpServer::getAddress
- */
- public function setUp()
- {
- $this->loop = $this->createLoop();
- $this->server = new TcpServer(0, $this->loop);
-
- $this->port = parse_url($this->server->getAddress(), PHP_URL_PORT);
- }
-
- /**
- * @covers React\Socket\TcpServer::handleConnection
- */
- public function testConnection()
- {
- $client = stream_socket_client('tcp://localhost:'.$this->port);
-
- $this->server->on('connection', $this->expectCallableOnce());
-
- $this->tick();
- }
-
- /**
- * @covers React\Socket\TcpServer::handleConnection
- */
- public function testConnectionWithManyClients()
- {
- $client1 = stream_socket_client('tcp://localhost:'.$this->port);
- $client2 = stream_socket_client('tcp://localhost:'.$this->port);
- $client3 = stream_socket_client('tcp://localhost:'.$this->port);
-
- $this->server->on('connection', $this->expectCallableExactly(3));
- $this->tick();
- $this->tick();
- $this->tick();
- }
-
- public function testDataEventWillNotBeEmittedWhenClientSendsNoData()
- {
- $client = stream_socket_client('tcp://localhost:'.$this->port);
-
- $mock = $this->expectCallableNever();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testDataWillBeEmittedWithDataClientSends()
- {
- $client = stream_socket_client('tcp://localhost:'.$this->port);
-
- fwrite($client, "foo\n");
-
- $mock = $this->expectCallableOnceWith("foo\n");
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testDataWillBeEmittedEvenWhenClientShutsDownAfterSending()
- {
- $client = stream_socket_client('tcp://localhost:' . $this->port);
- fwrite($client, "foo\n");
- stream_socket_shutdown($client, STREAM_SHUT_WR);
-
- $mock = $this->expectCallableOnceWith("foo\n");
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testLoopWillEndWhenServerIsClosed()
- {
- // explicitly unset server because we already call close()
- $this->server->close();
- $this->server = null;
-
- $this->loop->run();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testCloseTwiceIsNoOp()
- {
- $this->server->close();
- $this->server->close();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testGetAddressAfterCloseReturnsNull()
- {
- $this->server->close();
- $this->assertNull($this->server->getAddress());
- }
-
- public function testLoopWillEndWhenServerIsClosedAfterSingleConnection()
- {
- $client = stream_socket_client('tcp://localhost:' . $this->port);
-
- // explicitly unset server because we only accept a single connection
- // and then already call close()
- $server = $this->server;
- $this->server = null;
-
- $server->on('connection', function ($conn) use ($server) {
- $conn->close();
- $server->close();
- });
-
- $this->loop->run();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testDataWillBeEmittedInMultipleChunksWhenClientSendsExcessiveAmounts()
- {
- $client = stream_socket_client('tcp://localhost:' . $this->port);
- $stream = new DuplexResourceStream($client, $this->loop);
-
- $bytes = 1024 * 1024;
- $stream->end(str_repeat('*', $bytes));
-
- $mock = $this->expectCallableOnce();
-
- // explicitly unset server because we only accept a single connection
- // and then already call close()
- $server = $this->server;
- $this->server = null;
-
- $received = 0;
- $server->on('connection', function ($conn) use ($mock, &$received, $server) {
- // count number of bytes received
- $conn->on('data', function ($data) use (&$received) {
- $received += strlen($data);
- });
-
- $conn->on('end', $mock);
-
- // do not await any further connections in order to let the loop terminate
- $server->close();
- });
-
- $this->loop->run();
-
- $this->assertEquals($bytes, $received);
- }
-
- public function testConnectionDoesNotEndWhenClientDoesNotClose()
- {
- $client = stream_socket_client('tcp://localhost:'.$this->port);
-
- $mock = $this->expectCallableNever();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('end', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- /**
- * @covers React\Socket\Connection::end
- */
- public function testConnectionDoesEndWhenClientCloses()
- {
- $client = stream_socket_client('tcp://localhost:'.$this->port);
-
- fclose($client);
-
- $mock = $this->expectCallableOnce();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('end', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testCtorAddsResourceToLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addReadStream');
-
- $server = new TcpServer(0, $loop);
- }
-
- public function testResumeWithoutPauseIsNoOp()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addReadStream');
-
- $server = new TcpServer(0, $loop);
- $server->resume();
- }
-
- public function testPauseRemovesResourceFromLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new TcpServer(0, $loop);
- $server->pause();
- }
-
- public function testPauseAfterPauseIsNoOp()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new TcpServer(0, $loop);
- $server->pause();
- $server->pause();
- }
-
- public function testCloseRemovesResourceFromLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new TcpServer(0, $loop);
- $server->close();
- }
-
- /**
- * @expectedException RuntimeException
- */
- public function testListenOnBusyPortThrows()
- {
- if (DIRECTORY_SEPARATOR === '\\') {
- $this->markTestSkipped('Windows supports listening on same port multiple times');
- }
-
- $another = new TcpServer($this->port, $this->loop);
- }
-
- /**
- * @covers React\Socket\TcpServer::close
- */
- public function tearDown()
- {
- if ($this->server) {
- $this->server->close();
- }
- }
-
- private function tick()
- {
- Block\sleep(0, $this->loop);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/TestCase.php b/assets/php/vendor/react/socket/tests/TestCase.php
deleted file mode 100755
index e87fc2f..0000000
--- a/assets/php/vendor/react/socket/tests/TestCase.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Stream\ReadableStreamInterface;
-use React\EventLoop\LoopInterface;
-use Clue\React\Block;
-use React\Promise\Promise;
-use PHPUnit\Framework\TestCase as BaseTestCase;
-
-class TestCase extends BaseTestCase
-{
- protected function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnceWith($value)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke')
- ->with($value);
-
- return $mock;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Socket\Stub\CallableStub')->getMock();
- }
-
- protected function buffer(ReadableStreamInterface $stream, LoopInterface $loop, $timeout)
- {
- if (!$stream->isReadable()) {
- return '';
- }
-
- return Block\await(new Promise(
- function ($resolve, $reject) use ($stream) {
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $reject);
-
- $stream->on('close', function () use (&$buffer, $resolve) {
- $resolve($buffer);
- });
- },
- function () use ($stream) {
- $stream->close();
- throw new \RuntimeException();
- }
- ), $loop, $timeout);
- }
-
- public function setExpectedException($exception, $exceptionMessage = '', $exceptionCode = null)
- {
- if (method_exists($this, 'expectException')) {
- // PHPUnit 5+
- $this->expectException($exception);
- if ($exceptionMessage !== '') {
- $this->expectExceptionMessage($exceptionMessage);
- }
- if ($exceptionCode !== null) {
- $this->expectExceptionCode($exceptionCode);
- }
- } else {
- // legacy PHPUnit 4
- parent::setExpectedException($exception, $exceptionMessage, $exceptionCode);
- }
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/TimeoutConnectorTest.php b/assets/php/vendor/react/socket/tests/TimeoutConnectorTest.php
deleted file mode 100755
index 64787d9..0000000
--- a/assets/php/vendor/react/socket/tests/TimeoutConnectorTest.php
+++ /dev/null
@@ -1,103 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\TimeoutConnector;
-use React\Promise;
-use React\EventLoop\Factory;
-
-class TimeoutConnectorTest extends TestCase
-{
- public function testRejectsOnTimeout()
- {
- $promise = new Promise\Promise(function () { });
-
- $connector = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $connector->expects($this->once())->method('connect')->with('google.com:80')->will($this->returnValue($promise));
-
- $loop = Factory::create();
-
- $timeout = new TimeoutConnector($connector, 0.01, $loop);
-
- $timeout->connect('google.com:80')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
-
- $loop->run();
- }
-
- public function testRejectsWhenConnectorRejects()
- {
- $promise = Promise\reject(new \RuntimeException());
-
- $connector = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $connector->expects($this->once())->method('connect')->with('google.com:80')->will($this->returnValue($promise));
-
- $loop = Factory::create();
-
- $timeout = new TimeoutConnector($connector, 5.0, $loop);
-
- $timeout->connect('google.com:80')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
-
- $loop->run();
- }
-
- public function testResolvesWhenConnectorResolves()
- {
- $promise = Promise\resolve();
-
- $connector = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $connector->expects($this->once())->method('connect')->with('google.com:80')->will($this->returnValue($promise));
-
- $loop = Factory::create();
-
- $timeout = new TimeoutConnector($connector, 5.0, $loop);
-
- $timeout->connect('google.com:80')->then(
- $this->expectCallableOnce(),
- $this->expectCallableNever()
- );
-
- $loop->run();
- }
-
- public function testRejectsAndCancelsPendingPromiseOnTimeout()
- {
- $promise = new Promise\Promise(function () { }, $this->expectCallableOnce());
-
- $connector = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $connector->expects($this->once())->method('connect')->with('google.com:80')->will($this->returnValue($promise));
-
- $loop = Factory::create();
-
- $timeout = new TimeoutConnector($connector, 0.01, $loop);
-
- $timeout->connect('google.com:80')->then(
- $this->expectCallableNever(),
- $this->expectCallableOnce()
- );
-
- $loop->run();
- }
-
- public function testCancelsPendingPromiseOnCancel()
- {
- $promise = new Promise\Promise(function () { }, function () { throw new \Exception(); });
-
- $connector = $this->getMockBuilder('React\Socket\ConnectorInterface')->getMock();
- $connector->expects($this->once())->method('connect')->with('google.com:80')->will($this->returnValue($promise));
-
- $loop = Factory::create();
-
- $timeout = new TimeoutConnector($connector, 0.01, $loop);
-
- $out = $timeout->connect('google.com:80');
- $out->cancel();
-
- $out->then($this->expectCallableNever(), $this->expectCallableOnce());
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/UnixConnectorTest.php b/assets/php/vendor/react/socket/tests/UnixConnectorTest.php
deleted file mode 100755
index 1564064..0000000
--- a/assets/php/vendor/react/socket/tests/UnixConnectorTest.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use React\Socket\ConnectionInterface;
-use React\Socket\UnixConnector;
-
-class UnixConnectorTest extends TestCase
-{
- private $loop;
- private $connector;
-
- public function setUp()
- {
- $this->loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $this->connector = new UnixConnector($this->loop);
- }
-
- public function testInvalid()
- {
- $promise = $this->connector->connect('google.com:80');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testInvalidScheme()
- {
- $promise = $this->connector->connect('tcp://google.com:80');
- $promise->then(null, $this->expectCallableOnce());
- }
-
- public function testValid()
- {
- // random unix domain socket path
- $path = sys_get_temp_dir() . '/test' . uniqid() . '.sock';
-
- // temporarily create unix domain socket server to connect to
- $server = stream_socket_server('unix://' . $path, $errno, $errstr);
-
- // skip test if we can not create a test server (Windows etc.)
- if (!$server) {
- $this->markTestSkipped('Unable to create socket "' . $path . '": ' . $errstr . '(' . $errno .')');
- return;
- }
-
- // tests succeeds if we get notified of successful connection
- $promise = $this->connector->connect($path);
- $promise->then($this->expectCallableOnce());
-
- // remember remote and local address of this connection and close again
- $remote = $local = false;
- $promise->then(function(ConnectionInterface $conn) use (&$remote, &$local) {
- $remote = $conn->getRemoteAddress();
- $local = $conn->getLocalAddress();
- $conn->close();
- });
-
- // clean up server
- fclose($server);
- unlink($path);
-
- $this->assertNull($local);
- $this->assertEquals('unix://' . $path, $remote);
- }
-}
diff --git a/assets/php/vendor/react/socket/tests/UnixServerTest.php b/assets/php/vendor/react/socket/tests/UnixServerTest.php
deleted file mode 100755
index 10f7e4f..0000000
--- a/assets/php/vendor/react/socket/tests/UnixServerTest.php
+++ /dev/null
@@ -1,283 +0,0 @@
-<?php
-
-namespace React\Tests\Socket;
-
-use Clue\React\Block;
-use React\EventLoop\Factory;
-use React\Socket\UnixServer;
-use React\Stream\DuplexResourceStream;
-
-class UnixServerTest extends TestCase
-{
- private $loop;
- private $server;
- private $uds;
-
- /**
- * @covers React\Socket\UnixServer::__construct
- * @covers React\Socket\UnixServer::getAddress
- */
- public function setUp()
- {
- $this->loop = Factory::create();
- $this->uds = $this->getRandomSocketUri();
- $this->server = new UnixServer($this->uds, $this->loop);
- }
-
- /**
- * @covers React\Socket\UnixServer::handleConnection
- */
- public function testConnection()
- {
- $client = stream_socket_client($this->uds);
-
- $this->server->on('connection', $this->expectCallableOnce());
- $this->tick();
- }
-
- /**
- * @covers React\Socket\UnixServer::handleConnection
- */
- public function testConnectionWithManyClients()
- {
- $client1 = stream_socket_client($this->uds);
- $client2 = stream_socket_client($this->uds);
- $client3 = stream_socket_client($this->uds);
-
- $this->server->on('connection', $this->expectCallableExactly(3));
- $this->tick();
- $this->tick();
- $this->tick();
- }
-
- public function testDataEventWillNotBeEmittedWhenClientSendsNoData()
- {
- $client = stream_socket_client($this->uds);
-
- $mock = $this->expectCallableNever();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testDataWillBeEmittedWithDataClientSends()
- {
- $client = stream_socket_client($this->uds);
-
- fwrite($client, "foo\n");
-
- $mock = $this->expectCallableOnceWith("foo\n");
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testDataWillBeEmittedEvenWhenClientShutsDownAfterSending()
- {
- $client = stream_socket_client($this->uds);
- fwrite($client, "foo\n");
- stream_socket_shutdown($client, STREAM_SHUT_WR);
-
- $mock = $this->expectCallableOnceWith("foo\n");
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('data', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testLoopWillEndWhenServerIsClosed()
- {
- // explicitly unset server because we already call close()
- $this->server->close();
- $this->server = null;
-
- $this->loop->run();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testCloseTwiceIsNoOp()
- {
- $this->server->close();
- $this->server->close();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testGetAddressAfterCloseReturnsNull()
- {
- $this->server->close();
- $this->assertNull($this->server->getAddress());
- }
-
- public function testLoopWillEndWhenServerIsClosedAfterSingleConnection()
- {
- $client = stream_socket_client($this->uds);
-
- // explicitly unset server because we only accept a single connection
- // and then already call close()
- $server = $this->server;
- $this->server = null;
-
- $server->on('connection', function ($conn) use ($server) {
- $conn->close();
- $server->close();
- });
-
- $this->loop->run();
-
- // if we reach this, then everything is good
- $this->assertNull(null);
- }
-
- public function testDataWillBeEmittedInMultipleChunksWhenClientSendsExcessiveAmounts()
- {
- $client = stream_socket_client($this->uds);
- $stream = new DuplexResourceStream($client, $this->loop);
-
- $bytes = 1024 * 1024;
- $stream->end(str_repeat('*', $bytes));
-
- $mock = $this->expectCallableOnce();
-
- // explicitly unset server because we only accept a single connection
- // and then already call close()
- $server = $this->server;
- $this->server = null;
-
- $received = 0;
- $server->on('connection', function ($conn) use ($mock, &$received, $server) {
- // count number of bytes received
- $conn->on('data', function ($data) use (&$received) {
- $received += strlen($data);
- });
-
- $conn->on('end', $mock);
-
- // do not await any further connections in order to let the loop terminate
- $server->close();
- });
-
- $this->loop->run();
-
- $this->assertEquals($bytes, $received);
- }
-
- public function testConnectionDoesNotEndWhenClientDoesNotClose()
- {
- $client = stream_socket_client($this->uds);
-
- $mock = $this->expectCallableNever();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('end', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- /**
- * @covers React\Socket\Connection::end
- */
- public function testConnectionDoesEndWhenClientCloses()
- {
- $client = stream_socket_client($this->uds);
-
- fclose($client);
-
- $mock = $this->expectCallableOnce();
-
- $this->server->on('connection', function ($conn) use ($mock) {
- $conn->on('end', $mock);
- });
- $this->tick();
- $this->tick();
- }
-
- public function testCtorAddsResourceToLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addReadStream');
-
- $server = new UnixServer($this->getRandomSocketUri(), $loop);
- }
-
- public function testResumeWithoutPauseIsNoOp()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('addReadStream');
-
- $server = new UnixServer($this->getRandomSocketUri(), $loop);
- $server->resume();
- }
-
- public function testPauseRemovesResourceFromLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new UnixServer($this->getRandomSocketUri(), $loop);
- $server->pause();
- }
-
- public function testPauseAfterPauseIsNoOp()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new UnixServer($this->getRandomSocketUri(), $loop);
- $server->pause();
- $server->pause();
- }
-
- public function testCloseRemovesResourceFromLoop()
- {
- $loop = $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- $loop->expects($this->once())->method('removeReadStream');
-
- $server = new UnixServer($this->getRandomSocketUri(), $loop);
- $server->close();
- }
-
- /**
- * @expectedException RuntimeException
- */
- public function testListenOnBusyPortThrows()
- {
- if (DIRECTORY_SEPARATOR === '\\') {
- $this->markTestSkipped('Windows supports listening on same port multiple times');
- }
-
- $another = new UnixServer($this->uds, $this->loop);
- }
-
- /**
- * @covers React\Socket\UnixServer::close
- */
- public function tearDown()
- {
- if ($this->server) {
- $this->server->close();
- }
- }
-
- private function getRandomSocketUri()
- {
- return "unix://" . sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid(rand(), true) . '.sock';
- }
-
- private function tick()
- {
- Block\sleep(0, $this->loop);
- }
-}
diff --git a/assets/php/vendor/react/stream/.gitignore b/assets/php/vendor/react/stream/.gitignore
deleted file mode 100755
index 987e2a2..0000000
--- a/assets/php/vendor/react/stream/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-composer.lock
-vendor
diff --git a/assets/php/vendor/react/stream/.travis.yml b/assets/php/vendor/react/stream/.travis.yml
deleted file mode 100755
index f4e3376..0000000
--- a/assets/php/vendor/react/stream/.travis.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-language: php
-
-php:
-# - 5.3 # requires old distro, see below
- - 5.4
- - 5.5
- - 5.6
- - 7.0
-# - 7.0 # Mac OS X test setup, ignore errors, see below
- - 7.1
- - 7.2
- - nightly # ignore errors, see below
- - hhvm # ignore errors, see below
-
-# lock distro so new future defaults will not break the build
-dist: trusty
-
-matrix:
- include:
- - php: 5.3
- dist: precise
- include:
- - os: osx
- language: generic
- php: 7.0 # just to look right on travis
- env:
- - PACKAGE: php70
- allow_failures:
- - php: nightly
- - php: hhvm
- - os: osx
-
-install:
- # OSX install inspired by https://github.com/kiler129/TravisCI-OSX-PHP
- - |
- if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
- brew tap homebrew/homebrew-php
- echo "Installing PHP ..."
- brew install "${PACKAGE}"
- brew install "${PACKAGE}"-xdebug
- brew link "${PACKAGE}"
- echo "Installing composer ..."
- curl -s http://getcomposer.org/installer | php
- mv composer.phar /usr/local/bin/composer
- fi
- - composer install --no-interaction
-
-script:
- - vendor/bin/phpunit --coverage-text
- - time php examples/91-benchmark-throughput.php
diff --git a/assets/php/vendor/react/stream/CHANGELOG.md b/assets/php/vendor/react/stream/CHANGELOG.md
deleted file mode 100755
index f64815d..0000000
--- a/assets/php/vendor/react/stream/CHANGELOG.md
+++ /dev/null
@@ -1,377 +0,0 @@
-# Changelog
-
-## 0.7.7 (2018-01-19)
-
-* Improve test suite by fixing forward compatibility with upcoming EventLoop
- releases, avoid risky tests and add test group to skip integration tests
- relying on internet connection and apply appropriate test timeouts.
- (#128, #131 and #132 by @clue)
-
-## 0.7.6 (2017-12-21)
-
-* Fix: Work around reading from unbuffered pipe stream in legacy PHP < 5.4.28 and PHP < 5.5.12
- (#126 by @clue)
-
-* Improve test suite by simplifying test bootstrapping logic via Composer and
- test against PHP 7.2
- (#127 by @clue and #124 by @carusogabriel)
-
-## 0.7.5 (2017-11-20)
-
-* Fix: Igore excessive `fopen()` mode flags for `WritableResourceStream`
- (#119 by @clue)
-
-* Fix: Fix forward compatibility with upcoming EventLoop releases
- (#121 by @clue)
-
-* Restructure examples to ease getting started
- (#123 by @clue)
-
-* Improve test suite by adding forward compatibility with PHPUnit 6 and
- ignore Mac OS X test failures for now until Travis tests work again
- (#122 by @gabriel-caruso and #120 by @clue)
-
-## 0.7.4 (2017-10-11)
-
-* Fix: Remove event listeners from `CompositeStream` once closed and
- remove undocumented left-over `close` event argument
- (#116 by @clue)
-
-* Minor documentation improvements: Fix wrong class name in example,
- fix typos in README and
- fix forward compatibility with upcoming EventLoop releases in example
- (#113 by @docteurklein and #114 and #115 by @clue)
-
-* Improve test suite by running against Mac OS X on Travis
- (#112 by @clue)
-
-## 0.7.3 (2017-08-05)
-
-* Improvement: Support Événement 3.0 a long side 2.0 and 1.0
- (#108 by @WyriHaximus)
-
-* Readme: Corrected loop initialization in usage example
- (#109 by @pulyavin)
-
-* Travis: Lock linux distribution preventing future builds from breaking
- (#110 by @clue)
-
-## 0.7.2 (2017-06-15)
-
-* Bug fix: WritableResourceStream: Close the underlying stream when closing the stream.
- (#107 by @WyriHaximus)
-
-## 0.7.1 (2017-05-20)
-
-* Feature: Add optional `$writeChunkSize` parameter to limit maximum number of
- bytes to write at once.
- (#105 by @clue)
-
- ```php
- $stream = new WritableResourceStream(STDOUT, $loop, null, 8192);
- ```
-
-* Ignore HHVM test failures for now until Travis tests work again
- (#106 by @clue)
-
-## 0.7.0 (2017-05-04)
-
-* Removed / BC break: Remove deprecated and unneeded functionality
- (#45, #87, #90, #91 and #93 by @clue)
-
- * Remove deprecated `Stream` class, use `DuplexResourceStream` instead
- (#87 by @clue)
-
- * Remove public `$buffer` property, use new constructor parameters instead
- (#91 by @clue)
-
- * Remove public `$stream` property from all resource streams
- (#90 by @clue)
-
- * Remove undocumented and now unused `ReadableStream` and `WritableStream`
- (#93 by @clue)
-
- * Remove `BufferedSink`
- (#45 by @clue)
-
-* Feature / BC break: Simplify `ThroughStream` by using data callback instead of
- inheritance. It is now a direct implementation of `DuplexStreamInterface`.
- (#88 and #89 by @clue)
-
- ```php
- $through = new ThroughStream(function ($data) {
- return json_encode($data) . PHP_EOL;
- });
- $through->on('data', $this->expectCallableOnceWith("[2, true]\n"));
-
- $through->write(array(2, true));
- ```
-
-* Feature / BC break: The `CompositeStream` starts closed if either side is
- already closed and forwards pause to pipe source on first write attempt.
- (#96 and #103 by @clue)
-
- If either side of the composite stream closes, it will also close the other
- side. We now also ensure that if either side is already closed during
- instantiation, it will also close the other side.
-
-* BC break: Mark all classes as `final` and
- mark internal API as `private` to discourage inheritance
- (#95 and #99 by @clue)
-
-* Feature / BC break: Only emit `error` event for fatal errors
- (#92 by @clue)
-
- > The `error` event was previously also allowed to be emitted for non-fatal
- errors, but our implementations actually only ever emitted this as a fatal
- error and then closed the stream.
-
-* Feature: Explicitly allow custom events and exclude any semantics
- (#97 by @clue)
-
-* Support legacy PHP 5.3 through PHP 7.1 and HHVM and improve usage documentation
- (#100 and #102 by @clue)
-
-* Actually require all dependencies so this is self-contained and improve
- forward compatibility with EventLoop v1.0 and v0.5
- (#94 and #98 by @clue)
-
-## 0.6.0 (2017-03-26)
-
-* Feature / Fix / BC break: Add `DuplexResourceStream` and deprecate `Stream`
- (#85 by @clue)
-
- ```php
- // old (does still work for BC reasons)
- $stream = new Stream($connection, $loop);
-
- // new
- $stream = new DuplexResourceStream($connection, $loop);
- ```
-
- Note that the `DuplexResourceStream` now rejects read-only or write-only
- streams, so this may affect BC. If you want a read-only or write-only
- resource, use `ReadableResourceStream` or `WritableResourceStream` instead of
- `DuplexResourceStream`.
-
- > BC note: This class was previously called `Stream`. The `Stream` class still
- exists for BC reasons and will be removed in future versions of this package.
-
-* Feature / BC break: Add `WritableResourceStream` (previously called `Buffer`)
- (#84 by @clue)
-
- ```php
- // old
- $stream = new Buffer(STDOUT, $loop);
-
- // new
- $stream = new WritableResourceStream(STDOUT, $loop);
- ```
-
-* Feature: Add `ReadableResourceStream`
- (#83 by @clue)
-
- ```php
- $stream = new ReadableResourceStream(STDIN, $loop);
- ```
-
-* Fix / BC Break: Enforce using non-blocking I/O
- (#46 by @clue)
-
- > BC note: This is known to affect process pipes on Windows which do not
- support non-blocking I/O and could thus block the whole EventLoop previously.
-
-* Feature / Fix / BC break: Consistent semantics for
- `DuplexStreamInterface::end()` to ensure it SHOULD also end readable side
- (#86 by @clue)
-
-* Fix: Do not use unbuffered reads on pipe streams for legacy PHP < 5.4
- (#80 by @clue)
-
-## 0.5.0 (2017-03-08)
-
-* Feature / BC break: Consistent `end` event semantics (EOF)
- (#70 by @clue)
-
- The `end` event will now only be emitted for a *successful* end, not if the
- stream closes due to an unrecoverable `error` event or if you call `close()`
- explicitly.
- If you want to detect when the stream closes (terminates), use the `close`
- event instead.
-
-* BC break: Remove custom (undocumented) `full-drain` event from `Buffer`
- (#63 and #68 by @clue)
-
- > The `full-drain` event was undocumented and mostly used internally.
- Relying on this event has attracted some low-quality code in the past, so
- we've removed this from the public API in order to work out a better
- solution instead.
- If you want to detect when the buffer finishes flushing data to the stream,
- you may want to look into its `end()` method or the `close` event instead.
-
-* Feature / BC break: Consistent event semantics and documentation,
- explicitly state *when* events will be emitted and *which* arguments they
- receive.
- (#73 and #69 by @clue)
-
- The documentation now explicitly defines each event and its arguments.
- Custom events and event arguments are still supported.
- Most notably, all defined events only receive inherently required event
- arguments and no longer transmit the instance they are emitted on for
- consistency and performance reasons.
-
- ```php
- // old (inconsistent and not supported by all implementations)
- $stream->on('data', function ($data, $stream) {
- // process $data
- });
-
- // new (consistent throughout the whole ecosystem)
- $stream->on('data', function ($data) use ($stream) {
- // process $data
- });
- ```
-
- > This mostly adds documentation (and thus some stricter, consistent
- definitions) for the existing behavior, it does NOT define any major
- changes otherwise.
- Most existing code should be compatible with these changes, unless
- it relied on some undocumented/unintended semantics.
-
-* Feature / BC break: Consistent method semantics and documentation
- (#72 by @clue)
-
- > This mostly adds documentation (and thus some stricter, consistent
- definitions) for the existing behavior, it does NOT define any major
- changes otherwise.
- Most existing code should be compatible with these changes, unless
- it relied on some undocumented/unintended semantics.
-
-* Feature: Consistent `pipe()` semantics for closed and closing streams
- (#71 from @clue)
-
- The source stream will now always be paused via `pause()` when the
- destination stream closes. Also, properly stop piping if the source
- stream closes and remove all event forwarding.
-
-* Improve test suite by adding PHPUnit to `require-dev` and improving coverage.
- (#74 and #75 by @clue, #66 by @nawarian)
-
-## 0.4.6 (2017-01-25)
-
-* Feature: The `Buffer` can now be injected into the `Stream` (or be used standalone)
- (#62 by @clue)
-
-* Fix: Forward `close` event only once for `CompositeStream` and `ThroughStream`
- (#60 by @clue)
-
-* Fix: Consistent `close` event behavior for `Buffer`
- (#61 by @clue)
-
-## 0.4.5 (2016-11-13)
-
-* Feature: Support setting read buffer size to `null` (infinite)
- (#42 by @clue)
-
-* Fix: Do not emit `full-drain` event if `Buffer` is closed during `drain` event
- (#55 by @clue)
-
-* Vastly improved performance by factor of 10x to 20x.
- Raise default buffer sizes to 64 KiB and simplify and improve error handling
- and unneeded function calls.
- (#53, #55, #56 by @clue)
-
-## 0.4.4 (2016-08-22)
-
-* Bug fix: Emit `error` event and close `Stream` when accessing the underlying
- stream resource fails with a permanent error.
- (#52 and #40 by @clue, #25 by @lysenkobv)
-
-* Bug fix: Do not emit empty `data` event if nothing has been read (stream reached EOF)
- (#39 by @clue)
-
-* Bug fix: Ignore empty writes to `Buffer`
- (#51 by @clue)
-
-* Add benchmarking script to measure throughput in CI
- (#41 by @clue)
-
-## 0.4.3 (2015-10-07)
-
-* Bug fix: Read buffer to 0 fixes error with libevent and large quantity of I/O (@mbonneau)
-* Bug fix: No double-write during drain call (@arnaud-lb)
-* Bug fix: Support HHVM (@clue)
-* Adjust compatibility to 5.3 (@clue)
-
-## 0.4.2 (2014-09-09)
-
-* Added DuplexStreamInterface
-* Stream sets stream resources to non-blocking
-* Fixed potential race condition in pipe
-
-## 0.4.1 (2014-04-13)
-
-* Bug fix: v0.3.4 changes merged for v0.4.1
-
-## 0.3.4 (2014-03-30)
-
-* Bug fix: [Stream] Fixed 100% CPU spike from non-empty write buffer on closed stream
-
-## 0.4.0 (2014-02-02)
-
-* BC break: Bump minimum PHP version to PHP 5.4, remove 5.3 specific hacks
-* BC break: Update to Evenement 2.0
-* Dependency: Autoloading and filesystem structure now PSR-4 instead of PSR-0
-
-## 0.3.3 (2013-07-08)
-
-* Bug fix: [Stream] Correctly detect closed connections
-
-## 0.3.2 (2013-05-10)
-
-* Bug fix: [Stream] Make sure CompositeStream is closed properly
-
-## 0.3.1 (2013-04-21)
-
-* Bug fix: [Stream] Allow any `ReadableStreamInterface` on `BufferedSink::createPromise()`
-
-## 0.3.0 (2013-04-14)
-
-* Feature: [Stream] Factory method for BufferedSink
-
-## 0.2.6 (2012-12-26)
-
-* Version bump
-
-## 0.2.5 (2012-11-26)
-
-* Feature: Make BufferedSink trigger progress events on the promise (@jsor)
-
-## 0.2.4 (2012-11-18)
-
-* Feature: Added ThroughStream, CompositeStream, ReadableStream and WritableStream
-* Feature: Added BufferedSink
-
-## 0.2.3 (2012-11-14)
-
-* Version bump
-
-## 0.2.2 (2012-10-28)
-
-* Version bump
-
-## 0.2.1 (2012-10-14)
-
-* Bug fix: Check for EOF in `Buffer::write()`
-
-## 0.2.0 (2012-09-10)
-
-* Version bump
-
-## 0.1.1 (2012-07-12)
-
-* Bug fix: Testing and functional against PHP >= 5.3.3 and <= 5.3.8
-
-## 0.1.0 (2012-07-11)
-
-* First tagged release
diff --git a/assets/php/vendor/react/stream/LICENSE b/assets/php/vendor/react/stream/LICENSE
deleted file mode 100755
index a808108..0000000
--- a/assets/php/vendor/react/stream/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2012 Igor Wiedler, Chris Boden
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/assets/php/vendor/react/stream/README.md b/assets/php/vendor/react/stream/README.md
deleted file mode 100755
index c362534..0000000
--- a/assets/php/vendor/react/stream/README.md
+++ /dev/null
@@ -1,1224 +0,0 @@
-# Stream
-
-[![Build Status](https://travis-ci.org/reactphp/stream.svg?branch=master)](https://travis-ci.org/reactphp/stream)
-
-Event-driven readable and writable streams for non-blocking I/O in [ReactPHP](https://reactphp.org/).
-
-In order to make the [EventLoop](https://github.com/reactphp/event-loop)
-easier to use, this component introduces the powerful concept of "streams".
-Streams allow you to efficiently process huge amounts of data (such as a multi
-Gigabyte file download) in small chunks without having to store everything in
-memory at once.
-They are very similar to the streams found in PHP itself,
-but have an interface more suited for async, non-blocking I/O.
-
-**Table of contents**
-
-* [Stream usage](#stream-usage)
- * [ReadableStreamInterface](#readablestreaminterface)
- * [data event](#data-event)
- * [end event](#end-event)
- * [error event](#error-event)
- * [close event](#close-event)
- * [isReadable()](#isreadable)
- * [pause()](#pause)
- * [resume()](#resume)
- * [pipe()](#pipe)
- * [close()](#close)
- * [WritableStreamInterface](#writablestreaminterface)
- * [drain event](#drain-event)
- * [pipe event](#pipe-event)
- * [error event](#error-event-1)
- * [close event](#close-event-1)
- * [isWritable()](#iswritable)
- * [write()](#write)
- * [end()](#end)
- * [close()](#close-1)
- * [DuplexStreamInterface](#duplexstreaminterface)
-* [Creating streams](#creating-streams)
- * [ReadableResourceStream](#readableresourcestream)
- * [WritableResourceStream](#writableresourcestream)
- * [DuplexResourceStream](#duplexresourcestream)
- * [ThroughStream](#throughstream)
- * [CompositeStream](#compositestream)
-* [Usage](#usage)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-* [More](#more)
-
-## Stream usage
-
-ReactPHP uses the concept of "streams" throughout its ecosystem to provide a
-consistent higher-level abstraction for processing streams of arbitrary data
-contents and size.
-While a stream itself is a quite low-level concept, it can be used as a powerful
-abstraction to build higher-level components and protocols on top.
-
-If you're new to this concept, it helps to think of them as a water pipe:
-You can consume water from a source or you can produce water and forward (pipe)
-it to any destination (sink).
-
-Similarly, streams can either be
-
-* readable (such as `STDIN` terminal input) or
-* writable (such as `STDOUT` terminal output) or
-* duplex (both readable *and* writable, such as a TCP/IP connection)
-
-Accordingly, this package defines the following three interfaces
-
-* [`ReadableStreamInterface`](#readablestreaminterface)
-* [`WritableStreamInterface`](#writablestreaminterface)
-* [`DuplexStreamInterface`](#duplexstreaminterface)
-
-### ReadableStreamInterface
-
-The `ReadableStreamInterface` is responsible for providing an interface for
-read-only streams and the readable side of duplex streams.
-
-Besides defining a few methods, this interface also implements the
-`EventEmitterInterface` which allows you to react to certain events.
-
-The event callback functions MUST be a valid `callable` that obeys strict
-parameter definitions and MUST accept event parameters exactly as documented.
-The event callback functions MUST NOT throw an `Exception`.
-The return value of the event callback functions will be ignored and has no
-effect, so for performance reasons you're recommended to not return any
-excessive data structures.
-
-Every implementation of this interface MUST follow these event semantics in
-order to be considered a well-behaving stream.
-
-> Note that higher-level implementations of this interface may choose to
- define additional events with dedicated semantics not defined as part of
- this low-level stream specification. Conformance with these event semantics
- is out of scope for this interface, so you may also have to refer to the
- documentation of such a higher-level implementation.
-
-#### data event
-
-The `data` event will be emitted whenever some data was read/received
-from this source stream.
-The event receives a single mixed argument for incoming data.
-
-```php
-$stream->on('data', function ($data) {
- echo $data;
-});
-```
-
-This event MAY be emitted any number of times, which may be zero times if
-this stream does not send any data at all.
-It SHOULD not be emitted after an `end` or `close` event.
-
-The given `$data` argument may be of mixed type, but it's usually
-recommended it SHOULD be a `string` value or MAY use a type that allows
-representation as a `string` for maximum compatibility.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-will emit the raw (binary) payload data that is received over the wire as
-chunks of `string` values.
-
-Due to the stream-based nature of this, the sender may send any number
-of chunks with varying sizes. There are no guarantees that these chunks
-will be received with the exact same framing the sender intended to send.
-In other words, many lower-level protocols (such as TCP/IP) transfer the
-data in chunks that may be anywhere between single-byte values to several
-dozens of kilobytes. You may want to apply a higher-level protocol to
-these low-level data chunks in order to achieve proper message framing.
-
-#### end event
-
-The `end` event will be emitted once the source stream has successfully
-reached the end of the stream (EOF).
-
-```php
-$stream->on('end', function () {
- echo 'END';
-});
-```
-
-This event SHOULD be emitted once or never at all, depending on whether
-a successful end was detected.
-It SHOULD NOT be emitted after a previous `end` or `close` event.
-It MUST NOT be emitted if the stream closes due to a non-successful
-end, such as after a previous `error` event.
-
-After the stream is ended, it MUST switch to non-readable mode,
-see also `isReadable()`.
-
-This event will only be emitted if the *end* was reached successfully,
-not if the stream was interrupted by an unrecoverable error or explicitly
-closed. Not all streams know this concept of a "successful end".
-Many use-cases involve detecting when the stream closes (terminates)
-instead, in this case you should use the `close` event.
-After the stream emits an `end` event, it SHOULD usually be followed by a
-`close` event.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-will emit this event if either the remote side closes the connection or
-a file handle was successfully read until reaching its end (EOF).
-
-Note that this event should not be confused with the `end()` method.
-This event defines a successful end *reading* from a source stream, while
-the `end()` method defines *writing* a successful end to a destination
-stream.
-
-#### error event
-
-The `error` event will be emitted once a fatal error occurs, usually while
-trying to read from this stream.
-The event receives a single `Exception` argument for the error instance.
-
-```php
-$server->on('error', function (Exception $e) {
- echo 'Error: ' . $e->getMessage() . PHP_EOL;
-});
-```
-
-This event SHOULD be emitted once the stream detects a fatal error, such
-as a fatal transmission error or after an unexpected `data` or premature
-`end` event.
-It SHOULD NOT be emitted after a previous `error`, `end` or `close` event.
-It MUST NOT be emitted if this is not a fatal error condition, such as
-a temporary network issue that did not cause any data to be lost.
-
-After the stream errors, it MUST close the stream and SHOULD thus be
-followed by a `close` event and then switch to non-readable mode, see
-also `close()` and `isReadable()`.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-only deal with data transmission and do not make assumption about data
-boundaries (such as unexpected `data` or premature `end` events).
-In other words, many lower-level protocols (such as TCP/IP) may choose
-to only emit this for a fatal transmission error once and will then
-close (terminate) the stream in response.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the writable side of the stream also implements an `error` event.
-In other words, an error may occur while either reading or writing the
-stream which should result in the same error processing.
-
-#### close event
-
-The `close` event will be emitted once the stream closes (terminates).
-
-```php
-$stream->on('close', function () {
- echo 'CLOSED';
-});
-```
-
-This event SHOULD be emitted once or never at all, depending on whether
-the stream ever terminates.
-It SHOULD NOT be emitted after a previous `close` event.
-
-After the stream is closed, it MUST switch to non-readable mode,
-see also `isReadable()`.
-
-Unlike the `end` event, this event SHOULD be emitted whenever the stream
-closes, irrespective of whether this happens implicitly due to an
-unrecoverable error or explicitly when either side closes the stream.
-If you only want to detect a *successful* end, you should use the `end`
-event instead.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-will likely choose to emit this event after reading a *successful* `end`
-event or after a fatal transmission `error` event.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the writable side of the stream also implements a `close` event.
-In other words, after receiving this event, the stream MUST switch into
-non-writable AND non-readable mode, see also `isWritable()`.
-Note that this event should not be confused with the `end` event.
-
-#### isReadable()
-
-The `isReadable(): bool` method can be used to
-check whether this stream is in a readable state (not closed already).
-
-This method can be used to check if the stream still accepts incoming
-data events or if it is ended or closed already.
-Once the stream is non-readable, no further `data` or `end` events SHOULD
-be emitted.
-
-```php
-assert($stream->isReadable() === false);
-
-$stream->on('data', assertNeverCalled());
-$stream->on('end', assertNeverCalled());
-```
-
-A successfully opened stream always MUST start in readable mode.
-
-Once the stream ends or closes, it MUST switch to non-readable mode.
-This can happen any time, explicitly through `close()` or
-implicitly due to a remote close or an unrecoverable transmission error.
-Once a stream has switched to non-readable mode, it MUST NOT transition
-back to readable mode.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the writable side of the stream also implements an `isWritable()`
-method. Unless this is a half-open duplex stream, they SHOULD usually
-have the same return value.
-
-#### pause()
-
-The `pause(): void` method can be used to
-pause reading incoming data events.
-
-Removes the data source file descriptor from the event loop. This
-allows you to throttle incoming data.
-
-Unless otherwise noted, a successfully opened stream SHOULD NOT start
-in paused state.
-
-Once the stream is paused, no futher `data` or `end` events SHOULD
-be emitted.
-
-```php
-$stream->pause();
-
-$stream->on('data', assertShouldNeverCalled());
-$stream->on('end', assertShouldNeverCalled());
-```
-
-This method is advisory-only, though generally not recommended, the
-stream MAY continue emitting `data` events.
-
-You can continue processing events by calling `resume()` again.
-
-Note that both methods can be called any number of times, in particular
-calling `pause()` more than once SHOULD NOT have any effect.
-
-See also `resume()`.
-
-#### resume()
-
-The `resume(): void` method can be used to
-resume reading incoming data events.
-
-Re-attach the data source after a previous `pause()`.
-
-```php
-$stream->pause();
-
-$loop->addTimer(1.0, function () use ($stream) {
- $stream->resume();
-});
-```
-
-Note that both methods can be called any number of times, in particular
-calling `resume()` without a prior `pause()` SHOULD NOT have any effect.
-
-See also `pause()`.
-
-#### pipe()
-
-The `pipe(WritableStreamInterface $dest, array $options = [])` method can be used to
-pipe all the data from this readable source into the given writable destination.
-
-Automatically sends all incoming data to the destination.
-Automatically throttles the source based on what the destination can handle.
-
-```php
-$source->pipe($dest);
-```
-
-Similarly, you can also pipe an instance implementing `DuplexStreamInterface`
-into itself in order to write back all the data that is received.
-This may be a useful feature for a TCP/IP echo service:
-
-```php
-$connection->pipe($connection);
-```
-
-This method returns the destination stream as-is, which can be used to
-set up chains of piped streams:
-
-```php
-$source->pipe($decodeGzip)->pipe($filterBadWords)->pipe($dest);
-```
-
-By default, this will call `end()` on the destination stream once the
-source stream emits an `end` event. This can be disabled like this:
-
-```php
-$source->pipe($dest, array('end' => false));
-```
-
-Note that this only applies to the `end` event.
-If an `error` or explicit `close` event happens on the source stream,
-you'll have to manually close the destination stream:
-
-```php
-$source->pipe($dest);
-$source->on('close', function () use ($dest) {
- $dest->end('BYE!');
-});
-```
-
-If the source stream is not readable (closed state), then this is a NO-OP.
-
-```php
-$source->close();
-$source->pipe($dest); // NO-OP
-```
-
-If the destinantion stream is not writable (closed state), then this will simply
-throttle (pause) the source stream:
-
-```php
-$dest->close();
-$source->pipe($dest); // calls $source->pause()
-```
-
-Similarly, if the destination stream is closed while the pipe is still
-active, it will also throttle (pause) the source stream:
-
-```php
-$source->pipe($dest);
-$dest->close(); // calls $source->pause()
-```
-
-Once the pipe is set up successfully, the destination stream MUST emit
-a `pipe` event with this source stream an event argument.
-
-#### close()
-
-The `close(): void` method can be used to
-close the stream (forcefully).
-
-This method can be used to (forcefully) close the stream.
-
-```php
-$stream->close();
-```
-
-Once the stream is closed, it SHOULD emit a `close` event.
-Note that this event SHOULD NOT be emitted more than once, in particular
-if this method is called multiple times.
-
-After calling this method, the stream MUST switch into a non-readable
-mode, see also `isReadable()`.
-This means that no further `data` or `end` events SHOULD be emitted.
-
-```php
-$stream->close();
-assert($stream->isReadable() === false);
-
-$stream->on('data', assertNeverCalled());
-$stream->on('end', assertNeverCalled());
-```
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the writable side of the stream also implements a `close()` method.
-In other words, after calling this method, the stream MUST switch into
-non-writable AND non-readable mode, see also `isWritable()`.
-Note that this method should not be confused with the `end()` method.
-
-### WritableStreamInterface
-
-The `WritableStreamInterface` is responsible for providing an interface for
-write-only streams and the writable side of duplex streams.
-
-Besides defining a few methods, this interface also implements the
-`EventEmitterInterface` which allows you to react to certain events.
-
-The event callback functions MUST be a valid `callable` that obeys strict
-parameter definitions and MUST accept event parameters exactly as documented.
-The event callback functions MUST NOT throw an `Exception`.
-The return value of the event callback functions will be ignored and has no
-effect, so for performance reasons you're recommended to not return any
-excessive data structures.
-
-Every implementation of this interface MUST follow these event semantics in
-order to be considered a well-behaving stream.
-
-> Note that higher-level implementations of this interface may choose to
- define additional events with dedicated semantics not defined as part of
- this low-level stream specification. Conformance with these event semantics
- is out of scope for this interface, so you may also have to refer to the
- documentation of such a higher-level implementation.
-
-#### drain event
-
-The `drain` event will be emitted whenever the write buffer became full
-previously and is now ready to accept more data.
-
-```php
-$stream->on('drain', function () use ($stream) {
- echo 'Stream is now ready to accept more data';
-});
-```
-
-This event SHOULD be emitted once every time the buffer became full
-previously and is now ready to accept more data.
-In other words, this event MAY be emitted any number of times, which may
-be zero times if the buffer never became full in the first place.
-This event SHOULD NOT be emitted if the buffer has not become full
-previously.
-
-This event is mostly used internally, see also `write()` for more details.
-
-#### pipe event
-
-The `pipe` event will be emitted whenever a readable stream is `pipe()`d
-into this stream.
-The event receives a single `ReadableStreamInterface` argument for the
-source stream.
-
-```php
-$stream->on('pipe', function (ReadableStreamInterface $source) use ($stream) {
- echo 'Now receiving piped data';
-
- // explicitly close target if source emits an error
- $source->on('error', function () use ($stream) {
- $stream->close();
- });
-});
-
-$source->pipe($stream);
-```
-
-This event MUST be emitted once for each readable stream that is
-successfully piped into this destination stream.
-In other words, this event MAY be emitted any number of times, which may
-be zero times if no stream is ever piped into this stream.
-This event MUST NOT be emitted if either the source is not readable
-(closed already) or this destination is not writable (closed already).
-
-This event is mostly used internally, see also `pipe()` for more details.
-
-#### error event
-
-The `error` event will be emitted once a fatal error occurs, usually while
-trying to write to this stream.
-The event receives a single `Exception` argument for the error instance.
-
-```php
-$stream->on('error', function (Exception $e) {
- echo 'Error: ' . $e->getMessage() . PHP_EOL;
-});
-```
-
-This event SHOULD be emitted once the stream detects a fatal error, such
-as a fatal transmission error.
-It SHOULD NOT be emitted after a previous `error` or `close` event.
-It MUST NOT be emitted if this is not a fatal error condition, such as
-a temporary network issue that did not cause any data to be lost.
-
-After the stream errors, it MUST close the stream and SHOULD thus be
-followed by a `close` event and then switch to non-writable mode, see
-also `close()` and `isWritable()`.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-only deal with data transmission and may choose
-to only emit this for a fatal transmission error once and will then
-close (terminate) the stream in response.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the readable side of the stream also implements an `error` event.
-In other words, an error may occur while either reading or writing the
-stream which should result in the same error processing.
-
-#### close event
-
-The `close` event will be emitted once the stream closes (terminates).
-
-```php
-$stream->on('close', function () {
- echo 'CLOSED';
-});
-```
-
-This event SHOULD be emitted once or never at all, depending on whether
-the stream ever terminates.
-It SHOULD NOT be emitted after a previous `close` event.
-
-After the stream is closed, it MUST switch to non-writable mode,
-see also `isWritable()`.
-
-This event SHOULD be emitted whenever the stream closes, irrespective of
-whether this happens implicitly due to an unrecoverable error or
-explicitly when either side closes the stream.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-will likely choose to emit this event after flushing the buffer from
-the `end()` method, after receiving a *successful* `end` event or after
-a fatal transmission `error` event.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the readable side of the stream also implements a `close` event.
-In other words, after receiving this event, the stream MUST switch into
-non-writable AND non-readable mode, see also `isReadable()`.
-Note that this event should not be confused with the `end` event.
-
-#### isWritable()
-
-The `isWritable(): bool` method can be used to
-check whether this stream is in a writable state (not closed already).
-
-This method can be used to check if the stream still accepts writing
-any data or if it is ended or closed already.
-Writing any data to a non-writable stream is a NO-OP:
-
-```php
-assert($stream->isWritable() === false);
-
-$stream->write('end'); // NO-OP
-$stream->end('end'); // NO-OP
-```
-
-A successfully opened stream always MUST start in writable mode.
-
-Once the stream ends or closes, it MUST switch to non-writable mode.
-This can happen any time, explicitly through `end()` or `close()` or
-implicitly due to a remote close or an unrecoverable transmission error.
-Once a stream has switched to non-writable mode, it MUST NOT transition
-back to writable mode.
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the readable side of the stream also implements an `isReadable()`
-method. Unless this is a half-open duplex stream, they SHOULD usually
-have the same return value.
-
-#### write()
-
-The `write(mixed $data): bool` method can be used to
-write some data into the stream.
-
-A successful write MUST be confirmed with a boolean `true`, which means
-that either the data was written (flushed) immediately or is buffered and
-scheduled for a future write. Note that this interface gives you no
-control over explicitly flushing the buffered data, as finding the
-appropriate time for this is beyond the scope of this interface and left
-up to the implementation of this interface.
-
-Many common streams (such as a TCP/IP connection or file-based stream)
-may choose to buffer all given data and schedule a future flush by using
-an underlying EventLoop to check when the resource is actually writable.
-
-If a stream cannot handle writing (or flushing) the data, it SHOULD emit
-an `error` event and MAY `close()` the stream if it can not recover from
-this error.
-
-If the internal buffer is full after adding `$data`, then `write()`
-SHOULD return `false`, indicating that the caller should stop sending
-data until the buffer drains.
-The stream SHOULD send a `drain` event once the buffer is ready to accept
-more data.
-
-Similarly, if the the stream is not writable (already in a closed state)
-it MUST NOT process the given `$data` and SHOULD return `false`,
-indicating that the caller should stop sending data.
-
-The given `$data` argument MAY be of mixed type, but it's usually
-recommended it SHOULD be a `string` value or MAY use a type that allows
-representation as a `string` for maximum compatibility.
-
-Many common streams (such as a TCP/IP connection or a file-based stream)
-will only accept the raw (binary) payload data that is transferred over
-the wire as chunks of `string` values.
-
-Due to the stream-based nature of this, the sender may send any number
-of chunks with varying sizes. There are no guarantees that these chunks
-will be received with the exact same framing the sender intended to send.
-In other words, many lower-level protocols (such as TCP/IP) transfer the
-data in chunks that may be anywhere between single-byte values to several
-dozens of kilobytes. You may want to apply a higher-level protocol to
-these low-level data chunks in order to achieve proper message framing.
-
-#### end()
-
-The `end(mixed $data = null): void` method can be used to
-successfully end the stream (after optionally sending some final data).
-
-This method can be used to successfully end the stream, i.e. close
-the stream after sending out all data that is currently buffered.
-
-```php
-$stream->write('hello');
-$stream->write('world');
-$stream->end();
-```
-
-If there's no data currently buffered and nothing to be flushed, then
-this method MAY `close()` the stream immediately.
-
-If there's still data in the buffer that needs to be flushed first, then
-this method SHOULD try to write out this data and only then `close()`
-the stream.
-Once the stream is closed, it SHOULD emit a `close` event.
-
-Note that this interface gives you no control over explicitly flushing
-the buffered data, as finding the appropriate time for this is beyond the
-scope of this interface and left up to the implementation of this
-interface.
-
-Many common streams (such as a TCP/IP connection or file-based stream)
-may choose to buffer all given data and schedule a future flush by using
-an underlying EventLoop to check when the resource is actually writable.
-
-You can optionally pass some final data that is written to the stream
-before ending the stream. If a non-`null` value is given as `$data`, then
-this method will behave just like calling `write($data)` before ending
-with no data.
-
-```php
-// shorter version
-$stream->end('bye');
-
-// same as longer version
-$stream->write('bye');
-$stream->end();
-```
-
-After calling this method, the stream MUST switch into a non-writable
-mode, see also `isWritable()`.
-This means that no further writes are possible, so any additional
-`write()` or `end()` calls have no effect.
-
-```php
-$stream->end();
-assert($stream->isWritable() === false);
-
-$stream->write('nope'); // NO-OP
-$stream->end(); // NO-OP
-```
-
-If this stream is a `DuplexStreamInterface`, calling this method SHOULD
-also end its readable side, unless the stream supports half-open mode.
-In other words, after calling this method, these streams SHOULD switch
-into non-writable AND non-readable mode, see also `isReadable()`.
-This implies that in this case, the stream SHOULD NOT emit any `data`
-or `end` events anymore.
-Streams MAY choose to use the `pause()` method logic for this, but
-special care may have to be taken to ensure a following call to the
-`resume()` method SHOULD NOT continue emitting readable events.
-
-Note that this method should not be confused with the `close()` method.
-
-#### close()
-
-The `close(): void` method can be used to
-close the stream (forcefully).
-
-This method can be used to forcefully close the stream, i.e. close
-the stream without waiting for any buffered data to be flushed.
-If there's still data in the buffer, this data SHOULD be discarded.
-
-```php
-$stream->close();
-```
-
-Once the stream is closed, it SHOULD emit a `close` event.
-Note that this event SHOULD NOT be emitted more than once, in particular
-if this method is called multiple times.
-
-After calling this method, the stream MUST switch into a non-writable
-mode, see also `isWritable()`.
-This means that no further writes are possible, so any additional
-`write()` or `end()` calls have no effect.
-
-```php
-$stream->close();
-assert($stream->isWritable() === false);
-
-$stream->write('nope'); // NO-OP
-$stream->end(); // NO-OP
-```
-
-Note that this method should not be confused with the `end()` method.
-Unlike the `end()` method, this method does not take care of any existing
-buffers and simply discards any buffer contents.
-Likewise, this method may also be called after calling `end()` on a
-stream in order to stop waiting for the stream to flush its final data.
-
-```php
-$stream->end();
-$loop->addTimer(1.0, function () use ($stream) {
- $stream->close();
-});
-```
-
-If this stream is a `DuplexStreamInterface`, you should also notice
-how the readable side of the stream also implements a `close()` method.
-In other words, after calling this method, the stream MUST switch into
-non-writable AND non-readable mode, see also `isReadable()`.
-
-### DuplexStreamInterface
-
-The `DuplexStreamInterface` is responsible for providing an interface for
-duplex streams (both readable and writable).
-
-It builds on top of the existing interfaces for readable and writable streams
-and follows the exact same method and event semantics.
-If you're new to this concept, you should look into the
-`ReadableStreamInterface` and `WritableStreamInterface` first.
-
-Besides defining a few methods, this interface also implements the
-`EventEmitterInterface` which allows you to react to the same events defined
-on the `ReadbleStreamInterface` and `WritableStreamInterface`.
-
-The event callback functions MUST be a valid `callable` that obeys strict
-parameter definitions and MUST accept event parameters exactly as documented.
-The event callback functions MUST NOT throw an `Exception`.
-The return value of the event callback functions will be ignored and has no
-effect, so for performance reasons you're recommended to not return any
-excessive data structures.
-
-Every implementation of this interface MUST follow these event semantics in
-order to be considered a well-behaving stream.
-
-> Note that higher-level implementations of this interface may choose to
- define additional events with dedicated semantics not defined as part of
- this low-level stream specification. Conformance with these event semantics
- is out of scope for this interface, so you may also have to refer to the
- documentation of such a higher-level implementation.
-
-See also [`ReadableStreamInterface`](#readablestreaminterface) and
-[`WritableStreamInterface`](#writablestreaminterface) for more details.
-
-## Creating streams
-
-ReactPHP uses the concept of "streams" throughout its ecosystem, so that
-many higher-level consumers of this package only deal with
-[stream usage](#stream-usage).
-This implies that stream instances are most often created within some
-higher-level components and many consumers never actually have to deal with
-creating a stream instance.
-
-* Use [react/socket](https://github.com/reactphp/socket)
- if you want to accept incoming or establish outgoing plaintext TCP/IP or
- secure TLS socket connection streams.
-* Use [react/http](https://github.com/reactphp/http)
- if you want to receive an incoming HTTP request body streams.
-* Use [react/child-process](https://github.com/reactphp/child-process)
- if you want to communicate with child processes via process pipes such as
- STDIN, STDOUT, STDERR etc.
-* Use experimental [react/filesystem](https://github.com/reactphp/filesystem)
- if you want to read from / write to the filesystem.
-* See also the last chapter for [more real-world applications](#more).
-
-However, if you are writing a lower-level component or want to create a stream
-instance from a stream resource, then the following chapter is for you.
-
-> Note that the following examples use `fopen()` and `stream_socket_client()`
- for illustration purposes only.
- These functions SHOULD NOT be used in a truly async program because each call
- may take several seconds to complete and would block the EventLoop otherwise.
- Additionally, the `fopen()` call will return a file handle on some platforms
- which may or may not be supported by all EventLoop implementations.
- As an alternative, you may want to use higher-level libraries listed above.
-
-### ReadableResourceStream
-
-The `ReadableResourceStream` is a concrete implementation of the
-[`ReadableStreamInterface`](#readablestreaminterface) for PHP's stream resources.
-
-This can be used to represent a read-only resource like a file stream opened in
-readable mode or a stream such as `STDIN`:
-
-```php
-$stream = new ReadableResourceStream(STDIN, $loop);
-$stream->on('data', function ($chunk) {
- echo $chunk;
-});
-$stream->on('end', function () {
- echo 'END';
-});
-```
-
-See also [`ReadableStreamInterface`](#readablestreaminterface) for more details.
-
-The first parameter given to the constructor MUST be a valid stream resource
-that is opened in reading mode (e.g. `fopen()` mode `r`).
-Otherwise, it will throw an `InvalidArgumentException`:
-
-```php
-// throws InvalidArgumentException
-$stream = new ReadableResourceStream(false, $loop);
-```
-
-See also the [`DuplexResourceStream`](#readableresourcestream) for read-and-write
-stream resources otherwise.
-
-Internally, this class tries to enable non-blocking mode on the stream resource
-which may not be supported for all stream resources.
-Most notably, this is not supported by pipes on Windows (STDIN etc.).
-If this fails, it will throw a `RuntimeException`:
-
-```php
-// throws RuntimeException on Windows
-$stream = new ReadableResourceStream(STDIN, $loop);
-```
-
-Once the constructor is called with a valid stream resource, this class will
-take care of the underlying stream resource.
-You SHOULD only use its public API and SHOULD NOT interfere with the underlying
-stream resource manually.
-
-This class takes an optional `int|null $readChunkSize` parameter that controls
-the maximum buffer size in bytes to read at once from the stream.
-You can use a `null` value here in order to apply its default value.
-This value SHOULD NOT be changed unless you know what you're doing.
-This can be a positive number which means that up to X bytes will be read
-at once from the underlying stream resource. Note that the actual number
-of bytes read may be lower if the stream resource has less than X bytes
-currently available.
-This can be `-1` which means "read everything available" from the
-underlying stream resource.
-This should read until the stream resource is not readable anymore
-(i.e. underlying buffer drained), note that this does not neccessarily
-mean it reached EOF.
-
-```php
-$stream = new ReadableResourceStream(STDIN, $loop, 8192);
-```
-
-> PHP bug warning: If the PHP process has explicitly been started without a
- `STDIN` stream, then trying to read from `STDIN` may return data from
- another stream resource. This does not happen if you start this with an empty
- stream like `php test.php < /dev/null` instead of `php test.php <&-`.
- See [#81](https://github.com/reactphp/stream/issues/81) for more details.
-
-### WritableResourceStream
-
-The `WritableResourceStream` is a concrete implementation of the
-[`WritableStreamInterface`](#writablestreaminterface) for PHP's stream resources.
-
-This can be used to represent a write-only resource like a file stream opened in
-writable mode or a stream such as `STDOUT` or `STDERR`:
-
-```php
-$stream = new WritableResourceStream(STDOUT, $loop);
-$stream->write('hello!');
-$stream->end();
-```
-
-See also [`WritableStreamInterface`](#writablestreaminterface) for more details.
-
-The first parameter given to the constructor MUST be a valid stream resource
-that is opened for writing.
-Otherwise, it will throw an `InvalidArgumentException`:
-
-```php
-// throws InvalidArgumentException
-$stream = new WritableResourceStream(false, $loop);
-```
-
-See also the [`DuplexResourceStream`](#readableresourcestream) for read-and-write
-stream resources otherwise.
-
-Internally, this class tries to enable non-blocking mode on the stream resource
-which may not be supported for all stream resources.
-Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.).
-If this fails, it will throw a `RuntimeException`:
-
-```php
-// throws RuntimeException on Windows
-$stream = new WritableResourceStream(STDOUT, $loop);
-```
-
-Once the constructor is called with a valid stream resource, this class will
-take care of the underlying stream resource.
-You SHOULD only use its public API and SHOULD NOT interfere with the underlying
-stream resource manually.
-
-Any `write()` calls to this class will not be performed instantly, but will
-be performed asynchronously, once the EventLoop reports the stream resource is
-ready to accept data.
-For this, it uses an in-memory buffer string to collect all outstanding writes.
-This buffer has a soft-limit applied which defines how much data it is willing
-to accept before the caller SHOULD stop sending further data.
-
-This class takes an optional `int|null $writeBufferSoftLimit` parameter that controls
-this maximum buffer size in bytes.
-You can use a `null` value here in order to apply its default value.
-This value SHOULD NOT be changed unless you know what you're doing.
-
-```php
-$stream = new WritableResourceStream(STDOUT, $loop, 8192);
-```
-
-This class takes an optional `int|null $writeChunkSize` parameter that controls
-this maximum buffer size in bytes to write at once to the stream.
-You can use a `null` value here in order to apply its default value.
-This value SHOULD NOT be changed unless you know what you're doing.
-This can be a positive number which means that up to X bytes will be written
-at once to the underlying stream resource. Note that the actual number
-of bytes written may be lower if the stream resource has less than X bytes
-currently available.
-This can be `-1` which means "write everything available" to the
-underlying stream resource.
-
-```php
-$stream = new WritableResourceStream(STDOUT, $loop, null, 8192);
-```
-
-See also [`write()`](#write) for more details.
-
-### DuplexResourceStream
-
-The `DuplexResourceStream` is a concrete implementation of the
-[`DuplexStreamInterface`](#duplexstreaminterface) for PHP's stream resources.
-
-This can be used to represent a read-and-write resource like a file stream opened
-in read and write mode mode or a stream such as a TCP/IP connection:
-
-```php
-$conn = stream_socket_client('tcp://google.com:80');
-$stream = new DuplexResourceStream($conn, $loop);
-$stream->write('hello!');
-$stream->end();
-```
-
-See also [`DuplexStreamInterface`](#duplexstreaminterface) for more details.
-
-The first parameter given to the constructor MUST be a valid stream resource
-that is opened for reading *and* writing.
-Otherwise, it will throw an `InvalidArgumentException`:
-
-```php
-// throws InvalidArgumentException
-$stream = new DuplexResourceStream(false, $loop);
-```
-
-See also the [`ReadableResourceStream`](#readableresourcestream) for read-only
-and the [`WritableResourceStream`](#writableresourcestream) for write-only
-stream resources otherwise.
-
-Internally, this class tries to enable non-blocking mode on the stream resource
-which may not be supported for all stream resources.
-Most notably, this is not supported by pipes on Windows (STDOUT, STDERR etc.).
-If this fails, it will throw a `RuntimeException`:
-
-```php
-// throws RuntimeException on Windows
-$stream = new DuplexResourceStream(STDOUT, $loop);
-```
-
-Once the constructor is called with a valid stream resource, this class will
-take care of the underlying stream resource.
-You SHOULD only use its public API and SHOULD NOT interfere with the underlying
-stream resource manually.
-
-This class takes an optional `int|null $readChunkSize` parameter that controls
-the maximum buffer size in bytes to read at once from the stream.
-You can use a `null` value here in order to apply its default value.
-This value SHOULD NOT be changed unless you know what you're doing.
-This can be a positive number which means that up to X bytes will be read
-at once from the underlying stream resource. Note that the actual number
-of bytes read may be lower if the stream resource has less than X bytes
-currently available.
-This can be `-1` which means "read everything available" from the
-underlying stream resource.
-This should read until the stream resource is not readable anymore
-(i.e. underlying buffer drained), note that this does not neccessarily
-mean it reached EOF.
-
-```php
-$conn = stream_socket_client('tcp://google.com:80');
-$stream = new DuplexResourceStream($conn, $loop, 8192);
-```
-
-Any `write()` calls to this class will not be performed instantly, but will
-be performed asynchronously, once the EventLoop reports the stream resource is
-ready to accept data.
-For this, it uses an in-memory buffer string to collect all outstanding writes.
-This buffer has a soft-limit applied which defines how much data it is willing
-to accept before the caller SHOULD stop sending further data.
-
-This class takes another optional `WritableStreamInterface|null $buffer` parameter
-that controls this write behavior of this stream.
-You can use a `null` value here in order to apply its default value.
-This value SHOULD NOT be changed unless you know what you're doing.
-
-If you want to change the write buffer soft limit, you can pass an instance of
-[`WritableResourceStream`](#writableresourcestream) like this:
-
-```php
-$conn = stream_socket_client('tcp://google.com:80');
-$buffer = new WritableResourceStream($conn, $loop, 8192);
-$stream = new DuplexResourceStream($conn, $loop, null, $buffer);
-```
-
-See also [`WritableResourceStream`](#writableresourcestream) for more details.
-
-### ThroughStream
-
-The `ThroughStream` implements the
-[`DuplexStreamInterface`](#duplexstreaminterface) and will simply pass any data
-you write to it through to its readable end.
-
-```php
-$through = new ThroughStream();
-$through->on('data', $this->expectCallableOnceWith('hello'));
-
-$through->write('hello');
-```
-
-Similarly, the [`end()` method](#end) will end the stream and emit an
-[`end` event](#end-event) and then [`close()`](#close-1) the stream.
-The [`close()` method](#close-1) will close the stream and emit a
-[`close` event](#close-event).
-Accordingly, this is can also be used in a [`pipe()`](#pipe) context like this:
-
-```php
-$through = new ThroughStream();
-$source->pipe($through)->pipe($dest);
-```
-
-Optionally, its constructor accepts any callable function which will then be
-used to *filter* any data written to it. This function receives a single data
-argument as passed to the writable side and must return the data as it will be
-passed to its readable end:
-
-```php
-$through = new ThroughStream('strtoupper');
-$source->pipe($through)->pipe($dest);
-```
-
-Note that this class makes no assumptions about any data types. This can be
-used to convert data, for example for transforming any structured data into
-a newline-delimited JSON (NDJSON) stream like this:
-
-```php
-$through = new ThroughStream(function ($data) {
- return json_encode($data) . PHP_EOL;
-});
-$through->on('data', $this->expectCallableOnceWith("[2, true]\n"));
-
-$through->write(array(2, true));
-```
-
-The callback function is allowed to throw an `Exception`. In this case,
-the stream will emit an `error` event and then [`close()`](#close-1) the stream.
-
-```php
-$through = new ThroughStream(function ($data) {
- if (!is_string($data)) {
- throw new \UnexpectedValueException('Only strings allowed');
- }
- return $data;
-});
-$through->on('error', $this->expectCallableOnce()));
-$through->on('close', $this->expectCallableOnce()));
-$through->on('data', $this->expectCallableNever()));
-
-$through->write(2);
-```
-
-### CompositeStream
-
-The `CompositeStream` implements the
-[`DuplexStreamInterface`](#duplexstreaminterface) and can be used to create a
-single duplex stream from two individual streams implementing
-[`ReadableStreamInterface`](#readablestreaminterface) and
-[`WritableStreamInterface`](#writablestreaminterface) respectively.
-
-This is useful for some APIs which may require a single
-[`DuplexStreamInterface`](#duplexstreaminterface) or simply because it's often
-more convenient to work with a single stream instance like this:
-
-```php
-$stdin = new ReadableResourceStream(STDIN, $loop);
-$stdout = new WritableResourceStream(STDOUT, $loop);
-
-$stdio = new CompositeStream($stdin, $stdout);
-
-$stdio->on('data', function ($chunk) use ($stdio) {
- $stdio->write('You said: ' . $chunk);
-});
-```
-
-This is a well-behaving stream which forwards all stream events from the
-underlying streams and forwards all streams calls to the underlying streams.
-
-If you `write()` to the duplex stream, it will simply `write()` to the
-writable side and return its status.
-
-If you `end()` the duplex stream, it will `end()` the writable side and will
-`pause()` the readable side.
-
-If you `close()` the duplex stream, both input streams will be closed.
-If either of the two input streams emits a `close` event, the duplex stream
-will also close.
-If either of the two input streams is already closed while constructing the
-duplex stream, it will `close()` the other side and return a closed stream.
-
-## Usage
-
-The following example can be used to pipe the contents of a source file into
-a destination file without having to ever read the whole file into memory:
-
-```php
-$loop = new React\EventLoop\StreamSelectLoop;
-
-$source = new React\Stream\ReadableResourceStream(fopen('source.txt', 'r'), $loop);
-$dest = new React\Stream\WritableResourceStream(fopen('destination.txt', 'w'), $loop);
-
-$source->pipe($dest);
-
-$loop->run();
-```
-
-> Note that this example uses `fopen()` for illustration purposes only.
- This should not be used in a truly async program because the filesystem is
- inherently blocking and each call could potentially take several seconds.
- See also [creating streams](#creating-streams) for more sophisticated
- examples.
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This will install the latest supported version:
-
-```bash
-$ composer require react/stream:^0.7.7
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 7+ and HHVM.
-It's *highly recommended to use PHP 7+* for this project due to its vast
-performance improvements.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org):
-
-```bash
-$ composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-$ php vendor/bin/phpunit
-```
-
-The test suite also contains a number of functional integration tests that rely
-on a stable internet connection.
-If you do not want to run these, they can simply be skipped like this:
-
-```bash
-$ php vendor/bin/phpunit --exclude-group internet
-```
-
-## License
-
-MIT, see [LICENSE file](LICENSE).
-
-## More
-
-* See [creating streams](#creating-streams) for more information on how streams
- are created in real-world applications.
-* See our [users wiki](https://github.com/reactphp/react/wiki/Users) and the
- [dependents on Packagist](https://packagist.org/packages/react/stream/dependents)
- for a list of packages that use streams in real-world applications.
diff --git a/assets/php/vendor/react/stream/composer.json b/assets/php/vendor/react/stream/composer.json
deleted file mode 100755
index f6faa66..0000000
--- a/assets/php/vendor/react/stream/composer.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "name": "react/stream",
- "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
- "keywords": ["event-driven", "readable", "writable", "stream", "non-blocking", "io", "pipe", "ReactPHP"],
- "license": "MIT",
- "require": {
- "php": ">=5.3.8",
- "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5",
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35",
- "clue/stream-filter": "~1.2"
- },
- "autoload": {
- "psr-4": {
- "React\\Stream\\": "src"
- }
- },
- "autoload-dev": {
- "psr-4": {
- "React\\Tests\\Stream\\": "tests"
- }
- }
-}
diff --git a/assets/php/vendor/react/stream/examples/01-http.php b/assets/php/vendor/react/stream/examples/01-http.php
deleted file mode 100755
index 3687f7c..0000000
--- a/assets/php/vendor/react/stream/examples/01-http.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-// Simple plaintext HTTP client example (for illustration purposes only).
-// This shows how a plaintext TCP/IP connection is established to then send an
-// application level protocol message (HTTP).
-// Real applications should use react/http-client instead!
-//
-// This simple example only accepts an optional host parameter to send the
-// request to.
-//
-// $ php examples/01-http.php
-// $ php examples/01-http.php reactphp.org
-
-use React\EventLoop\Factory;
-use React\Stream\DuplexResourceStream;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$host = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-// connect to tcp://www.google.com:80 (blocking call!)
-// for illustration purposes only, should use react/http-client or react/socket instead!
-$resource = stream_socket_client('tcp://' . $host . ':80');
-if (!$resource) {
- exit(1);
-}
-
-$loop = Factory::create();
-$stream = new DuplexResourceStream($resource, $loop);
-
-$stream->on('data', function ($chunk) {
- echo $chunk;
-});
-$stream->on('close', function () {
- echo '[CLOSED]' . PHP_EOL;
-});
-
-$stream->write("GET / HTTP/1.0\r\nHost: $host\r\n\r\n");
-
-$loop->run();
diff --git a/assets/php/vendor/react/stream/examples/02-https.php b/assets/php/vendor/react/stream/examples/02-https.php
deleted file mode 100755
index 163f7c8..0000000
--- a/assets/php/vendor/react/stream/examples/02-https.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-
-// Simple secure HTTPS client example (for illustration purposes only).
-// This shows how a secure TLS connection is established to then send an
-// application level protocol message (HTTP).
-// Real applications should use react/http-client instead!
-//
-// This simple example only accepts an optional host parameter to send the
-// request to.
-//
-// $ php examples/02-https.php
-// $ php examples/02-https.php reactphp.org
-
-use React\EventLoop\Factory;
-use React\Stream\DuplexResourceStream;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-$host = isset($argv[1]) ? $argv[1] : 'www.google.com';
-
-// connect to tls://www.google.com:443 (blocking call!)
-// for illustration purposes only, should use react/http-client or react/socket instead!
-$resource = stream_socket_client('tls://' . $host . ':443');
-if (!$resource) {
- exit(1);
-}
-
-$loop = Factory::create();
-$stream = new DuplexResourceStream($resource, $loop);
-
-$stream->on('data', function ($chunk) {
- echo $chunk;
-});
-$stream->on('close', function () {
- echo '[CLOSED]' . PHP_EOL;
-});
-
-$stream->write("GET / HTTP/1.0\r\nHost: $host\r\n\r\n");
-
-$loop->run();
diff --git a/assets/php/vendor/react/stream/examples/11-cat.php b/assets/php/vendor/react/stream/examples/11-cat.php
deleted file mode 100755
index 90fadc0..0000000
--- a/assets/php/vendor/react/stream/examples/11-cat.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-// Simple example piping everything from STDIN to STDOUT.
-// This allows you to output everything you type on your keyboard or to redirect
-// the pipes to show contents of files and other streams.
-//
-// $ php examples/11-cat.php
-// $ php examples/11-cat.php < README.md
-// $ echo hello | php examples/11-cat.php
-
-use React\EventLoop\Factory;
-use React\Stream\ReadableResourceStream;
-use React\Stream\WritableResourceStream;
-
-require __DIR__ . '/../vendor/autoload.php';
-
-if (DIRECTORY_SEPARATOR === '\\') {
- fwrite(STDERR, 'Non-blocking console I/O not supported on Microsoft Windows' . PHP_EOL);
- exit(1);
-}
-
-$loop = Factory::create();
-
-$stdout = new WritableResourceStream(STDOUT, $loop);
-$stdin = new ReadableResourceStream(STDIN, $loop);
-$stdin->pipe($stdout);
-
-$loop->run();
diff --git a/assets/php/vendor/react/stream/examples/91-benchmark-throughput.php b/assets/php/vendor/react/stream/examples/91-benchmark-throughput.php
deleted file mode 100755
index ecf695c..0000000
--- a/assets/php/vendor/react/stream/examples/91-benchmark-throughput.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-// Benchmark to measure throughput performance piping an input stream to an output stream.
-// This allows you to get an idea of how fast stream processing with PHP can be
-// and also to play around with differnt types of input and output streams.
-//
-// This example accepts a number of parameters to control the timeout (-t 1),
-// the input file (-i /dev/zero) and the output file (-o /dev/null).
-//
-// $ php examples/91-benchmark-throughput.php
-// $ php examples/91-benchmark-throughput.php -t 10 -o zero.bin
-// $ php examples/91-benchmark-throughput.php -t 60 -i zero.bin
-
-require __DIR__ . '/../vendor/autoload.php';
-
-if (DIRECTORY_SEPARATOR === '\\') {
- fwrite(STDERR, 'Non-blocking console I/O not supported on Microsoft Windows' . PHP_EOL);
- exit(1);
-}
-
-$args = getopt('i:o:t:');
-$if = isset($args['i']) ? $args['i'] : '/dev/zero';
-$of = isset($args['o']) ? $args['o'] : '/dev/null';
-$t = isset($args['t']) ? $args['t'] : 1;
-
-// passing file descriptors requires mapping paths (https://bugs.php.net/bug.php?id=53465)
-$if = str_replace('/dev/fd/', 'php://fd/', $if);
-$of = str_replace('/dev/fd/', 'php://fd/', $of);
-
-$loop = new React\EventLoop\StreamSelectLoop();
-
-// setup information stream
-$info = new React\Stream\WritableResourceStream(STDERR, $loop);
-if (extension_loaded('xdebug')) {
- $info->write('NOTICE: The "xdebug" extension is loaded, this has a major impact on performance.' . PHP_EOL);
-}
-$info->write('piping from ' . $if . ' to ' . $of . ' (for max ' . $t . ' second(s)) ...'. PHP_EOL);
-
-// setup input and output streams and pipe inbetween
-$fh = fopen($if, 'r');
-$in = new React\Stream\ReadableResourceStream($fh, $loop);
-$out = new React\Stream\WritableResourceStream(fopen($of, 'w'), $loop);
-$in->pipe($out);
-
-// stop input stream in $t seconds
-$start = microtime(true);
-$timeout = $loop->addTimer($t, function () use ($in, &$bytes) {
- $in->close();
-});
-
-// print stream position once stream closes
-$in->on('close', function () use ($fh, $start, $loop, $timeout, $info) {
- $t = microtime(true) - $start;
- $loop->cancelTimer($timeout);
-
- $bytes = ftell($fh);
-
- $info->write('read ' . $bytes . ' byte(s) in ' . round($t, 3) . ' second(s) => ' . round($bytes / 1024 / 1024 / $t, 1) . ' MiB/s' . PHP_EOL);
- $info->write('peak memory usage of ' . round(memory_get_peak_usage(true) / 1024 / 1024, 1) . ' MiB' . PHP_EOL);
-});
-
-$loop->run();
diff --git a/assets/php/vendor/react/stream/phpunit.xml.dist b/assets/php/vendor/react/stream/phpunit.xml.dist
deleted file mode 100755
index 13d3fab..0000000
--- a/assets/php/vendor/react/stream/phpunit.xml.dist
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<phpunit backupGlobals="false"
- backupStaticAttributes="false"
- colors="true"
- convertErrorsToExceptions="true"
- convertNoticesToExceptions="true"
- convertWarningsToExceptions="true"
- processIsolation="false"
- stopOnFailure="false"
- syntaxCheck="false"
- bootstrap="vendor/autoload.php"
->
- <testsuites>
- <testsuite name="React Test Suite">
- <directory>./tests/</directory>
- </testsuite>
- </testsuites>
-
- <filter>
- <whitelist>
- <directory>./src/</directory>
- </whitelist>
- </filter>
-</phpunit>
diff --git a/assets/php/vendor/react/stream/src/CompositeStream.php b/assets/php/vendor/react/stream/src/CompositeStream.php
deleted file mode 100755
index 153f2a3..0000000
--- a/assets/php/vendor/react/stream/src/CompositeStream.php
+++ /dev/null
@@ -1,82 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitter;
-
-final class CompositeStream extends EventEmitter implements DuplexStreamInterface
-{
- private $readable;
- private $writable;
- private $closed = false;
-
- public function __construct(ReadableStreamInterface $readable, WritableStreamInterface $writable)
- {
- $this->readable = $readable;
- $this->writable = $writable;
-
- if (!$readable->isReadable() || !$writable->isWritable()) {
- return $this->close();
- }
-
- Util::forwardEvents($this->readable, $this, array('data', 'end', 'error'));
- Util::forwardEvents($this->writable, $this, array('drain', 'error', 'pipe'));
-
- $this->readable->on('close', array($this, 'close'));
- $this->writable->on('close', array($this, 'close'));
- }
-
- public function isReadable()
- {
- return $this->readable->isReadable();
- }
-
- public function pause()
- {
- $this->readable->pause();
- }
-
- public function resume()
- {
- if (!$this->writable->isWritable()) {
- return;
- }
-
- $this->readable->resume();
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- return Util::pipe($this, $dest, $options);
- }
-
- public function isWritable()
- {
- return $this->writable->isWritable();
- }
-
- public function write($data)
- {
- return $this->writable->write($data);
- }
-
- public function end($data = null)
- {
- $this->readable->pause();
- $this->writable->end($data);
- }
-
- public function close()
- {
- if ($this->closed) {
- return;
- }
-
- $this->closed = true;
- $this->readable->close();
- $this->writable->close();
-
- $this->emit('close');
- $this->removeAllListeners();
- }
-}
diff --git a/assets/php/vendor/react/stream/src/DuplexResourceStream.php b/assets/php/vendor/react/stream/src/DuplexResourceStream.php
deleted file mode 100755
index 982ebb0..0000000
--- a/assets/php/vendor/react/stream/src/DuplexResourceStream.php
+++ /dev/null
@@ -1,224 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use InvalidArgumentException;
-
-final class DuplexResourceStream extends EventEmitter implements DuplexStreamInterface
-{
- private $stream;
- private $loop;
-
- /**
- * Controls the maximum buffer size in bytes to read at once from the stream.
- *
- * This can be a positive number which means that up to X bytes will be read
- * at once from the underlying stream resource. Note that the actual number
- * of bytes read may be lower if the stream resource has less than X bytes
- * currently available.
- *
- * This can be `-1` which means read everything available from the
- * underlying stream resource.
- * This should read until the stream resource is not readable anymore
- * (i.e. underlying buffer drained), note that this does not neccessarily
- * mean it reached EOF.
- *
- * @var int
- */
- private $bufferSize;
- private $buffer;
-
- private $readable = true;
- private $writable = true;
- private $closing = false;
- private $listening = false;
-
- public function __construct($stream, LoopInterface $loop, $readChunkSize = null, WritableStreamInterface $buffer = null)
- {
- if (!is_resource($stream) || get_resource_type($stream) !== "stream") {
- throw new InvalidArgumentException('First parameter must be a valid stream resource');
- }
-
- // ensure resource is opened for reading and wrting (fopen mode must contain "+")
- $meta = stream_get_meta_data($stream);
- if (isset($meta['mode']) && $meta['mode'] !== '' && strpos($meta['mode'], '+') === false) {
- throw new InvalidArgumentException('Given stream resource is not opened in read and write mode');
- }
-
- // this class relies on non-blocking I/O in order to not interrupt the event loop
- // e.g. pipes on Windows do not support this: https://bugs.php.net/bug.php?id=47918
- if (stream_set_blocking($stream, 0) !== true) {
- throw new \RuntimeException('Unable to set stream resource to non-blocking mode');
- }
-
- // Use unbuffered read operations on the underlying stream resource.
- // Reading chunks from the stream may otherwise leave unread bytes in
- // PHP's stream buffers which some event loop implementations do not
- // trigger events on (edge triggered).
- // This does not affect the default event loop implementation (level
- // triggered), so we can ignore platforms not supporting this (HHVM).
- // Pipe streams (such as STDIN) do not seem to require this and legacy
- // PHP versions cause SEGFAULTs on unbuffered pipe streams, so skip this.
- if (function_exists('stream_set_read_buffer') && !$this->isLegacyPipe($stream)) {
- stream_set_read_buffer($stream, 0);
- }
-
- if ($buffer === null) {
- $buffer = new WritableResourceStream($stream, $loop);
- }
-
- $this->stream = $stream;
- $this->loop = $loop;
- $this->bufferSize = ($readChunkSize === null) ? 65536 : (int)$readChunkSize;
- $this->buffer = $buffer;
-
- $that = $this;
-
- $this->buffer->on('error', function ($error) use ($that) {
- $that->emit('error', array($error));
- });
-
- $this->buffer->on('close', array($this, 'close'));
-
- $this->buffer->on('drain', function () use ($that) {
- $that->emit('drain');
- });
-
- $this->resume();
- }
-
- public function isReadable()
- {
- return $this->readable;
- }
-
- public function isWritable()
- {
- return $this->writable;
- }
-
- public function pause()
- {
- if ($this->listening) {
- $this->loop->removeReadStream($this->stream);
- $this->listening = false;
- }
- }
-
- public function resume()
- {
- if (!$this->listening && $this->readable) {
- $this->loop->addReadStream($this->stream, array($this, 'handleData'));
- $this->listening = true;
- }
- }
-
- public function write($data)
- {
- if (!$this->writable) {
- return false;
- }
-
- return $this->buffer->write($data);
- }
-
- public function close()
- {
- if (!$this->writable && !$this->closing) {
- return;
- }
-
- $this->closing = false;
-
- $this->readable = false;
- $this->writable = false;
-
- $this->emit('close');
- $this->pause();
- $this->buffer->close();
- $this->removeAllListeners();
-
- if (is_resource($this->stream)) {
- fclose($this->stream);
- }
- }
-
- public function end($data = null)
- {
- if (!$this->writable) {
- return;
- }
-
- $this->closing = true;
-
- $this->readable = false;
- $this->writable = false;
- $this->pause();
-
- $this->buffer->end($data);
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- return Util::pipe($this, $dest, $options);
- }
-
- /** @internal */
- public function handleData($stream)
- {
- $error = null;
- set_error_handler(function ($errno, $errstr, $errfile, $errline) use (&$error) {
- $error = new \ErrorException(
- $errstr,
- 0,
- $errno,
- $errfile,
- $errline
- );
- });
-
- $data = stream_get_contents($stream, $this->bufferSize);
-
- restore_error_handler();
-
- if ($error !== null) {
- $this->emit('error', array(new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)));
- $this->close();
- return;
- }
-
- if ($data !== '') {
- $this->emit('data', array($data));
- } else{
- // no data read => we reached the end and close the stream
- $this->emit('end');
- $this->close();
- }
- }
-
- /**
- * Returns whether this is a pipe resource in a legacy environment
- *
- * This works around a legacy PHP bug (#61019) that was fixed in PHP 5.4.28+
- * and PHP 5.5.12+ and newer.
- *
- * @param resource $resource
- * @return bool
- * @link https://github.com/reactphp/child-process/issues/40
- *
- * @codeCoverageIgnore
- */
- private function isLegacyPipe($resource)
- {
- if (PHP_VERSION_ID < 50428 || (PHP_VERSION_ID >= 50500 && PHP_VERSION_ID < 50512)) {
- $meta = stream_get_meta_data($resource);
-
- if (isset($meta['stream_type']) && $meta['stream_type'] === 'STDIO') {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/assets/php/vendor/react/stream/src/DuplexStreamInterface.php b/assets/php/vendor/react/stream/src/DuplexStreamInterface.php
deleted file mode 100755
index 631ce31..0000000
--- a/assets/php/vendor/react/stream/src/DuplexStreamInterface.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-/**
- * The `DuplexStreamInterface` is responsible for providing an interface for
- * duplex streams (both readable and writable).
- *
- * It builds on top of the existing interfaces for readable and writable streams
- * and follows the exact same method and event semantics.
- * If you're new to this concept, you should look into the
- * `ReadableStreamInterface` and `WritableStreamInterface` first.
- *
- * Besides defining a few methods, this interface also implements the
- * `EventEmitterInterface` which allows you to react to the same events defined
- * on the `ReadbleStreamInterface` and `WritableStreamInterface`.
- *
- * The event callback functions MUST be a valid `callable` that obeys strict
- * parameter definitions and MUST accept event parameters exactly as documented.
- * The event callback functions MUST NOT throw an `Exception`.
- * The return value of the event callback functions will be ignored and has no
- * effect, so for performance reasons you're recommended to not return any
- * excessive data structures.
- *
- * Every implementation of this interface MUST follow these event semantics in
- * order to be considered a well-behaving stream.
- *
- * > Note that higher-level implementations of this interface may choose to
- * define additional events with dedicated semantics not defined as part of
- * this low-level stream specification. Conformance with these event semantics
- * is out of scope for this interface, so you may also have to refer to the
- * documentation of such a higher-level implementation.
- *
- * @see ReadableStreamInterface
- * @see WritableStreamInterface
- */
-interface DuplexStreamInterface extends ReadableStreamInterface, WritableStreamInterface
-{
-}
diff --git a/assets/php/vendor/react/stream/src/ReadableResourceStream.php b/assets/php/vendor/react/stream/src/ReadableResourceStream.php
deleted file mode 100755
index 015a96b..0000000
--- a/assets/php/vendor/react/stream/src/ReadableResourceStream.php
+++ /dev/null
@@ -1,177 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-use InvalidArgumentException;
-
-final class ReadableResourceStream extends EventEmitter implements ReadableStreamInterface
-{
- /**
- * @var resource
- */
- private $stream;
-
- private $loop;
-
- /**
- * Controls the maximum buffer size in bytes to read at once from the stream.
- *
- * This value SHOULD NOT be changed unless you know what you're doing.
- *
- * This can be a positive number which means that up to X bytes will be read
- * at once from the underlying stream resource. Note that the actual number
- * of bytes read may be lower if the stream resource has less than X bytes
- * currently available.
- *
- * This can be `-1` which means read everything available from the
- * underlying stream resource.
- * This should read until the stream resource is not readable anymore
- * (i.e. underlying buffer drained), note that this does not neccessarily
- * mean it reached EOF.
- *
- * @var int
- */
- private $bufferSize;
-
- private $closed = false;
- private $listening = false;
-
- public function __construct($stream, LoopInterface $loop, $readChunkSize = null)
- {
- if (!is_resource($stream) || get_resource_type($stream) !== "stream") {
- throw new InvalidArgumentException('First parameter must be a valid stream resource');
- }
-
- // ensure resource is opened for reading (fopen mode must contain "r" or "+")
- $meta = stream_get_meta_data($stream);
- if (isset($meta['mode']) && $meta['mode'] !== '' && strpos($meta['mode'], 'r') === strpos($meta['mode'], '+')) {
- throw new InvalidArgumentException('Given stream resource is not opened in read mode');
- }
-
- // this class relies on non-blocking I/O in order to not interrupt the event loop
- // e.g. pipes on Windows do not support this: https://bugs.php.net/bug.php?id=47918
- if (stream_set_blocking($stream, 0) !== true) {
- throw new \RuntimeException('Unable to set stream resource to non-blocking mode');
- }
-
- // Use unbuffered read operations on the underlying stream resource.
- // Reading chunks from the stream may otherwise leave unread bytes in
- // PHP's stream buffers which some event loop implementations do not
- // trigger events on (edge triggered).
- // This does not affect the default event loop implementation (level
- // triggered), so we can ignore platforms not supporting this (HHVM).
- // Pipe streams (such as STDIN) do not seem to require this and legacy
- // PHP versions cause SEGFAULTs on unbuffered pipe streams, so skip this.
- if (function_exists('stream_set_read_buffer') && !$this->isLegacyPipe($stream)) {
- stream_set_read_buffer($stream, 0);
- }
-
- $this->stream = $stream;
- $this->loop = $loop;
- $this->bufferSize = ($readChunkSize === null) ? 65536 : (int)$readChunkSize;
-
- $this->resume();
- }
-
- public function isReadable()
- {
- return !$this->closed;
- }
-
- public function pause()
- {
- if ($this->listening) {
- $this->loop->removeReadStream($this->stream);
- $this->listening = false;
- }
- }
-
- public function resume()
- {
- if (!$this->listening && !$this->closed) {
- $this->loop->addReadStream($this->stream, array($this, 'handleData'));
- $this->listening = true;
- }
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- return Util::pipe($this, $dest, $options);
- }
-
- public function close()
- {
- if ($this->closed) {
- return;
- }
-
- $this->closed = true;
-
- $this->emit('close');
- $this->pause();
- $this->removeAllListeners();
-
- if (is_resource($this->stream)) {
- fclose($this->stream);
- }
- }
-
- /** @internal */
- public function handleData()
- {
- $error = null;
- set_error_handler(function ($errno, $errstr, $errfile, $errline) use (&$error) {
- $error = new \ErrorException(
- $errstr,
- 0,
- $errno,
- $errfile,
- $errline
- );
- });
-
- $data = stream_get_contents($this->stream, $this->bufferSize);
-
- restore_error_handler();
-
- if ($error !== null) {
- $this->emit('error', array(new \RuntimeException('Unable to read from stream: ' . $error->getMessage(), 0, $error)));
- $this->close();
- return;
- }
-
- if ($data !== '') {
- $this->emit('data', array($data));
- } else{
- // no data read => we reached the end and close the stream
- $this->emit('end');
- $this->close();
- }
- }
-
- /**
- * Returns whether this is a pipe resource in a legacy environment
- *
- * This works around a legacy PHP bug (#61019) that was fixed in PHP 5.4.28+
- * and PHP 5.5.12+ and newer.
- *
- * @param resource $resource
- * @return bool
- * @link https://github.com/reactphp/child-process/issues/40
- *
- * @codeCoverageIgnore
- */
- private function isLegacyPipe($resource)
- {
- if (PHP_VERSION_ID < 50428 || (PHP_VERSION_ID >= 50500 && PHP_VERSION_ID < 50512)) {
- $meta = stream_get_meta_data($resource);
-
- if (isset($meta['stream_type']) && $meta['stream_type'] === 'STDIO') {
- return true;
- }
- }
- return false;
- }
-}
diff --git a/assets/php/vendor/react/stream/src/ReadableStreamInterface.php b/assets/php/vendor/react/stream/src/ReadableStreamInterface.php
deleted file mode 100755
index 2b4c3d0..0000000
--- a/assets/php/vendor/react/stream/src/ReadableStreamInterface.php
+++ /dev/null
@@ -1,362 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitterInterface;
-
-/**
- * The `ReadableStreamInterface` is responsible for providing an interface for
- * read-only streams and the readable side of duplex streams.
- *
- * Besides defining a few methods, this interface also implements the
- * `EventEmitterInterface` which allows you to react to certain events:
- *
- * data event:
- * The `data` event will be emitted whenever some data was read/received
- * from this source stream.
- * The event receives a single mixed argument for incoming data.
- *
- * ```php
- * $stream->on('data', function ($data) {
- * echo $data;
- * });
- * ```
- *
- * This event MAY be emitted any number of times, which may be zero times if
- * this stream does not send any data at all.
- * It SHOULD not be emitted after an `end` or `close` event.
- *
- * The given `$data` argument may be of mixed type, but it's usually
- * recommended it SHOULD be a `string` value or MAY use a type that allows
- * representation as a `string` for maximum compatibility.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * will emit the raw (binary) payload data that is received over the wire as
- * chunks of `string` values.
- *
- * Due to the stream-based nature of this, the sender may send any number
- * of chunks with varying sizes. There are no guarantees that these chunks
- * will be received with the exact same framing the sender intended to send.
- * In other words, many lower-level protocols (such as TCP/IP) transfer the
- * data in chunks that may be anywhere between single-byte values to several
- * dozens of kilobytes. You may want to apply a higher-level protocol to
- * these low-level data chunks in order to achieve proper message framing.
- *
- * end event:
- * The `end` event will be emitted once the source stream has successfully
- * reached the end of the stream (EOF).
- *
- * ```php
- * $stream->on('end', function () {
- * echo 'END';
- * });
- * ```
- *
- * This event SHOULD be emitted once or never at all, depending on whether
- * a successful end was detected.
- * It SHOULD NOT be emitted after a previous `end` or `close` event.
- * It MUST NOT be emitted if the stream closes due to a non-successful
- * end, such as after a previous `error` event.
- *
- * After the stream is ended, it MUST switch to non-readable mode,
- * see also `isReadable()`.
- *
- * This event will only be emitted if the *end* was reached successfully,
- * not if the stream was interrupted by an unrecoverable error or explicitly
- * closed. Not all streams know this concept of a "successful end".
- * Many use-cases involve detecting when the stream closes (terminates)
- * instead, in this case you should use the `close` event.
- * After the stream emits an `end` event, it SHOULD usually be followed by a
- * `close` event.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * will emit this event if either the remote side closes the connection or
- * a file handle was successfully read until reaching its end (EOF).
- *
- * Note that this event should not be confused with the `end()` method.
- * This event defines a successful end *reading* from a source stream, while
- * the `end()` method defines *writing* a successful end to a destination
- * stream.
- *
- * error event:
- * The `error` event will be emitted once a fatal error occurs, usually while
- * trying to read from this stream.
- * The event receives a single `Exception` argument for the error instance.
- *
- * ```php
- * $stream->on('error', function (Exception $e) {
- * echo 'Error: ' . $e->getMessage() . PHP_EOL;
- * });
- * ```
- *
- * This event SHOULD be emitted once the stream detects a fatal error, such
- * as a fatal transmission error or after an unexpected `data` or premature
- * `end` event.
- * It SHOULD NOT be emitted after a previous `error`, `end` or `close` event.
- * It MUST NOT be emitted if this is not a fatal error condition, such as
- * a temporary network issue that did not cause any data to be lost.
- *
- * After the stream errors, it MUST close the stream and SHOULD thus be
- * followed by a `close` event and then switch to non-readable mode, see
- * also `close()` and `isReadable()`.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * only deal with data transmission and do not make assumption about data
- * boundaries (such as unexpected `data` or premature `end` events).
- * In other words, many lower-level protocols (such as TCP/IP) may choose
- * to only emit this for a fatal transmission error once and will then
- * close (terminate) the stream in response.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the writable side of the stream also implements an `error` event.
- * In other words, an error may occur while either reading or writing the
- * stream which should result in the same error processing.
- *
- * close event:
- * The `close` event will be emitted once the stream closes (terminates).
- *
- * ```php
- * $stream->on('close', function () {
- * echo 'CLOSED';
- * });
- * ```
- *
- * This event SHOULD be emitted once or never at all, depending on whether
- * the stream ever terminates.
- * It SHOULD NOT be emitted after a previous `close` event.
- *
- * After the stream is closed, it MUST switch to non-readable mode,
- * see also `isReadable()`.
- *
- * Unlike the `end` event, this event SHOULD be emitted whenever the stream
- * closes, irrespective of whether this happens implicitly due to an
- * unrecoverable error or explicitly when either side closes the stream.
- * If you only want to detect a *successful* end, you should use the `end`
- * event instead.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * will likely choose to emit this event after reading a *successful* `end`
- * event or after a fatal transmission `error` event.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the writable side of the stream also implements a `close` event.
- * In other words, after receiving this event, the stream MUST switch into
- * non-writable AND non-readable mode, see also `isWritable()`.
- * Note that this event should not be confused with the `end` event.
- *
- * The event callback functions MUST be a valid `callable` that obeys strict
- * parameter definitions and MUST accept event parameters exactly as documented.
- * The event callback functions MUST NOT throw an `Exception`.
- * The return value of the event callback functions will be ignored and has no
- * effect, so for performance reasons you're recommended to not return any
- * excessive data structures.
- *
- * Every implementation of this interface MUST follow these event semantics in
- * order to be considered a well-behaving stream.
- *
- * > Note that higher-level implementations of this interface may choose to
- * define additional events with dedicated semantics not defined as part of
- * this low-level stream specification. Conformance with these event semantics
- * is out of scope for this interface, so you may also have to refer to the
- * documentation of such a higher-level implementation.
- *
- * @see EventEmitterInterface
- */
-interface ReadableStreamInterface extends EventEmitterInterface
-{
- /**
- * Checks whether this stream is in a readable state (not closed already).
- *
- * This method can be used to check if the stream still accepts incoming
- * data events or if it is ended or closed already.
- * Once the stream is non-readable, no further `data` or `end` events SHOULD
- * be emitted.
- *
- * ```php
- * assert($stream->isReadable() === false);
- *
- * $stream->on('data', assertNeverCalled());
- * $stream->on('end', assertNeverCalled());
- * ```
- *
- * A successfully opened stream always MUST start in readable mode.
- *
- * Once the stream ends or closes, it MUST switch to non-readable mode.
- * This can happen any time, explicitly through `close()` or
- * implicitly due to a remote close or an unrecoverable transmission error.
- * Once a stream has switched to non-readable mode, it MUST NOT transition
- * back to readable mode.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the writable side of the stream also implements an `isWritable()`
- * method. Unless this is a half-open duplex stream, they SHOULD usually
- * have the same return value.
- *
- * @return bool
- */
- public function isReadable();
-
- /**
- * Pauses reading incoming data events.
- *
- * Removes the data source file descriptor from the event loop. This
- * allows you to throttle incoming data.
- *
- * Unless otherwise noted, a successfully opened stream SHOULD NOT start
- * in paused state.
- *
- * Once the stream is paused, no futher `data` or `end` events SHOULD
- * be emitted.
- *
- * ```php
- * $stream->pause();
- *
- * $stream->on('data', assertShouldNeverCalled());
- * $stream->on('end', assertShouldNeverCalled());
- * ```
- *
- * This method is advisory-only, though generally not recommended, the
- * stream MAY continue emitting `data` events.
- *
- * You can continue processing events by calling `resume()` again.
- *
- * Note that both methods can be called any number of times, in particular
- * calling `pause()` more than once SHOULD NOT have any effect.
- *
- * @see self::resume()
- * @return void
- */
- public function pause();
-
- /**
- * Resumes reading incoming data events.
- *
- * Re-attach the data source after a previous `pause()`.
- *
- * ```php
- * $stream->pause();
- *
- * $loop->addTimer(1.0, function () use ($stream) {
- * $stream->resume();
- * });
- * ```
- *
- * Note that both methods can be called any number of times, in particular
- * calling `resume()` without a prior `pause()` SHOULD NOT have any effect.
- *
- * @see self::pause()
- * @return void
- */
- public function resume();
-
- /**
- * Pipes all the data from this readable source into the given writable destination.
- *
- * Automatically sends all incoming data to the destination.
- * Automatically throttles the source based on what the destination can handle.
- *
- * ```php
- * $source->pipe($dest);
- * ```
- *
- * Similarly, you can also pipe an instance implementing `DuplexStreamInterface`
- * into itself in order to write back all the data that is received.
- * This may be a useful feature for a TCP/IP echo service:
- *
- * ```php
- * $connection->pipe($connection);
- * ```
- *
- * This method returns the destination stream as-is, which can be used to
- * set up chains of piped streams:
- *
- * ```php
- * $source->pipe($decodeGzip)->pipe($filterBadWords)->pipe($dest);
- * ```
- *
- * By default, this will call `end()` on the destination stream once the
- * source stream emits an `end` event. This can be disabled like this:
- *
- * ```php
- * $source->pipe($dest, array('end' => false));
- * ```
- *
- * Note that this only applies to the `end` event.
- * If an `error` or explicit `close` event happens on the source stream,
- * you'll have to manually close the destination stream:
- *
- * ```php
- * $source->pipe($dest);
- * $source->on('close', function () use ($dest) {
- * $dest->end('BYE!');
- * });
- * ```
- *
- * If the source stream is not readable (closed state), then this is a NO-OP.
- *
- * ```php
- * $source->close();
- * $source->pipe($dest); // NO-OP
- * ```
- *
- * If the destinantion stream is not writable (closed state), then this will simply
- * throttle (pause) the source stream:
- *
- * ```php
- * $dest->close();
- * $source->pipe($dest); // calls $source->pause()
- * ```
- *
- * Similarly, if the destination stream is closed while the pipe is still
- * active, it will also throttle (pause) the source stream:
- *
- * ```php
- * $source->pipe($dest);
- * $dest->close(); // calls $source->pause()
- * ```
- *
- * Once the pipe is set up successfully, the destination stream MUST emit
- * a `pipe` event with this source stream an event argument.
- *
- * @param WritableStreamInterface $dest
- * @param array $options
- * @return WritableStreamInterface $dest stream as-is
- */
- public function pipe(WritableStreamInterface $dest, array $options = array());
-
- /**
- * Closes the stream (forcefully).
- *
- * This method can be used to (forcefully) close the stream.
- *
- * ```php
- * $stream->close();
- * ```
- *
- * Once the stream is closed, it SHOULD emit a `close` event.
- * Note that this event SHOULD NOT be emitted more than once, in particular
- * if this method is called multiple times.
- *
- * After calling this method, the stream MUST switch into a non-readable
- * mode, see also `isReadable()`.
- * This means that no further `data` or `end` events SHOULD be emitted.
- *
- * ```php
- * $stream->close();
- * assert($stream->isReadable() === false);
- *
- * $stream->on('data', assertNeverCalled());
- * $stream->on('end', assertNeverCalled());
- * ```
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the writable side of the stream also implements a `close()` method.
- * In other words, after calling this method, the stream MUST switch into
- * non-writable AND non-readable mode, see also `isWritable()`.
- * Note that this method should not be confused with the `end()` method.
- *
- * @return void
- * @see WritableStreamInterface::close()
- */
- public function close();
-}
diff --git a/assets/php/vendor/react/stream/src/ThroughStream.php b/assets/php/vendor/react/stream/src/ThroughStream.php
deleted file mode 100755
index da2fbb0..0000000
--- a/assets/php/vendor/react/stream/src/ThroughStream.php
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitter;
-use InvalidArgumentException;
-
-/**
- * The `ThroughStream` implements the
- * [`DuplexStreamInterface`](#duplexstreaminterface) and will simply pass any data
- * you write to it through to its readable end.
- *
- * ```php
- * $through = new ThroughStream();
- * $through->on('data', $this->expectCallableOnceWith('hello'));
- *
- * $through->write('hello');
- * ```
- *
- * Similarly, the [`end()` method](#end) will end the stream and emit an
- * [`end` event](#end-event) and then [`close()`](#close-1) the stream.
- * The [`close()` method](#close-1) will close the stream and emit a
- * [`close` event](#close-event).
- * Accordingly, this is can also be used in a [`pipe()`](#pipe) context like this:
- *
- * ```php
- * $through = new ThroughStream();
- * $source->pipe($through)->pipe($dest);
- * ```
- *
- * Optionally, its constructor accepts any callable function which will then be
- * used to *filter* any data written to it. This function receives a single data
- * argument as passed to the writable side and must return the data as it will be
- * passed to its readable end:
- *
- * ```php
- * $through = new ThroughStream('strtoupper');
- * $source->pipe($through)->pipe($dest);
- * ```
- *
- * Note that this class makes no assumptions about any data types. This can be
- * used to convert data, for example for transforming any structured data into
- * a newline-delimited JSON (NDJSON) stream like this:
- *
- * ```php
- * $through = new ThroughStream(function ($data) {
- * return json_encode($data) . PHP_EOL;
- * });
- * $through->on('data', $this->expectCallableOnceWith("[2, true]\n"));
- *
- * $through->write(array(2, true));
- * ```
- *
- * The callback function is allowed to throw an `Exception`. In this case,
- * the stream will emit an `error` event and then [`close()`](#close-1) the stream.
- *
- * ```php
- * $through = new ThroughStream(function ($data) {
- * if (!is_string($data)) {
- * throw new \UnexpectedValueException('Only strings allowed');
- * }
- * return $data;
- * });
- * $through->on('error', $this->expectCallableOnce()));
- * $through->on('close', $this->expectCallableOnce()));
- * $through->on('data', $this->expectCallableNever()));
- *
- * $through->write(2);
- * ```
- *
- * @see WritableStreamInterface::write()
- * @see WritableStreamInterface::end()
- * @see DuplexStreamInterface::close()
- * @see WritableStreamInterface::pipe()
- */
-final class ThroughStream extends EventEmitter implements DuplexStreamInterface
-{
- private $readable = true;
- private $writable = true;
- private $closed = false;
- private $paused = false;
- private $drain = false;
- private $callback;
-
- public function __construct($callback = null)
- {
- if ($callback !== null && !is_callable($callback)) {
- throw new InvalidArgumentException('Invalid transformation callback given');
- }
-
- $this->callback = $callback;
- }
-
- public function pause()
- {
- $this->paused = true;
- }
-
- public function resume()
- {
- if ($this->drain) {
- $this->drain = false;
- $this->emit('drain');
- }
- $this->paused = false;
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- return Util::pipe($this, $dest, $options);
- }
-
- public function isReadable()
- {
- return $this->readable;
- }
-
- public function isWritable()
- {
- return $this->writable;
- }
-
- public function write($data)
- {
- if (!$this->writable) {
- return false;
- }
-
- if ($this->callback !== null) {
- try {
- $data = call_user_func($this->callback, $data);
- } catch (\Exception $e) {
- $this->emit('error', array($e));
- $this->close();
-
- return false;
- }
- }
-
- $this->emit('data', array($data));
-
- if ($this->paused) {
- $this->drain = true;
- return false;
- }
-
- return true;
- }
-
- public function end($data = null)
- {
- if (!$this->writable) {
- return;
- }
-
- if (null !== $data) {
- $this->write($data);
-
- // return if write() already caused the stream to close
- if (!$this->writable) {
- return;
- }
- }
-
- $this->readable = false;
- $this->writable = false;
- $this->paused = true;
- $this->drain = false;
-
- $this->emit('end');
- $this->close();
- }
-
- public function close()
- {
- if ($this->closed) {
- return;
- }
-
- $this->readable = false;
- $this->writable = false;
- $this->closed = true;
- $this->paused = true;
- $this->drain = false;
- $this->callback = null;
-
- $this->emit('close');
- $this->removeAllListeners();
- }
-}
diff --git a/assets/php/vendor/react/stream/src/Util.php b/assets/php/vendor/react/stream/src/Util.php
deleted file mode 100755
index 14ddcfc..0000000
--- a/assets/php/vendor/react/stream/src/Util.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-final class Util
-{
- /**
- * Pipes all the data from the given $source into the $dest
- *
- * @param ReadableStreamInterface $source
- * @param WritableStreamInterface $dest
- * @param array $options
- * @return WritableStreamInterface $dest stream as-is
- * @see ReadableStreamInterface::pipe() for more details
- */
- public static function pipe(ReadableStreamInterface $source, WritableStreamInterface $dest, array $options = array())
- {
- // source not readable => NO-OP
- if (!$source->isReadable()) {
- return $dest;
- }
-
- // destination not writable => just pause() source
- if (!$dest->isWritable()) {
- $source->pause();
-
- return $dest;
- }
-
- $dest->emit('pipe', array($source));
-
- // forward all source data events as $dest->write()
- $source->on('data', $dataer = function ($data) use ($source, $dest) {
- $feedMore = $dest->write($data);
-
- if (false === $feedMore) {
- $source->pause();
- }
- });
- $dest->on('close', function () use ($source, $dataer) {
- $source->removeListener('data', $dataer);
- $source->pause();
- });
-
- // forward destination drain as $source->resume()
- $dest->on('drain', $drainer = function () use ($source) {
- $source->resume();
- });
- $source->on('close', function () use ($dest, $drainer) {
- $dest->removeListener('drain', $drainer);
- });
-
- // forward end event from source as $dest->end()
- $end = isset($options['end']) ? $options['end'] : true;
- if ($end) {
- $source->on('end', $ender = function () use ($dest) {
- $dest->end();
- });
- $dest->on('close', function () use ($source, $ender) {
- $source->removeListener('end', $ender);
- });
- }
-
- return $dest;
- }
-
- public static function forwardEvents($source, $target, array $events)
- {
- foreach ($events as $event) {
- $source->on($event, function () use ($event, $target) {
- $target->emit($event, func_get_args());
- });
- }
- }
-}
diff --git a/assets/php/vendor/react/stream/src/WritableResourceStream.php b/assets/php/vendor/react/stream/src/WritableResourceStream.php
deleted file mode 100755
index 7e04205..0000000
--- a/assets/php/vendor/react/stream/src/WritableResourceStream.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitter;
-use React\EventLoop\LoopInterface;
-
-final class WritableResourceStream extends EventEmitter implements WritableStreamInterface
-{
- private $stream;
- private $loop;
- private $softLimit;
- private $writeChunkSize;
-
- private $listening = false;
- private $writable = true;
- private $closed = false;
- private $data = '';
-
- public function __construct($stream, LoopInterface $loop, $writeBufferSoftLimit = null, $writeChunkSize = null)
- {
- if (!is_resource($stream) || get_resource_type($stream) !== "stream") {
- throw new \InvalidArgumentException('First parameter must be a valid stream resource');
- }
-
- // ensure resource is opened for writing (fopen mode must contain either of "waxc+")
- $meta = stream_get_meta_data($stream);
- if (isset($meta['mode']) && $meta['mode'] !== '' && strtr($meta['mode'], 'waxc+', '.....') === $meta['mode']) {
- throw new \InvalidArgumentException('Given stream resource is not opened in write mode');
- }
-
- // this class relies on non-blocking I/O in order to not interrupt the event loop
- // e.g. pipes on Windows do not support this: https://bugs.php.net/bug.php?id=47918
- if (stream_set_blocking($stream, 0) !== true) {
- throw new \RuntimeException('Unable to set stream resource to non-blocking mode');
- }
-
- $this->stream = $stream;
- $this->loop = $loop;
- $this->softLimit = ($writeBufferSoftLimit === null) ? 65536 : (int)$writeBufferSoftLimit;
- $this->writeChunkSize = ($writeChunkSize === null) ? -1 : (int)$writeChunkSize;
- }
-
- public function isWritable()
- {
- return $this->writable;
- }
-
- public function write($data)
- {
- if (!$this->writable) {
- return false;
- }
-
- $this->data .= $data;
-
- if (!$this->listening && $this->data !== '') {
- $this->listening = true;
-
- $this->loop->addWriteStream($this->stream, array($this, 'handleWrite'));
- }
-
- return !isset($this->data[$this->softLimit - 1]);
- }
-
- public function end($data = null)
- {
- if (null !== $data) {
- $this->write($data);
- }
-
- $this->writable = false;
-
- // close immediately if buffer is already empty
- // otherwise wait for buffer to flush first
- if ($this->data === '') {
- $this->close();
- }
- }
-
- public function close()
- {
- if ($this->closed) {
- return;
- }
-
- if ($this->listening) {
- $this->listening = false;
- $this->loop->removeWriteStream($this->stream);
- }
-
- $this->closed = true;
- $this->writable = false;
- $this->data = '';
-
- $this->emit('close');
- $this->removeAllListeners();
-
- if (is_resource($this->stream)) {
- fclose($this->stream);
- }
- }
-
- /** @internal */
- public function handleWrite()
- {
- $error = null;
- set_error_handler(function ($errno, $errstr, $errfile, $errline) use (&$error) {
- $error = array(
- 'message' => $errstr,
- 'number' => $errno,
- 'file' => $errfile,
- 'line' => $errline
- );
- });
-
- if ($this->writeChunkSize === -1) {
- $sent = fwrite($this->stream, $this->data);
- } else {
- $sent = fwrite($this->stream, $this->data, $this->writeChunkSize);
- }
-
- restore_error_handler();
-
- // Only report errors if *nothing* could be sent.
- // Any hard (permanent) error will fail to send any data at all.
- // Sending excessive amounts of data will only flush *some* data and then
- // report a temporary error (EAGAIN) which we do not raise here in order
- // to keep the stream open for further tries to write.
- // Should this turn out to be a permanent error later, it will eventually
- // send *nothing* and we can detect this.
- if ($sent === 0 || $sent === false) {
- if ($error !== null) {
- $error = new \ErrorException(
- $error['message'],
- 0,
- $error['number'],
- $error['file'],
- $error['line']
- );
- }
-
- $this->emit('error', array(new \RuntimeException('Unable to write to stream: ' . ($error !== null ? $error->getMessage() : 'Unknown error'), 0, $error)));
- $this->close();
-
- return;
- }
-
- $exceeded = isset($this->data[$this->softLimit - 1]);
- $this->data = (string) substr($this->data, $sent);
-
- // buffer has been above limit and is now below limit
- if ($exceeded && !isset($this->data[$this->softLimit - 1])) {
- $this->emit('drain');
- }
-
- // buffer is now completely empty => stop trying to write
- if ($this->data === '') {
- // stop waiting for resource to be writable
- if ($this->listening) {
- $this->loop->removeWriteStream($this->stream);
- $this->listening = false;
- }
-
- // buffer is end()ing and now completely empty => close buffer
- if (!$this->writable) {
- $this->close();
- }
- }
- }
-}
diff --git a/assets/php/vendor/react/stream/src/WritableStreamInterface.php b/assets/php/vendor/react/stream/src/WritableStreamInterface.php
deleted file mode 100755
index 3bc932e..0000000
--- a/assets/php/vendor/react/stream/src/WritableStreamInterface.php
+++ /dev/null
@@ -1,347 +0,0 @@
-<?php
-
-namespace React\Stream;
-
-use Evenement\EventEmitterInterface;
-
-/**
- * The `WritableStreamInterface` is responsible for providing an interface for
- * write-only streams and the writable side of duplex streams.
- *
- * Besides defining a few methods, this interface also implements the
- * `EventEmitterInterface` which allows you to react to certain events:
- *
- * drain event:
- * The `drain` event will be emitted whenever the write buffer became full
- * previously and is now ready to accept more data.
- *
- * ```php
- * $stream->on('drain', function () use ($stream) {
- * echo 'Stream is now ready to accept more data';
- * });
- * ```
- *
- * This event SHOULD be emitted once every time the buffer became full
- * previously and is now ready to accept more data.
- * In other words, this event MAY be emitted any number of times, which may
- * be zero times if the buffer never became full in the first place.
- * This event SHOULD NOT be emitted if the buffer has not become full
- * previously.
- *
- * This event is mostly used internally, see also `write()` for more details.
- *
- * pipe event:
- * The `pipe` event will be emitted whenever a readable stream is `pipe()`d
- * into this stream.
- * The event receives a single `ReadableStreamInterface` argument for the
- * source stream.
- *
- * ```php
- * $stream->on('pipe', function (ReadableStreamInterface $source) use ($stream) {
- * echo 'Now receiving piped data';
- *
- * // explicitly close target if source emits an error
- * $source->on('error', function () use ($stream) {
- * $stream->close();
- * });
- * });
- *
- * $source->pipe($stream);
- * ```
- *
- * This event MUST be emitted once for each readable stream that is
- * successfully piped into this destination stream.
- * In other words, this event MAY be emitted any number of times, which may
- * be zero times if no stream is ever piped into this stream.
- * This event MUST NOT be emitted if either the source is not readable
- * (closed already) or this destination is not writable (closed already).
- *
- * This event is mostly used internally, see also `pipe()` for more details.
- *
- * error event:
- * The `error` event will be emitted once a fatal error occurs, usually while
- * trying to write to this stream.
- * The event receives a single `Exception` argument for the error instance.
- *
- * ```php
- * $stream->on('error', function (Exception $e) {
- * echo 'Error: ' . $e->getMessage() . PHP_EOL;
- * });
- * ```
- *
- * This event SHOULD be emitted once the stream detects a fatal error, such
- * as a fatal transmission error.
- * It SHOULD NOT be emitted after a previous `error` or `close` event.
- * It MUST NOT be emitted if this is not a fatal error condition, such as
- * a temporary network issue that did not cause any data to be lost.
- *
- * After the stream errors, it MUST close the stream and SHOULD thus be
- * followed by a `close` event and then switch to non-writable mode, see
- * also `close()` and `isWritable()`.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * only deal with data transmission and may choose
- * to only emit this for a fatal transmission error once and will then
- * close (terminate) the stream in response.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the readable side of the stream also implements an `error` event.
- * In other words, an error may occur while either reading or writing the
- * stream which should result in the same error processing.
- *
- * close event:
- * The `close` event will be emitted once the stream closes (terminates).
- *
- * ```php
- * $stream->on('close', function () {
- * echo 'CLOSED';
- * });
- * ```
- *
- * This event SHOULD be emitted once or never at all, depending on whether
- * the stream ever terminates.
- * It SHOULD NOT be emitted after a previous `close` event.
- *
- * After the stream is closed, it MUST switch to non-writable mode,
- * see also `isWritable()`.
- *
- * This event SHOULD be emitted whenever the stream closes, irrespective of
- * whether this happens implicitly due to an unrecoverable error or
- * explicitly when either side closes the stream.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * will likely choose to emit this event after flushing the buffer from
- * the `end()` method, after receiving a *successful* `end` event or after
- * a fatal transmission `error` event.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the readable side of the stream also implements a `close` event.
- * In other words, after receiving this event, the stream MUST switch into
- * non-writable AND non-readable mode, see also `isReadable()`.
- * Note that this event should not be confused with the `end` event.
- *
- * The event callback functions MUST be a valid `callable` that obeys strict
- * parameter definitions and MUST accept event parameters exactly as documented.
- * The event callback functions MUST NOT throw an `Exception`.
- * The return value of the event callback functions will be ignored and has no
- * effect, so for performance reasons you're recommended to not return any
- * excessive data structures.
- *
- * Every implementation of this interface MUST follow these event semantics in
- * order to be considered a well-behaving stream.
- *
- * > Note that higher-level implementations of this interface may choose to
- * define additional events with dedicated semantics not defined as part of
- * this low-level stream specification. Conformance with these event semantics
- * is out of scope for this interface, so you may also have to refer to the
- * documentation of such a higher-level implementation.
- *
- * @see EventEmitterInterface
- * @see DuplexStreamInterface
- */
-interface WritableStreamInterface extends EventEmitterInterface
-{
- /**
- * Checks whether this stream is in a writable state (not closed already).
- *
- * This method can be used to check if the stream still accepts writing
- * any data or if it is ended or closed already.
- * Writing any data to a non-writable stream is a NO-OP:
- *
- * ```php
- * assert($stream->isWritable() === false);
- *
- * $stream->write('end'); // NO-OP
- * $stream->end('end'); // NO-OP
- * ```
- *
- * A successfully opened stream always MUST start in writable mode.
- *
- * Once the stream ends or closes, it MUST switch to non-writable mode.
- * This can happen any time, explicitly through `end()` or `close()` or
- * implicitly due to a remote close or an unrecoverable transmission error.
- * Once a stream has switched to non-writable mode, it MUST NOT transition
- * back to writable mode.
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the readable side of the stream also implements an `isReadable()`
- * method. Unless this is a half-open duplex stream, they SHOULD usually
- * have the same return value.
- *
- * @return bool
- */
- public function isWritable();
-
- /**
- * Write some data into the stream.
- *
- * A successful write MUST be confirmed with a boolean `true`, which means
- * that either the data was written (flushed) immediately or is buffered and
- * scheduled for a future write. Note that this interface gives you no
- * control over explicitly flushing the buffered data, as finding the
- * appropriate time for this is beyond the scope of this interface and left
- * up to the implementation of this interface.
- *
- * Many common streams (such as a TCP/IP connection or file-based stream)
- * may choose to buffer all given data and schedule a future flush by using
- * an underlying EventLoop to check when the resource is actually writable.
- *
- * If a stream cannot handle writing (or flushing) the data, it SHOULD emit
- * an `error` event and MAY `close()` the stream if it can not recover from
- * this error.
- *
- * If the internal buffer is full after adding `$data`, then `write()`
- * SHOULD return `false`, indicating that the caller should stop sending
- * data until the buffer drains.
- * The stream SHOULD send a `drain` event once the buffer is ready to accept
- * more data.
- *
- * Similarly, if the the stream is not writable (already in a closed state)
- * it MUST NOT process the given `$data` and SHOULD return `false`,
- * indicating that the caller should stop sending data.
- *
- * The given `$data` argument MAY be of mixed type, but it's usually
- * recommended it SHOULD be a `string` value or MAY use a type that allows
- * representation as a `string` for maximum compatibility.
- *
- * Many common streams (such as a TCP/IP connection or a file-based stream)
- * will only accept the raw (binary) payload data that is transferred over
- * the wire as chunks of `string` values.
- *
- * Due to the stream-based nature of this, the sender may send any number
- * of chunks with varying sizes. There are no guarantees that these chunks
- * will be received with the exact same framing the sender intended to send.
- * In other words, many lower-level protocols (such as TCP/IP) transfer the
- * data in chunks that may be anywhere between single-byte values to several
- * dozens of kilobytes. You may want to apply a higher-level protocol to
- * these low-level data chunks in order to achieve proper message framing.
- *
- * @param mixed|string $data
- * @return bool
- */
- public function write($data);
-
- /**
- * Successfully ends the stream (after optionally sending some final data).
- *
- * This method can be used to successfully end the stream, i.e. close
- * the stream after sending out all data that is currently buffered.
- *
- * ```php
- * $stream->write('hello');
- * $stream->write('world');
- * $stream->end();
- * ```
- *
- * If there's no data currently buffered and nothing to be flushed, then
- * this method MAY `close()` the stream immediately.
- *
- * If there's still data in the buffer that needs to be flushed first, then
- * this method SHOULD try to write out this data and only then `close()`
- * the stream.
- * Once the stream is closed, it SHOULD emit a `close` event.
- *
- * Note that this interface gives you no control over explicitly flushing
- * the buffered data, as finding the appropriate time for this is beyond the
- * scope of this interface and left up to the implementation of this
- * interface.
- *
- * Many common streams (such as a TCP/IP connection or file-based stream)
- * may choose to buffer all given data and schedule a future flush by using
- * an underlying EventLoop to check when the resource is actually writable.
- *
- * You can optionally pass some final data that is written to the stream
- * before ending the stream. If a non-`null` value is given as `$data`, then
- * this method will behave just like calling `write($data)` before ending
- * with no data.
- *
- * ```php
- * // shorter version
- * $stream->end('bye');
- *
- * // same as longer version
- * $stream->write('bye');
- * $stream->end();
- * ```
- *
- * After calling this method, the stream MUST switch into a non-writable
- * mode, see also `isWritable()`.
- * This means that no further writes are possible, so any additional
- * `write()` or `end()` calls have no effect.
- *
- * ```php
- * $stream->end();
- * assert($stream->isWritable() === false);
- *
- * $stream->write('nope'); // NO-OP
- * $stream->end(); // NO-OP
- * ```
- *
- * If this stream is a `DuplexStreamInterface`, calling this method SHOULD
- * also end its readable side, unless the stream supports half-open mode.
- * In other words, after calling this method, these streams SHOULD switch
- * into non-writable AND non-readable mode, see also `isReadable()`.
- * This implies that in this case, the stream SHOULD NOT emit any `data`
- * or `end` events anymore.
- * Streams MAY choose to use the `pause()` method logic for this, but
- * special care may have to be taken to ensure a following call to the
- * `resume()` method SHOULD NOT continue emitting readable events.
- *
- * Note that this method should not be confused with the `close()` method.
- *
- * @param mixed|string|null $data
- * @return void
- */
- public function end($data = null);
-
- /**
- * Closes the stream (forcefully).
- *
- * This method can be used to forcefully close the stream, i.e. close
- * the stream without waiting for any buffered data to be flushed.
- * If there's still data in the buffer, this data SHOULD be discarded.
- *
- * ```php
- * $stream->close();
- * ```
- *
- * Once the stream is closed, it SHOULD emit a `close` event.
- * Note that this event SHOULD NOT be emitted more than once, in particular
- * if this method is called multiple times.
- *
- * After calling this method, the stream MUST switch into a non-writable
- * mode, see also `isWritable()`.
- * This means that no further writes are possible, so any additional
- * `write()` or `end()` calls have no effect.
- *
- * ```php
- * $stream->close();
- * assert($stream->isWritable() === false);
- *
- * $stream->write('nope'); // NO-OP
- * $stream->end(); // NO-OP
- * ```
- *
- * Note that this method should not be confused with the `end()` method.
- * Unlike the `end()` method, this method does not take care of any existing
- * buffers and simply discards any buffer contents.
- * Likewise, this method may also be called after calling `end()` on a
- * stream in order to stop waiting for the stream to flush its final data.
- *
- * ```php
- * $stream->end();
- * $loop->addTimer(1.0, function () use ($stream) {
- * $stream->close();
- * });
- * ```
- *
- * If this stream is a `DuplexStreamInterface`, you should also notice
- * how the readable side of the stream also implements a `close()` method.
- * In other words, after calling this method, the stream MUST switch into
- * non-writable AND non-readable mode, see also `isReadable()`.
- *
- * @return void
- * @see ReadableStreamInterface::close()
- */
- public function close();
-}
diff --git a/assets/php/vendor/react/stream/tests/CallableStub.php b/assets/php/vendor/react/stream/tests/CallableStub.php
deleted file mode 100755
index 31cc834..0000000
--- a/assets/php/vendor/react/stream/tests/CallableStub.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-class CallableStub
-{
- public function __invoke()
- {
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/CompositeStreamTest.php b/assets/php/vendor/react/stream/tests/CompositeStreamTest.php
deleted file mode 100755
index df89c3e..0000000
--- a/assets/php/vendor/react/stream/tests/CompositeStreamTest.php
+++ /dev/null
@@ -1,267 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\CompositeStream;
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\CompositeStream
- */
-class CompositeStreamTest extends TestCase
-{
- /** @test */
- public function itShouldCloseReadableIfNotWritable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('close');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(false);
-
- $composite = new CompositeStream($readable, $writable);
-
- $composite->on('close', $this->expectCallableNever());
- $composite->close();
- }
-
- /** @test */
- public function itShouldCloseWritableIfNotReadable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(false);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('close');
-
- $composite = new CompositeStream($readable, $writable);
-
- $composite->on('close', $this->expectCallableNever());
- $composite->close();
- }
-
- /** @test */
- public function itShouldForwardWritableCallsToWritableStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('write')
- ->with('foo');
- $writable
- ->expects($this->exactly(2))
- ->method('isWritable')
- ->willReturn(true);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->write('foo');
- $composite->isWritable();
- }
-
- /** @test */
- public function itShouldForwardReadableCallsToReadableStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->exactly(2))
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
- $readable
- ->expects($this->once())
- ->method('resume');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->isReadable();
- $composite->pause();
- $composite->resume();
- }
-
- /** @test */
- public function itShouldNotForwardResumeIfStreamIsNotWritable()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->never())
- ->method('resume');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->exactly(2))
- ->method('isWritable')
- ->willReturnOnConsecutiveCalls(true, false);
-
- $composite = new CompositeStream($readable, $writable);
- $composite->resume();
- }
-
- /** @test */
- public function endShouldDelegateToWritableWithData()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('end')
- ->with('foo');
-
- $composite = new CompositeStream($readable, $writable);
- $composite->end('foo');
- }
-
- /** @test */
- public function closeShouldCloseBothStreams()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('close');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->once())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('close');
-
- $composite = new CompositeStream($readable, $writable);
- $composite->close();
- }
-
- /** @test */
- public function itShouldForwardCloseOnlyOnce()
- {
- $readable = new ThroughStream();
- $writable = new ThroughStream();
-
- $composite = new CompositeStream($readable, $writable);
- $composite->on('close', $this->expectCallableOnce());
-
- $readable->close();
- $writable->close();
- }
-
- /** @test */
- public function itShouldForwardCloseAndRemoveAllListeners()
- {
- $in = new ThroughStream();
-
- $composite = new CompositeStream($in, $in);
- $composite->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($composite->isReadable());
- $this->assertTrue($composite->isWritable());
- $this->assertCount(1, $composite->listeners('close'));
-
- $composite->close();
-
- $this->assertFalse($composite->isReadable());
- $this->assertFalse($composite->isWritable());
- $this->assertCount(0, $composite->listeners('close'));
- }
-
- /** @test */
- public function itShouldReceiveForwardedEvents()
- {
- $readable = new ThroughStream();
- $writable = new ThroughStream();
-
- $composite = new CompositeStream($readable, $writable);
- $composite->on('data', $this->expectCallableOnce());
- $composite->on('drain', $this->expectCallableOnce());
-
- $readable->emit('data', array('foo'));
- $writable->emit('drain');
- }
-
- /** @test */
- public function itShouldHandlePipingCorrectly()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->once())
- ->method('isReadable')
- ->willReturn(true);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(True);
- $writable
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $composite = new CompositeStream($readable, $writable);
-
- $input = new ThroughStream();
- $input->pipe($composite);
- $input->emit('data', array('foo'));
- }
-
- /** @test */
- public function itShouldForwardPipeCallsToReadableStream()
- {
- $readable = new ThroughStream();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(True);
-
- $composite = new CompositeStream($readable, $writable);
-
- $output = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $output->expects($this->any())->method('isWritable')->willReturn(True);
- $output
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $composite->pipe($output);
- $readable->emit('data', array('foo'));
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php b/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php
deleted file mode 100755
index fb5f02a..0000000
--- a/assets/php/vendor/react/stream/tests/DuplexResourceStreamIntegrationTest.php
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\DuplexResourceStream;
-use React\Stream\ReadableResourceStream;
-use React\EventLoop\ExtEventLoop;
-use React\EventLoop\ExtLibeventLoop;
-use React\EventLoop\ExtLibevLoop;
-use React\EventLoop\LoopInterface;
-use React\EventLoop\LibEventLoop;
-use React\EventLoop\LibEvLoop;
-use React\EventLoop\StreamSelectLoop;
-
-class DuplexResourceStreamIntegrationTest extends TestCase
-{
- public function loopProvider()
- {
- return array(
- array(
- function() {
- return true;
- },
- function () {
- return new StreamSelectLoop();
- }
- ),
- array(
- function () {
- return function_exists('event_base_new');
- },
- function () {
- return class_exists('React\EventLoop\ExtLibeventLoop') ? new ExtLibeventLoop() : new LibEventLoop();
- }
- ),
- array(
- function () {
- return class_exists('libev\EventLoop');
- },
- function () {
- return class_exists('React\EventLoop\ExtLibevLoop') ? new ExtLibevLoop() : new LibEvLoop();
- }
- ),
- array(
- function () {
- return class_exists('EventBase') && class_exists('React\EventLoop\ExtEventLoop');
- },
- function () {
- return new ExtEventLoop();
- }
- )
- );
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testBufferReadsLargeChunks($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $bufferSize = 4096;
- $streamA = new DuplexResourceStream($sockA, $loop, $bufferSize);
- $streamB = new DuplexResourceStream($sockB, $loop, $bufferSize);
-
- $testString = str_repeat("*", $bufferSize + 1);
-
- $buffer = "";
- $streamB->on('data', function ($data) use (&$buffer) {
- $buffer .= $data;
- });
-
- $streamA->write($testString);
-
- $this->loopTick($loop);
- $this->loopTick($loop);
- $this->loopTick($loop);
-
- $streamA->close();
- $streamB->close();
-
- $this->assertEquals($testString, $buffer);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testWriteLargeChunk($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // limit seems to be 192 KiB
- $size = 256 * 1024;
-
- // sending side sends and expects clean close with no errors
- $streamA->end(str_repeat('*', $size));
- $streamA->on('close', $this->expectCallableOnce());
- $streamA->on('error', $this->expectCallableNever());
-
- // receiving side counts bytes and expects clean close with no errors
- $received = 0;
- $streamB->on('data', function ($chunk) use (&$received) {
- $received += strlen($chunk);
- });
- $streamB->on('close', $this->expectCallableOnce());
- $streamB->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
-
- $this->assertEquals($size, $received);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotEmitDataIfNothingHasBeenWritten($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // end streamA without writing any data
- $streamA->end();
-
- // streamB should not emit any data
- $streamB->on('data', $this->expectCallableNever());
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfRemoteSideFromPairHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- list($sockA, $sockB) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
-
- $streamA = new DuplexResourceStream($sockA, $loop);
- $streamB = new DuplexResourceStream($sockB, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfServerSideHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $server = stream_socket_server('tcp://127.0.0.1:0');
-
- $client = stream_socket_client(stream_socket_get_name($server, false));
- $peer = stream_socket_accept($server);
-
- $streamA = new DuplexResourceStream($client, $loop);
- $streamB = new DuplexResourceStream($peer, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testDoesNotWriteDataIfClientSideHasBeenClosed($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $server = stream_socket_server('tcp://127.0.0.1:0');
-
- $client = stream_socket_client(stream_socket_get_name($server, false));
- $peer = stream_socket_accept($server);
-
- $streamA = new DuplexResourceStream($peer, $loop);
- $streamB = new DuplexResourceStream($client, $loop);
-
- // end streamA without writing any data
- $streamA->pause();
- $streamA->write('hello');
- $streamA->on('close', $this->expectCallableOnce());
-
- $streamB->on('data', $this->expectCallableNever());
- $streamB->close();
-
- $loop->run();
-
- $streamA->close();
- $streamB->close();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsSingleChunkFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('echo test', 'r'), $loop);
- $stream->on('data', $this->expectCallableOnceWith("test\n"));
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsMultipleChunksFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('echo a;sleep 0.1;echo b;sleep 0.1;echo c', 'r'), $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $this->assertEquals("a\n" . "b\n" . "c\n", $buffer);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsLongChunksFromProcessPipe($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('dd if=/dev/zero bs=12345 count=1234 2>&-', 'r'), $loop);
-
- $bytes = 0;
- $stream->on('data', function ($chunk) use (&$bytes) {
- $bytes += strlen($chunk);
- });
-
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
-
- $this->assertEquals(12345 * 1234, $bytes);
- }
-
- /**
- * @dataProvider loopProvider
- */
- public function testReadsNothingFromProcessPipeWithNoOutput($condition, $loopFactory)
- {
- if (true !== $condition()) {
- return $this->markTestSkipped('Loop implementation not available');
- }
-
- $loop = $loopFactory();
-
- $stream = new ReadableResourceStream(popen('true', 'r'), $loop);
- $stream->on('data', $this->expectCallableNever());
- $stream->on('end', $this->expectCallableOnce());
- $stream->on('error', $this->expectCallableNever());
-
- $loop->run();
- }
-
- private function loopTick(LoopInterface $loop)
- {
- $loop->addTimer(0, function () use ($loop) {
- $loop->stop();
- });
- $loop->run();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php b/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php
deleted file mode 100755
index 3212ae8..0000000
--- a/assets/php/vendor/react/stream/tests/DuplexResourceStreamTest.php
+++ /dev/null
@@ -1,495 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\DuplexResourceStream;
-use Clue\StreamFilter as Filter;
-use React\Stream\WritableResourceStream;
-
-class DuplexResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'r+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new DuplexResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnInvalidStream()
- {
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream('breakme', $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStream()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not report fopen mode for STDOUT');
- }
-
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream(STDOUT, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'weANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @expectedException RunTimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new DuplexResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorAcceptsBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
- }
-
- public function testCloseShouldEmitCloseEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
- $conn->on('end', $this->expectCallableNever());
-
- $conn->close();
-
- $this->assertFalse($conn->isReadable());
- }
-
- public function testEndShouldEndBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $buffer->expects($this->once())->method('end')->with('foo');
-
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
- $conn->end('foo');
- }
-
-
- public function testEndAfterCloseIsNoOp()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $buffer->expects($this->never())->method('end');
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- $conn->end();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobar\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkMatchingBufferSize()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop, 4321);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(4321, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::__construct
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkUntilStreamEndsWhenBufferSizeIsInfinite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop, -1);
-
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(100000, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testEmptyStreamShouldNotEmitData()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::write
- */
- public function testWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->write("foo\n");
-
- rewind($stream);
- $this->assertSame("foo\n", fgets($stream));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::end
- * @covers React\Stream\DuplexResourceStream::isReadable
- * @covers React\Stream\DuplexResourceStream::isWritable
- */
- public function testEnd()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->end();
-
- $this->assertFalse(is_resource($stream));
- $this->assertFalse($conn->isReadable());
- $this->assertFalse($conn->isWritable());
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::end
- */
- public function testEndRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->end('bye');
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::pause
- */
- public function testPauseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->pause();
- $conn->pause();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::pause
- */
- public function testResumeDoesAddStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->resume();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testCloseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testCloseAfterPauseRemovesReadStreamFromLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->pause();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::close
- */
- public function testResumeAfterCloseDoesAddReadStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->close();
- $conn->resume();
- }
-
- public function testEndedStreamsShouldNotWrite()
- {
- $file = tempnam(sys_get_temp_dir(), 'reactphptest_');
- $stream = fopen($file, 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->write("foo\n");
- $conn->end();
-
- $res = $conn->write("bar\n");
- $stream = fopen($file, 'r');
-
- $this->assertSame("foo\n", fgets($stream));
- $this->assertFalse($res);
-
- unlink($file);
- }
-
- public function testPipeShouldReturnDestination()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $dest = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $this->assertSame($dest, $conn->pipe($dest));
- }
-
- public function testBufferEventsShouldBubbleUp()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $conn = new DuplexResourceStream($stream, $loop, null, $buffer);
-
- $conn->on('drain', $this->expectCallableOnce());
- $conn->on('error', $this->expectCallableOnce());
-
- $buffer->emit('drain');
- $buffer->emit('error', array(new \RuntimeException('Whoops')));
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testClosingStreamInDataEventShouldNotTriggerError()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('error', $this->expectCallableNever());
- $conn->on('data', function ($data) use ($conn) {
- $conn->close();
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataFiltered()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which removes every 'a' when reading
- Filter\append($stream, function ($chunk) {
- return str_replace('a', '', $chunk);
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobr\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\DuplexResourceStream::handleData
- */
- public function testDataErrorShouldEmitErrorAndClose()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which returns an error when encountering an 'a' when reading
- Filter\append($stream, function ($chunk) {
- if (strpos($chunk, 'a') !== false) {
- throw new \Exception('Invalid');
- }
- return $chunk;
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $conn = new DuplexResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
- $conn->on('error', $this->expectCallableOnce());
- $conn->on('close', $this->expectCallableOnce());
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- private function createWriteableLoopMock()
- {
- $loop = $this->createLoopMock();
- $loop
- ->expects($this->once())
- ->method('addWriteStream')
- ->will($this->returnCallback(function ($stream, $listener) {
- call_user_func($listener, $stream);
- }));
-
- return $loop;
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php b/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php
deleted file mode 100755
index 39c0487..0000000
--- a/assets/php/vendor/react/stream/tests/EnforceBlockingWrapper.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-/**
- * Used to test dummy stream resources that do not support setting non-blocking mode
- *
- * @link http://php.net/manual/de/class.streamwrapper.php
- */
-class EnforceBlockingWrapper
-{
- public function stream_open($path, $mode, $options, &$opened_path)
- {
- return true;
- }
-
- public function stream_cast($cast_as)
- {
- return false;
- }
-
- public function stream_eof()
- {
- return false;
- }
-
- public function stream_set_option($option, $arg1, $arg2)
- {
- if ($option === STREAM_OPTION_BLOCKING) {
- return false;
- }
-
- return true;
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php b/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php
deleted file mode 100755
index 4d31e8e..0000000
--- a/assets/php/vendor/react/stream/tests/FunctionalInternetTest.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\EventLoop\Factory;
-use React\EventLoop\LoopInterface;
-use React\Stream\DuplexResourceStream;
-use React\Stream\WritableResourceStream;
-
-/**
- * @group internet
- */
-class FunctionalInternetTest extends TestCase
-{
- public function testUploadKilobytePlain()
- {
- $size = 1000;
- $stream = stream_socket_client('tcp://httpbin.org:80');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadBiggerBlockPlain()
- {
- $size = 50 * 1000;
- $stream = stream_socket_client('tcp://httpbin.org:80');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadKilobyteSecure()
- {
- $size = 1000;
- $stream = stream_socket_client('tls://httpbin.org:443');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream($stream, $loop);
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- public function testUploadBiggerBlockSecureRequiresSmallerChunkSize()
- {
- $size = 50 * 1000;
- $stream = stream_socket_client('tls://httpbin.org:443');
-
- $loop = Factory::create();
- $stream = new DuplexResourceStream(
- $stream,
- $loop,
- null,
- new WritableResourceStream($stream, $loop, null, 8192)
- );
-
- $buffer = '';
- $stream->on('data', function ($chunk) use (&$buffer) {
- $buffer .= $chunk;
- });
-
- $stream->on('error', $this->expectCallableNever());
-
- $stream->write("POST /post HTTP/1.0\r\nHost: httpbin.org\r\nContent-Length: $size\r\n\r\n" . str_repeat('.', $size));
-
- $this->awaitStreamClose($stream, $loop);
-
- $this->assertNotEquals('', $buffer);
- }
-
- private function awaitStreamClose(DuplexResourceStream $stream, LoopInterface $loop, $timeout = 10.0)
- {
- $stream->on('close', function () use ($loop) {
- $loop->stop();
- });
-
- $that = $this;
- $loop->addTimer($timeout, function () use ($loop, $that) {
- $loop->stop();
- $that->fail('Timed out while waiting for stream to close');
- });
-
- $loop->run();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php b/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php
deleted file mode 100755
index 20da96f..0000000
--- a/assets/php/vendor/react/stream/tests/ReadableResourceStreamTest.php
+++ /dev/null
@@ -1,372 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\ReadableResourceStream;
-use Clue\StreamFilter as Filter;
-
-class ReadableResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'r+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new ReadableResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnInvalidStream()
- {
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream(false, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStream()
- {
- if (defined('HHVM_VERSION')) {
- $this->markTestSkipped('HHVM does not report fopen mode for STDOUT');
- }
-
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream(STDOUT, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnWriteOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'weANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new ReadableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @expectedException RuntimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new ReadableResourceStream($stream, $loop);
- }
-
-
- public function testCloseShouldEmitCloseEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
-
- $conn->close();
-
- $this->assertFalse($conn->isReadable());
- }
-
- public function testCloseTwiceShouldEmitCloseEventOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('close', $this->expectCallableOnce());
-
- $conn->close();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEvent()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobar\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkMatchingBufferSize()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop, 4321);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(4321, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::__construct
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataEventDoesEmitOneChunkUntilStreamEndsWhenBufferSizeIsInfinite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop, -1);
-
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, str_repeat("a", 100000));
- rewind($stream);
-
- $conn->handleData($stream);
-
- $this->assertTrue($conn->isReadable());
- $this->assertEquals(100000, strlen($capturedData));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testEmptyStreamShouldNotEmitData()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
-
- $conn->handleData($stream);
- }
-
- public function testPipeShouldReturnDestination()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $dest = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $this->assertSame($dest, $conn->pipe($dest));
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testClosingStreamInDataEventShouldNotTriggerError()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('error', $this->expectCallableNever());
- $conn->on('data', function ($data) use ($conn) {
- $conn->close();
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::pause
- */
- public function testPauseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->pause();
- $conn->pause();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::pause
- */
- public function testResumeDoesAddStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->resume();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testCloseRemovesReadStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testCloseAfterPauseRemovesReadStreamFromLoopOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
- $loop->expects($this->once())->method('removeReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->pause();
- $conn->close();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::close
- */
- public function testResumeAfterCloseDoesAddReadStreamToLoopOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addReadStream')->with($stream);
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->close();
- $conn->resume();
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataFiltered()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which removes every 'a' when reading
- Filter\append($stream, function ($chunk) {
- return str_replace('a', '', $chunk);
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $capturedData = null;
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', function ($data) use (&$capturedData) {
- $capturedData = $data;
- });
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- $this->assertSame("foobr\n", $capturedData);
- }
-
- /**
- * @covers React\Stream\ReadableResourceStream::handleData
- */
- public function testDataErrorShouldEmitErrorAndClose()
- {
- $stream = fopen('php://temp', 'r+');
-
- // add a filter which returns an error when encountering an 'a' when reading
- Filter\append($stream, function ($chunk) {
- if (strpos($chunk, 'a') !== false) {
- throw new \Exception('Invalid');
- }
- return $chunk;
- }, STREAM_FILTER_READ);
-
- $loop = $this->createLoopMock();
-
- $conn = new ReadableResourceStream($stream, $loop);
- $conn->on('data', $this->expectCallableNever());
- $conn->on('error', $this->expectCallableOnce());
- $conn->on('close', $this->expectCallableOnce());
-
- fwrite($stream, "foobar\n");
- rewind($stream);
-
- $conn->handleData($stream);
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php b/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php
deleted file mode 100755
index 6984f24..0000000
--- a/assets/php/vendor/react/stream/tests/Stub/ReadableStreamStub.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-namespace React\Tests\Stream\Stub;
-
-use Evenement\EventEmitter;
-use React\Stream\ReadableStreamInterface;
-use React\Stream\WritableStreamInterface;
-use React\Stream\Util;
-
-class ReadableStreamStub extends EventEmitter implements ReadableStreamInterface
-{
- public $readable = true;
- public $paused = false;
-
- public function isReadable()
- {
- return true;
- }
-
- // trigger data event
- public function write($data)
- {
- $this->emit('data', array($data));
- }
-
- // trigger error event
- public function error($error)
- {
- $this->emit('error', array($error));
- }
-
- // trigger end event
- public function end()
- {
- $this->emit('end', array());
- }
-
- public function pause()
- {
- $this->paused = true;
- }
-
- public function resume()
- {
- $this->paused = false;
- }
-
- public function close()
- {
- $this->readable = false;
-
- $this->emit('close');
- }
-
- public function pipe(WritableStreamInterface $dest, array $options = array())
- {
- Util::pipe($this, $dest, $options);
-
- return $dest;
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/TestCase.php b/assets/php/vendor/react/stream/tests/TestCase.php
deleted file mode 100755
index c8fc1db..0000000
--- a/assets/php/vendor/react/stream/tests/TestCase.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use PHPUnit\Framework\TestCase as BaseTestCase;
-
-class TestCase extends BaseTestCase
-{
- protected function expectCallableExactly($amount)
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->exactly($amount))
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnce()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->once())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function expectCallableOnceWith($value)
- {
- $callback = $this->createCallableMock();
- $callback
- ->expects($this->once())
- ->method('__invoke')
- ->with($value);
-
- return $callback;
- }
-
- protected function expectCallableNever()
- {
- $mock = $this->createCallableMock();
- $mock
- ->expects($this->never())
- ->method('__invoke');
-
- return $mock;
- }
-
- protected function createCallableMock()
- {
- return $this->getMockBuilder('React\Tests\Stream\CallableStub')->getMock();
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/ThroughStreamTest.php b/assets/php/vendor/react/stream/tests/ThroughStreamTest.php
deleted file mode 100755
index a98badf..0000000
--- a/assets/php/vendor/react/stream/tests/ThroughStreamTest.php
+++ /dev/null
@@ -1,267 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\ThroughStream
- */
-class ThroughStreamTest extends TestCase
-{
- /**
- * @test
- * @expectedException InvalidArgumentException
- */
- public function itShouldRejectInvalidCallback()
- {
- new ThroughStream(123);
- }
-
- /** @test */
- public function itShouldReturnTrueForAnyDataWrittenToIt()
- {
- $through = new ThroughStream();
- $ret = $through->write('foo');
-
- $this->assertTrue($ret);
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToIt()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToItPassedThruFunction()
- {
- $through = new ThroughStream('strtoupper');
- $through->on('data', $this->expectCallableOnceWith('FOO'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitAnyDataWrittenToItPassedThruCallback()
- {
- $through = new ThroughStream('strtoupper');
- $through->on('data', $this->expectCallableOnceWith('FOO'));
- $through->write('foo');
- }
-
- /** @test */
- public function itShouldEmitErrorAndCloseIfCallbackThrowsException()
- {
- $through = new ThroughStream(function () {
- throw new \RuntimeException();
- });
- $through->on('error', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableNever());
-
- $through->write('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function itShouldEmitErrorAndCloseIfCallbackThrowsExceptionOnEnd()
- {
- $through = new ThroughStream(function () {
- throw new \RuntimeException();
- });
- $through->on('error', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableNever());
-
- $through->end('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function itShouldReturnFalseForAnyDataWrittenToItWhenPaused()
- {
- $through = new ThroughStream();
- $through->pause();
- $ret = $through->write('foo');
-
- $this->assertFalse($ret);
- }
-
- /** @test */
- public function itShouldEmitDrainOnResumeAfterReturnFalseForAnyDataWrittenToItWhenPaused()
- {
- $through = new ThroughStream();
- $through->pause();
- $through->write('foo');
-
- $through->on('drain', $this->expectCallableOnce());
- $through->resume();
- }
-
- /** @test */
- public function itShouldReturnTrueForAnyDataWrittenToItWhenResumedAfterPause()
- {
- $through = new ThroughStream();
- $through->on('drain', $this->expectCallableNever());
- $through->pause();
- $through->resume();
- $ret = $through->write('foo');
-
- $this->assertTrue($ret);
- }
-
- /** @test */
- public function pipingStuffIntoItShouldWork()
- {
- $readable = new ThroughStream();
-
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
-
- $readable->pipe($through);
- $readable->emit('data', array('foo'));
- }
-
- /** @test */
- public function endShouldEmitEndAndClose()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->on('end', $this->expectCallableOnce());
- $through->on('close', $this->expectCallableOnce());
- $through->end();
- }
-
- /** @test */
- public function endShouldCloseTheStream()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->end();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function endShouldWriteDataBeforeClosing()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnceWith('foo'));
- $through->end('foo');
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function endTwiceShouldOnlyEmitOnce()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableOnce('first'));
- $through->end('first');
- $through->end('ignored');
- }
-
- /** @test */
- public function writeAfterEndShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->on('data', $this->expectCallableNever());
- $through->end();
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataWillCloseStreamShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->on('data', array($through, 'close'));
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataToPausedShouldReturnFalse()
- {
- $through = new ThroughStream();
- $through->pause();
-
- $this->assertFalse($through->write('foo'));
- }
-
- /** @test */
- public function writeDataToResumedShouldReturnTrue()
- {
- $through = new ThroughStream();
- $through->pause();
- $through->resume();
-
- $this->assertTrue($through->write('foo'));
- }
-
- /** @test */
- public function itShouldBeReadableByDefault()
- {
- $through = new ThroughStream();
- $this->assertTrue($through->isReadable());
- }
-
- /** @test */
- public function itShouldBeWritableByDefault()
- {
- $through = new ThroughStream();
- $this->assertTrue($through->isWritable());
- }
-
- /** @test */
- public function closeShouldCloseOnce()
- {
- $through = new ThroughStream();
-
- $through->on('close', $this->expectCallableOnce());
-
- $through->close();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function doubleCloseShouldCloseOnce()
- {
- $through = new ThroughStream();
-
- $through->on('close', $this->expectCallableOnce());
-
- $through->close();
- $through->close();
-
- $this->assertFalse($through->isReadable());
- $this->assertFalse($through->isWritable());
- }
-
- /** @test */
- public function pipeShouldPipeCorrectly()
- {
- $output = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $output->expects($this->any())->method('isWritable')->willReturn(True);
- $output
- ->expects($this->once())
- ->method('write')
- ->with('foo');
-
- $through = new ThroughStream();
- $through->pipe($output);
- $through->write('foo');
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/UtilTest.php b/assets/php/vendor/react/stream/tests/UtilTest.php
deleted file mode 100755
index 3d113ab..0000000
--- a/assets/php/vendor/react/stream/tests/UtilTest.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use React\Stream\WritableResourceStream;
-use React\Stream\Util;
-use React\Stream\CompositeStream;
-use React\Stream\ThroughStream;
-
-/**
- * @covers React\Stream\Util
- */
-class UtilTest extends TestCase
-{
- public function testPipeReturnsDestinationStream()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
-
- $ret = Util::pipe($readable, $writable);
-
- $this->assertSame($writable, $ret);
- }
-
- public function testPipeNonReadableSourceShouldDoNothing()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(false);
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->never())
- ->method('isWritable');
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable);
- }
-
- public function testPipeIntoNonWritableDestinationShouldPauseSource()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(false);
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable);
- }
-
- public function testPipeClosingDestPausesSource()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable
- ->expects($this->any())
- ->method('isReadable')
- ->willReturn(true);
- $readable
- ->expects($this->once())
- ->method('pause');
-
- $writable = new ThroughStream();
-
- Util::pipe($readable, $writable);
-
- $writable->close();
- }
-
- public function testPipeWithEnd()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('end');
-
- Util::pipe($readable, $writable);
-
- $readable->end();
- }
-
- public function testPipeWithoutEnd()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->never())
- ->method('end');
-
- Util::pipe($readable, $writable, array('end' => false));
-
- $readable->end();
- }
-
- public function testPipeWithTooSlowWritableShouldPauseReadable()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->once())
- ->method('write')
- ->with('some data')
- ->will($this->returnValue(false));
-
- $readable->pipe($writable);
-
- $this->assertFalse($readable->paused);
- $readable->write('some data');
- $this->assertTrue($readable->paused);
- }
-
- public function testPipeWithTooSlowWritableShouldResumeOnDrain()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $onDrain = null;
-
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable
- ->expects($this->any())
- ->method('isWritable')
- ->willReturn(true);
- $writable
- ->expects($this->any())
- ->method('on')
- ->will($this->returnCallback(function ($name, $callback) use (&$onDrain) {
- if ($name === 'drain') {
- $onDrain = $callback;
- }
- }));
-
- $readable->pipe($writable);
- $readable->pause();
-
- $this->assertTrue($readable->paused);
- $this->assertNotNull($onDrain);
- $onDrain();
- $this->assertFalse($readable->paused);
- }
-
- public function testPipeWithWritableResourceStream()
- {
- $readable = new Stub\ReadableStreamStub();
-
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $readable->pipe($buffer);
-
- $readable->write('hello, I am some ');
- $readable->write('random data');
-
- $buffer->handleWrite();
- rewind($stream);
- $this->assertSame('hello, I am some random data', stream_get_contents($stream));
- }
-
- public function testPipeSetsUpListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
-
- Util::pipe($source, $dest);
-
- $this->assertCount(1, $source->listeners('data'));
- $this->assertCount(1, $source->listeners('end'));
- $this->assertCount(1, $dest->listeners('drain'));
- }
-
- public function testPipeClosingSourceRemovesListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- Util::pipe($source, $dest);
-
- $source->close();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
- }
-
- public function testPipeClosingDestRemovesListeners()
- {
- $source = new ThroughStream();
- $dest = new ThroughStream();
-
- Util::pipe($source, $dest);
-
- $dest->close();
-
- $this->assertCount(0, $source->listeners('data'));
- $this->assertCount(0, $source->listeners('end'));
- $this->assertCount(0, $dest->listeners('drain'));
- }
-
- public function testPipeDuplexIntoSelfEndsOnEnd()
- {
- $readable = $this->getMockBuilder('React\Stream\ReadableStreamInterface')->getMock();
- $readable->expects($this->any())->method('isReadable')->willReturn(true);
- $writable = $this->getMockBuilder('React\Stream\WritableStreamInterface')->getMock();
- $writable->expects($this->any())->method('isWritable')->willReturn(true);
- $duplex = new CompositeStream($readable, $writable);
-
- Util::pipe($duplex, $duplex);
-
- $writable->expects($this->once())->method('end');
-
- $duplex->emit('end');
- }
-
- /** @test */
- public function forwardEventsShouldSetupForwards()
- {
- $source = new ThroughStream();
- $target = new ThroughStream();
-
- Util::forwardEvents($source, $target, array('data'));
- $target->on('data', $this->expectCallableOnce());
- $target->on('foo', $this->expectCallableNever());
-
- $source->emit('data', array('hello'));
- $source->emit('foo', array('bar'));
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-
- private function notEqualTo($value)
- {
- return new \PHPUnit_Framework_Constraint_Not($value);
- }
-}
diff --git a/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php b/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php
deleted file mode 100755
index 05bce9c..0000000
--- a/assets/php/vendor/react/stream/tests/WritableStreamResourceTest.php
+++ /dev/null
@@ -1,534 +0,0 @@
-<?php
-
-namespace React\Tests\Stream;
-
-use Clue\StreamFilter as Filter;
-use React\Stream\WritableResourceStream;
-
-class WritableResourceStreamTest extends TestCase
-{
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructor()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @doesNotPerformAssertions
- */
- public function testConstructorWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = @fopen($name, 'w+eANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsIfNotAValidStreamResource()
- {
- $stream = null;
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnReadOnlyStream()
- {
- $stream = fopen('php://temp', 'r');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException InvalidArgumentException
- */
- public function testConstructorThrowsExceptionOnReadOnlyStreamWithExcessiveMode()
- {
- // excessive flags are ignored for temp streams, so we have to use a file stream
- $name = tempnam(sys_get_temp_dir(), 'test');
- $stream = fopen($name, 'reANYTHING');
- unlink($name);
-
- $loop = $this->createLoopMock();
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::__construct
- * @expectedException RuntimeException
- */
- public function testConstructorThrowsExceptionIfStreamDoesNotSupportNonBlocking()
- {
- if (!in_array('blocking', stream_get_wrappers())) {
- stream_wrapper_register('blocking', 'React\Tests\Stream\EnforceBlockingWrapper');
- }
-
- $stream = fopen('blocking://test', 'r+');
- $loop = $this->createLoopMock();
-
- new WritableResourceStream($stream, $loop);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
-
- $buffer->write("foobar\n");
- rewind($stream);
- $this->assertSame("foobar\n", fread($stream, 1024));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- */
- public function testWriteWithDataDoesAddResourceToLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('addWriteStream')->with($this->equalTo($stream));
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- $buffer->write("foobar\n");
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testEmptyWriteDoesNotAddToLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->never())->method('addWriteStream');
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- $buffer->write("");
- $buffer->write(null);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteReturnsFalseWhenWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
- $loop->preventWrites = true;
-
- $buffer = new WritableResourceStream($stream, $loop, 4);
- $buffer->on('error', $this->expectCallableNever());
-
- $this->assertTrue($buffer->write("foo"));
- $loop->preventWrites = false;
- $this->assertFalse($buffer->write("bar\n"));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- */
- public function testWriteReturnsFalseWhenWritableResourceStreamIsExactlyFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 3);
-
- $this->assertFalse($buffer->write("foo"));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteDetectsWhenOtherSideIsClosed()
- {
- list($a, $b) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
-
- $loop = $this->createWriteableLoopMock();
-
- $buffer = new WritableResourceStream($a, $loop, 4);
- $buffer->on('error', $this->expectCallableOnce());
-
- fclose($b);
-
- $buffer->write("foo");
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testEmitsDrainAfterWriteWhichExceedsBuffer()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testWriteInDrain()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
- $buffer->on('error', $this->expectCallableNever());
-
- $buffer->once('drain', function () use ($buffer) {
- $buffer->write("bar\n");
- $buffer->handleWrite();
- });
-
- $this->assertFalse($buffer->write("foo\n"));
- $buffer->handleWrite();
-
- fseek($stream, 0);
- $this->assertSame("foo\nbar\n", stream_get_contents($stream));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testDrainAfterWrite()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testDrainAfterWriteWillRemoveResourceFromLoopWithoutClosing()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', $this->expectCallableOnce());
-
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testClosingDuringDrainAfterWriteWillRemoveResourceFromLoopOnceAndClose()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer = new WritableResourceStream($stream, $loop, 2);
-
- $buffer->on('drain', function () use ($buffer) {
- $buffer->close();
- });
-
- $buffer->on('close', $this->expectCallableOnce());
-
- $buffer->write("foo");
- $buffer->handleWrite();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithoutDataClosesImmediatelyIfWritableResourceStreamIsEmpty()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end();
- $this->assertFalse($buffer->isWritable());
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithoutDataDoesNotCloseIfWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write('foo');
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end();
- $this->assertFalse($buffer->isWritable());
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithDataClosesImmediatelyIfWritableResourceStreamFlushes()
- {
- $stream = fopen('php://temp', 'r+');
- $filterBuffer = '';
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- Filter\append($stream, function ($chunk) use (&$filterBuffer) {
- $filterBuffer .= $chunk;
- return $chunk;
- });
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end('final words');
- $this->assertFalse($buffer->isWritable());
-
- $buffer->handleWrite();
- $this->assertSame('final words', $filterBuffer);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::end
- */
- public function testEndWithDataDoesNotCloseImmediatelyIfWritableResourceStreamIsFull()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableNever());
-
- $buffer->write('foo');
-
- $this->assertTrue($buffer->isWritable());
- $buffer->end('final words');
- $this->assertFalse($buffer->isWritable());
-
- rewind($stream);
- $this->assertSame('', stream_get_contents($stream));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::isWritable
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClose()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', $this->expectCallableNever());
- $buffer->on('close', $this->expectCallableOnce());
-
- $this->assertTrue($buffer->isWritable());
- $buffer->close();
- $this->assertFalse($buffer->isWritable());
-
- $this->assertEquals(array(), $buffer->listeners('close'));
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClosingAfterWriteRemovesStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $loop->expects($this->once())->method('removeWriteStream')->with($stream);
-
- $buffer->write('foo');
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testClosingWithoutWritingDoesNotRemoveStreamFromLoop()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
- $buffer = new WritableResourceStream($stream, $loop);
-
- $loop->expects($this->never())->method('removeWriteStream');
-
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testDoubleCloseWillEmitOnlyOnce()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('close', $this->expectCallableOnce());
-
- $buffer->close();
- $buffer->close();
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::write
- * @covers React\Stream\WritableResourceStream::close
- */
- public function testWritingToClosedWritableResourceStreamShouldNotWriteToStream()
- {
- $stream = fopen('php://temp', 'r+');
- $filterBuffer = '';
- $loop = $this->createLoopMock();
-
- $buffer = new WritableResourceStream($stream, $loop);
-
- Filter\append($stream, function ($chunk) use (&$filterBuffer) {
- $filterBuffer .= $chunk;
- return $chunk;
- });
-
- $buffer->close();
-
- $buffer->write('foo');
-
- $buffer->handleWrite();
- $this->assertSame('', $filterBuffer);
- }
-
- /**
- * @covers React\Stream\WritableResourceStream::handleWrite
- */
- public function testErrorWhenStreamResourceIsInvalid()
- {
- $stream = fopen('php://temp', 'r+');
- $loop = $this->createWriteableLoopMock();
-
- $error = null;
-
- $buffer = new WritableResourceStream($stream, $loop);
- $buffer->on('error', function ($message) use (&$error) {
- $error = $message;
- });
-
- // invalidate stream resource
- fclose($stream);
-
- $buffer->write('Attempting to write to bad stream');
-
- $this->assertInstanceOf('Exception', $error);
-
- // the error messages differ between PHP versions, let's just check substrings
- $this->assertContains('Unable to write to stream: ', $error->getMessage());
- $this->assertContains(' not a valid stream resource', $error->getMessage(), '', true);
- }
-
- public function testWritingToClosedStream()
- {
- if ('Darwin' === PHP_OS) {
- $this->markTestSkipped('OS X issue with shutting down pair for writing');
- }
-
- list($a, $b) = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP);
- $loop = $this->createLoopMock();
-
- $error = null;
-
- $buffer = new WritableResourceStream($a, $loop);
- $buffer->on('error', function($message) use (&$error) {
- $error = $message;
- });
-
- $buffer->write('foo');
- $buffer->handleWrite();
- stream_socket_shutdown($b, STREAM_SHUT_RD);
- stream_socket_shutdown($a, STREAM_SHUT_RD);
- $buffer->write('bar');
- $buffer->handleWrite();
-
- $this->assertInstanceOf('Exception', $error);
- $this->assertSame('Unable to write to stream: fwrite(): send of 3 bytes failed with errno=32 Broken pipe', $error->getMessage());
- }
-
- private function createWriteableLoopMock()
- {
- $loop = $this->createLoopMock();
- $loop->preventWrites = false;
- $loop
- ->expects($this->any())
- ->method('addWriteStream')
- ->will($this->returnCallback(function ($stream, $listener) use ($loop) {
- if (!$loop->preventWrites) {
- call_user_func($listener, $stream);
- }
- }));
-
- return $loop;
- }
-
- private function createLoopMock()
- {
- return $this->getMockBuilder('React\EventLoop\LoopInterface')->getMock();
- }
-}