├── README.md ├── client.php ├── composer.json ├── composer.lock ├── server.php └── vendor ├── autoload.php ├── cboden └── ratchet │ ├── .github │ └── workflows │ │ └── ci.yml │ ├── .gitignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── SECURITY.md │ ├── composer.json │ ├── phpunit.xml.dist │ ├── src │ └── Ratchet │ │ ├── AbstractConnectionDecorator.php │ │ ├── App.php │ │ ├── ComponentInterface.php │ │ ├── ConnectionInterface.php │ │ ├── Http │ │ ├── CloseResponseTrait.php │ │ ├── HttpRequestParser.php │ │ ├── HttpServer.php │ │ ├── HttpServerInterface.php │ │ ├── NoOpHttpServerController.php │ │ ├── OriginCheck.php │ │ └── Router.php │ │ ├── MessageComponentInterface.php │ │ ├── MessageInterface.php │ │ ├── Server │ │ ├── EchoServer.php │ │ ├── FlashPolicy.php │ │ ├── IoConnection.php │ │ ├── IoServer.php │ │ └── IpBlackList.php │ │ ├── Session │ │ ├── Serialize │ │ │ ├── HandlerInterface.php │ │ │ ├── PhpBinaryHandler.php │ │ │ └── PhpHandler.php │ │ ├── SessionProvider.php │ │ └── Storage │ │ │ ├── Proxy │ │ │ └── VirtualProxy.php │ │ │ └── VirtualSessionStorage.php │ │ ├── Wamp │ │ ├── Exception.php │ │ ├── JsonException.php │ │ ├── ServerProtocol.php │ │ ├── Topic.php │ │ ├── TopicManager.php │ │ ├── WampConnection.php │ │ ├── WampServer.php │ │ └── WampServerInterface.php │ │ └── WebSocket │ │ ├── ConnContext.php │ │ ├── MessageCallableInterface.php │ │ ├── MessageComponentInterface.php │ │ ├── WsConnection.php │ │ ├── WsServer.php │ │ └── WsServerInterface.php │ └── tests │ ├── autobahn │ ├── bin │ │ └── fuzzingserver.php │ ├── fuzzingclient-all.json │ ├── fuzzingclient-profile.json │ └── fuzzingclient-quick.json │ ├── bootstrap.php │ ├── helpers │ └── Ratchet │ │ ├── AbstractMessageComponentTestCase.php │ │ ├── Mock │ │ ├── Component.php │ │ ├── Connection.php │ │ ├── ConnectionDecorator.php │ │ └── WampComponent.php │ │ ├── NullComponent.php │ │ ├── Wamp │ │ └── Stub │ │ │ └── WsWampServerInterface.php │ │ └── WebSocket │ │ └── Stub │ │ └── WsMessageComponentInterface.php │ └── unit │ ├── AbstractConnectionDecoratorTest.php │ ├── Http │ ├── HttpRequestParserTest.php │ ├── HttpServerTest.php │ ├── OriginCheckTest.php │ └── RouterTest.php │ ├── Server │ ├── EchoServerTest.php │ ├── FlashPolicyComponentTest.php │ ├── IoConnectionTest.php │ ├── IoServerTest.php │ └── IpBlackListComponentTest.php │ ├── Session │ ├── Serialize │ │ └── PhpHandlerTest.php │ ├── SessionComponentTest.php │ └── Storage │ │ └── VirtualSessionStoragePDOTest.php │ └── Wamp │ ├── ServerProtocolTest.php │ ├── TopicManagerTest.php │ ├── TopicTest.php │ ├── WampConnectionTest.php │ └── WampServerTest.php ├── composer ├── ClassLoader.php ├── InstalledVersions.php ├── LICENSE ├── autoload_classmap.php ├── autoload_files.php ├── autoload_namespaces.php ├── autoload_psr4.php ├── autoload_real.php ├── autoload_static.php ├── installed.json ├── installed.php └── platform_check.php ├── evenement └── evenement │ ├── .gitignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── doc │ ├── 00-intro.md │ ├── 01-api.md │ └── 02-plugin-system.md │ ├── examples │ ├── benchmark-emit-no-arguments.php │ ├── benchmark-emit-once.php │ ├── benchmark-emit-one-argument.php │ ├── benchmark-emit.php │ └── benchmark-remove-listener-once.php │ ├── phpunit.xml.dist │ ├── src │ └── Evenement │ │ ├── EventEmitter.php │ │ ├── EventEmitterInterface.php │ │ └── EventEmitterTrait.php │ └── tests │ └── Evenement │ └── Tests │ ├── EventEmitterTest.php │ ├── Listener.php │ └── functions.php ├── guzzlehttp └── psr7 │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ ├── AppendStream.php │ ├── BufferStream.php │ ├── CachingStream.php │ ├── DroppingStream.php │ ├── Exception │ └── MalformedUriException.php │ ├── FnStream.php │ ├── Header.php │ ├── HttpFactory.php │ ├── InflateStream.php │ ├── LazyOpenStream.php │ ├── LimitStream.php │ ├── Message.php │ ├── MessageTrait.php │ ├── MimeType.php │ ├── MultipartStream.php │ ├── NoSeekStream.php │ ├── PumpStream.php │ ├── Query.php │ ├── Request.php │ ├── Response.php │ ├── Rfc7230.php │ ├── ServerRequest.php │ ├── Stream.php │ ├── StreamDecoratorTrait.php │ ├── StreamWrapper.php │ ├── UploadedFile.php │ ├── Uri.php │ ├── UriComparator.php │ ├── UriNormalizer.php │ ├── UriResolver.php │ └── Utils.php ├── psr ├── http-factory │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── RequestFactoryInterface.php │ │ ├── ResponseFactoryInterface.php │ │ ├── ServerRequestFactoryInterface.php │ │ ├── StreamFactoryInterface.php │ │ ├── UploadedFileFactoryInterface.php │ │ └── UriFactoryInterface.php └── http-message │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── docs │ ├── PSR7-Interfaces.md │ └── PSR7-Usage.md │ └── src │ ├── MessageInterface.php │ ├── RequestInterface.php │ ├── ResponseInterface.php │ ├── ServerRequestInterface.php │ ├── StreamInterface.php │ ├── UploadedFileInterface.php │ └── UriInterface.php ├── ralouphie └── getallheaders │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ └── getallheaders.php ├── ratchet └── rfc6455 │ ├── .github │ └── workflows │ │ └── ci.yml │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── composer.json │ ├── phpunit.xml.dist │ ├── src │ ├── Handshake │ │ ├── ClientNegotiator.php │ │ ├── InvalidPermessageDeflateOptionsException.php │ │ ├── NegotiatorInterface.php │ │ ├── PermessageDeflateOptions.php │ │ ├── RequestVerifier.php │ │ ├── ResponseVerifier.php │ │ └── ServerNegotiator.php │ └── Messaging │ │ ├── CloseFrameChecker.php │ │ ├── DataInterface.php │ │ ├── Frame.php │ │ ├── FrameInterface.php │ │ ├── Message.php │ │ ├── MessageBuffer.php │ │ └── MessageInterface.php │ └── tests │ ├── AbResultsTest.php │ ├── ab │ ├── clientRunner.php │ ├── docker_bootstrap.sh │ ├── fuzzingclient.json │ ├── fuzzingclient_skip_deflate.json │ ├── fuzzingserver.json │ ├── fuzzingserver_skip_deflate.json │ ├── run_ab_tests.sh │ └── startServer.php │ ├── bootstrap.php │ └── unit │ ├── Handshake │ ├── PermessageDeflateOptionsTest.php │ ├── RequestVerifierTest.php │ ├── ResponseVerifierTest.php │ └── ServerNegotiatorTest.php │ └── Messaging │ ├── FrameTest.php │ ├── MessageBufferTest.php │ └── MessageTest.php ├── react ├── cache │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── ArrayCache.php │ │ └── CacheInterface.php ├── dns │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── BadServerException.php │ │ ├── Config │ │ ├── Config.php │ │ └── HostsFile.php │ │ ├── Model │ │ ├── Message.php │ │ └── Record.php │ │ ├── Protocol │ │ ├── BinaryDumper.php │ │ └── Parser.php │ │ ├── Query │ │ ├── CachingExecutor.php │ │ ├── CancellationException.php │ │ ├── CoopExecutor.php │ │ ├── ExecutorInterface.php │ │ ├── FallbackExecutor.php │ │ ├── HostsFileExecutor.php │ │ ├── Query.php │ │ ├── RetryExecutor.php │ │ ├── SelectiveTransportExecutor.php │ │ ├── TcpTransportExecutor.php │ │ ├── TimeoutException.php │ │ ├── TimeoutExecutor.php │ │ └── UdpTransportExecutor.php │ │ ├── RecordNotFoundException.php │ │ └── Resolver │ │ ├── Factory.php │ │ ├── Resolver.php │ │ └── ResolverInterface.php ├── event-loop │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── ExtEvLoop.php │ │ ├── ExtEventLoop.php │ │ ├── ExtLibevLoop.php │ │ ├── ExtLibeventLoop.php │ │ ├── ExtUvLoop.php │ │ ├── Factory.php │ │ ├── Loop.php │ │ ├── LoopInterface.php │ │ ├── SignalsHandler.php │ │ ├── StreamSelectLoop.php │ │ ├── Tick │ │ └── FutureTickQueue.php │ │ ├── Timer │ │ ├── Timer.php │ │ └── Timers.php │ │ └── TimerInterface.php ├── promise │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── CancellablePromiseInterface.php │ │ ├── CancellationQueue.php │ │ ├── Deferred.php │ │ ├── Exception │ │ └── LengthException.php │ │ ├── ExtendedPromiseInterface.php │ │ ├── FulfilledPromise.php │ │ ├── LazyPromise.php │ │ ├── Promise.php │ │ ├── PromiseInterface.php │ │ ├── PromisorInterface.php │ │ ├── RejectedPromise.php │ │ ├── UnhandledRejectionException.php │ │ ├── functions.php │ │ └── functions_include.php ├── socket │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ │ ├── Connection.php │ │ ├── ConnectionInterface.php │ │ ├── Connector.php │ │ ├── ConnectorInterface.php │ │ ├── DnsConnector.php │ │ ├── FdServer.php │ │ ├── FixedUriConnector.php │ │ ├── HappyEyeBallsConnectionBuilder.php │ │ ├── HappyEyeBallsConnector.php │ │ ├── LimitingServer.php │ │ ├── SecureConnector.php │ │ ├── SecureServer.php │ │ ├── Server.php │ │ ├── ServerInterface.php │ │ ├── SocketServer.php │ │ ├── StreamEncryption.php │ │ ├── TcpConnector.php │ │ ├── TcpServer.php │ │ ├── TimeoutConnector.php │ │ ├── UnixConnector.php │ │ └── UnixServer.php └── stream │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ ├── CompositeStream.php │ ├── DuplexResourceStream.php │ ├── DuplexStreamInterface.php │ ├── ReadableResourceStream.php │ ├── ReadableStreamInterface.php │ ├── ThroughStream.php │ ├── Util.php │ ├── WritableResourceStream.php │ └── WritableStreamInterface.php └── symfony ├── deprecation-contracts ├── CHANGELOG.md ├── LICENSE ├── README.md ├── composer.json └── function.php ├── http-foundation ├── AcceptHeader.php ├── AcceptHeaderItem.php ├── BinaryFileResponse.php ├── CHANGELOG.md ├── ChainRequestMatcher.php ├── Cookie.php ├── Exception │ ├── BadRequestException.php │ ├── ConflictingHeadersException.php │ ├── JsonException.php │ ├── RequestExceptionInterface.php │ ├── SessionNotFoundException.php │ └── SuspiciousOperationException.php ├── ExpressionRequestMatcher.php ├── File │ ├── Exception │ │ ├── AccessDeniedException.php │ │ ├── CannotWriteFileException.php │ │ ├── ExtensionFileException.php │ │ ├── FileException.php │ │ ├── FileNotFoundException.php │ │ ├── FormSizeFileException.php │ │ ├── IniSizeFileException.php │ │ ├── NoFileException.php │ │ ├── NoTmpDirFileException.php │ │ ├── PartialFileException.php │ │ ├── UnexpectedTypeException.php │ │ └── UploadException.php │ ├── File.php │ ├── Stream.php │ └── UploadedFile.php ├── FileBag.php ├── HeaderBag.php ├── HeaderUtils.php ├── InputBag.php ├── IpUtils.php ├── JsonResponse.php ├── LICENSE ├── ParameterBag.php ├── README.md ├── RateLimiter │ ├── AbstractRequestRateLimiter.php │ ├── PeekableRequestRateLimiterInterface.php │ └── RequestRateLimiterInterface.php ├── RedirectResponse.php ├── Request.php ├── RequestMatcher.php ├── RequestMatcher │ ├── AttributesRequestMatcher.php │ ├── ExpressionRequestMatcher.php │ ├── HostRequestMatcher.php │ ├── IpsRequestMatcher.php │ ├── IsJsonRequestMatcher.php │ ├── MethodRequestMatcher.php │ ├── PathRequestMatcher.php │ ├── PortRequestMatcher.php │ └── SchemeRequestMatcher.php ├── RequestMatcherInterface.php ├── RequestStack.php ├── Response.php ├── ResponseHeaderBag.php ├── ServerBag.php ├── Session │ ├── Attribute │ │ ├── AttributeBag.php │ │ └── AttributeBagInterface.php │ ├── Flash │ │ ├── AutoExpireFlashBag.php │ │ ├── FlashBag.php │ │ └── FlashBagInterface.php │ ├── FlashBagAwareSessionInterface.php │ ├── Session.php │ ├── SessionBagInterface.php │ ├── SessionBagProxy.php │ ├── SessionFactory.php │ ├── SessionFactoryInterface.php │ ├── SessionInterface.php │ ├── SessionUtils.php │ └── Storage │ │ ├── Handler │ │ ├── AbstractSessionHandler.php │ │ ├── IdentityMarshaller.php │ │ ├── MarshallingSessionHandler.php │ │ ├── MemcachedSessionHandler.php │ │ ├── MigratingSessionHandler.php │ │ ├── MongoDbSessionHandler.php │ │ ├── NativeFileSessionHandler.php │ │ ├── NullSessionHandler.php │ │ ├── PdoSessionHandler.php │ │ ├── RedisSessionHandler.php │ │ ├── SessionHandlerFactory.php │ │ └── StrictSessionHandler.php │ │ ├── MetadataBag.php │ │ ├── MockArraySessionStorage.php │ │ ├── MockFileSessionStorage.php │ │ ├── MockFileSessionStorageFactory.php │ │ ├── NativeSessionStorage.php │ │ ├── NativeSessionStorageFactory.php │ │ ├── PhpBridgeSessionStorage.php │ │ ├── PhpBridgeSessionStorageFactory.php │ │ ├── Proxy │ │ ├── AbstractProxy.php │ │ └── SessionHandlerProxy.php │ │ ├── SessionStorageFactoryInterface.php │ │ └── SessionStorageInterface.php ├── StreamedJsonResponse.php ├── StreamedResponse.php ├── Test │ └── Constraint │ │ ├── RequestAttributeValueSame.php │ │ ├── ResponseCookieValueSame.php │ │ ├── ResponseFormatSame.php │ │ ├── ResponseHasCookie.php │ │ ├── ResponseHasHeader.php │ │ ├── ResponseHeaderSame.php │ │ ├── ResponseIsRedirected.php │ │ ├── ResponseIsSuccessful.php │ │ ├── ResponseIsUnprocessable.php │ │ └── ResponseStatusCodeSame.php ├── UrlHelper.php └── composer.json ├── polyfill-mbstring ├── LICENSE ├── Mbstring.php ├── README.md ├── Resources │ └── unidata │ │ ├── lowerCase.php │ │ ├── titleCaseRegexp.php │ │ └── upperCase.php ├── bootstrap.php ├── bootstrap80.php └── composer.json ├── polyfill-php80 ├── LICENSE ├── Php80.php ├── PhpToken.php ├── README.md ├── Resources │ └── stubs │ │ ├── Attribute.php │ │ ├── PhpToken.php │ │ ├── Stringable.php │ │ ├── UnhandledMatchError.php │ │ └── ValueError.php ├── bootstrap.php └── composer.json ├── polyfill-php83 ├── LICENSE ├── Php83.php ├── README.md ├── bootstrap.php └── composer.json └── routing ├── Alias.php ├── Annotation └── Route.php ├── CHANGELOG.md ├── CompiledRoute.php ├── DependencyInjection └── RoutingResolverPass.php ├── Exception ├── ExceptionInterface.php ├── InvalidArgumentException.php ├── InvalidParameterException.php ├── MethodNotAllowedException.php ├── MissingMandatoryParametersException.php ├── NoConfigurationException.php ├── ResourceNotFoundException.php ├── RouteCircularReferenceException.php ├── RouteNotFoundException.php └── RuntimeException.php ├── Generator ├── CompiledUrlGenerator.php ├── ConfigurableRequirementsInterface.php ├── Dumper │ ├── CompiledUrlGeneratorDumper.php │ ├── GeneratorDumper.php │ └── GeneratorDumperInterface.php ├── UrlGenerator.php └── UrlGeneratorInterface.php ├── LICENSE ├── Loader ├── AnnotationClassLoader.php ├── AnnotationDirectoryLoader.php ├── AnnotationFileLoader.php ├── ClosureLoader.php ├── Configurator │ ├── AliasConfigurator.php │ ├── CollectionConfigurator.php │ ├── ImportConfigurator.php │ ├── RouteConfigurator.php │ ├── RoutingConfigurator.php │ └── Traits │ │ ├── AddTrait.php │ │ ├── HostTrait.php │ │ ├── LocalizedRouteTrait.php │ │ ├── PrefixTrait.php │ │ └── RouteTrait.php ├── ContainerLoader.php ├── DirectoryLoader.php ├── GlobFileLoader.php ├── ObjectLoader.php ├── PhpFileLoader.php ├── Psr4DirectoryLoader.php ├── XmlFileLoader.php ├── YamlFileLoader.php └── schema │ └── routing │ └── routing-1.0.xsd ├── Matcher ├── CompiledUrlMatcher.php ├── Dumper │ ├── CompiledUrlMatcherDumper.php │ ├── CompiledUrlMatcherTrait.php │ ├── MatcherDumper.php │ ├── MatcherDumperInterface.php │ └── StaticPrefixCollection.php ├── ExpressionLanguageProvider.php ├── RedirectableUrlMatcher.php ├── RedirectableUrlMatcherInterface.php ├── RequestMatcherInterface.php ├── TraceableUrlMatcher.php ├── UrlMatcher.php └── UrlMatcherInterface.php ├── README.md ├── RequestContext.php ├── RequestContextAwareInterface.php ├── Requirement ├── EnumRequirement.php └── Requirement.php ├── Route.php ├── RouteCollection.php ├── RouteCompiler.php ├── RouteCompilerInterface.php ├── Router.php ├── RouterInterface.php └── composer.json /README.md: -------------------------------------------------------------------------------- 1 | # php-websocket -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "cboden/ratchet": "^0.4.4" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | clients = new \SplObjectStorage; 12 | } 13 | public function onOpen(ConnectionInterface $conn) { 14 | $this->clients->attach($conn); 15 | echo "New connection! ({$conn->resourceId})\n"; 16 | } 17 | public function onMessage(ConnectionInterface $from, $msg) { 18 | foreach ($this->clients as $client) { 19 | if ($from !== $client) { 20 | $client->send($msg); 21 | } 22 | } 23 | } 24 | public function onClose(ConnectionInterface $conn) { 25 | $this->clients->detach($conn); 26 | echo "Connection {$conn->resourceId} has disconnected\n"; 27 | } 28 | public function onError(ConnectionInterface $conn, \Exception $e) { 29 | echo "An error has occurred: {$e->getMessage()}\n"; 30 | $conn->close(); 31 | } 32 | } 33 | $server = IoServer::factory( 34 | new HttpServer( 35 | new WsServer( 36 | new WebSocketsServer() 37 | ) 38 | ), 39 | 8089 40 | ); 41 | $server->run(); -------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | =5.4.2" 30 | , "ratchet/rfc6455": "^0.3.1" 31 | , "react/socket": "^1.0 || ^0.8 || ^0.7 || ^0.6 || ^0.5" 32 | , "react/event-loop": ">=0.4" 33 | , "guzzlehttp/psr7": "^1.7|^2.0" 34 | , "symfony/http-foundation": "^2.6|^3.0|^4.0|^5.0|^6.0" 35 | , "symfony/routing": "^2.6|^3.0|^4.0|^5.0|^6.0" 36 | } 37 | , "require-dev": { 38 | "phpunit/phpunit": "~4.8" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | ./tests/unit/ 16 | 17 | 18 | 19 | 20 | 21 | ./tests/integration/ 22 | 23 | 24 | 25 | 26 | 27 | ./src/ 28 | 29 | 30 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/AbstractConnectionDecorator.php: -------------------------------------------------------------------------------- 1 | wrappedConn = $conn; 17 | } 18 | 19 | /** 20 | * @return ConnectionInterface 21 | */ 22 | protected function getConnection() { 23 | return $this->wrappedConn; 24 | } 25 | 26 | public function __set($name, $value) { 27 | $this->wrappedConn->$name = $value; 28 | } 29 | 30 | public function __get($name) { 31 | return $this->wrappedConn->$name; 32 | } 33 | 34 | public function __isset($name) { 35 | return isset($this->wrappedConn->$name); 36 | } 37 | 38 | public function __unset($name) { 39 | unset($this->wrappedConn->$name); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/ComponentInterface.php: -------------------------------------------------------------------------------- 1 | \Ratchet\VERSION 17 | ], $additional_headers)); 18 | 19 | $conn->send(Message::toString($response)); 20 | $conn->close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/Http/HttpServerInterface.php: -------------------------------------------------------------------------------- 1 | send($msg); 15 | } 16 | 17 | public function onClose(ConnectionInterface $conn) { 18 | } 19 | 20 | public function onError(ConnectionInterface $conn, \Exception $e) { 21 | $conn->close(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/Server/IoConnection.php: -------------------------------------------------------------------------------- 1 | conn = $conn; 21 | } 22 | 23 | /** 24 | * {@inheritdoc} 25 | */ 26 | public function send($data) { 27 | $this->conn->write($data); 28 | 29 | return $this; 30 | } 31 | 32 | /** 33 | * {@inheritdoc} 34 | */ 35 | public function close() { 36 | $this->conn->end(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/Session/Serialize/HandlerInterface.php: -------------------------------------------------------------------------------- 1 | saveHandlerName = 'user'; 23 | $this->_sessionName = ini_get('session.name'); 24 | } 25 | 26 | /** 27 | * {@inheritdoc} 28 | */ 29 | public function getId() { 30 | return $this->_sessionId; 31 | } 32 | 33 | /** 34 | * {@inheritdoc} 35 | */ 36 | public function setId($id) { 37 | $this->_sessionId = $id; 38 | } 39 | 40 | /** 41 | * {@inheritdoc} 42 | */ 43 | public function getName() { 44 | return $this->_sessionName; 45 | } 46 | 47 | /** 48 | * DO NOT CALL THIS METHOD 49 | * @internal 50 | */ 51 | public function setName($name) { 52 | throw new \RuntimeException("Can not change session name in VirtualProxy"); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/Wamp/Exception.php: -------------------------------------------------------------------------------- 1 | connection = $conn; 18 | $this->buffer = $buffer; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/WebSocket/MessageCallableInterface.php: -------------------------------------------------------------------------------- 1 | WebSocket->closing) { 17 | if (!($msg instanceof DataInterface)) { 18 | $msg = new Frame($msg); 19 | } 20 | 21 | $this->getConnection()->send($msg->getContents()); 22 | } 23 | 24 | return $this; 25 | } 26 | 27 | /** 28 | * @param int|\Ratchet\RFC6455\Messaging\DataInterface 29 | */ 30 | public function close($code = 1000) { 31 | if ($this->WebSocket->closing) { 32 | return; 33 | } 34 | 35 | if ($code instanceof DataInterface) { 36 | $this->send($code); 37 | } else { 38 | $this->send(new Frame(pack('n', $code), true, Frame::OP_CLOSE)); 39 | } 40 | 41 | $this->getConnection()->close(); 42 | 43 | $this->WebSocket->closing = true; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/src/Ratchet/WebSocket/WsServerInterface.php: -------------------------------------------------------------------------------- 1 | send($msg); 9 | } 10 | 11 | public function onOpen(ConnectionInterface $conn) { 12 | } 13 | 14 | public function onClose(ConnectionInterface $conn) { 15 | } 16 | 17 | public function onError(ConnectionInterface $conn, \Exception $e) { 18 | } 19 | } 20 | 21 | $port = $argc > 1 ? $argv[1] : 8000; 22 | $impl = sprintf('React\EventLoop\%sLoop', $argc > 2 ? $argv[2] : 'StreamSelect'); 23 | 24 | $loop = new $impl; 25 | $sock = new React\Socket\Server('0.0.0.0:' . $port, $loop); 26 | 27 | $wsServer = new Ratchet\WebSocket\WsServer(new BinaryEcho); 28 | // This is enabled to test https://github.com/ratchetphp/Ratchet/issues/430 29 | // The time is left at 10 minutes so that it will not try to every ping anything 30 | // This causes the Ratchet server to crash on test 2.7 31 | $wsServer->enableKeepAlive($loop, 600); 32 | 33 | $app = new Ratchet\Http\HttpServer($wsServer); 34 | 35 | $server = new Ratchet\Server\IoServer($app, $sock, $loop); 36 | $server->run(); 37 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/autobahn/fuzzingclient-all.json: -------------------------------------------------------------------------------- 1 | { 2 | "options": {"failByDrop": false} 3 | , "outdir": "reports/ab" 4 | 5 | , "servers": [ 6 | {"agent": "Ratchet/0.4 libevent", "url": "ws://localhost:8001", "options": {"version": 18}} 7 | , {"agent": "Ratchet/0.4 libev", "url": "ws://localhost:8004", "options": {"version": 18}} 8 | , {"agent": "Ratchet/0.4 streams", "url": "ws://localhost:8002", "options": {"version": 18}} 9 | , {"agent": "AutobahnTestSuite/0.5.9", "url": "ws://localhost:8000", "options": {"version": 18}} 10 | ] 11 | 12 | , "cases": ["*"] 13 | , "exclude-cases": [] 14 | , "exclude-agent-cases": {} 15 | } 16 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/autobahn/fuzzingclient-profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "options": {"failByDrop": false} 3 | , "outdir": "reports/profile" 4 | 5 | , "servers": [ 6 | {"agent": "Ratchet", "url": "ws://localhost:8000", "options": {"version": 18}} 7 | ] 8 | 9 | , "cases": ["9.7.4"] 10 | , "exclude-cases": ["1.2.*", "2.3", "2.4", "2.6", "9.2.*", "9.4.*", "9.6.*", "9.8.*"] 11 | , "exclude-agent-cases": {} 12 | } 13 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/autobahn/fuzzingclient-quick.json: -------------------------------------------------------------------------------- 1 | { 2 | "options": {"failByDrop": false} 3 | , "outdir": "reports/rfc" 4 | 5 | , "servers": [ 6 | {"agent": "Ratchet", "url": "ws://localhost:8000", "options": {"version": 18}} 7 | ] 8 | 9 | , "cases": ["*"] 10 | , "exclude-cases": [] 11 | , "exclude-agent-cases": {} 12 | } 13 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | addPsr4('Ratchet\\', __DIR__ . '/helpers/Ratchet'); 5 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/helpers/Ratchet/Mock/Component.php: -------------------------------------------------------------------------------- 1 | last[__FUNCTION__] = func_get_args(); 14 | } 15 | 16 | public function onOpen(ConnectionInterface $conn) { 17 | $this->last[__FUNCTION__] = func_get_args(); 18 | } 19 | 20 | public function onMessage(ConnectionInterface $from, $msg) { 21 | $this->last[__FUNCTION__] = func_get_args(); 22 | } 23 | 24 | public function onClose(ConnectionInterface $conn) { 25 | $this->last[__FUNCTION__] = func_get_args(); 26 | } 27 | 28 | public function onError(ConnectionInterface $conn, \Exception $e) { 29 | $this->last[__FUNCTION__] = func_get_args(); 30 | } 31 | 32 | public function getSubProtocols() { 33 | return $this->protocols; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/helpers/Ratchet/Mock/Connection.php: -------------------------------------------------------------------------------- 1 | '' 8 | , 'close' => false 9 | ); 10 | 11 | public $remoteAddress = '127.0.0.1'; 12 | 13 | public function send($data) { 14 | $this->last[__FUNCTION__] = $data; 15 | } 16 | 17 | public function close() { 18 | $this->last[__FUNCTION__] = true; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/helpers/Ratchet/Mock/ConnectionDecorator.php: -------------------------------------------------------------------------------- 1 | '' 8 | , 'end' => false 9 | ); 10 | 11 | public function send($data) { 12 | $this->last[__FUNCTION__] = $data; 13 | 14 | $this->getConnection()->send($data); 15 | } 16 | 17 | public function close() { 18 | $this->last[__FUNCTION__] = true; 19 | 20 | $this->getConnection()->close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/helpers/Ratchet/Mock/WampComponent.php: -------------------------------------------------------------------------------- 1 | protocols; 14 | } 15 | 16 | public function onCall(ConnectionInterface $conn, $id, $procURI, array $params) { 17 | $this->last[__FUNCTION__] = func_get_args(); 18 | } 19 | 20 | public function onSubscribe(ConnectionInterface $conn, $topic) { 21 | $this->last[__FUNCTION__] = func_get_args(); 22 | } 23 | 24 | public function onUnSubscribe(ConnectionInterface $conn, $topic) { 25 | $this->last[__FUNCTION__] = func_get_args(); 26 | } 27 | 28 | public function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude, array $eligible) { 29 | $this->last[__FUNCTION__] = func_get_args(); 30 | } 31 | 32 | public function onOpen(ConnectionInterface $conn) { 33 | $this->last[__FUNCTION__] = func_get_args(); 34 | } 35 | 36 | public function onClose(ConnectionInterface $conn) { 37 | $this->last[__FUNCTION__] = func_get_args(); 38 | } 39 | 40 | public function onError(ConnectionInterface $conn, \Exception $e) { 41 | $this->last[__FUNCTION__] = func_get_args(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/helpers/Ratchet/NullComponent.php: -------------------------------------------------------------------------------- 1 | _reqStub = $this->getMock('Psr\Http\Message\RequestInterface'); 13 | $this->_reqStub->expects($this->any())->method('getHeader')->will($this->returnValue(['localhost'])); 14 | 15 | parent::setUp(); 16 | 17 | $this->_serv->allowedOrigins[] = 'localhost'; 18 | } 19 | 20 | protected function doOpen($conn) { 21 | $this->_serv->onOpen($conn, $this->_reqStub); 22 | } 23 | 24 | public function getConnectionClassString() { 25 | return '\Ratchet\ConnectionInterface'; 26 | } 27 | 28 | public function getDecoratorClassString() { 29 | return '\Ratchet\Http\OriginCheck'; 30 | } 31 | 32 | public function getComponentClassString() { 33 | return '\Ratchet\Http\HttpServerInterface'; 34 | } 35 | 36 | public function testCloseOnNonMatchingOrigin() { 37 | $this->_serv->allowedOrigins = ['socketo.me']; 38 | $this->_conn->expects($this->once())->method('close'); 39 | 40 | $this->_serv->onOpen($this->_conn, $this->_reqStub); 41 | } 42 | 43 | public function testOnMessage() { 44 | $this->passthroughMessageTest('Hello World!'); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/unit/Server/EchoServerTest.php: -------------------------------------------------------------------------------- 1 | _conn = $this->getMock('\Ratchet\ConnectionInterface'); 11 | $this->_comp = new EchoServer; 12 | } 13 | 14 | public function testMessageEchod() { 15 | $message = 'Tillsonburg, my back still aches when I hear that word.'; 16 | $this->_conn->expects($this->once())->method('send')->with($message); 17 | $this->_comp->onMessage($this->_conn, $message); 18 | } 19 | 20 | public function testErrorClosesConnection() { 21 | ob_start(); 22 | $this->_conn->expects($this->once())->method('close'); 23 | $this->_comp->onError($this->_conn, new \Exception); 24 | ob_end_clean(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/unit/Server/IoConnectionTest.php: -------------------------------------------------------------------------------- 1 | sock = $this->getMock('\\React\\Socket\\ConnectionInterface'); 14 | $this->conn = new IoConnection($this->sock); 15 | } 16 | 17 | public function testCloseBubbles() { 18 | $this->sock->expects($this->once())->method('end'); 19 | $this->conn->close(); 20 | } 21 | 22 | public function testSendBubbles() { 23 | $msg = '6 hour rides are productive'; 24 | 25 | $this->sock->expects($this->once())->method('write')->with($msg); 26 | $this->conn->send($msg); 27 | } 28 | 29 | public function testSendReturnsSelf() { 30 | $this->assertSame($this->conn, $this->conn->send('fluent interface')); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/cboden/ratchet/tests/unit/Session/Serialize/PhpHandlerTest.php: -------------------------------------------------------------------------------- 1 | _handler = new PhpHandler; 13 | } 14 | 15 | public function serializedProvider() { 16 | return array( 17 | array( 18 | '_sf2_attributes|a:2:{s:5:"hello";s:5:"world";s:4:"last";i:1332872102;}_sf2_flashes|a:0:{}' 19 | , array( 20 | '_sf2_attributes' => array( 21 | 'hello' => 'world' 22 | , 'last' => 1332872102 23 | ) 24 | , '_sf2_flashes' => array() 25 | ) 26 | ) 27 | ); 28 | } 29 | 30 | /** 31 | * @dataProvider serializedProvider 32 | */ 33 | public function testUnserialize($in, $expected) { 34 | $this->assertEquals($expected, $this->_handler->unserialize($in)); 35 | } 36 | 37 | /** 38 | * @dataProvider serializedProvider 39 | */ 40 | public function testSerialize($serialized, $original) { 41 | $this->assertEquals($serialized, $this->_handler->serialize($original)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/composer/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) Nils Adermann, Jordi Boggiano 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is furnished 9 | to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | 22 | -------------------------------------------------------------------------------- /vendor/composer/autoload_classmap.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php', 10 | 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 11 | 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 12 | 'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php', 13 | 'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 14 | 'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php', 15 | ); 16 | -------------------------------------------------------------------------------- /vendor/composer/autoload_files.php: -------------------------------------------------------------------------------- 1 | $vendorDir . '/react/promise/src/functions_include.php', 10 | '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 11 | 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', 12 | '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', 13 | '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', 14 | '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php', 15 | ); 16 | -------------------------------------------------------------------------------- /vendor/composer/autoload_namespaces.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/evenement/evenement/src'), 10 | ); 11 | -------------------------------------------------------------------------------- /vendor/composer/autoload_psr4.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/symfony/polyfill-php83'), 10 | 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 11 | 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 12 | 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 13 | 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), 14 | 'React\\Stream\\' => array($vendorDir . '/react/stream/src'), 15 | 'React\\Socket\\' => array($vendorDir . '/react/socket/src'), 16 | 'React\\Promise\\' => array($vendorDir . '/react/promise/src'), 17 | 'React\\EventLoop\\' => array($vendorDir . '/react/event-loop/src'), 18 | 'React\\Dns\\' => array($vendorDir . '/react/dns/src'), 19 | 'React\\Cache\\' => array($vendorDir . '/react/cache/src'), 20 | 'Ratchet\\RFC6455\\' => array($vendorDir . '/ratchet/rfc6455/src'), 21 | 'Ratchet\\' => array($vendorDir . '/cboden/ratchet/src/Ratchet'), 22 | 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'), 23 | 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 24 | ); 25 | -------------------------------------------------------------------------------- /vendor/composer/platform_check.php: -------------------------------------------------------------------------------- 1 | = 80100)) { 8 | $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; 9 | } 10 | 11 | if ($issues) { 12 | if (!headers_sent()) { 13 | header('HTTP/1.1 500 Internal Server Error'); 14 | } 15 | if (!ini_get('display_errors')) { 16 | if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { 17 | fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); 18 | } elseif (!headers_sent()) { 19 | echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; 20 | } 21 | } 22 | trigger_error( 23 | 'Composer detected issues in your platform: ' . implode(' ', $issues), 24 | E_USER_ERROR 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/.gitignore: -------------------------------------------------------------------------------- 1 | composer.lock 2 | vendor 3 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.0 5 | - 7.1 6 | - hhvm 7 | - nightly 8 | 9 | matrix: 10 | allow_failures: 11 | - php: hhvm 12 | - php: nightly 13 | 14 | before_script: 15 | - wget http://getcomposer.org/composer.phar 16 | - php composer.phar install 17 | 18 | script: 19 | - ./vendor/bin/phpunit --coverage-text 20 | - php -n examples/benchmark-emit-no-arguments.php 21 | - php -n examples/benchmark-emit-one-argument.php 22 | - php -n examples/benchmark-emit.php 23 | - php -n examples/benchmark-emit-once.php 24 | - php -n examples/benchmark-remove-listener-once.php 25 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Igor Wiedler 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evenement/evenement", 3 | "description": "Événement is a very simple event dispatching library for PHP", 4 | "keywords": ["event-dispatcher", "event-emitter"], 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Igor Wiedler", 9 | "email": "igor@wiedler.ch" 10 | } 11 | ], 12 | "require": { 13 | "php": ">=7.0" 14 | }, 15 | "require-dev": { 16 | "phpunit/phpunit": "^6.0" 17 | }, 18 | "autoload": { 19 | "psr-0": { 20 | "Evenement": "src" 21 | } 22 | }, 23 | "autoload-dev": { 24 | "psr-0": { 25 | "Evenement": "tests" 26 | }, 27 | "files": ["tests/Evenement/Tests/functions.php"] 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/doc/00-intro.md: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | Événement is is French and means "event". The événement library aims to 4 | provide a simple way of subscribing to events and notifying those subscribers 5 | whenever an event occurs. 6 | 7 | The API that it exposes is almost a direct port of the EventEmitter API found 8 | in node.js. It also includes an "EventEmitter". There are some minor 9 | differences however. 10 | 11 | The EventEmitter is an implementation of the publish-subscribe pattern, which 12 | is a generalized version of the observer pattern. The observer pattern 13 | specifies an observable subject, which observers can register themselves to. 14 | Once something interesting happens, the subject notifies its observers. 15 | 16 | Pub/sub takes the same idea but encapsulates the observation logic inside a 17 | separate object which manages all of its subscribers or listeners. Subscribers 18 | are bound to an event name, and will only receive notifications of the events 19 | they subscribed to. 20 | 21 | **TLDR: What does evenement do, in short? It provides a mapping from event 22 | names to a list of listener functions and triggers each listener for a given 23 | event when it is emitted.** 24 | 25 | Why do we do this, you ask? To achieve decoupling. 26 | 27 | It allows you to design a system where the core will emit events, and modules 28 | are able to subscribe to these events. And respond to them. 29 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/examples/benchmark-emit-no-arguments.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | const ITERATIONS = 10000000; 13 | 14 | use Evenement\EventEmitter; 15 | 16 | require __DIR__.'/../vendor/autoload.php'; 17 | 18 | $emitter = new EventEmitter(); 19 | 20 | $emitter->on('event', function () {}); 21 | 22 | $start = microtime(true); 23 | for ($i = 0; $i < ITERATIONS; $i++) { 24 | $emitter->emit('event'); 25 | } 26 | $time = microtime(true) - $start; 27 | 28 | echo 'Emitting ', number_format(ITERATIONS), ' events took: ', number_format($time, 2), 's', PHP_EOL; 29 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/examples/benchmark-emit-once.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | ini_set('memory_limit', '512M'); 13 | 14 | const ITERATIONS = 100000; 15 | 16 | use Evenement\EventEmitter; 17 | 18 | require __DIR__.'/../vendor/autoload.php'; 19 | 20 | $emitter = new EventEmitter(); 21 | 22 | for ($i = 0; $i < ITERATIONS; $i++) { 23 | $emitter->once('event', function ($a, $b, $c) {}); 24 | } 25 | 26 | $start = microtime(true); 27 | $emitter->emit('event', [1, 2, 3]); 28 | $time = microtime(true) - $start; 29 | 30 | echo 'Emitting one event to ', number_format(ITERATIONS), ' once listeners took: ', number_format($time, 2), 's', PHP_EOL; 31 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/examples/benchmark-emit-one-argument.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | const ITERATIONS = 10000000; 13 | 14 | use Evenement\EventEmitter; 15 | 16 | require __DIR__.'/../vendor/autoload.php'; 17 | 18 | $emitter = new EventEmitter(); 19 | 20 | $emitter->on('event', function ($a) {}); 21 | 22 | $start = microtime(true); 23 | for ($i = 0; $i < ITERATIONS; $i++) { 24 | $emitter->emit('event', [1]); 25 | } 26 | $time = microtime(true) - $start; 27 | 28 | echo 'Emitting ', number_format(ITERATIONS), ' events took: ', number_format($time, 2), 's', PHP_EOL; 29 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/examples/benchmark-emit.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | const ITERATIONS = 10000000; 13 | 14 | use Evenement\EventEmitter; 15 | 16 | require __DIR__.'/../vendor/autoload.php'; 17 | 18 | $emitter = new EventEmitter(); 19 | 20 | $emitter->on('event', function ($a, $b, $c) {}); 21 | 22 | $start = microtime(true); 23 | for ($i = 0; $i < ITERATIONS; $i++) { 24 | $emitter->emit('event', [1, 2, 3]); 25 | } 26 | $time = microtime(true) - $start; 27 | 28 | echo 'Emitting ', number_format(ITERATIONS), ' events took: ', number_format($time, 2), 's', PHP_EOL; 29 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/examples/benchmark-remove-listener-once.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | ini_set('memory_limit', '512M'); 13 | 14 | const ITERATIONS = 100000; 15 | 16 | use Evenement\EventEmitter; 17 | 18 | require __DIR__.'/../vendor/autoload.php'; 19 | 20 | $emitter = new EventEmitter(); 21 | 22 | $listeners = []; 23 | for ($i = 0; $i < ITERATIONS; $i++) { 24 | $listeners[] = function ($a, $b, $c) {}; 25 | } 26 | 27 | $start = microtime(true); 28 | foreach ($listeners as $listener) { 29 | $emitter->once('event', $listener); 30 | } 31 | $time = microtime(true) - $start; 32 | echo 'Adding ', number_format(ITERATIONS), ' once listeners took: ', number_format($time, 2), 's', PHP_EOL; 33 | 34 | $start = microtime(true); 35 | foreach ($listeners as $listener) { 36 | $emitter->removeListener('event', $listener); 37 | } 38 | $time = microtime(true) - $start; 39 | echo 'Removing ', number_format(ITERATIONS), ' once listeners took: ', number_format($time, 2), 's', PHP_EOL; 40 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | 14 | 15 | ./tests/Evenement/ 16 | 17 | 18 | 19 | 20 | 21 | ./src/ 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/src/Evenement/EventEmitter.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Evenement; 13 | 14 | class EventEmitter implements EventEmitterInterface 15 | { 16 | use EventEmitterTrait; 17 | } 18 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/src/Evenement/EventEmitterInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Evenement; 13 | 14 | interface EventEmitterInterface 15 | { 16 | public function on($event, callable $listener); 17 | public function once($event, callable $listener); 18 | public function removeListener($event, callable $listener); 19 | public function removeAllListeners($event = null); 20 | public function listeners($event = null); 21 | public function emit($event, array $arguments = []); 22 | } 23 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/tests/Evenement/Tests/Listener.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Evenement\Tests; 13 | 14 | class Listener 15 | { 16 | private $data = []; 17 | 18 | private $magicData = []; 19 | 20 | private static $staticData = []; 21 | 22 | public function onFoo($data) 23 | { 24 | $this->data[] = $data; 25 | } 26 | 27 | public function __invoke($data) 28 | { 29 | $this->magicData[] = $data; 30 | } 31 | 32 | public static function onBar($data) 33 | { 34 | self::$staticData[] = $data; 35 | } 36 | 37 | public function getData() 38 | { 39 | return $this->data; 40 | } 41 | 42 | public function getMagicData() 43 | { 44 | return $this->magicData; 45 | } 46 | 47 | public static function getStaticData() 48 | { 49 | return self::$staticData; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /vendor/evenement/evenement/tests/Evenement/Tests/functions.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Evenement\Tests; 13 | 14 | function setGlobalTestData($data) 15 | { 16 | $GLOBALS['evenement-evenement-test-data'] = $data; 17 | } 18 | -------------------------------------------------------------------------------- /vendor/guzzlehttp/psr7/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Michael Dowling 4 | Copyright (c) 2015 Márk Sági-Kazár 5 | Copyright (c) 2015 Graham Campbell 6 | Copyright (c) 2016 Tobias Schultze 7 | Copyright (c) 2016 George Mponos 8 | Copyright (c) 2018 Tobias Nyholm 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in 18 | all copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | -------------------------------------------------------------------------------- /vendor/guzzlehttp/psr7/src/DroppingStream.php: -------------------------------------------------------------------------------- 1 | stream = $stream; 30 | $this->maxLength = $maxLength; 31 | } 32 | 33 | public function write($string): int 34 | { 35 | $diff = $this->maxLength - $this->stream->getSize(); 36 | 37 | // Begin returning 0 when the underlying stream is too large. 38 | if ($diff <= 0) { 39 | return 0; 40 | } 41 | 42 | // Write the stream or a subset of the stream if needed. 43 | if (strlen($string) < $diff) { 44 | return $this->stream->write($string); 45 | } 46 | 47 | return $this->stream->write(substr($string, 0, $diff)); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php: -------------------------------------------------------------------------------- 1 | filename = $filename; 35 | $this->mode = $mode; 36 | 37 | // unsetting the property forces the first access to go through 38 | // __get(). 39 | unset($this->stream); 40 | } 41 | 42 | /** 43 | * Creates the underlying stream lazily when required. 44 | */ 45 | protected function createStream(): StreamInterface 46 | { 47 | return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode)); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /vendor/guzzlehttp/psr7/src/NoSeekStream.php: -------------------------------------------------------------------------------- 1 | @,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; 22 | public const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; 23 | } 24 | -------------------------------------------------------------------------------- /vendor/guzzlehttp/psr7/src/UriComparator.php: -------------------------------------------------------------------------------- 1 | getHost(), $modified->getHost()) !== 0) { 23 | return true; 24 | } 25 | 26 | if ($original->getScheme() !== $modified->getScheme()) { 27 | return true; 28 | } 29 | 30 | if (self::computePort($original) !== self::computePort($modified)) { 31 | return true; 32 | } 33 | 34 | return false; 35 | } 36 | 37 | private static function computePort(UriInterface $uri): int 38 | { 39 | $port = $uri->getPort(); 40 | 41 | if (null !== $port) { 42 | return $port; 43 | } 44 | 45 | return 'https' === $uri->getScheme() ? 443 : 80; 46 | } 47 | 48 | private function __construct() 49 | { 50 | // cannot be instantiated 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /vendor/psr/http-factory/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 PHP-FIG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/psr/http-factory/README.md: -------------------------------------------------------------------------------- 1 | HTTP Factories 2 | ============== 3 | 4 | This repository holds all interfaces related to [PSR-17 (HTTP Factories)][psr-url]. 5 | 6 | Note that this is not a HTTP Factory implementation of its own. It is merely interfaces that describe the components of a HTTP Factory. 7 | 8 | The installable [package][package-url] and [implementations][implementation-url] are listed on Packagist. 9 | 10 | [psr-url]: https://www.php-fig.org/psr/psr-17/ 11 | [package-url]: https://packagist.org/packages/psr/http-factory 12 | [implementation-url]: https://packagist.org/providers/psr/http-factory-implementation 13 | -------------------------------------------------------------------------------- /vendor/psr/http-factory/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "psr/http-factory", 3 | "description": "Common interfaces for PSR-7 HTTP message factories", 4 | "keywords": [ 5 | "psr", 6 | "psr-7", 7 | "psr-17", 8 | "http", 9 | "factory", 10 | "message", 11 | "request", 12 | "response" 13 | ], 14 | "license": "MIT", 15 | "authors": [ 16 | { 17 | "name": "PHP-FIG", 18 | "homepage": "https://www.php-fig.org/" 19 | } 20 | ], 21 | "require": { 22 | "php": ">=7.0.0", 23 | "psr/http-message": "^1.0 || ^2.0" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "Psr\\Http\\Message\\": "src/" 28 | } 29 | }, 30 | "extra": { 31 | "branch-alias": { 32 | "dev-master": "1.0.x-dev" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/psr/http-factory/src/RequestFactoryInterface.php: -------------------------------------------------------------------------------- 1 | = 5.3. 5 | 6 | [![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders) 7 | [![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master) 8 | [![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders) 9 | [![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders) 10 | [![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders) 11 | 12 | 13 | This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). 14 | 15 | ## Install 16 | 17 | For PHP version **`>= 5.6`**: 18 | 19 | ``` 20 | composer require ralouphie/getallheaders 21 | ``` 22 | 23 | For PHP version **`< 5.6`**: 24 | 25 | ``` 26 | composer require ralouphie/getallheaders "^2" 27 | ``` 28 | -------------------------------------------------------------------------------- /vendor/ralouphie/getallheaders/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ralouphie/getallheaders", 3 | "description": "A polyfill for getallheaders.", 4 | "license": "MIT", 5 | "authors": [ 6 | { 7 | "name": "Ralph Khattar", 8 | "email": "ralph.khattar@gmail.com" 9 | } 10 | ], 11 | "require": { 12 | "php": ">=5.6" 13 | }, 14 | "require-dev": { 15 | "phpunit/phpunit": "^5 || ^6.5", 16 | "php-coveralls/php-coveralls": "^2.1" 17 | }, 18 | "autoload": { 19 | "files": ["src/getallheaders.php"] 20 | }, 21 | "autoload-dev": { 22 | "psr-4": { 23 | "getallheaders\\Tests\\": "tests/" 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | jobs: 8 | PHPUnit: 9 | name: PHPUnit (PHP ${{ matrix.php }})(${{ matrix.env }}) 10 | runs-on: ubuntu-20.04 11 | strategy: 12 | matrix: 13 | env: 14 | - client 15 | - server 16 | php: 17 | - 7.4 18 | - 7.3 19 | - 7.2 20 | - 7.1 21 | - 7.0 22 | - 5.6 23 | steps: 24 | - uses: actions/checkout@v2 25 | - name: Setup PHP 26 | uses: shivammathur/setup-php@v2 27 | with: 28 | php-version: ${{ matrix.php }} 29 | coverage: xdebug 30 | - run: docker pull crossbario/autobahn-testsuite 31 | - run: composer install 32 | 33 | - run: sh tests/ab/run_ab_tests.sh 34 | env: 35 | ABTEST: ${{ matrix.env }} 36 | SKIP_DEFLATE: _skip_deflate 37 | if: ${{ matrix.php <= 5.6 }} 38 | 39 | - run: sh tests/ab/run_ab_tests.sh 40 | env: 41 | ABTEST: ${{ matrix.env }} 42 | if: ${{ matrix.php >= 7.0 }} 43 | - run: vendor/bin/phpunit --verbose 44 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/.gitignore: -------------------------------------------------------------------------------- 1 | composer.lock 2 | vendor 3 | tests/ab/reports 4 | reports 5 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Chris Boden 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/README.md: -------------------------------------------------------------------------------- 1 | # RFC6455 - The WebSocket Protocol 2 | 3 | [![Build Status](https://github.com/ratchetphp/RFC6455/workflows/CI/badge.svg)](https://github.com/ratchetphp/RFC6455/actions) 4 | [![Autobahn Testsuite](https://img.shields.io/badge/Autobahn-passing-brightgreen.svg)](http://socketo.me/reports/rfc-server/index.html) 5 | 6 | This library a protocol handler for the RFC6455 specification. 7 | It contains components for both server and client side handshake and messaging protocol negotation. 8 | 9 | Aspects that are left open to interpretation in the specification are also left open in this library. 10 | It is up to the implementation to determine how those interpretations are to be dealt with. 11 | 12 | This library is independent, framework agnostic, and does not deal with any I/O. 13 | HTTP upgrade negotiation integration points are handled with PSR-7 interfaces. 14 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ratchet/rfc6455", 3 | "type": "library", 4 | "description": "RFC6455 WebSocket protocol handler", 5 | "keywords": ["WebSockets", "websocket", "RFC6455"], 6 | "homepage": "http://socketo.me", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Chris Boden" 11 | , "email": "cboden@gmail.com" 12 | , "role": "Developer" 13 | }, 14 | { 15 | "name": "Matt Bonneau", 16 | "role": "Developer" 17 | } 18 | ], 19 | "support": { 20 | "issues": "https://github.com/ratchetphp/RFC6455/issues", 21 | "chat": "https://gitter.im/reactphp/reactphp" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "Ratchet\\RFC6455\\": "src" 26 | } 27 | }, 28 | "require": { 29 | "php": ">=5.4.2", 30 | "guzzlehttp/psr7": "^2 || ^1.7" 31 | }, 32 | "require-dev": { 33 | "phpunit/phpunit": "^5.7", 34 | "react/socket": "^1.3" 35 | }, 36 | "scripts": { 37 | "abtest-client": "ABTEST=client && sh tests/ab/run_ab_tests.sh", 38 | "abtest-server": "ABTEST=server && sh tests/ab/run_ab_tests.sh", 39 | "phpunit": "phpunit --colors=always", 40 | "test": [ 41 | "@abtest-client", 42 | "@abtest-server", 43 | "@phpunit" 44 | ] 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | tests 16 | 17 | test/ab 18 | 19 | 20 | 21 | 22 | 23 | 24 | ./src/ 25 | 26 | 27 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/src/Handshake/InvalidPermessageDeflateOptionsException.php: -------------------------------------------------------------------------------- 1 | validCloseCodes = [ 9 | Frame::CLOSE_NORMAL, 10 | Frame::CLOSE_GOING_AWAY, 11 | Frame::CLOSE_PROTOCOL, 12 | Frame::CLOSE_BAD_DATA, 13 | Frame::CLOSE_BAD_PAYLOAD, 14 | Frame::CLOSE_POLICY, 15 | Frame::CLOSE_TOO_BIG, 16 | Frame::CLOSE_MAND_EXT, 17 | Frame::CLOSE_SRV_ERR, 18 | ]; 19 | } 20 | 21 | public function __invoke($val) { 22 | return ($val >= 3000 && $val <= 4999) || in_array($val, $this->validCloseCodes); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/src/Messaging/DataInterface.php: -------------------------------------------------------------------------------- 1 | markTestSkipped('Autobahn TestSuite results not found'); 10 | } 11 | 12 | $resultsJson = file_get_contents($fileName); 13 | $results = json_decode($resultsJson); 14 | $agentName = array_keys(get_object_vars($results))[0]; 15 | 16 | foreach ($results->$agentName as $name => $result) { 17 | if ($result->behavior === "INFORMATIONAL") { 18 | continue; 19 | } 20 | 21 | $this->assertTrue(in_array($result->behavior, ["OK", "NON-STRICT"]), "Autobahn test case " . $name . " in " . $fileName); 22 | } 23 | } 24 | 25 | public function testAutobahnClientResults() { 26 | $this->verifyAutobahnResults(__DIR__ . '/ab/reports/clients/index.json'); 27 | } 28 | 29 | public function testAutobahnServerResults() { 30 | $this->verifyAutobahnResults(__DIR__ . '/ab/reports/servers/index.json'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/ab/docker_bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -x 3 | 4 | echo "Running $0" 5 | 6 | echo Adding "$1 host.ratchet.internal" to /etc/hosts file 7 | 8 | echo $1 host.ratchet.internal >> /etc/hosts 9 | 10 | echo /etc/hosts contains: 11 | cat /etc/hosts 12 | echo 13 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/ab/fuzzingclient.json: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "failByDrop": false 4 | } 5 | , "outdir": "/reports/servers" 6 | , "servers": [{ 7 | "agent": "RatchetRFC/0.3" 8 | , "url": "ws://host.ratchet.internal:9001" 9 | , "options": {"version": 18} 10 | }] 11 | , "cases": [ 12 | "*" 13 | ] 14 | , "exclude-cases": [] 15 | , "exclude-agent-cases": {} 16 | } 17 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/ab/fuzzingclient_skip_deflate.json: -------------------------------------------------------------------------------- 1 | { 2 | "options": { 3 | "failByDrop": false 4 | } 5 | , "outdir": "/reports/servers" 6 | , "servers": [{ 7 | "agent": "RatchetRFC/0.3" 8 | , "url": "ws://host.ratchet.internal:9001" 9 | , "options": {"version": 18} 10 | }] 11 | , "cases": ["*"] 12 | , "exclude-cases": ["12.*", "13.*"] 13 | , "exclude-agent-cases": {} 14 | } 15 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/ab/fuzzingserver.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "ws://127.0.0.1:9002" 3 | , "options": { 4 | "failByDrop": false 5 | } 6 | , "outdir": "./reports/clients" 7 | , "cases": [ 8 | "*" 9 | ] 10 | , "exclude-cases": [] 11 | , "exclude-agent-cases": {} 12 | } 13 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/ab/fuzzingserver_skip_deflate.json: -------------------------------------------------------------------------------- 1 | { 2 | "url": "ws://127.0.0.1:9002" 3 | , "options": { 4 | "failByDrop": false 5 | } 6 | , "outdir": "./reports/clients" 7 | , "cases": ["*"] 8 | , "exclude-cases": ["12.*", "13.*"] 9 | , "exclude-agent-cases": {} 10 | } 11 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | addPsr4('Ratchet\\RFC6455\\Test\\', __DIR__); 17 | break; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/unit/Handshake/PermessageDeflateOptionsTest.php: -------------------------------------------------------------------------------- 1 | assertEquals($supported, PermessageDeflateOptions::permessageDeflateSupported($version)); 29 | } 30 | } -------------------------------------------------------------------------------- /vendor/ratchet/rfc6455/tests/unit/Handshake/ResponseVerifierTest.php: -------------------------------------------------------------------------------- 1 | _v = new ResponseVerifier; 19 | } 20 | 21 | public static function subProtocolsProvider() { 22 | return [ 23 | [true, ['a'], ['a']] 24 | , [true, ['c', 'd', 'a'], ['a']] 25 | , [true, ['c, a', 'd'], ['a']] 26 | , [true, [], []] 27 | , [true, ['a', 'b'], []] 28 | , [false, ['c', 'd', 'a'], ['b', 'a']] 29 | , [false, ['a', 'b', 'c'], ['d']] 30 | ]; 31 | } 32 | 33 | /** 34 | * @dataProvider subProtocolsProvider 35 | */ 36 | public function testVerifySubProtocol($expected, $request, $response) { 37 | $this->assertEquals($expected, $this->_v->verifySubProtocol($request, $response)); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /vendor/react/cache/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is furnished 10 | to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/react/cache/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react/cache", 3 | "description": "Async, Promise-based cache interface for ReactPHP", 4 | "keywords": ["cache", "caching", "promise", "ReactPHP"], 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Christian Lück", 9 | "homepage": "https://clue.engineering/", 10 | "email": "christian@clue.engineering" 11 | }, 12 | { 13 | "name": "Cees-Jan Kiewiet", 14 | "homepage": "https://wyrihaximus.net/", 15 | "email": "reactphp@ceesjankiewiet.nl" 16 | }, 17 | { 18 | "name": "Jan Sorgalla", 19 | "homepage": "https://sorgalla.com/", 20 | "email": "jsorgalla@gmail.com" 21 | }, 22 | { 23 | "name": "Chris Boden", 24 | "homepage": "https://cboden.dev/", 25 | "email": "cboden@gmail.com" 26 | } 27 | ], 28 | "require": { 29 | "php": ">=5.3.0", 30 | "react/promise": "^3.0 || ^2.0 || ^1.1" 31 | }, 32 | "require-dev": { 33 | "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" 34 | }, 35 | "autoload": { 36 | "psr-4": { 37 | "React\\Cache\\": "src/" 38 | } 39 | }, 40 | "autoload-dev": { 41 | "psr-4": { 42 | "React\\Tests\\Cache\\": "tests/" 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/react/dns/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is furnished 10 | to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/react/dns/src/BadServerException.php: -------------------------------------------------------------------------------- 1 | =5.3.0" 30 | }, 31 | "require-dev": { 32 | "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" 33 | }, 34 | "suggest": { 35 | "ext-pcntl": "For signal handling support when using the StreamSelectLoop" 36 | }, 37 | "autoload": { 38 | "psr-4": { 39 | "React\\EventLoop\\": "src/" 40 | } 41 | }, 42 | "autoload-dev": { 43 | "psr-4": { 44 | "React\\Tests\\EventLoop\\": "tests/" 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /vendor/react/event-loop/src/Tick/FutureTickQueue.php: -------------------------------------------------------------------------------- 1 | queue = new SplQueue(); 22 | } 23 | 24 | /** 25 | * Add a callback to be invoked on a future tick of the event loop. 26 | * 27 | * Callbacks are guaranteed to be executed in the order they are enqueued. 28 | * 29 | * @param callable $listener The callback to invoke. 30 | */ 31 | public function add($listener) 32 | { 33 | $this->queue->enqueue($listener); 34 | } 35 | 36 | /** 37 | * Flush the callback queue. 38 | */ 39 | public function tick() 40 | { 41 | // Only invoke as many callbacks as were on the queue when tick() was called. 42 | $count = $this->queue->count(); 43 | 44 | while ($count--) { 45 | \call_user_func( 46 | $this->queue->dequeue() 47 | ); 48 | } 49 | } 50 | 51 | /** 52 | * Check if the next tick queue is empty. 53 | * 54 | * @return boolean 55 | */ 56 | public function isEmpty() 57 | { 58 | return $this->queue->isEmpty(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /vendor/react/event-loop/src/TimerInterface.php: -------------------------------------------------------------------------------- 1 | =5.4.0" 29 | }, 30 | "require-dev": { 31 | "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" 32 | }, 33 | "autoload": { 34 | "psr-4": { 35 | "React\\Promise\\": "src/" 36 | }, 37 | "files": ["src/functions_include.php"] 38 | }, 39 | "autoload-dev": { 40 | "psr-4": { 41 | "React\\Promise\\": ["tests", "tests/fixtures"] 42 | } 43 | }, 44 | "keywords": [ 45 | "promise", 46 | "promises" 47 | ] 48 | } 49 | -------------------------------------------------------------------------------- /vendor/react/promise/src/CancellablePromiseInterface.php: -------------------------------------------------------------------------------- 1 | started) { 13 | return; 14 | } 15 | 16 | $this->started = true; 17 | $this->drain(); 18 | } 19 | 20 | public function enqueue($cancellable) 21 | { 22 | if (!\is_object($cancellable) || !\method_exists($cancellable, 'then') || !\method_exists($cancellable, 'cancel')) { 23 | return; 24 | } 25 | 26 | $length = \array_push($this->queue, $cancellable); 27 | 28 | if ($this->started && 1 === $length) { 29 | $this->drain(); 30 | } 31 | } 32 | 33 | private function drain() 34 | { 35 | for ($i = key($this->queue); isset($this->queue[$i]); $i++) { 36 | $cancellable = $this->queue[$i]; 37 | 38 | $exception = null; 39 | 40 | try { 41 | $cancellable->cancel(); 42 | } catch (\Throwable $exception) { 43 | } catch (\Exception $exception) { 44 | } 45 | 46 | unset($this->queue[$i]); 47 | 48 | if ($exception) { 49 | throw $exception; 50 | } 51 | } 52 | 53 | $this->queue = []; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /vendor/react/promise/src/Exception/LengthException.php: -------------------------------------------------------------------------------- 1 | reason = $reason; 21 | 22 | $message = \sprintf('Unhandled Rejection: %s', \json_encode($reason)); 23 | 24 | parent::__construct($message, 0); 25 | } 26 | 27 | public function getReason() 28 | { 29 | return $this->reason; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /vendor/react/promise/src/functions_include.php: -------------------------------------------------------------------------------- 1 | connect('localhost:80'); 20 | * ``` 21 | */ 22 | class FixedUriConnector implements ConnectorInterface 23 | { 24 | private $uri; 25 | private $connector; 26 | 27 | /** 28 | * @param string $uri 29 | * @param ConnectorInterface $connector 30 | */ 31 | public function __construct($uri, ConnectorInterface $connector) 32 | { 33 | $this->uri = $uri; 34 | $this->connector = $connector; 35 | } 36 | 37 | public function connect($_) 38 | { 39 | return $this->connector->connect($this->uri); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/react/stream/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2012 Christian Lück, Cees-Jan Kiewiet, Jan Sorgalla, Chris Boden, Igor Wiedler 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is furnished 10 | to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/symfony/deprecation-contracts/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | CHANGELOG 2 | ========= 3 | 4 | The changelog is maintained for all Symfony contracts at the following URL: 5 | https://github.com/symfony/contracts/blob/main/CHANGELOG.md 6 | -------------------------------------------------------------------------------- /vendor/symfony/deprecation-contracts/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020-present Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/deprecation-contracts/README.md: -------------------------------------------------------------------------------- 1 | Symfony Deprecation Contracts 2 | ============================= 3 | 4 | A generic function and convention to trigger deprecation notices. 5 | 6 | This package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices. 7 | 8 | By using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component, 9 | the triggered deprecations can be caught and logged for later discovery, both on dev and prod environments. 10 | 11 | The function requires at least 3 arguments: 12 | - the name of the Composer package that is triggering the deprecation 13 | - the version of the package that introduced the deprecation 14 | - the message of the deprecation 15 | - more arguments can be provided: they will be inserted in the message using `printf()` formatting 16 | 17 | Example: 18 | ```php 19 | trigger_deprecation('symfony/blockchain', '8.9', 'Using "%s" is deprecated, use "%s" instead.', 'bitcoin', 'fabcoin'); 20 | ``` 21 | 22 | This will generate the following message: 23 | `Since symfony/blockchain 8.9: Using "bitcoin" is deprecated, use "fabcoin" instead.` 24 | 25 | While not recommended, the deprecation notices can be completely ignored by declaring an empty 26 | `function trigger_deprecation() {}` in your application. 27 | -------------------------------------------------------------------------------- /vendor/symfony/deprecation-contracts/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/deprecation-contracts", 3 | "type": "library", 4 | "description": "A generic function and convention to trigger deprecation notices", 5 | "homepage": "https://symfony.com", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "Nicolas Grekas", 10 | "email": "p@tchwork.com" 11 | }, 12 | { 13 | "name": "Symfony Community", 14 | "homepage": "https://symfony.com/contributors" 15 | } 16 | ], 17 | "require": { 18 | "php": ">=8.1" 19 | }, 20 | "autoload": { 21 | "files": [ 22 | "function.php" 23 | ] 24 | }, 25 | "minimum-stability": "dev", 26 | "extra": { 27 | "branch-alias": { 28 | "dev-main": "3.4-dev" 29 | }, 30 | "thanks": { 31 | "name": "symfony/contracts", 32 | "url": "https://github.com/symfony/contracts" 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/symfony/deprecation-contracts/function.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | if (!function_exists('trigger_deprecation')) { 13 | /** 14 | * Triggers a silenced deprecation notice. 15 | * 16 | * @param string $package The name of the Composer package that is triggering the deprecation 17 | * @param string $version The version of the package that introduced the deprecation 18 | * @param string $message The message of the deprecation 19 | * @param mixed ...$args Values to insert in the message using printf() formatting 20 | * 21 | * @author Nicolas Grekas 22 | */ 23 | function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void 24 | { 25 | @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/ChainRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation; 13 | 14 | /** 15 | * ChainRequestMatcher verifies that all checks match against a Request instance. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | class ChainRequestMatcher implements RequestMatcherInterface 20 | { 21 | /** 22 | * @param iterable $matchers 23 | */ 24 | public function __construct(private iterable $matchers) 25 | { 26 | } 27 | 28 | public function matches(Request $request): bool 29 | { 30 | foreach ($this->matchers as $matcher) { 31 | if (!$matcher->matches($request)) { 32 | return false; 33 | } 34 | } 35 | 36 | return true; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/BadRequestException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * Raised when a user sends a malformed request. 16 | */ 17 | class BadRequestException extends \UnexpectedValueException implements RequestExceptionInterface 18 | { 19 | } 20 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/ConflictingHeadersException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * The HTTP request contains headers with conflicting information. 16 | * 17 | * @author Magnus Nordlander 18 | */ 19 | class ConflictingHeadersException extends \UnexpectedValueException implements RequestExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/JsonException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * Thrown by Request::toArray() when the content cannot be JSON-decoded. 16 | * 17 | * @author Tobias Nyholm 18 | */ 19 | final class JsonException extends \UnexpectedValueException implements RequestExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/RequestExceptionInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * Interface for Request exceptions. 16 | * 17 | * Exceptions implementing this interface should trigger an HTTP 400 response in the application code. 18 | */ 19 | interface RequestExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/SessionNotFoundException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * Raised when a session does not exist. This happens in the following cases: 16 | * - the session is not enabled 17 | * - attempt to read a session outside a request context (ie. cli script). 18 | * 19 | * @author Jérémy Derussé 20 | */ 21 | class SessionNotFoundException extends \LogicException implements RequestExceptionInterface 22 | { 23 | public function __construct(string $message = 'There is currently no session available.', int $code = 0, \Throwable $previous = null) 24 | { 25 | parent::__construct($message, $code, $previous); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Exception/SuspiciousOperationException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Exception; 13 | 14 | /** 15 | * Raised when a user has performed an operation that should be considered 16 | * suspicious from a security perspective. 17 | */ 18 | class SuspiciousOperationException extends \UnexpectedValueException implements RequestExceptionInterface 19 | { 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when the access on a file was denied. 16 | * 17 | * @author Bernhard Schussek 18 | */ 19 | class AccessDeniedException extends FileException 20 | { 21 | public function __construct(string $path) 22 | { 23 | parent::__construct(sprintf('The file %s could not be accessed', $path)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/CannotWriteFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_CANT_WRITE error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class CannotWriteFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/ExtensionFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_EXTENSION error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class ExtensionFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/FileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an error occurred in the component File. 16 | * 17 | * @author Bernhard Schussek 18 | */ 19 | class FileException extends \RuntimeException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when a file was not found. 16 | * 17 | * @author Bernhard Schussek 18 | */ 19 | class FileNotFoundException extends FileException 20 | { 21 | public function __construct(string $path) 22 | { 23 | parent::__construct(sprintf('The file "%s" does not exist', $path)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/FormSizeFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_FORM_SIZE error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class FormSizeFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/IniSizeFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_INI_SIZE error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class IniSizeFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/NoFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_NO_FILE error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class NoFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/NoTmpDirFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_NO_TMP_DIR error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class NoTmpDirFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/PartialFileException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an UPLOAD_ERR_PARTIAL error occurred with UploadedFile. 16 | * 17 | * @author Florent Mata 18 | */ 19 | class PartialFileException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | class UnexpectedTypeException extends FileException 15 | { 16 | public function __construct(mixed $value, string $expectedType) 17 | { 18 | parent::__construct(sprintf('Expected argument of type %s, %s given', $expectedType, get_debug_type($value))); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Exception/UploadException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File\Exception; 13 | 14 | /** 15 | * Thrown when an error occurred during file upload. 16 | * 17 | * @author Bernhard Schussek 18 | */ 19 | class UploadException extends FileException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/File/Stream.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\File; 13 | 14 | /** 15 | * A PHP stream of unknown size. 16 | * 17 | * @author Nicolas Grekas 18 | */ 19 | class Stream extends File 20 | { 21 | public function getSize(): int|false 22 | { 23 | return false; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-present Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/README.md: -------------------------------------------------------------------------------- 1 | HttpFoundation Component 2 | ======================== 3 | 4 | The HttpFoundation component defines an object-oriented layer for the HTTP 5 | specification. 6 | 7 | Resources 8 | --------- 9 | 10 | * [Documentation](https://symfony.com/doc/current/components/http_foundation.html) 11 | * [Contributing](https://symfony.com/doc/current/contributing/index.html) 12 | * [Report issues](https://github.com/symfony/symfony/issues) and 13 | [send Pull Requests](https://github.com/symfony/symfony/pulls) 14 | in the [main Symfony repository](https://github.com/symfony/symfony) 15 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RateLimiter/PeekableRequestRateLimiterInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RateLimiter; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\RateLimiter\RateLimit; 16 | 17 | /** 18 | * A request limiter which allows peeking ahead. 19 | * 20 | * This is valuable to reduce the cache backend load in scenarios 21 | * like a login when we only want to consume a token on login failure, 22 | * and where the majority of requests will be successful and thus not 23 | * need to consume a token. 24 | * 25 | * This way we can peek ahead before allowing the request through, and 26 | * only consume if the request failed (1 backend op). This is compared 27 | * to always consuming and then resetting the limit if the request 28 | * is successful (2 backend ops). 29 | * 30 | * @author Jordi Boggiano 31 | */ 32 | interface PeekableRequestRateLimiterInterface extends RequestRateLimiterInterface 33 | { 34 | public function peek(Request $request): RateLimit; 35 | } 36 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RateLimiter; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\RateLimiter\RateLimit; 16 | 17 | /** 18 | * A special type of limiter that deals with requests. 19 | * 20 | * This allows to limit on different types of information 21 | * from the requests. 22 | * 23 | * @author Wouter de Jong 24 | */ 25 | interface RequestRateLimiterInterface 26 | { 27 | public function consume(Request $request): RateLimit; 28 | 29 | public function reset(Request $request): void; 30 | } 31 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/AttributesRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the Request attributes matches all regular expressions. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class AttributesRequestMatcher implements RequestMatcherInterface 23 | { 24 | /** 25 | * @param array $regexps 26 | */ 27 | public function __construct(private array $regexps) 28 | { 29 | } 30 | 31 | public function matches(Request $request): bool 32 | { 33 | foreach ($this->regexps as $key => $regexp) { 34 | $attribute = $request->attributes->get($key); 35 | if (!\is_string($attribute)) { 36 | return false; 37 | } 38 | if (!preg_match('{'.$regexp.'}', $attribute)) { 39 | return false; 40 | } 41 | } 42 | 43 | return true; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/ExpressionRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\ExpressionLanguage\Expression; 15 | use Symfony\Component\ExpressionLanguage\ExpressionLanguage; 16 | use Symfony\Component\HttpFoundation\Request; 17 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 18 | 19 | /** 20 | * ExpressionRequestMatcher uses an expression to match a Request. 21 | * 22 | * @author Fabien Potencier 23 | */ 24 | class ExpressionRequestMatcher implements RequestMatcherInterface 25 | { 26 | public function __construct( 27 | private ExpressionLanguage $language, 28 | private Expression|string $expression, 29 | ) { 30 | } 31 | 32 | public function matches(Request $request): bool 33 | { 34 | return $this->language->evaluate($this->expression, [ 35 | 'request' => $request, 36 | 'method' => $request->getMethod(), 37 | 'path' => rawurldecode($request->getPathInfo()), 38 | 'host' => $request->getHost(), 39 | 'ip' => $request->getClientIp(), 40 | 'attributes' => $request->attributes->all(), 41 | ]); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/HostRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the Request URL host name matches a regular expression. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class HostRequestMatcher implements RequestMatcherInterface 23 | { 24 | public function __construct(private string $regexp) 25 | { 26 | } 27 | 28 | public function matches(Request $request): bool 29 | { 30 | return preg_match('{'.$this->regexp.'}i', $request->getHost()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\IpUtils; 15 | use Symfony\Component\HttpFoundation\Request; 16 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 17 | 18 | /** 19 | * Checks the client IP of a Request. 20 | * 21 | * @author Fabien Potencier 22 | */ 23 | class IpsRequestMatcher implements RequestMatcherInterface 24 | { 25 | private array $ips; 26 | 27 | /** 28 | * @param string[]|string $ips A specific IP address or a range specified using IP/netmask like 192.168.1.0/24 29 | * Strings can contain a comma-delimited list of IPs/ranges 30 | */ 31 | public function __construct(array|string $ips) 32 | { 33 | $this->ips = array_reduce((array) $ips, static fn (array $ips, string $ip) => array_merge($ips, preg_split('/\s*,\s*/', $ip)), []); 34 | } 35 | 36 | public function matches(Request $request): bool 37 | { 38 | if (!$this->ips) { 39 | return true; 40 | } 41 | 42 | return IpUtils::checkIp($request->getClientIp() ?? '', $this->ips); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the Request content is valid JSON. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class IsJsonRequestMatcher implements RequestMatcherInterface 23 | { 24 | public function matches(Request $request): bool 25 | { 26 | return json_validate($request->getContent()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/PathRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the Request URL path info matches a regular expression. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class PathRequestMatcher implements RequestMatcherInterface 23 | { 24 | public function __construct(private string $regexp) 25 | { 26 | } 27 | 28 | public function matches(Request $request): bool 29 | { 30 | return preg_match('{'.$this->regexp.'}', rawurldecode($request->getPathInfo())); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/PortRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the HTTP port of a Request. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class PortRequestMatcher implements RequestMatcherInterface 23 | { 24 | public function __construct(private int $port) 25 | { 26 | } 27 | 28 | public function matches(Request $request): bool 29 | { 30 | return $request->getPort() === $this->port; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\RequestMatcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\HttpFoundation\RequestMatcherInterface; 16 | 17 | /** 18 | * Checks the HTTP scheme of a Request. 19 | * 20 | * @author Fabien Potencier 21 | */ 22 | class SchemeRequestMatcher implements RequestMatcherInterface 23 | { 24 | /** 25 | * @var string[] 26 | */ 27 | private array $schemes; 28 | 29 | /** 30 | * @param string[]|string $schemes A scheme or a list of schemes 31 | * Strings can contain a comma-delimited list of schemes 32 | */ 33 | public function __construct(array|string $schemes) 34 | { 35 | $this->schemes = array_reduce(array_map('strtolower', (array) $schemes), static fn (array $schemes, string $scheme) => array_merge($schemes, preg_split('/\s*,\s*/', $scheme)), []); 36 | } 37 | 38 | public function matches(Request $request): bool 39 | { 40 | if (!$this->schemes) { 41 | return true; 42 | } 43 | 44 | return \in_array($request->getScheme(), $this->schemes, true); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/RequestMatcherInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation; 13 | 14 | /** 15 | * RequestMatcherInterface is an interface for strategies to match a Request. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | interface RequestMatcherInterface 20 | { 21 | /** 22 | * Decides whether the rule(s) implemented by the strategy matches the supplied request. 23 | */ 24 | public function matches(Request $request): bool; 25 | } 26 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session\Attribute; 13 | 14 | use Symfony\Component\HttpFoundation\Session\SessionBagInterface; 15 | 16 | /** 17 | * Attributes store. 18 | * 19 | * @author Drak 20 | */ 21 | interface AttributeBagInterface extends SessionBagInterface 22 | { 23 | /** 24 | * Checks if an attribute is defined. 25 | */ 26 | public function has(string $name): bool; 27 | 28 | /** 29 | * Returns an attribute. 30 | */ 31 | public function get(string $name, mixed $default = null): mixed; 32 | 33 | /** 34 | * Sets an attribute. 35 | * 36 | * @return void 37 | */ 38 | public function set(string $name, mixed $value); 39 | 40 | /** 41 | * Returns attributes. 42 | * 43 | * @return array 44 | */ 45 | public function all(): array; 46 | 47 | /** 48 | * @return void 49 | */ 50 | public function replace(array $attributes); 51 | 52 | /** 53 | * Removes an attribute. 54 | * 55 | * @return mixed The removed value or null when it does not exist 56 | */ 57 | public function remove(string $name): mixed; 58 | } 59 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/FlashBagAwareSessionInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session; 13 | 14 | use Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface; 15 | 16 | /** 17 | * Interface for session with a flashbag. 18 | */ 19 | interface FlashBagAwareSessionInterface extends SessionInterface 20 | { 21 | public function getFlashBag(): FlashBagInterface; 22 | } 23 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/SessionBagInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session; 13 | 14 | /** 15 | * Session Bag store. 16 | * 17 | * @author Drak 18 | */ 19 | interface SessionBagInterface 20 | { 21 | /** 22 | * Gets this bag's name. 23 | */ 24 | public function getName(): string; 25 | 26 | /** 27 | * Initializes the Bag. 28 | * 29 | * @return void 30 | */ 31 | public function initialize(array &$array); 32 | 33 | /** 34 | * Gets the storage key for this bag. 35 | */ 36 | public function getStorageKey(): string; 37 | 38 | /** 39 | * Clears out data from bag. 40 | * 41 | * @return mixed Whatever data was contained 42 | */ 43 | public function clear(): mixed; 44 | } 45 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/SessionFactory.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session; 13 | 14 | use Symfony\Component\HttpFoundation\RequestStack; 15 | use Symfony\Component\HttpFoundation\Session\Storage\SessionStorageFactoryInterface; 16 | 17 | // Help opcache.preload discover always-needed symbols 18 | class_exists(Session::class); 19 | 20 | /** 21 | * @author Jérémy Derussé 22 | */ 23 | class SessionFactory implements SessionFactoryInterface 24 | { 25 | private RequestStack $requestStack; 26 | private SessionStorageFactoryInterface $storageFactory; 27 | private ?\Closure $usageReporter; 28 | 29 | public function __construct(RequestStack $requestStack, SessionStorageFactoryInterface $storageFactory, callable $usageReporter = null) 30 | { 31 | $this->requestStack = $requestStack; 32 | $this->storageFactory = $storageFactory; 33 | $this->usageReporter = null === $usageReporter ? null : $usageReporter(...); 34 | } 35 | 36 | public function createSession(): SessionInterface 37 | { 38 | return new Session($this->storageFactory->createStorage($this->requestStack->getMainRequest()), null, null, $this->usageReporter); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/SessionFactoryInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session; 13 | 14 | /** 15 | * @author Kevin Bond 16 | */ 17 | interface SessionFactoryInterface 18 | { 19 | public function createSession(): SessionInterface; 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; 13 | 14 | use Symfony\Component\Cache\Marshaller\MarshallerInterface; 15 | 16 | /** 17 | * @author Ahmed TAILOULOUTE 18 | */ 19 | class IdentityMarshaller implements MarshallerInterface 20 | { 21 | public function marshall(array $values, ?array &$failed): array 22 | { 23 | foreach ($values as $key => $value) { 24 | if (!\is_string($value)) { 25 | throw new \LogicException(sprintf('%s accepts only string as data.', __METHOD__)); 26 | } 27 | } 28 | 29 | return $values; 30 | } 31 | 32 | public function unmarshall(string $value): string 33 | { 34 | return $value; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorageFactory.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session\Storage; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | 16 | // Help opcache.preload discover always-needed symbols 17 | class_exists(MockFileSessionStorage::class); 18 | 19 | /** 20 | * @author Jérémy Derussé 21 | */ 22 | class MockFileSessionStorageFactory implements SessionStorageFactoryInterface 23 | { 24 | private ?string $savePath; 25 | private string $name; 26 | private ?MetadataBag $metaBag; 27 | 28 | /** 29 | * @see MockFileSessionStorage constructor. 30 | */ 31 | public function __construct(string $savePath = null, string $name = 'MOCKSESSID', MetadataBag $metaBag = null) 32 | { 33 | $this->savePath = $savePath; 34 | $this->name = $name; 35 | $this->metaBag = $metaBag; 36 | } 37 | 38 | public function createStorage(?Request $request): SessionStorageInterface 39 | { 40 | return new MockFileSessionStorage($this->savePath, $this->name, $this->metaBag); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Session\Storage; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | 16 | /** 17 | * @author Jérémy Derussé 18 | */ 19 | interface SessionStorageFactoryInterface 20 | { 21 | /** 22 | * Creates a new instance of SessionStorageInterface. 23 | */ 24 | public function createStorage(?Request $request): SessionStorageInterface; 25 | } 26 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Request; 16 | 17 | final class RequestAttributeValueSame extends Constraint 18 | { 19 | private string $name; 20 | private string $value; 21 | 22 | public function __construct(string $name, string $value) 23 | { 24 | $this->name = $name; 25 | $this->value = $value; 26 | } 27 | 28 | public function toString(): string 29 | { 30 | return sprintf('has attribute "%s" with value "%s"', $this->name, $this->value); 31 | } 32 | 33 | /** 34 | * @param Request $request 35 | */ 36 | protected function matches($request): bool 37 | { 38 | return $this->value === $request->attributes->get($this->name); 39 | } 40 | 41 | /** 42 | * @param Request $request 43 | */ 44 | protected function failureDescription($request): string 45 | { 46 | return 'the Request '.$this->toString(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseHasHeader extends Constraint 18 | { 19 | private string $headerName; 20 | 21 | public function __construct(string $headerName) 22 | { 23 | $this->headerName = $headerName; 24 | } 25 | 26 | public function toString(): string 27 | { 28 | return sprintf('has header "%s"', $this->headerName); 29 | } 30 | 31 | /** 32 | * @param Response $response 33 | */ 34 | protected function matches($response): bool 35 | { 36 | return $response->headers->has($this->headerName); 37 | } 38 | 39 | /** 40 | * @param Response $response 41 | */ 42 | protected function failureDescription($response): string 43 | { 44 | return 'the Response '.$this->toString(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseHeaderSame extends Constraint 18 | { 19 | private string $headerName; 20 | private string $expectedValue; 21 | 22 | public function __construct(string $headerName, string $expectedValue) 23 | { 24 | $this->headerName = $headerName; 25 | $this->expectedValue = $expectedValue; 26 | } 27 | 28 | public function toString(): string 29 | { 30 | return sprintf('has header "%s" with value "%s"', $this->headerName, $this->expectedValue); 31 | } 32 | 33 | /** 34 | * @param Response $response 35 | */ 36 | protected function matches($response): bool 37 | { 38 | return $this->expectedValue === $response->headers->get($this->headerName, null); 39 | } 40 | 41 | /** 42 | * @param Response $response 43 | */ 44 | protected function failureDescription($response): string 45 | { 46 | return 'the Response '.$this->toString(); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseIsRedirected extends Constraint 18 | { 19 | public function toString(): string 20 | { 21 | return 'is redirected'; 22 | } 23 | 24 | /** 25 | * @param Response $response 26 | */ 27 | protected function matches($response): bool 28 | { 29 | return $response->isRedirect(); 30 | } 31 | 32 | /** 33 | * @param Response $response 34 | */ 35 | protected function failureDescription($response): string 36 | { 37 | return 'the Response '.$this->toString(); 38 | } 39 | 40 | /** 41 | * @param Response $response 42 | */ 43 | protected function additionalFailureDescription($response): string 44 | { 45 | return (string) $response; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseIsSuccessful extends Constraint 18 | { 19 | public function toString(): string 20 | { 21 | return 'is successful'; 22 | } 23 | 24 | /** 25 | * @param Response $response 26 | */ 27 | protected function matches($response): bool 28 | { 29 | return $response->isSuccessful(); 30 | } 31 | 32 | /** 33 | * @param Response $response 34 | */ 35 | protected function failureDescription($response): string 36 | { 37 | return 'the Response '.$this->toString(); 38 | } 39 | 40 | /** 41 | * @param Response $response 42 | */ 43 | protected function additionalFailureDescription($response): string 44 | { 45 | return (string) $response; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseIsUnprocessable.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseIsUnprocessable extends Constraint 18 | { 19 | public function toString(): string 20 | { 21 | return 'is unprocessable'; 22 | } 23 | 24 | /** 25 | * @param Response $other 26 | */ 27 | protected function matches($other): bool 28 | { 29 | return Response::HTTP_UNPROCESSABLE_ENTITY === $other->getStatusCode(); 30 | } 31 | 32 | /** 33 | * @param Response $other 34 | */ 35 | protected function failureDescription($other): string 36 | { 37 | return 'the Response '.$this->toString(); 38 | } 39 | 40 | /** 41 | * @param Response $other 42 | */ 43 | protected function additionalFailureDescription($other): string 44 | { 45 | return (string) $other; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\HttpFoundation\Test\Constraint; 13 | 14 | use PHPUnit\Framework\Constraint\Constraint; 15 | use Symfony\Component\HttpFoundation\Response; 16 | 17 | final class ResponseStatusCodeSame extends Constraint 18 | { 19 | private int $statusCode; 20 | 21 | public function __construct(int $statusCode) 22 | { 23 | $this->statusCode = $statusCode; 24 | } 25 | 26 | public function toString(): string 27 | { 28 | return 'status code is '.$this->statusCode; 29 | } 30 | 31 | /** 32 | * @param Response $response 33 | */ 34 | protected function matches($response): bool 35 | { 36 | return $this->statusCode === $response->getStatusCode(); 37 | } 38 | 39 | /** 40 | * @param Response $response 41 | */ 42 | protected function failureDescription($response): string 43 | { 44 | return 'the Response '.$this->toString(); 45 | } 46 | 47 | /** 48 | * @param Response $response 49 | */ 50 | protected function additionalFailureDescription($response): string 51 | { 52 | return (string) $response; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /vendor/symfony/http-foundation/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/http-foundation", 3 | "type": "library", 4 | "description": "Defines an object-oriented layer for the HTTP specification", 5 | "keywords": [], 6 | "homepage": "https://symfony.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Fabien Potencier", 11 | "email": "fabien@symfony.com" 12 | }, 13 | { 14 | "name": "Symfony Community", 15 | "homepage": "https://symfony.com/contributors" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=8.1", 20 | "symfony/deprecation-contracts": "^2.5|^3", 21 | "symfony/polyfill-mbstring": "~1.1", 22 | "symfony/polyfill-php83": "^1.27" 23 | }, 24 | "require-dev": { 25 | "doctrine/dbal": "^2.13.1|^3.0", 26 | "predis/predis": "^1.1|^2.0", 27 | "symfony/cache": "^5.4|^6.0", 28 | "symfony/dependency-injection": "^5.4|^6.0", 29 | "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", 30 | "symfony/mime": "^5.4|^6.0", 31 | "symfony/expression-language": "^5.4|^6.0", 32 | "symfony/rate-limiter": "^5.2|^6.0" 33 | }, 34 | "conflict": { 35 | "symfony/cache": "<6.2" 36 | }, 37 | "autoload": { 38 | "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, 39 | "exclude-from-classmap": [ 40 | "/Tests/" 41 | ] 42 | }, 43 | "minimum-stability": "dev" 44 | } 45 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-mbstring/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-2019 Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-mbstring/README.md: -------------------------------------------------------------------------------- 1 | Symfony Polyfill / Mbstring 2 | =========================== 3 | 4 | This component provides a partial, native PHP implementation for the 5 | [Mbstring](https://php.net/mbstring) extension. 6 | 7 | More information can be found in the 8 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). 9 | 10 | License 11 | ======= 12 | 13 | This library is released under the [MIT license](LICENSE). 14 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-mbstring/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/polyfill-mbstring", 3 | "type": "library", 4 | "description": "Symfony polyfill for the Mbstring extension", 5 | "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], 6 | "homepage": "https://symfony.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Nicolas Grekas", 11 | "email": "p@tchwork.com" 12 | }, 13 | { 14 | "name": "Symfony Community", 15 | "homepage": "https://symfony.com/contributors" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=7.1" 20 | }, 21 | "provide": { 22 | "ext-mbstring": "*" 23 | }, 24 | "autoload": { 25 | "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, 26 | "files": [ "bootstrap.php" ] 27 | }, 28 | "suggest": { 29 | "ext-mbstring": "For best performance" 30 | }, 31 | "minimum-stability": "dev", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-main": "1.27-dev" 35 | }, 36 | "thanks": { 37 | "name": "symfony/polyfill", 38 | "url": "https://github.com/symfony/polyfill" 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/README.md: -------------------------------------------------------------------------------- 1 | Symfony Polyfill / Php80 2 | ======================== 3 | 4 | This component provides features added to PHP 8.0 core: 5 | 6 | - [`Stringable`](https://php.net/stringable) interface 7 | - [`fdiv`](https://php.net/fdiv) 8 | - [`ValueError`](https://php.net/valueerror) class 9 | - [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class 10 | - `FILTER_VALIDATE_BOOL` constant 11 | - [`get_debug_type`](https://php.net/get_debug_type) 12 | - [`PhpToken`](https://php.net/phptoken) class 13 | - [`preg_last_error_msg`](https://php.net/preg_last_error_msg) 14 | - [`str_contains`](https://php.net/str_contains) 15 | - [`str_starts_with`](https://php.net/str_starts_with) 16 | - [`str_ends_with`](https://php.net/str_ends_with) 17 | - [`get_resource_id`](https://php.net/get_resource_id) 18 | 19 | More information can be found in the 20 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). 21 | 22 | License 23 | ======= 24 | 25 | This library is released under the [MIT license](LICENSE). 26 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | #[Attribute(Attribute::TARGET_CLASS)] 13 | final class Attribute 14 | { 15 | public const TARGET_CLASS = 1; 16 | public const TARGET_FUNCTION = 2; 17 | public const TARGET_METHOD = 4; 18 | public const TARGET_PROPERTY = 8; 19 | public const TARGET_CLASS_CONSTANT = 16; 20 | public const TARGET_PARAMETER = 32; 21 | public const TARGET_ALL = 63; 22 | public const IS_REPEATABLE = 64; 23 | 24 | /** @var int */ 25 | public $flags; 26 | 27 | public function __construct(int $flags = self::TARGET_ALL) 28 | { 29 | $this->flags = $flags; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | if (\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) { 13 | class PhpToken extends Symfony\Polyfill\Php80\PhpToken 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | if (\PHP_VERSION_ID < 80000) { 13 | interface Stringable 14 | { 15 | /** 16 | * @return string 17 | */ 18 | public function __toString(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | if (\PHP_VERSION_ID < 80000) { 13 | class UnhandledMatchError extends Error 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | if (\PHP_VERSION_ID < 80000) { 13 | class ValueError extends Error 14 | { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php80/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/polyfill-php80", 3 | "type": "library", 4 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 5 | "keywords": ["polyfill", "shim", "compatibility", "portable"], 6 | "homepage": "https://symfony.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Ion Bazan", 11 | "email": "ion.bazan@gmail.com" 12 | }, 13 | { 14 | "name": "Nicolas Grekas", 15 | "email": "p@tchwork.com" 16 | }, 17 | { 18 | "name": "Symfony Community", 19 | "homepage": "https://symfony.com/contributors" 20 | } 21 | ], 22 | "require": { 23 | "php": ">=7.1" 24 | }, 25 | "autoload": { 26 | "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, 27 | "files": [ "bootstrap.php" ], 28 | "classmap": [ "Resources/stubs" ] 29 | }, 30 | "minimum-stability": "dev", 31 | "extra": { 32 | "branch-alias": { 33 | "dev-main": "1.27-dev" 34 | }, 35 | "thanks": { 36 | "name": "symfony/polyfill", 37 | "url": "https://github.com/symfony/polyfill" 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php83/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2022 Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php83/Php83.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Polyfill\Php83; 13 | 14 | /** 15 | * @author Ion Bazan 16 | * 17 | * @internal 18 | */ 19 | final class Php83 20 | { 21 | private const JSON_MAX_DEPTH = 0x7FFFFFFF; // see https://www.php.net/manual/en/function.json-decode.php 22 | 23 | public static function json_validate(string $json, int $depth = 512, int $flags = 0): bool 24 | { 25 | if (0 !== $flags && \defined('JSON_INVALID_UTF8_IGNORE') && \JSON_INVALID_UTF8_IGNORE !== $flags) { 26 | throw new \ValueError('json_validate(): Argument #3 ($flags) must be a valid flag (allowed flags: JSON_INVALID_UTF8_IGNORE)'); 27 | } 28 | 29 | if ($depth <= 0) { 30 | throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0'); 31 | } 32 | 33 | if ($depth >= self::JSON_MAX_DEPTH) { 34 | throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH)); 35 | } 36 | 37 | json_decode($json, null, $depth, $flags); 38 | 39 | return \JSON_ERROR_NONE === json_last_error(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php83/README.md: -------------------------------------------------------------------------------- 1 | Symfony Polyfill / Php83 2 | ======================== 3 | 4 | This component provides features added to PHP 8.3 core: 5 | 6 | - [`json_validate`](https://wiki.php.net/rfc/json_validate) 7 | 8 | More information can be found in the 9 | [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). 10 | 11 | License 12 | ======= 13 | 14 | This library is released under the [MIT license](LICENSE). 15 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php83/bootstrap.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | use Symfony\Polyfill\Php83 as p; 13 | 14 | if (\PHP_VERSION_ID >= 80300) { 15 | return; 16 | } 17 | 18 | if (!function_exists('json_validate')) { 19 | function json_validate(string $json, int $depth = 512, int $flags = 0): bool { return p\Php83::json_validate($json, $depth, $flags); } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/polyfill-php83/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/polyfill-php83", 3 | "type": "library", 4 | "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", 5 | "keywords": ["polyfill", "shim", "compatibility", "portable"], 6 | "homepage": "https://symfony.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Nicolas Grekas", 11 | "email": "p@tchwork.com" 12 | }, 13 | { 14 | "name": "Symfony Community", 15 | "homepage": "https://symfony.com/contributors" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=7.1", 20 | "symfony/polyfill-php80": "^1.14" 21 | }, 22 | "autoload": { 23 | "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, 24 | "files": [ "bootstrap.php" ] 25 | }, 26 | "minimum-stability": "dev", 27 | "extra": { 28 | "branch-alias": { 29 | "dev-main": "1.27-dev" 30 | }, 31 | "thanks": { 32 | "name": "symfony/polyfill", 33 | "url": "https://github.com/symfony/polyfill" 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /vendor/symfony/routing/DependencyInjection/RoutingResolverPass.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\DependencyInjection; 13 | 14 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 15 | use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait; 16 | use Symfony\Component\DependencyInjection\ContainerBuilder; 17 | use Symfony\Component\DependencyInjection\Reference; 18 | 19 | /** 20 | * Adds tagged routing.loader services to routing.resolver service. 21 | * 22 | * @author Fabien Potencier 23 | */ 24 | class RoutingResolverPass implements CompilerPassInterface 25 | { 26 | use PriorityTaggedServiceTrait; 27 | 28 | /** 29 | * @return void 30 | */ 31 | public function process(ContainerBuilder $container) 32 | { 33 | if (false === $container->hasDefinition('routing.resolver')) { 34 | return; 35 | } 36 | 37 | $definition = $container->getDefinition('routing.resolver'); 38 | 39 | foreach ($this->findAndSortTaggedServices('routing.loader', $container) as $id) { 40 | $definition->addMethodCall('addLoader', [new Reference($id)]); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/ExceptionInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * ExceptionInterface. 16 | * 17 | * @author Alexandre Salomé 18 | */ 19 | interface ExceptionInterface extends \Throwable 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface 15 | { 16 | } 17 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/InvalidParameterException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * Exception thrown when a parameter is not valid. 16 | * 17 | * @author Alexandre Salomé 18 | */ 19 | class InvalidParameterException extends \InvalidArgumentException implements ExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/MethodNotAllowedException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * The resource was found but the request method is not allowed. 16 | * 17 | * This exception should trigger an HTTP 405 response in your application code. 18 | * 19 | * @author Kris Wallsmith 20 | */ 21 | class MethodNotAllowedException extends \RuntimeException implements ExceptionInterface 22 | { 23 | protected $allowedMethods = []; 24 | 25 | /** 26 | * @param string[] $allowedMethods 27 | */ 28 | public function __construct(array $allowedMethods, string $message = '', int $code = 0, \Throwable $previous = null) 29 | { 30 | $this->allowedMethods = array_map('strtoupper', $allowedMethods); 31 | 32 | parent::__construct($message, $code, $previous); 33 | } 34 | 35 | /** 36 | * Gets the allowed HTTP methods. 37 | * 38 | * @return string[] 39 | */ 40 | public function getAllowedMethods(): array 41 | { 42 | return $this->allowedMethods; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/NoConfigurationException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * Exception thrown when no routes are configured. 16 | * 17 | * @author Yonel Ceruto 18 | */ 19 | class NoConfigurationException extends ResourceNotFoundException 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/ResourceNotFoundException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * The resource was not found. 16 | * 17 | * This exception should trigger an HTTP 404 response in your application code. 18 | * 19 | * @author Kris Wallsmith 20 | */ 21 | class ResourceNotFoundException extends \RuntimeException implements ExceptionInterface 22 | { 23 | } 24 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/RouteCircularReferenceException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | class RouteCircularReferenceException extends RuntimeException 15 | { 16 | public function __construct(string $routeId, array $path) 17 | { 18 | parent::__construct(sprintf('Circular reference detected for route "%s", path: "%s".', $routeId, implode(' -> ', $path))); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/RouteNotFoundException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | /** 15 | * Exception thrown when a route does not exist. 16 | * 17 | * @author Alexandre Salomé 18 | */ 19 | class RouteNotFoundException extends \InvalidArgumentException implements ExceptionInterface 20 | { 21 | } 22 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Exception/RuntimeException.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Exception; 13 | 14 | class RuntimeException extends \RuntimeException implements ExceptionInterface 15 | { 16 | } 17 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Generator/Dumper/GeneratorDumper.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Generator\Dumper; 13 | 14 | use Symfony\Component\Routing\RouteCollection; 15 | 16 | /** 17 | * GeneratorDumper is the base class for all built-in generator dumpers. 18 | * 19 | * @author Fabien Potencier 20 | */ 21 | abstract class GeneratorDumper implements GeneratorDumperInterface 22 | { 23 | private RouteCollection $routes; 24 | 25 | public function __construct(RouteCollection $routes) 26 | { 27 | $this->routes = $routes; 28 | } 29 | 30 | public function getRoutes(): RouteCollection 31 | { 32 | return $this->routes; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Generator\Dumper; 13 | 14 | use Symfony\Component\Routing\RouteCollection; 15 | 16 | /** 17 | * GeneratorDumperInterface is the interface that all generator dumper classes must implement. 18 | * 19 | * @author Fabien Potencier 20 | */ 21 | interface GeneratorDumperInterface 22 | { 23 | /** 24 | * Dumps a set of routes to a string representation of executable code 25 | * that can then be used to generate a URL of such a route. 26 | */ 27 | public function dump(array $options = []): string; 28 | 29 | /** 30 | * Gets the routes to dump. 31 | */ 32 | public function getRoutes(): RouteCollection; 33 | } 34 | -------------------------------------------------------------------------------- /vendor/symfony/routing/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-present Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Loader/ClosureLoader.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Loader; 13 | 14 | use Symfony\Component\Config\Loader\Loader; 15 | use Symfony\Component\Routing\RouteCollection; 16 | 17 | /** 18 | * ClosureLoader loads routes from a PHP closure. 19 | * 20 | * The Closure must return a RouteCollection instance. 21 | * 22 | * @author Fabien Potencier 23 | */ 24 | class ClosureLoader extends Loader 25 | { 26 | /** 27 | * Loads a Closure. 28 | */ 29 | public function load(mixed $closure, string $type = null): RouteCollection 30 | { 31 | return $closure($this->env); 32 | } 33 | 34 | public function supports(mixed $resource, string $type = null): bool 35 | { 36 | return $resource instanceof \Closure && (!$type || 'closure' === $type); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Loader/Configurator/AliasConfigurator.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Loader\Configurator; 13 | 14 | use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; 15 | use Symfony\Component\Routing\Alias; 16 | 17 | class AliasConfigurator 18 | { 19 | private Alias $alias; 20 | 21 | public function __construct(Alias $alias) 22 | { 23 | $this->alias = $alias; 24 | } 25 | 26 | /** 27 | * Whether this alias is deprecated, that means it should not be called anymore. 28 | * 29 | * @param string $package The name of the composer package that is triggering the deprecation 30 | * @param string $version The version of the package that introduced the deprecation 31 | * @param string $message The deprecation message to use 32 | * 33 | * @return $this 34 | * 35 | * @throws InvalidArgumentException when the message template is invalid 36 | */ 37 | public function deprecate(string $package, string $version, string $message): static 38 | { 39 | $this->alias->setDeprecated($package, $version, $message); 40 | 41 | return $this; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Loader\Configurator; 13 | 14 | use Symfony\Component\Routing\RouteCollection; 15 | 16 | /** 17 | * @author Nicolas Grekas 18 | */ 19 | class RouteConfigurator 20 | { 21 | use Traits\AddTrait; 22 | use Traits\HostTrait; 23 | use Traits\RouteTrait; 24 | 25 | protected $parentConfigurator; 26 | 27 | public function __construct(RouteCollection $collection, RouteCollection $route, string $name = '', CollectionConfigurator $parentConfigurator = null, array $prefixes = null) 28 | { 29 | $this->collection = $collection; 30 | $this->route = $route; 31 | $this->name = $name; 32 | $this->parentConfigurator = $parentConfigurator; // for GC control 33 | $this->prefixes = $prefixes; 34 | } 35 | 36 | /** 37 | * Sets the host to use for all child routes. 38 | * 39 | * @param string|array $host the host, or the localized hosts 40 | * 41 | * @return $this 42 | */ 43 | final public function host(string|array $host): static 44 | { 45 | $this->addHost($this->route, $host); 46 | 47 | return $this; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Loader/ContainerLoader.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Loader; 13 | 14 | use Psr\Container\ContainerInterface; 15 | 16 | /** 17 | * A route loader that executes a service from a PSR-11 container to load the routes. 18 | * 19 | * @author Ryan Weaver 20 | */ 21 | class ContainerLoader extends ObjectLoader 22 | { 23 | private ContainerInterface $container; 24 | 25 | public function __construct(ContainerInterface $container, string $env = null) 26 | { 27 | $this->container = $container; 28 | parent::__construct($env); 29 | } 30 | 31 | public function supports(mixed $resource, string $type = null): bool 32 | { 33 | return 'service' === $type && \is_string($resource); 34 | } 35 | 36 | protected function getObject(string $id): object 37 | { 38 | return $this->container->get($id); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Loader/GlobFileLoader.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Loader; 13 | 14 | use Symfony\Component\Config\Loader\FileLoader; 15 | use Symfony\Component\Routing\RouteCollection; 16 | 17 | /** 18 | * GlobFileLoader loads files from a glob pattern. 19 | * 20 | * @author Nicolas Grekas 21 | */ 22 | class GlobFileLoader extends FileLoader 23 | { 24 | public function load(mixed $resource, string $type = null): mixed 25 | { 26 | $collection = new RouteCollection(); 27 | 28 | foreach ($this->glob($resource, false, $globResource) as $path => $info) { 29 | $collection->addCollection($this->import($path)); 30 | } 31 | 32 | $collection->addResource($globResource); 33 | 34 | return $collection; 35 | } 36 | 37 | public function supports(mixed $resource, string $type = null): bool 38 | { 39 | return 'glob' === $type; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Matcher/CompiledUrlMatcher.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Matcher; 13 | 14 | use Symfony\Component\Routing\Matcher\Dumper\CompiledUrlMatcherTrait; 15 | use Symfony\Component\Routing\RequestContext; 16 | 17 | /** 18 | * Matches URLs based on rules dumped by CompiledUrlMatcherDumper. 19 | * 20 | * @author Nicolas Grekas 21 | */ 22 | class CompiledUrlMatcher extends UrlMatcher 23 | { 24 | use CompiledUrlMatcherTrait; 25 | 26 | public function __construct(array $compiledRoutes, RequestContext $context) 27 | { 28 | $this->context = $context; 29 | [$this->matchHost, $this->staticRoutes, $this->regexpList, $this->dynamicRoutes, $this->checkCondition] = $compiledRoutes; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Matcher/Dumper/MatcherDumper.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Matcher\Dumper; 13 | 14 | use Symfony\Component\Routing\RouteCollection; 15 | 16 | /** 17 | * MatcherDumper is the abstract class for all built-in matcher dumpers. 18 | * 19 | * @author Fabien Potencier 20 | */ 21 | abstract class MatcherDumper implements MatcherDumperInterface 22 | { 23 | private RouteCollection $routes; 24 | 25 | public function __construct(RouteCollection $routes) 26 | { 27 | $this->routes = $routes; 28 | } 29 | 30 | public function getRoutes(): RouteCollection 31 | { 32 | return $this->routes; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Matcher\Dumper; 13 | 14 | use Symfony\Component\Routing\RouteCollection; 15 | 16 | /** 17 | * MatcherDumperInterface is the interface that all matcher dumper classes must implement. 18 | * 19 | * @author Fabien Potencier 20 | */ 21 | interface MatcherDumperInterface 22 | { 23 | /** 24 | * Dumps a set of routes to a string representation of executable code 25 | * that can then be used to match a request against these routes. 26 | */ 27 | public function dump(array $options = []): string; 28 | 29 | /** 30 | * Gets the routes to dump. 31 | */ 32 | public function getRoutes(): RouteCollection; 33 | } 34 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Matcher; 13 | 14 | /** 15 | * RedirectableUrlMatcherInterface knows how to redirect the user. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | interface RedirectableUrlMatcherInterface 20 | { 21 | /** 22 | * Redirects the user to another URL and returns the parameters for the redirection. 23 | * 24 | * @param string $path The path info to redirect to 25 | * @param string $route The route name that matched 26 | * @param string|null $scheme The URL scheme (null to keep the current one) 27 | */ 28 | public function redirect(string $path, string $route, string $scheme = null): array; 29 | } 30 | -------------------------------------------------------------------------------- /vendor/symfony/routing/Matcher/RequestMatcherInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing\Matcher; 13 | 14 | use Symfony\Component\HttpFoundation\Request; 15 | use Symfony\Component\Routing\Exception\MethodNotAllowedException; 16 | use Symfony\Component\Routing\Exception\NoConfigurationException; 17 | use Symfony\Component\Routing\Exception\ResourceNotFoundException; 18 | 19 | /** 20 | * RequestMatcherInterface is the interface that all request matcher classes must implement. 21 | * 22 | * @author Fabien Potencier 23 | */ 24 | interface RequestMatcherInterface 25 | { 26 | /** 27 | * Tries to match a request with a set of routes. 28 | * 29 | * If the matcher cannot find information, it must throw one of the exceptions documented 30 | * below. 31 | * 32 | * @throws NoConfigurationException If no routing configuration could be found 33 | * @throws ResourceNotFoundException If no matching resource could be found 34 | * @throws MethodNotAllowedException If a matching resource was found but the request method is not allowed 35 | */ 36 | public function matchRequest(Request $request): array; 37 | } 38 | -------------------------------------------------------------------------------- /vendor/symfony/routing/RequestContextAwareInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing; 13 | 14 | interface RequestContextAwareInterface 15 | { 16 | /** 17 | * Sets the request context. 18 | * 19 | * @return void 20 | */ 21 | public function setContext(RequestContext $context); 22 | 23 | /** 24 | * Gets the request context. 25 | */ 26 | public function getContext(): RequestContext; 27 | } 28 | -------------------------------------------------------------------------------- /vendor/symfony/routing/RouteCompilerInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing; 13 | 14 | /** 15 | * RouteCompilerInterface is the interface that all RouteCompiler classes must implement. 16 | * 17 | * @author Fabien Potencier 18 | */ 19 | interface RouteCompilerInterface 20 | { 21 | /** 22 | * Compiles the current route instance. 23 | * 24 | * @throws \LogicException If the Route cannot be compiled because the 25 | * path or host pattern is invalid 26 | */ 27 | public static function compile(Route $route): CompiledRoute; 28 | } 29 | -------------------------------------------------------------------------------- /vendor/symfony/routing/RouterInterface.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * For the full copyright and license information, please view the LICENSE 9 | * file that was distributed with this source code. 10 | */ 11 | 12 | namespace Symfony\Component\Routing; 13 | 14 | use Symfony\Component\Routing\Generator\UrlGeneratorInterface; 15 | use Symfony\Component\Routing\Matcher\UrlMatcherInterface; 16 | 17 | /** 18 | * RouterInterface is the interface that all Router classes must implement. 19 | * 20 | * This interface is the concatenation of UrlMatcherInterface and UrlGeneratorInterface. 21 | * 22 | * @author Fabien Potencier 23 | */ 24 | interface RouterInterface extends UrlMatcherInterface, UrlGeneratorInterface 25 | { 26 | /** 27 | * Gets the RouteCollection instance associated with this Router. 28 | * 29 | * WARNING: This method should never be used at runtime as it is SLOW. 30 | * You might use it in a cache warmer though. 31 | * 32 | * @return RouteCollection 33 | */ 34 | public function getRouteCollection(); 35 | } 36 | -------------------------------------------------------------------------------- /vendor/symfony/routing/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "symfony/routing", 3 | "type": "library", 4 | "description": "Maps an HTTP request to a set of configuration variables", 5 | "keywords": ["routing", "router", "url", "uri"], 6 | "homepage": "https://symfony.com", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "Fabien Potencier", 11 | "email": "fabien@symfony.com" 12 | }, 13 | { 14 | "name": "Symfony Community", 15 | "homepage": "https://symfony.com/contributors" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=8.1" 20 | }, 21 | "require-dev": { 22 | "symfony/config": "^6.2", 23 | "symfony/http-foundation": "^5.4|^6.0", 24 | "symfony/yaml": "^5.4|^6.0", 25 | "symfony/expression-language": "^5.4|^6.0", 26 | "symfony/dependency-injection": "^5.4|^6.0", 27 | "doctrine/annotations": "^1.12|^2", 28 | "psr/log": "^1|^2|^3" 29 | }, 30 | "conflict": { 31 | "doctrine/annotations": "<1.12", 32 | "symfony/config": "<6.2", 33 | "symfony/dependency-injection": "<5.4", 34 | "symfony/yaml": "<5.4" 35 | }, 36 | "autoload": { 37 | "psr-4": { "Symfony\\Component\\Routing\\": "" }, 38 | "exclude-from-classmap": [ 39 | "/Tests/" 40 | ] 41 | }, 42 | "minimum-stability": "dev" 43 | } 44 | --------------------------------------------------------------------------------